高德地图计算两点之间的距离java+html

高德地图现在使用比较多了,但是高德地图计算两点之间的距离有些问题。下面提供一个很好的解决方案。

代码如下:


  /**
     * 两点的经纬度获取两点距离米
     * @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 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/zhangyufeng0126/article/details/78393698