2016-07-15 14 views
6

Her şeyden önce, CBS’de yeniyim, bu yüzden herhangi bir hatadan dolayı özür dilerim. Enlem ve boylam noktası ile enlem/boylam poligonu arasındaki mesafeyi (düzenli veya değil) keşfetmem gerekiyor. Tam olarak, aşağıda gösterildiği gibi, belirli bir noktadan poligonun sınırındaki bir noktaya olan minimum mesafeyi keşfetmem gerekiyor. Örnekte, poligona p noktasından daha yakın mesafe d'dur. Not: Noktaya ihtiyacım yok, sadece minimum mesafe. Coğrafi nokta ile belirli bir çokgen arasındaki mesafe nasıl hesaplanır?

Problem Illustration

bazı okuma sonra GeoTools API kullanarak aşağıdaki minimum çalışma örnekle geldim. Ancak, bence çıkışta dalga geçiyorum. Birisi mterlerde bir nokta ve çokgen arasındaki minimum mesafeyi nasıl alacağımı aydınlatabilir mi?

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

Düzenli bir çokgenle mi çalışıyorsunuz? – 11thdimension

+1

Nokta ve çokgen arasındaki mesafeyle ne demek istediğinizi netleştirmelisiniz. Poligon sentroidinden mi, sınırdaki en yakın noktadan mı demek istiyorsun? – aengus

+0

Herhangi bir çokgen. Çokgen noktalarından biridir. Soruya açıklık getirmeye çalıştım. –

cevap

3

Yani ne yaptığını doğru, ama jeodezik birimlerinin (yayın derece) yerine metre olarak mesafe dönecektir. İki seçeneğiniz vardır:

  1. noktası ve düzlemsel referans sistemine poligon geometri dönüşümü http://docs.geotools.org/latest/tutorials/geometry/geometrycrs.html
  2. Kullanım GeodeticCalculator http://docs.geotools.org/stable/userguide/library/referencing/calculator.html

üzerinde en yakın noktayı belirlemek gerekecektir GeodeticCalculator kullanmak için senin noktaya çokgen sınır. Örneğin. 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(); 
İlgili konular