2016-07-15 27 views
6

सबसे पहले, मैं जीआईएस के लिए नया हूं, इसलिए किसी भी गलती को क्षमा करें। मुझे अक्षांश और देशांतर बिंदु और अक्षांश/देशांतर बहुभुज (नियमित या नहीं) के बीच की दूरी की खोज करने की आवश्यकता है। निश्चित रूप से, मुझे नीचे दिए गए अनुसार, पॉलीगॉन की सीमा में किसी बिंदु से किसी बिंदु से न्यूनतम दूरी की खोज करने की आवश्यकता है। उदाहरण में, बहुभुज के लिए बिंदु p से नज़दीकी दूरी d है। नोट: मुझे बिंदु की आवश्यकता नहीं है, केवल न्यूनतम दूरी।भौगोलिक बिंदु और दिए गए बहुभुज के बीच मीटर में दूरी की गणना कैसे करें?

Problem Illustration

कुछ पढ़ने के बाद, मैं निम्नलिखित न्यूनतम काम कर उदाहरण GeoTools एपीआई का उपयोग कर के साथ आ गए हैं। हालांकि, मुझे लगता है कि मैं आउटपुट में गड़बड़ कर रहा हूं। क्या कोई मुझे 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

क्या आप नियमित बहुभुज के साथ काम कर रहे हैं? – 11thdimension

+1

आपको स्पष्ट करना चाहिए कि बिंदु और बहुभुज के बीच दूरी से आपका क्या मतलब है। क्या आप बहुभुज केंद्र से या सीमा पर निकटतम बिंदु से मतलब है? – aengus

+0

कोई बहुभुज। यह बहुभुज बिंदुओं में से एक है। मैंने इस प्रश्न में स्पष्ट करने की कोशिश की। –

उत्तर

3

तो तुम क्या कर रहे हैं सही है, लेकिन यह जियोडेटिक इकाइयों (चाप की डिग्री) के बजाय मीटर में दूरी वापस आ जाएगी। आपके पास दो विकल्प:

  1. बिंदु और एक समतल संदर्भ प्रणाली के लिए बहुभुज ज्यामिति को बदलने http://docs.geotools.org/latest/tutorials/geometry/geometrycrs.html
  2. उपयोग GeodeticCalculator http://docs.geotools.org/stable/userguide/library/referencing/calculator.html

GeodeticCalculator उपयोग करने के लिए आप पर निकटतम बिंदु निर्धारित करने के लिए की आवश्यकता होगी आपके बिंदु पर बहुभुज सीमा। जैसे 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(); 
संबंधित मुद्दे