2

我有一个 LineString 特征源。对于来自源的一个特征,我想从同一特征源中通过 startPoint 或 endPoint 获取相交线。

我只为endPoint尝试了这个:

Filter filter = ff.intersects(ff.literal(featureLastCoordinate), ff.function("endPoint", ff.literal(featureGeom)));
FeatureCollection<SimpleFeatureType, SimpleFeature> intersectedFeatColl = inputSource.getFeatures(filter);

和这个:

Filter filter = ff.and(ff.intersects(ff.property(featureGeomPropName), ff.literal(featureLastCoordinate)), ff.function("endPoint", ff.literal(featureGeom)));

我找不到过滤器的正确表达式。例如:

示例图片

我想为黄线获取其他线。

4

1 回答 1

0

根据您对线条接触的确定程度,您可以执行以下操作:

LineString lineString = (LineString) first.getDefaultGeometry();
Point[] points = { lineString.getStartPoint(), lineString.getEndPoint() };
for (Point p : points) {
  Filter f = CQL.toFilter("intersects( " + geom + ", " + p + ")");
  SimpleFeatureCollection res = featureSource.getFeatures(f);
  if (!res.isEmpty()) {
    System.out.println("Point " + p + " touches ");
    try (SimpleFeatureIterator itr = res.features()) {
      while (itr.hasNext()) {
        System.out.println(itr.next());
      }
    }
  }

  Polygon poly = (Polygon) p.buffer(10);
  f = CQL.toFilter("intersects( " + geom + ", " + poly + ")");
  res = featureSource.getFeatures(f);
  if (!res.isEmpty()) {
    System.out.println("Point " + p + " is close to ");
    try (SimpleFeatureIterator itr = res.features()) {
      while (itr.hasNext()) {
        System.out.println(itr.next());
      }
    }
  }
}
于 2021-03-15T10:59:01.953 回答