Java geotools如何检查点是否在多边形内(带有容差)

7

我正在使用Java Geotools库来检查一个点是否包含在多边形中。

我已经使用以下代码完成了这个任务:

Geometry sPG = reader.read(wktStartPoint); //startpointgeometry
Geometry sEG = reader.read(wktEndPoint);
if(wktLayerGeo.contains(sPG) || wktLayerGeo.contains(sEG)){
 // do something
}

现在我需要设置一个容差:例如,我会检查一个点是否包含在多边形中,并且容差距离为50公里。

我能用GeoTools做到吗?

谢谢。


Michele。已经过去2年了。我认为你的问题会帮到我!我有一个多边形坐标列表-119.00072399999999 35.36158, -118.99903 35.361576, -118.999026 35.362579, -118.999023 35.363482, -118.999019 35.36432, -118.999408 35.364847999999995。你能分享一下你是如何编写代码来检查点(x,y)是否在多边形坐标内的吗? - Mike
2个回答

2
您可以在多边形几何体(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
}

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接