3

这些是错误:

Error   1   Cannot implicitly convert type 'Plantool.xRoute.Point' to 'Plantool.xMap.Point' 
Error   2   Cannot implicitly convert type 'Plantool.xRoute.Point' to 'Plantool.xMap.Point' 
Error   3   Cannot implicitly convert type 'Plantool.xRoute.LineString' to 'Plantool.xMap.LineString'

我有这个带有命名空间的代码。

using Plantool; //Contains xMap, xServer, xLocate

这就是有问题的功能。

    /* createMap()
     * Input: WaypointDesc[], Route
     * Output: string mapURL
     * Edited 21/12/12 - Davide Nguyen
     */
    private static string createMap(xRoute.WaypointDesc[] waypointDesc, xRoute.Route route)
    {
        #region boundingBox
        // Set boundingBox fand use corners from the calculated route
        xMap.BoundingBox boundingBox = new xMap.BoundingBox();
        boundingBox.leftTop = route.totalRectangle.rightTop;
        boundingBox.rightBottom = route.totalRectangle.leftBottom;
        #endregion

        #region mapParams
        // Build mapParams
        xMap.MapParams mapParams = new xMap.MapParams();
        mapParams.showScale = true;
        mapParams.useMiles = false;
        #endregion

        #region imageInfo
        // Create imageInfo and set the frame size and image format. NOTE: 1052; 863
        xMap.ImageInfo imageInfo = new xMap.ImageInfo();
        imageInfo.format = xMap.ImageFileFormat.PNG;
        imageInfo.height = 1052;
        imageInfo.width = 863;
        imageInfo.imageParameter = "";
        #endregion

        #region layers
        // Create a line from the calculated route
        xMap.LineString[] lineStrings = new xMap.LineString[] { route.polygon };
        xMap.Lines[] lines = new xMap.Lines[1];
        xMap.LineOptions options = new xMap.LineOptions();
        xMap.LinePartOptions partoptions = new xMap.LinePartOptions();
        partoptions.color = new xMap.Color();
        partoptions.visible = true;
        partoptions.width = -10;
        options.mainLine = partoptions;

        lines[0] = new xMap.Lines();
        lines[0].wrappedLines = lineStrings;
        lines[0].options = options;

        // Define customLayer that contains the object lines and set layers.
        xMap.CustomLayer customLayer = new xMap.CustomLayer();
        customLayer.visible = true;
        customLayer.drawPriority = 100;
        customLayer.wrappedLines = lines;
        customLayer.objectInfos = xMap.ObjectInfoType.NONE;
        customLayer.centerObjects = true;
        xMap.Layer[] layers = new xMap.Layer[] { customLayer };
        #endregion

        #region includeImageInResponse
        // Set argument includeImageInResponse to false (default).
        Boolean includeImageInResponse = false;
        #endregion

        // Return object map using the following method.
        xMap.Map map = xMapClient.renderMapBoundingBox(boundingBox, mapParams, imageInfo, layers, includeImageInResponse, null);

        // Retrieve the image
        string result = "http://" + map.image.url;

        // Return the drawn map
        return result;
    }

问题在于boundingBox对象和lineString对象。route.totalRectangle包含来自名称空间的Point对象,该对象与. 反正有复制或转换它吗?xRoutexMap

这个问题似乎不会在 java 示例中发生,但在 C# 中会发生。我相信如果我能解决这个错误,其他的也将得到解决。我已经在 API 上搜索了我的屁股,但它可能会对您有所帮助:

还在挖自己。

4

5 回答 5

2

在 C# 中,您不能从一种类型转换为另一种类型,即使它们在所有目的上都是相同的,也不能复制所有属性等,除非存在隐式转换。

因此,您可以编写一个隐式转换操作符,如上面的链接所示,也可以使用AutoMapper之类的工具在两个对象之间进行复制

于 2012-12-21T09:20:43.127 回答
0

同时,我在随机使用代码和 API 的同时找到了解决此问题的另一个解决方案,这是通过将众所周知的文本值从一个对象复制到另一个对象来解决两个错误的部分解决方案。希望我可以对线串部分做同样的事情。我发布这个只是以防其他人遇到这个并发现它是一个有用的解决方案。下面的新代码区域。

        // Set boundingBox fand use corners from the calculated route
        xMap.BoundingBox boundingBox = new xMap.BoundingBox();
        xMap.Point rightTop = new xMap.Point();
        rightTop.wkt = route.totalRectangle.rightTop.wkt;
        xMap.Point leftBottom = new xMap.Point();
        leftBottom.wkt = route.totalRectangle.leftBottom.wkt;
        boundingBox.leftTop = rightTop;
        boundingBox.rightBottom = leftBottom;

编辑:线串的相同解决方案。

        // Solution: Cannot implicitly conver ttype xRoute.LineString to xMap.LineString
        xMap.LineString maproute = new xMap.LineString();
        maproute.wkt = route.polygon.wkt;

        // Create a line from the calculated route
        xMap.LineString[] lineStrings = new xMap.LineString[] { maproute };

感谢您的帮助,我希望有人会发现这个解决方案也很有用。

于 2012-12-21T10:58:43.197 回答
0

出于您自己的目的查看此内容...但一种选择是使用 JSON Parser 将一个类序列化为 JSON,然后将其反序列化回另一个类。简短而简单的答案,但如果您正在寻找的只是从 Contoso.Project.UrMom 中获取属性,然后将它们直接传输到 Albiet.Project.UrMom,那么它运行良好。

于 2016-02-18T17:32:32.093 回答
0

我发现了另一种基于对象序列化的替代方法。就我而言,它具有访问磁盘的缺点。

于 2016-12-27T13:26:05.513 回答
0

您是如何从 WSDL 中创建客户端类的?我更喜欢通过命令行创建它们:

WSDL /sharetypes /out:"XServer.cs" /namespace:"Plantool"
"https://xroute-eu-n-test.cloud.ptvgroup.com/xlocate/ws/XLocate?WSDL"
"https://xroute-eu-n-test.cloud.ptvgroup.com/xroute/ws/XRoute?WSDL"
"https://xroute-eu-n-test.cloud.ptvgroup.com/xtour/ws/XTour?WSDL"

/sharetypes确保 Point 等类将合并为一个共享类

这也适用于 xServer2 API 及其 WSDL。

于 2021-08-10T15:26:22.233 回答