puzhibing
2023-10-08 22199bbdda579861736420fe26c2873ab0f5d21c
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.sinata.rest.core.util;
 
import java.text.DecimalFormat;
 
/**
 * 地图坐标两点距离计算
 *
 * @author:GOUPAN
 * @version:1.0
 */
public class MapUtil {
 
    private final static Double PI = 3.14159265358979323; // 圆周率
 
    private final static Double R = 6371229.0; // 地球的半径
 
    /**
     * 返回A-B地图坐标点距离
     *
     * @param longitudeA A点经度
     * @param latitudeA  A点纬度
     * @param longitudeB B点经度
     * @param latitudeB  B点纬度
     * @return 千米单位
     */
    public static Double getDistances(Double longitudeA, Double latitudeA, Double longitudeB, Double latitudeB) {
        if (longitudeA == null || latitudeA == null || longitudeB == null || latitudeB == null) {
            return null;
        }
        Double x, y, distances;
        x = (longitudeB - longitudeA) * PI * R * Math.cos(((latitudeA + latitudeB) / 2) * PI / 180) / 180;
        y = (latitudeB - latitudeA) * PI * R / 180;
        distances = Math.hypot(x, y);
        //格式化距离,保留2为小数
        DecimalFormat df = new DecimalFormat("#.00");
        distances = Double.parseDouble(df.format(distances / 1000));
        return distances;
    }
 
    /**
     * 返回A-B地图坐标点距离
     *
     * @param longitudeA A点经度
     * @param latitudeA  A点纬度
     * @param longitudeB B点经度
     * @param latitudeB  B点纬度
     * @return 米单位
     */
    public static Double getDistances_m(Double longitudeA, Double latitudeA, Double longitudeB, Double latitudeB) {
        if (longitudeA == null || latitudeA == null || longitudeB == null || latitudeB == null) {
            return null;
        }
        Double x, y, distances;
        x = (longitudeB - longitudeA) * PI * R * Math.cos(((latitudeA + latitudeB) / 2) * PI / 180) / 180;
        y = (latitudeB - latitudeA) * PI * R / 180;
        distances = Math.hypot(x, y);
        //格式化距离,保留2为小数
        DecimalFormat df = new DecimalFormat("#.00");
        distances = Double.parseDouble(df.format(distances));
        return distances;
    }
 
}