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

Posted

技术标签:

【中文标题】Java geotools检查点是不是包含在具有容差的多边形中【英文标题】:Java geotools check if point is contained in polygon with toleranceJava geotools检查点是否包含在具有容差的多边形中 【发布时间】:2016-12-06 04:56:52 【问题描述】:

我正在使用 Java Geotools 库来检查 POINT(...) 是否包含在 POLYGON(...) 中。

我已经做到了:

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

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

我可以使用 GeoTools 吗?

谢谢

【问题讨论】:

米歇尔。 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)是否在多边形坐标内的吗? 【参考方案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);

【讨论】:

【参考方案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

【讨论】:

以上是关于Java geotools检查点是不是包含在具有容差的多边形中的主要内容,如果未能解决你的问题,请参考以下文章

java geotools

Java Regex 检查字符串是不是包含 XML 标记

匹配两个具有容差的非常大的向量(快速!但节省工作空间)

我可以实现在 java(geotools) 中存在并编译的类的 Serializable 吗?

GeoTools快速入门

GeoTools快速入门