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检查点是不是包含在具有容差的多边形中的主要内容,如果未能解决你的问题,请参考以下文章