2016-07-15 14 views
6

Po pierwsze, jestem nowy w GIS, więc przebacz wszelkie błędy. Muszę odkryć odległość między punktem szerokości i długości geograficznej a wielokątem szerokości/długości geograficznej (zwykłym lub nie). Dokładniej, muszę odkryć minimalną odległość od danego punktu do punktu na granicy wielokąta, jak pokazano poniżej. W tym przykładzie odległość od punktu p do wielokąta wynosi d. Uwaga: nie potrzebuję punktu, tylko minimalna odległość.Jak obliczyć odległość w metrach między punktem geograficznym a danym poligonem?

Problem Illustration

Po pewnym czytania, mam wymyślić następującym minimalnym przykład pracy z wykorzystaniem GeoTools API. Jednak myślę, że wpadam w efekt. Czy ktokolwiek może mnie oświecić, jak uzyskać minimalną odległość między punktem a poligonem w 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); 

    } 
} 
+1

Czy używasz zwykłego wielokąta? – 11thdimension

+1

Powinieneś wyjaśnić, co masz na myśli, mówiąc o odległości między punktem i wielokąta. Masz na myśli centroid wieloboczny lub najbliższy punkt na granicy? – aengus

+0

Dowolny wielokąt. Jest to jeden z punktów wielokątów. Próbowałem wyjaśnić w pytaniu. –

Odpowiedz

3

Więc co robisz jest słuszne, ale powróci odległość w jednostkach geodezyjnych (stopni kątowych) niż metrów. Masz dwie opcje:

  1. przetransformować punktu i geometrii wielokąt układ planarnej odniesienia http://docs.geotools.org/latest/tutorials/geometry/geometrycrs.html
  2. Użyj GeodeticCalculator http://docs.geotools.org/stable/userguide/library/referencing/calculator.html

Aby użyć GeodeticCalculator trzeba będzie ustalić najbliższy punkt na granica wielokąta do twojego punktu. na przykład 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(); 
Powiązane problemy