【问题标题】: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)是否在多边形坐标内的吗?

标签: java geotools contain


【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2014-04-26
      • 1970-01-01
      相关资源
      最近更新 更多