判断经纬度点坐标是否在经纬度点所组成的面内
maven的pom配置
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.13</version>
</dependency>
jts包,大概的思想就是经纬度组成一个封闭几何图形,然后看坐标点是否落在于此图形中,可以用于解决诸如点面选择这类问题上。
代码
/**
* @auther: qiwenshuai
* @param: [xys, lng, lat]
* xys:经纬度点组成的封闭图形,格式为经度,纬度,经度,纬度
* lng:经度;
* lat:纬度
* @return: java.lang.Boolean
* @description: 电子围栏多边形判断经纬度点是否在多边形内
* @requestJson:
* @createTime: 18-10-10 下午2:37
* @editTime:
*/
private static Boolean polygonJudgment(String xys, Double lng, Double lat) {
String[] strings = xys.split(",");
Coordinate[] coordinates = new Coordinate[strings.length / 2];
try {
for (int i = 0; i < strings.length; i += 2) {
coordinates[i / 2] = new Coordinate(Double.parseDouble(strings[i]), Double.parseDouble(strings[i + 1]));
}
GeometryFactory factory = new GeometryFactory();
if (coordinates.length > 3) {
LinearRing shell = factory.createLinearRing(coordinates);
Polygon polygon = factory.createPolygon(shell, null);
if (polygon.contains(factory.createPoint(new Coordinate(lng, lat)))) {
return true;
}
}
} catch (Exception ignored) {
return false;
}
return false;
}
返回true说明此点在此面中,已测试,可以放心使用。
