Java 如何计算地理点与给定多边形之间的距离(以米为单位)?

Java 如何计算地理点与给定多边形之间的距离(以米为单位)?,java,gis,geospatial,geotools,Java,Gis,Geospatial,Geotools,首先,我是地理信息系统的新手,请原谅我的错误。我需要发现纬度和经度点与纬度/经度多边形(规则或非规则)之间的距离。确切地说,我需要发现从给定点到多边形边界上的点的最小距离,如下所示。在本例中,从点p到多边形的较近距离为d。注意:我不需要点,只需要最小距离 经过一些阅读,我提出了以下使用GeoTools API的最小工作示例。然而,我认为我把输出搞砸了。有人能告诉我如何得到一个点和多边形之间的最小距离吗 MWE.java: import com.vividsolutions.jts.geom.C

首先,我是地理信息系统的新手,请原谅我的错误。我需要发现纬度和经度点与纬度/经度多边形(规则或非规则)之间的距离。确切地说,我需要发现从给定点到多边形边界上的点的最小距离,如下所示。在本例中,从点
p
到多边形的较近距离为
d
。注意:我不需要点,只需要最小距离

经过一些阅读,我提出了以下使用GeoTools API的最小工作示例。然而,我认为我把输出搞砸了。有人能告诉我如何得到一个点和多边形之间的最小距离吗

MWE.java:

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;

public class MWE {

    public static void main(String[] args) throws Exception {
        GeometryFactory gf = JTSFactoryFinder.getGeometryFactory();

        Coordinate[] c = new Coordinate[5];
        c[0] = new Coordinate(-49.242986, -16.662430);
        c[1] = new Coordinate(-49.241999, -16.664465);
        c[2] = new Coordinate(-49.239146, -16.663828);
        c[3] = new Coordinate(-49.239832, -16.661443);
        c[4] = new Coordinate(-49.242986, -16.662430);

        Geometry geo = gf.createPolygon(c);

        Point p = gf.createPoint(new Coordinate(-49.246870, -16.665493));

        double distance = geo.distance(p);

        System.out.println("Distance: " + distance);

    }
}

所以您所做的是正确的,但它将以大地测量单位(弧度)而不是米返回距离。您有两个选择:

  • 将点和多边形几何图形转换为平面参照系
  • 使用大地测量计算器
  • 要使用大地测量计算器,您需要确定多边形边界上与您的点最近的点。e、 g.
    DistanceOp.closestPoints(地理位置,p)[0]

    // adapted from http://docs.geotools.org/stable/userguide/library/referencing/calculator.html
    CoordinateReferenceSystem crs = CRS.decode("EPSG:4326");
    GeodeticCalculator gc = new GeodeticCalculator(crs);
    gc.setStartingPosition( JTS.toDirectPosition(  DistanceOp.closestPoints(geo, p)[0], crs ) );
    gc.setDestinationPosition( JTS.toDirectPosition( p, crs ) );
    
    double distance = gc.getOrthodromicDistance();
    

    您正在处理正多边形吗?您应该澄清点和多边形之间的距离是什么意思。你的意思是从多边形质心开始还是从边界上最近的点开始?任何多边形。它是指向其中一个多边形点的。我试图在问题中澄清。你的意思是你需要找到一个点和5个点之间的最小距离吗?这难道不意味着你只需要知道如何找到两个横向/纵向点之间的距离吗?@11维实际上是多边形边界上的任意点。我将尝试添加一个图像来解释这一点