增加多边形中心,重心点计算
This commit is contained in:
parent
18424c2fd3
commit
e4a0a497dc
@ -19,6 +19,11 @@ public class PointUtil {
|
|||||||
private static final double RADIAN = Math.PI / 180.00D;
|
private static final double RADIAN = Math.PI / 180.00D;
|
||||||
private static final double HALF = 0.5D;
|
private static final double HALF = 0.5D;
|
||||||
|
|
||||||
|
public static final double MIN_LAT = -90;
|
||||||
|
public static final double MAX_LAT = 90;
|
||||||
|
public static final double MIN_LNG = -180;
|
||||||
|
public static final double MAX_LNG = 180;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 点在多边形内
|
* 点在多边形内
|
||||||
*
|
*
|
||||||
@ -301,4 +306,97 @@ public class PointUtil {
|
|||||||
return Math.abs(area);
|
return Math.abs(area);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算中心点
|
||||||
|
*
|
||||||
|
* @param mPoints
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Point getCenterPoint(List<Point> mPoints) {
|
||||||
|
double latitude = (getMinLatitude(mPoints) + getMaxLatitude(mPoints)) / 2;
|
||||||
|
double longitude = (getMinLongitude(mPoints) + getMaxLongitude(mPoints)) / 2;
|
||||||
|
return new Point(latitude, longitude);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取不规则多边形重心点
|
||||||
|
*
|
||||||
|
* @param mPoints
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Point getCenterOfGravityPoint(List<Point> mPoints) {
|
||||||
|
double area = 0.0;//多边形面积
|
||||||
|
double Gx = 0.0, Gy = 0.0;// 重心的x、y
|
||||||
|
for (int i = 1; i <= mPoints.size(); i++) {
|
||||||
|
double iLat = mPoints.get(i % mPoints.size()).getX();
|
||||||
|
double iLng = mPoints.get(i % mPoints.size()).getY();
|
||||||
|
double nextLat = mPoints.get(i - 1).getX();
|
||||||
|
double nextLng = mPoints.get(i - 1).getY();
|
||||||
|
double temp = (iLat * nextLng - iLng * nextLat) / 2.0;
|
||||||
|
area += temp;
|
||||||
|
Gx += temp * (iLat + nextLat) / 3.0;
|
||||||
|
Gy += temp * (iLng + nextLng) / 3.0;
|
||||||
|
}
|
||||||
|
Gx = Gx / area;
|
||||||
|
Gy = Gy / area;
|
||||||
|
return new Point(Gx, Gy);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 经度最小值
|
||||||
|
public static double getMinLongitude(List<Point> mPoints) {
|
||||||
|
double minLongitude = MAX_LNG;
|
||||||
|
if (mPoints.size() > 0) {
|
||||||
|
minLongitude = mPoints.get(0).getY();
|
||||||
|
for (Point latlng : mPoints) {
|
||||||
|
// 经度最小值
|
||||||
|
if (latlng.getY() < minLongitude)
|
||||||
|
minLongitude = latlng.getY();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minLongitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 经度最大值
|
||||||
|
public static double getMaxLongitude(List<Point> mPoints) {
|
||||||
|
double maxLongitude = MIN_LNG;
|
||||||
|
if (mPoints.size() > 0) {
|
||||||
|
maxLongitude = mPoints.get(0).getY();
|
||||||
|
for (Point latlng : mPoints) {
|
||||||
|
// 经度最大值
|
||||||
|
if (latlng.getY() > maxLongitude)
|
||||||
|
maxLongitude = latlng.getY();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxLongitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 纬度最小值
|
||||||
|
public static double getMinLatitude(List<Point> mPoints) {
|
||||||
|
double minLatitude = MAX_LAT;
|
||||||
|
if (mPoints.size() > 0) {
|
||||||
|
minLatitude = mPoints.get(0).getX();
|
||||||
|
for (Point latlng : mPoints) {
|
||||||
|
// 纬度最小值
|
||||||
|
if (latlng.getX() < minLatitude)
|
||||||
|
minLatitude = latlng.getX();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minLatitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 纬度最大值
|
||||||
|
public static double getMaxLatitude(List<Point> mPoints) {
|
||||||
|
double maxLatitude = MIN_LAT;
|
||||||
|
if (mPoints.size() > 0) {
|
||||||
|
maxLatitude = mPoints.get(0).getX();
|
||||||
|
for (Point latlng : mPoints) {
|
||||||
|
// 纬度最大值
|
||||||
|
if (latlng.getX() > maxLatitude)
|
||||||
|
maxLatitude = latlng.getX();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxLatitude;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user