我正在使用Java Geotools库来检查POLYGON(...)中是否包含POINT(...)。
我已经完成了:
Geometry sPG = reader.read(wktStartPoint); //startpointgeometry
Geometry sEG = reader.read(wktEndPoint);
if(wktLayerGeo.contains(sPG) || wktLayerGeo.contains(sEG)){
// do something
}
但现在我必须设置一个公差:我会检查一个点是否包含在多边形中,例如公差距离为50 km。
我可以使用GeoTools吗?
谢谢
答案 0 :(得分:1)
您可以使用DWithin
运算符来检查点(或其他几何)是否在几何体的提供距离内。请注意,无论单位字符串如何,距离始终以数据投影为单位。
double distance = 10.0d;
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
Filter filter = ff.dwithin(ff.property("POLYGON"), ff.literal(point), distance, uom.toString());
return featureSource.getFeatures(filter);
答案 1 :(得分:1)
您可以在多边形几何体(API)上使用JTS buffer
方法:
double yourToleranceDistance = 2;
int numberOfSegmentsPerQuadrant = 2;
// get the geometry with your tolerance
Polygon wktLayerGeoWithTolerance = (Polygon) wktLayerGeo.buffer(yourToleranceDistance, numberOfSegmentsPerQuadrant, BufferParameters.CAP_SQUARE);
// continue with your code...
if(wktLayerGeoWithTolerance.contains(sPG) || wktLayerGeoWithTolerance.contains(sEG)){
// do something
}