गोलाकार मर्केटर बनाम ज़ोनड यूटीएम में दूरी को मापना


11

मुझे WGS84 लेट / लॉन्ग में अंक मिले हैं और मैं उनके बीच "छोटी" (5 किमी से कम) दूरियों को मापना चाहूंगा।

मैं http://www.movable-type.co.uk/scripts/latlong.html से हैवरसाइन सूत्र का उपयोग कर सकता हूं और यह बहुत अच्छी तरह से काम करता है।

मैं हालांकि, पाइथन शेपली लाइब्रेरीज़ का उपयोग करना चाहूंगा, ताकि मैं बस दूरी से अधिक ऑपरेशन कर सकूं, और क्योंकि मैं जिस पैमाने पर काम कर रहा हूं, एक सपाट धरती एक अच्छा पर्याप्त सन्निकटन है। मज़बूती से भौगोलिक कोर्ड्स को एक कार्टेज़ियन कॉर्ड में प्रोजेक्ट करने के लिए, मैं पायथन का उपयोग कर रहा हूं proj4, लेकिन मुझे जो पसंद है उससे बड़ी त्रुटियां मिलती हैं।

यदि मैं स्थानीय UTM ज़ोन का उपयोग करता हूं, तो मुझे एक-दो मीटर के हावरसीन के बीच अंतर मिलता है, जो ठीक है। लेकिन मैं UTM ज़ोन (दुनिया भर में अंक हो सकता है) के लिए काम नहीं करना चाहता, इसलिए मैंने "गोलाकार मर्केटर" के साथ कोशिश की, लेकिन अब हावरसाइन और अनुमानित दूरी के बीच अंतर 100% से अधिक है। क्या यह वास्तव में गोलाकार मर्केटर के लिए सही है? मैं वास्तव में चाहता हूं कि दुनिया में कहीं भी एक दूसरे के 5 किमी के भीतर दो बिंदुओं के लिए एक व्यावहारिक कार्टेशियन प्रक्षेपण हो।

from shapely.geometry import Point
from pyproj import Proj

proj = Proj(proj='utm',zone=27,ellps='WGS84')
#proj = Proj(init="epsg:3785")  # spherical mercator, should work anywhere...

point1_geo = (-21.9309694, 64.1455718)
point2_geo = (-21.9372481, 64.1478206)
point1 = proj(point1_geo[0], point1_geo[1])
point2 = proj(point2_geo[0], point2_geo[1])

point1_cart = Point(point1)
point2_cart = Point(point2)

print "p1-p2 (haversine)", hdistance(point1_geo, point2_geo)
print "p1-p2 (cartesian)", point1_cart.distance(point2_cart)

इस बिंदु पर, उनके बीच की haversine दूरी 394m है, और utm क्षेत्र 27, 395m का उपयोग करते हुए। लेकिन अगर मैं गोलाकार मर्केटर का उपयोग करता हूं, तो कार्टेशियन दूरी 904 मीटर है, जो कि बंद है।


UTM ज़ोन लॉन्गिट्यूड के आधार पर "वर्क आउट" करना आसान है। एक सामान्य देशांतर लैम्ब्डा, -180 <= लैम्ब्डा <180 उठाओ, और इसे इंट ((180 + लैम्ब्डा) / 6) +1 के रूप में जोन संख्या की गणना करने के लिए उपयोग करें। उत्तर और दक्षिण के बीच तय करने के लिए अक्षांश के चिह्न का उपयोग करें। आपको उच्च अक्षांशों में विशेष ध्रुवीय क्षेत्रों का उपयोग करने की आवश्यकता नहीं है; वास्तव में, वास्तव में एक पोल के करीब आप लगभग किसी भी यूटीएम क्षेत्र का उपयोग कर सकते हैं।
whuber

जवाबों:


17

हां, आपको एक वैश्विक मर्केटर प्रक्षेपण के साथ इस प्रकार की त्रुटियां मिलेंगी: यह भूमध्य रेखा पर सटीक है और विरूपण भूमध्य रेखा से दूर अक्षांश के साथ तेजी से बढ़ता है। दूरी विरूपण 60 डिग्री अक्षांश पर बिल्कुल 2 (100%) है। आपके परीक्षण अक्षांशों (64.14 डिग्री) पर मैं 2.294 की विकृति की गणना करता है, बिल्कुल 904/394 = 2.294 के अनुपात से सहमत। (इससे पहले मैंने 2.301 की गणना की थी, लेकिन यह एक क्षेत्र पर आधारित था, न कि WGS84 दीर्घवृत्त। अंतर (0.3% का) हमें सटीकता का बोध कराता है, जो कि क्षेत्र-आधारित हैवरसाइन फॉर्मूला बनाम दीर्घवृत्त-आधारित प्रक्षेपण का उपयोग करने से आपको प्राप्त हो सकता है। )

