首页 / 浏览问题 / 云GIS / 问题详情
根据两点经纬度,计算两点距离
100EXP 2018年05月29日
请问,超图是否有提供根据两个经纬度计算出两点间的距离的方法了?

1个回答

您好,api里有量算类,可以参考范例距离量算

4,524EXP 2018年05月29日
这个api的网址能发一下吗?现在官网上的api地址都是9D的
好的 谢谢
你好,请问还有其他的方法吗?因为这方法不是很适合!需要在地图上画几何图形,才能算出距离,我要的功能是手机上定位经纬度,然后实时批量换算出距离,不会在手机上去画图形
您是用什么进行开发的?iMobile?
实时获取经纬度好像超图没有提供方法是吗?我们现在的想法是app借助第三方插件实时获取当前经纬度,将经纬度传给PC端,由PC端这边换算出距离

移动端实时获取经纬度是什么方法我也不太清楚,您可以去移动GIS部分提问一下,得到的经纬度进行量算就用量算类就可以,这个并不是说必须画几何图形才能算距离,这个东西的本质其实就是传geometry(线),然后计算线的长度,而构成geometry(线)的其实就是两个geometry(点),所以能够满足您的需求,如果不想要线显示在地图上的话只要最后不把线add到vectorLayer上就可以了。

很久之前写过一个demo你可以参考下

<script type="text/javascript">
        var map,layer, vectorlayer,pointFeature,
        url = "http://localhost:8090/iserver/services/map-world/rest/maps/World";

        function init()
        {
            map = new SuperMap.Map("map",{controls:[
                new SuperMap.Control.Zoom() ,
                new SuperMap.Control.Navigation() ,
                new SuperMap.Control.LayerSwitcher()
            ]});
            layer= new SuperMap.Layer.TiledDynamicRESTLayer("World", url, null,{maxResolution:"auto"});
            layer.events.on({"layerInitialized":addLayer});
            vectorlayer= new SuperMap.Layer.Vector("vectorLayer");
			map.events.on({"click":addData});

        }

        function addLayer()
		{

            map.addLayers([layer,vectorlayer]);
            map.setCenter(new SuperMap.LonLat(0, 0), 0);
        }
  
        var tempArray = [];

        function addData(a)
        {   
            var lonlat = map.getLonLatFromPixel(new SuperMap.Pixel(a.xy.x,a.xy.y));
            var point= new SuperMap.Geometry.Point(lonlat.lon,lonlat.lat);
             pointFeature = new SuperMap.Feature.Vector(point);
             pointFeature.style={
                fillColor:"red",
                strokeColor:"yellow",
                pointRadius:7
             };
            vectorlayer.addFeatures(pointFeature);
            tempArray.push(point);
        } 
		
		function lineMeasure()
		{
			var p1 = tempArray[tempArray.length-2];
			var p2 = tempArray[tempArray.length-1];			
			var points=[p1,p2];
            var line = new SuperMap.Geometry.LineString(points);					  
                measureParam = new SuperMap.REST.MeasureParameters(line), 
                myMeasuerService = new SuperMap.REST.MeasureService(url);
                myMeasuerService.events.on({ "processCompleted": measureCompleted });
                myMeasuerService.measureMode = SuperMap.REST.MeasureMode.DISTANCE;
                myMeasuerService.processAsync(measureParam); 
        }
		
        function measureCompleted(measureEventArgs) 
        {
                   var distance = measureEventArgs.result.distance;
                   var unit = measureEventArgs.result.unit;
                   alert("量算结果:"+distance + "米");
        }

</script>

好的,非常感谢
...