wzy
2020-12-26 2cf928a22b6cf8ea7a29f29127ffc333c73b0bca
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.matrix.system.common.tools;
 
public class LocationUtil {
 
    private static final double EARTH_RADIUS = 6378.137;
 
    private static double rad(double d){
        return d * Math.PI / 180.0;
    }
 
 
    /**
     * 根据两个位置的经纬度,来计算两地的距离(单位为M)
     * 参数为double类型
     *  locX 当前位置经度
     *  locY  当前位置纬度
     *  shopX 店铺位置经度
     *  shopY  店铺位置纬度
     */
    public static double getDistance(double locX, double locY, double shopX, double shopY) {
        double a, b, d, sa2, sb2;
        locY = rad(locY);
        shopY = rad(shopY);
        a = locY - shopY;
        b = rad(locX - shopX);
 
        sa2 = Math.sin(a / 2.0);
        sb2 = Math.sin(b / 2.0);
        d = 2   * EARTH_RADIUS
                * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(locY)
                * Math.cos(shopY) * sb2 * sb2));
        return d;
    }
 
    public static void main(String[] args) {
        // 112.886891,28.222562,114.061937,22.626003  -- 634093.3209722887
        // 113.930692,22.939454 -- 597367.3546527711
        System.out.println(getDistance(112.886891d, 28.222562d, 113.930692, 22.939454));
    }
}