वैश्विक प्रक्षेपण जैसी कोई चीज नहीं है जो हर जगह अत्यधिक सटीक दूरी पैदा करती है। यही कारण है कि UTM ज़ोन प्रणाली का उपयोग किया जाता है!

एक समाधान यह है कि अपने सभी गणनाओं के लिए गोलाकार ज्यामिति का उपयोग करें, लेकिन आपने इसे अस्वीकार कर दिया है (जो कि यदि आप जटिल ऑपरेशन करने जा रहे हैं, तो उचित है, लेकिन निर्णय फिर से करने लायक हो सकता है)।

एक अन्य समाधान है कि तुलना के लिए प्रक्षेपण को अनुकूल बनाया जाए । उदाहरण के लिए, आप सुरक्षित रूप से अनुप्रस्थ मर्केटर का उपयोग कर सकते हैं (यूटीएम सिस्टम में) ब्याज के क्षेत्र के केंद्र के पास स्थित मध्याह्न रेखा के साथ। मेरिडियन को स्थानांतरित करना एक साधारण बात है: बस मेरिडियन के देशांतर को सभी देशांतरों से घटाएं और प्राइम मेरिडियन पर केंद्रित एक एकल टीएम प्रोजेक्शन का उपयोग करें (1 के पैमाने कारक के साथ, यूटीएम सिस्टम के 0.9996 के बजाय)। आपके काम के लिए यह अधिक होगास्वयं UTM का उपयोग करने से सटीक। यह सही कोण देगा (टीएम कंफर्म है) और केवल कुछ दसियों किलोमीटर द्वारा अलग किए गए बिंदुओं के लिए उल्लेखनीय रूप से सटीक होगा: छह-अंकीय सटीकता से बेहतर की उम्मीद करें। वास्तव में, मैं इन अनुकूलित-टीएम दूरियों और हैवेरसाइन दूरियों के बीच किसी भी छोटे अंतर को दीर्घवृत्त (टीएम प्रक्षेपण के लिए प्रयुक्त) और गोला (हैवेर्सिन द्वारा प्रयुक्त) के बीच अंतर करने के लिए इच्छुक हूं, बजाय विरूपण के प्रक्षेपण।


यह बहुत ही सही लगता है, मुझे लगता है कि मुझे अपने खुद के init स्ट्रिंग को proj4 के लिए बनाने की आवश्यकता है, बजाय मौजूदा EPSG स्ट्रिंग्स का उपयोग करने में सक्षम होने के?
कार्ल पी

1
+1 अंक में प्रक्षेपण को अनुकूलित करें। मैं अनुप्रस्थ मर्केटर पर अनुप्रस्थ प्लेट कैरी पसंद करता हूं, लेकिन छोटे पर्याप्त क्षेत्रों ("बड़े पैमाने") पर, ब्याज के क्षेत्र के पास लगभग कोई भी प्रक्षेपण "केंद्रित" अच्छी सटीकता देगा।
डेविड कैरी

@ डेविड दिलचस्प विचार। गोले पर अनुप्रस्थ प्लेट कैरी (कैसिनी) मेरे द्वारा दिए गए अनुमानित फार्मूले के करीब होगा, जो कि gis.stackexchange.com/posts/2964/edit (जो यहां स्वीकार्य समाधान हो सकता है)। टीएम और टीपीसी के फार्मूले क्षेत्र पर समान हैं; एक दीर्घवृत्त पर, टीपीसी थोड़ा सरल है। TM शायद अधिक सॉफ्टवेयर द्वारा समर्थित है।
whuber

@ कार्ल आप चाहें तो किसी भी टीएम जोन का इस्तेमाल कर सकते हैं। बस सभी अनुगामी बदलाव करें ताकि आपके रुचि के क्षेत्र में एक केंद्रीय बिंदु चुने हुए क्षेत्र के केंद्रीय मध्याह्न के साथ मेल खाता हो। सभी दूरी को 1 / 0.9996 से गुणा करें (और इस कारक के वर्ग से सभी क्षेत्रों को गुणा करें), किसी भी कोण या बीयरिंग को न बदलें, और - यदि आपकी गणना नए बिंदुओं का उत्पादन करती है - तो बस अपने अनुगामी को मूल समन्वय प्रणाली में वापस स्थानांतरित करें। ।
whuber

0

मैंने यह कोशिश नहीं की है, लेकिन ऐसा लगता है कि दस्तावेज़ीकरण से ऐसा लगता है कि आप http://search.cpan.org/~grahamc/Geo-Coordinates-UTM-0.08/UTM.pm#latlon_to_utm का उपयोग किसी लेट या लोन जोड़ी से प्राप्त करने के लिए कर सकते हैं (प्लस दीर्घवृत्त) UTM ज़ोन के लिए और निर्देशांक सूची। फिर आप पहले की तरह अपनी गणना कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.