魅力峰值

导航

计算经纬度之间的实际距离

1、数据库创建经纬度的函数

CREATE OR REPLACE FUNCTION FUN_JW_DIST(lng1 numeric, lat1 numeric, lng2 numeric, lat2 numeric) RETURNS numeric AS $$
  SELECT ceil((
  6371 * acos(
  cos(radians(lat1)) * cos(radians(lat2)) * cos(
  radians(lng1) - radians(lng2)
  ) + sin(radians(lat1)) * sin(radians(lat2))
  )
  )*1000)::numeric as dist;
$$ LANGUAGE SQL;

 

调用

select FUN_JW_DIST(120.451737, 36.520975, 120.455636, 36.520885) as dist;

返回的dist即为距离

2、Java计算

引入Jar

            <dependency>
                <groupId>org.gavaghan</groupId>
                <artifactId>geodesy</artifactId>
                <version>1.1.3</version>
            </dependency>

进行计算

    /**
     * 计算实际距离
     *
     * @param longitudeFrom 距离1的经度
     * @param latitudeFrom  距离1的纬度
     * @param longitudeTo   距离2的经度
     * @param latitudeTo    距离2的纬度
     * @return 实际距离,单位:米(四舍五入为整数)
     */
    public static long getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
        return Math.round(new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target).getEllipsoidalDistance());
    }

 

posted on 2021-12-01 13:40  魅力峰值  阅读(170)  评论(0编辑  收藏  举报