एक (महान वृत्त) पथ पर परियोजना का स्थान


9

मैं इस एसई साइट को अब कुछ घंटों के लिए खोज रहा हूं, और मैं अभी भी अपने सवाल का हल खोजने के लिए संघर्ष कर रहा हूं। मेरा लक्ष्य यह है कि OSM और मेरे स्थान (lat / lon निर्देशांक) में एक रास्ता दिया गया है, मैं उस रास्ते पर निकटतम स्थान (lat / lon निर्देशांक) को खोजना चाहता हूं। बिंदु रास्ते में कहीं भी हो सकता है, रास्ते को परिभाषित करने के लिए उपयोग किए जाने वाले बिंदुओं तक सीमित नहीं है।

तो मैं निम्नलिखित एल्गोरिथ्म के बारे में सोच रहा हूँ:

  1. अलग-अलग किनारों को अलग-अलग पथ, केवल दो बिंदुओं को जोड़ने वाले प्रत्येक किनारे।
  2. निकटतम किनारे का चयन करें।
  3. उस किनारे पर मेरा स्थान प्रोजेक्ट करें।

अब किसी स्थान और पथ के बीच की दूरी की गणना करने के बारे में कई प्रश्न हैं:

इसके अलावा एक बहुत ही समान प्रश्न जिसके बारे में मुझे गणना सही या सत्यापित नहीं मिल सकती है:

उस विषय के बारे में डॉ। मठ से कुछ जानकारी भी है । हालाँकि मुझे चरण 3 में स्थान की गणना करने के लिए एक एल्गोरिथ्म नहीं मिल रहा है। जैसा कि मैंने काफी समय में स्पर्श (वेक्टर) बीजगणित नहीं किया है, मैं उन उत्तरों में तर्क को बिल्कुल नहीं समझता।

क्या कोई ऐसा करने के लिए एक एल्गोरिथ्म दिखा सकता है? किसी भी उचित प्रोग्रामिंग भाषा में समाधान मेरे साथ ठीक है।


1
चूंकि यह अन्य प्रश्नों के आपके "अस्वीकृति" के लिए महत्वपूर्ण लगता है, कृपया "उस किनारे पर मेरे स्थान को प्रोजेक्ट करें" पर विस्तृत करें। प्रक्षेपण किनारे पर नहीं हो सकता है। मेरा मानना ​​है कि इस मुद्दे को अन्य प्रश्नों में संबोधित किया गया है। (अच्छी तरह से किया, अनुसंधान के लिए, BTW।)
मार्टिन एफ


@MartinF कि सवाल एक बिंदु से एक रेखा की दूरी की गणना करता है, लेकिन रेखा पर निकटतम बिंदु नहीं।
bouke

वहाँ है पर एक समाधान gis.stackexchange.com/a/23500/3195 हालांकि यह है शायद समझने के लिए मुश्किल।
मार्टिन एफ

आह हाँ धन्यवाद, मैंने रेफरी नं। 3. समस्या क्षेत्र की सामान्य व्याख्या के लिए उस विशेष प्रश्न में 'समाधान' लिंक। हालांकि यह अच्छी तरह से आधारित गणितज्ञों के लिए पर्याप्त हो सकता है, मैं उस पेपर में गणित को काफी नहीं समझता हूं।
बुके

जवाबों:


7

पृथ्वी के एक गोलाकार मॉडल का उपयोग करने से पर्याप्त सटीकता प्राप्त हो सकती है और सरल तेज गणना हो सकती है।

सभी निर्देशांकों को पृथ्वी-केंद्रित (3 डी) कार्टेशियन निर्देशांक में बदलें। उदाहरण के लिए, सूत्र

(cos(lon)*cos(lat), sin(lon)*cos(lat), sin(lat))

करूँगा। (यह एक दूरी माप का उपयोग करता है जिसमें पृथ्वी की त्रिज्या एक इकाई है, जो सुविधाजनक है।)

गंतव्य बिंदु के लिए प्रारंभ बिंदु और X1 = (X1, y1, z1) के लिए X0 = (x0, y0, z0) लिखना, जो महान सर्कल को परिभाषित करते हैं (बशर्ते X0 X1 से अलग है और दोनों विपरीत नहीं हैं), U को X0 और X1 के सामान्यीकृत क्रॉस उत्पाद होने दें। इसकी गणना दो चरणों में की जाती है:

V = (xv, yv, zv) = (y0*z1 - z0*y1, z0*x1 - x0*z1, x0*y1 - y0*x1)

V की लंबाई है

|V| = sqrt(xv^2 + yv^2 + zv^2)

सामान्यीकरण खिंचाव V से इकाई लंबाई:

U = (xu, yu, zu) = V / |V| = (xv/|V|, yv/|V|, zv/|V|).

किसी भी बिंदु X = (x, y, z) और इस महान वृत्त के समतल के बीच उन्मुख 3D दूरी, X का केवल Z के साथ दिया गया उत्पाद है, जिसके द्वारा दिया गया है

d = X * U = x*xu + y*yu + z*zu

पृथ्वी की सतह पर दूरी के संदर्भ में निकटतम बिंदु वह है जो विमान के सबसे करीब है: इस प्रकार, इसमें d का सबसे छोटा निरपेक्ष मान है ।

आकृति

यह आंकड़ा एक महान वृत्त (काले रंग में) को दो सफेद बिंदुओं द्वारा निर्धारित किया गया है और उस महान सर्कल के विमान को उनकी पूर्ण 3 डी दूरी के अनुसार गोलाकार और छायांकित पर 2000 यादृच्छिक अंक; वह है, | d |

एक निकटतम बिंदु पाया, इसे पहले महान सर्कल के विमान (3 डी में) को पेश करके और फिर उस रेडियल को पृथ्वी की सतह पर बाहर की ओर बढ़ाते हुए महान सर्कल में प्रोजेक्ट करें। प्रक्षेपण केवल d * U को घटाता है:

X' = (x', y', z') = X - d*U = (x - d*xu, y - d*yu, z - d*zu).

रेडियल प्रोजेक्शन बस एक्स को असामान्य करता है उसी तरह वी को यू को असामान्य किया गया था:

X'' = X' / |X'|.

(यह समस्यात्मक होगा यदि | X '= = 0, जो तब होता है जब निकटतम बिंदु महान वृत्त के ध्रुवों में से एक होता है। इस स्थिति के लिए कोड में एक परीक्षण शामिल करें, यदि ऐसा हो सकता है, और इसके साथ अलग से निपटें। किस पोल को पहचानने के लिए d के चिन्ह का उपयोग करना ।)

यदि वांछित है, तो सामान्य सूत्रों का उपयोग करके X '' वापस (lat, lon) के निर्देशांक में परिवर्तित करें ।


एक सवाल। उस गैर-असामान्य मामले पर विचार करें जहां हम किसी भी X1 और X0 (महान सर्कल पर) का चयन कर सकते हैं, सटीकता की दृष्टि से, क्या X1 और X0 को पास या दूर तक ले जाना बेहतर है (फिर से प्रदान किया गया कि X0 X1 से अलग है और दो विपरीत नहीं हैं)?
user189035

1
@ user189035 उन्हें अलग से 90 डिग्री उठाओ। जब वे बहुत करीब होते हैं, तो उनका क्रॉस उत्पाद संख्यात्मक रूप से अनिश्चित होता है: घटाव में बहुत अधिक रद्दीकरण होता है, जिससे महत्वपूर्ण आंकड़ों का नुकसान होता है।
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.