Java geotools检查点是否包含在具有容差的多边形中

时间:2016-08-01 07:36:06

标签: java geotools contain

我正在使用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吗?

谢谢

2 个答案:

答案 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
}