Java 多重限制线与点之间的距离

Java 多重限制线与点之间的距离,java,gis,geotools,Java,Gis,Geotools,如果我必须计算点和多边形之间的最近距离(例如点和湖(naturalearthdata.com)),我可以这样做(取自): 以及: 直到这里,好的 但是,我如何才能找到一个点和海岸线之间的最近距离,这是一条多线而不是一个多边形。 或者,如果我有一条线串 我应该采取什么方法?关于LocationIndexedLine和LinearLocation?我认为您可以通过将行更改为: LocationIndexedLine line = new LocationIndexedLine(((Geometry)

如果我必须计算点和多边形之间的最近距离(例如点和湖(naturalearthdata.com)),我可以这样做(取自):

以及:

直到这里,好的

但是,我如何才能找到一个点和海岸线之间的最近距离,这是一条多线而不是一个多边形。 或者,如果我有一条线串


我应该采取什么方法?关于
LocationIndexedLine
LinearLocation

我认为您可以通过将行更改为:

LocationIndexedLine line = new LocationIndexedLine(((Geometry)
     feature.getDefaultGeometry()));

出于某种原因,getDefaultGeometry返回一个
对象
,因此您需要将其转换为有用的对象。

Hmm.Nice!它起作用了!但是(我刚刚注意到)如果我有一个“点”几何体呢?如果我使用上面的,它会显示
输入几何体必须是线性的
。如果我使用原始
新的LocationIndexedLine(((MultiPolygon)feature.getDefaultGeometry()).getBoundary())
它显示
com.livitsolutions.jts.geom.Point不能转换为com.livitsolutions.jts.geom.MultiPolygon
,如果我在前一行中用
Point
替换
MultiPolygon
,它再次显示
输入几何体必须是线性的
。如果我有一个
MultiPolygon
,谢谢!(向上投票)索引线是在直线或边界上计算出最靠近点的点,如果你有两个点,那么你可以简单地计算两个点之间的距离,对于多点,计算到每个点的距离并选择闭合点。我只需使用“ports.shp”而不是“lakes.shp”正如你所做的。这表明它是一个几何点。那么,在这种情况下,你说不使用任何LocationIndexedLine,只计算距离?谢谢!索引线用于计算直线或边界上最靠近点的点,如果有两个点,则可以简单地计算两个点之间的距离,对于多点,计算到每个点的距离,然后选择最接近的点,谢谢!(我打开了一个新的)用于此。我很难从ports.shp文件中读取坐标。在多边形的情况下,我们使用了
BBOX
,“ReferenceDevelope
LocationIndexedLine”,但在这种情况下,我迷路了!
      ...
      NearestPolygon polyFinder = new NearestPolygon(features);

      GeometryFactory gf = JTSFactoryFinder.getGeometryFactory();
      Point p = gf.createPoint(new Coordinate(-49.2462798, -16.7723987));

      Point pointOnLine = polyFinder.findNearestPolygon(p);
      if (!pointOnLine.isEmpty()) {
        System.out.println(pointOnLine + " is closest to " + p);
        SimpleFeature lastMatched2 = polyFinder.getLastMatched();
        String attribute = (String) lastMatched2.getAttribute("name");
        if(attribute.isEmpty()) {
          attribute = (String) lastMatched2.getAttribute("note");
        }
        if (((Geometry) (lastMatched2.getDefaultGeometry())).contains(p)) {
          System.out.println("is in lake " + attribute);
        } else {
          System.out.println("nearest lake is " + attribute);
        }
...
LocationIndexedLine line = new LocationIndexedLine(((Geometry)
     feature.getDefaultGeometry()));