调用官方接口测距,数据不对

0 投票

投影坐标系从wgs84变为L.CRS.EPSG3857之后,调用官方的距离测量方法测出来的结果不准确

11月 27, 2019 分类:  123次浏览 | 用户: 纸飞机 初出茅庐 (30 分)

1个回答

0 投票
你好 我这边测试是没有问题的,你可以把我的这个例子复制到官网示例里面进行测试,看看是不是你的那些参数填写的有误
    var map, resultLayer;
    map = L.map('map', {
        preferCanvas: true,
        crs: L.CRS.EPSG3857,
        center: [34, 108],
        maxZoom: 18,
        zoom: 3
    });
    L.supermap.tiledMapLayer("http://support.supermap.com.cn:8090/iserver/services/map-china400/rest/maps/China").addTo(map);
    resultLayer = L.featureGroup().addTo(map);
    measureDistance();

    function measureDistance() {
        var polyLine = L.polyline([[25, 102], [40, 116]], {color: "red"});
        
        var distanceMeasureParam = new SuperMap.MeasureParameters(polyLine);
        console.log(polyLine)
        L.supermap
            .measureService("http://support.supermap.com.cn:8090/iserver/services/map-china400/rest/maps/China")
            .measureDistance(distanceMeasureParam, function (serviceResult) {
                console.log(serviceResult)
            });

    }
11月 27, 2019 用户: 阳俊林 名扬四海 (3,296 分)
数值能测出来,用这个方法试了,结果一样的,跟实际不符,方便留个QQ吗
结果一样的?不可能还是零吧! 如果还是零证明你的几何参数有问题,然后你再看下api里面的相关测量参数的设置,unit,prjCoordSys,distanceMode。度转米肯定是有些误差的。
两次结果一样,不是零,零是因为取了两位小数。prjCoordSys这个参数没有配置说明,感觉是他的问题

 prjCoordSys:'EPSG:3857'   你可以比较设置下。如果你觉得还是不满足你的要求,你可以使用第三方的turf.js插件来进行你的量测,也可以与我们服务得出的结果比较下,其实相比之下我们的量测误差是比较小的。

turf:http://iclient.supermap.io/examples/leaflet/editor.html#turf_measurement

解决了,地图是crs: L.CRS.EPSG3857坐标系,这个参数要填成 prjCoordSys:'EPSG:4326',才可以,不知道啥原理,官方也不给说明。
...