高德地图现在使用比较多了,但是高德地图计算两点之间的距离有些问题。下面提供一个很好的解决方案。
代码如下:
/** * 两点的经纬度获取两点距离米 * @param (121.293986,37.279148,121.284545,37.292396) * @returns {string} * @author zhangyufeng */ $rootScope.getGDDTDistance = function (startlongitude,startdimensionality,endlongitude,enddimensionality) { var lon1 = (Math.PI / 180) * startlongitude; var lon2 = (Math.PI / 180) * endlongitude; var lat1 = (Math.PI / 180) * startdimensionality; var lat2 = (Math.PI / 180) * enddimensionality; // 地球半径 var R = 6371; // 两点间距离 km,如果想要米的话,结果*1000就可以了 var d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R; return d * 1000; };
/** * 获取距离 * @param distance * @returns {string} * @author lixiang */ $rootScope.getDistance = function (distance) { if(distance==null){ return ""; } var meter = 'm'; var kilometer = 'km'; var result = ''; if (distance < 1000) { result = distance.toFixed(0) + meter; } else { var km = distance / 1000; if (km >= 100) { //超过100公里 去掉小数点 result = (distance / 1000).toFixed(0) + kilometer; } else if(km >= 10){ //10-100公里以内 1位小数 result = (distance / 1000).toFixed(1) + kilometer; } else { //10公里以内 2位小数 result = (distance / 1000).toFixed(2) + kilometer; } } return result; }; 前台调用 {{getDistance(getGDDTDistance(121.293986,37.279148,121.284545,37.292396))}}
public class Distribution { // 经度 double longitude; // 维度 double dimensionality; public double getLongitude() { return longitude; } public void setLongitude(double longitude) { this.longitude = longitude; } public double getDimensionality() { return dimensionality; } public void setDimensionality(double dimensionality) { this.dimensionality = dimensionality; } /* * 计算两点之间距离 * * @param start * * @param end * * @return 米 */ public double getDistance(Distribution start, Distribution end) { double lon1 = (Math.PI / 180) * start.longitude; double lon2 = (Math.PI / 180) * end.longitude; double lat1 = (Math.PI / 180) * start.dimensionality; double lat2 = (Math.PI / 180) * end.dimensionality; // double Lat1r = (Math.PI/180)*(gp1.getLatitudeE6()/1E6); // double Lat2r = (Math.PI/180)*(gp2.getLatitudeE6()/1E6); // double Lon1r = (Math.PI/180)*(gp1.getLongitudeE6()/1E6); // double Lon2r = (Math.PI/180)*(gp2.getLongitudeE6()/1E6); // 地球半径 double R = 6371; // 两点间距离 km,如果想要米的话,结果*1000就可以了 double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R; return d * 1000; } }
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"> <title>两点间距离</title> <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css"/> <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.1&key=您申请的key值"></script> <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script> </head> <body> <div id="container"></div> <div class="button-group"> <input id="calc" type="button" class="button" value="计算两点间距离"/> </div> <script type="text/javascript"> //初始化地图对象,加载地图 var map = new AMap.Map("container", { resizeEnable: true, zoom: 13 }); new AMap.Marker({ map: map, position: [116.37, 39.92] }); new AMap.Marker({ map: map, position: [112, 39.92] }); map.setFitView(); var lnglat = new AMap.LngLat(116.37, 39.92); AMap.event.addDomListener(document.getElementById('calc'), 'click', function() { alert('两点间距离为:' + lnglat.distance([112, 39.92]) + '米'); }); </script> </body> </html>
view