相关方法

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
public class GpsUtil {

/**
* 获得球面(地球)上两个点之间的距离(坐标可以为 WGS84、GCJ02 等任何一种坐标,但两个点的坐标类型必须相同)
*
* @param longitudeStart 起点的经度
* @param latitudeStart 起点的纬度
* @param longitudeEnd 终点的经度
* @param latitudeEnd 终点的纬度
* @return 两点之间的距离,单位是米
*/
public static int getDistance(double longitudeStart, double latitudeStart, double longitudeEnd, double latitudeEnd) {
// 计算弧长(d * Math.PI / 180.0)
double radLatStart = Math.toRadians(latitudeStart);
double radLatEnd = Math.toRadians(latitudeEnd);
double radLat = radLatStart - radLatEnd;
double radLonDiff = Math.toRadians(longitudeStart) - Math.toRadians(longitudeEnd);
double sum = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(radLat / 2), 2) + Math.cos(radLatStart) * Math.cos(radLatEnd) * Math.pow(Math.sin(radLonDiff / 2), 2)));
// 取 WGS84 标准参考椭球中的地球长半径 (单位:m)
sum = sum * 6378137.0;
return (int) Math.round(sum);
}

/**
* 判断某个经纬度否在多边形区域内
* <p>
* List<java.awt.geom.Point2D.Double> pointList = new ArrayList<>();
* java.awt.geom.Point2D.Double polygonPoint = new java.awt.geom.Point2D.Double(longitudeDouble, latitudeDouble);
* pointList.add(polygonPoint);
* System.out.println(" 结果: " + isInArea(118.95401, 28.979503, pointList));
*
* @param longitude 经度
* @param latitude 纬度
* @param pointList 经纬度集合
* @return
*/
public static boolean isInArea(double longitude, double latitude, List<Point2D.Double> pointList) {
// 将要判断的经纬度组成一个点
Point2D.Double point = new Point2D.Double(longitude, latitude);

GeneralPath peneralPath = new GeneralPath();

// 获取第一个坐标
Point2D.Double firstPoint = pointList.get(0);

// 通过移动到指定坐标,将一个点添加到路径中
peneralPath.moveTo(firstPoint.x, firstPoint.y);
pointList.remove(0);

for (Point2D.Double aDouble : pointList) {
// 通过绘制一条从当前坐标到新指定坐标的直线,将一个点添加到路径中。
peneralPath.lineTo(aDouble.x, aDouble.y);
}
// 将几何多边形封闭
peneralPath.lineTo(firstPoint.x, firstPoint.y);
peneralPath.closePath();
// 判断指定的 Point2D 是否在 Shape 的边界内。
return peneralPath.contains(point);
}
}