Comment calculer la distance en mètres entre un point géographique et un polygone donné?

tout d'abord, je suis nouveau au GIS, alors pardonnez les erreurs. Je dois découvrir la distance entre un point de latitude et de longitude et un polygone de latitude/longitude (régulier ou non). Précisément, je dois découvrir la distance minimale d'un point donné à un point dans la limite du polygone, comme illustré ci-dessous. Dans l'exemple, la distance plus proche du point p au polygone est d. Note: je n'ai pas besoin de point de, juste le minimum distance.

Problem Illustration

après quelques lectures, j'ai trouvé l'exemple de travail minimum suivant en utilisant L'API Géotools. Cependant, je pense que je rate la sortie. Est-ce que quelqu'un peut m'expliquer comment obtenir la distance minimum entre un point et le polygone dans mteres?

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);

    }
}
9
demandé sur Marcos Roriz Junior 2016-07-15 22:50:58

1 réponses

donc ce que vous faites est correct, mais il retournera la distance en unités géodésiques (degrés d'arc) plutôt que des mètres. Vous avez deux options:

  1. transformer les géométries du point et du polygone en un système de référence planairehttp://docs.geotools.org/latest/tutorials/geometry/geometrycrs.html
  2. utiliser le calculateur géodésique http://docs.geotools.org/stable/userguide/library/referencing/calculator.html

pour utiliser le calculateur géodésique vous aurez besoin de déterminer le point le plus proche sur la limite du polygone à votre point. par exemple,DistanceOp.closestPoints(geo, 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
répondu aengus 2016-07-15 21:03:06