Java按两点经纬度计算距离

    xiaoxiao2021-03-25  123

    1.Java计算

    package com.hd123.cloudscm.web.controller.mdata.warehouse;

     

    public class Test {

    // 经度

    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 static double getDistance(Test start, Test 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 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;

    }

     

    public static void main(String[] args) {

    // 测试经纬度:116.368904, 39.923423

    // 测试经纬度2:116.387271, 39.922501

    Test start = new Test();

    start.setLongitude(116.368904);

    start.setDimensionality(40.923423);

    Test end = new Test();

    end.setLongitude(116.387271);

    end.setDimensionality(39.922501);

    System.out.println(getDistance(start, end));

     

    }

    }

    这样的算法误差较小,觉得可以忽略。

    2.如果想要在页面上直接计算,可以调用高德的API。

    <!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.2&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.368904, 39.923423]

    });

    new AMap.Marker({

    map: map,

    position: [116.387271, 39.922501]

    });

    map.setFitView();

    var lnglat = new AMap.LngLat(116.368904, 40.923423);

    AMap.event.addDomListener(document.getElementById('calc'), 'click', function() {

    alert('两点间距离为:' + lnglat.distance([116.387271, 39.922501]) + '米');

    });

    </script>

    </body>

    </html>

    调用高德的API,算出来的距离是准确的,他和百度的计算结果千米误差为20。

     

    转载请注明原文地址: https://ju.6miu.com/read-21357.html

    最新回复(0)