अक्षांश या देशांतर को मीटर में कैसे बदलें?


127

अगर मेरे पास मानक NMEA प्रारूप में एक अक्षांश या देशांतर पढ़ना है, तो उस रीडिंग को मीटर में बदलने का एक आसान तरीका / सूत्र है, जिसे मैं तब जावा (J9) में लागू कर सकता हूं?

संपादित करें: ओके लगता है कि मैं जो करना चाहता हूं वह आसानी से संभव नहीं है , हालांकि मैं वास्तव में क्या करना चाहता हूं:

मान लीजिए कि मेरे पास एक लंबा और लंबा रास्ता बिंदु है और उपयोगकर्ता का एक लंबा और लंबा रास्ता है, तो यह तय करने के लिए उनकी तुलना करने का एक आसान तरीका है कि उपयोगकर्ता को यह बताएं कि वे रास्ते के बिंदु के काफी करीब दूरी के भीतर हैं ? मुझे लगता है कि उचित विषय है लेकिन क्या यह आसानी से सक्षम है या अभी भी पीढ़ी गणित है?


2
क्या आपका मतलब UTM से है? en.wikipedia.org/wiki/…
एड्रियन आर्चर

1
मीटर / लम्बे मीटर को कंवर्ट करने से क्या मतलब है? मीटर कहाँ से? क्या आप पृथ्वी की सतह के साथ दूरी की गणना करने के लिए एक समन्वय से दूसरे की राह देख रहे हैं?
बाल्टिमार्क

2
"वेपॉइंट" को परिभाषित करें। "उचित" को परिभाषित करें। क्या यह वास्तव में आप जानना चाहते हैं: "आप दो अक्षांशों और देशांतरों के बीच की दूरी की गणना कैसे करते हैं?"
बाल्टिमार्क

2
मैं इस सवाल पर अड़ गया कि अक्षांश और देशांतर पर SQL प्रश्न करना चाहता हूं और नीचे कुछ जावा कोड के साथ यह शानदार लेख मिला । यह आपको रूचि दे सकता है।
क्रिस्टोफ़ वान लैंडस्कूट

जवाबों:


173

यहाँ एक जावास्क्रिप्ट फ़ंक्शन है:

function measure(lat1, lon1, lat2, lon2){  // generally used geo measurement function
    var R = 6378.137; // Radius of earth in KM
    var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180;
    var dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180;
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
    Math.sin(dLon/2) * Math.sin(dLon/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;
    return d * 1000; // meters
}

स्पष्टीकरण: https://en.wikipedia.org/wiki/Haversine_formula

हैवरसाइन फॉर्मूला दो बिंदुओं के बीच उनके अनुदैर्ध्य और अक्षांशों को देखते हुए महान-वृत्त दूरी को निर्धारित करता है।


2
Wgs और utm के बीच कनवर्ट करने के लिए एक पुस्तकालय की तलाश करने वालों के लिए: github.com/urbanetic/utm-converter
Aram Kocharyan

3
यदि कोई व्यक्ति उपरोक्त कोड पर कुछ व्याख्यात्मक टिप्पणियों में जोड़ सकता है, तो वास्तव में आभारी होंगे। अग्रिम में धन्यवाद!
रवींद्रनाथ अकीला

मिले यह जो इस टिपण्णी का एक गोद लेने होने लगते हैं। लिंक भी दूरी गणना पर इस लेख के आधार पर कहता है । इसलिए किसी भी अनुत्तरित प्रश्न को मूल लिंक में पाया जाना चाहिए। :)
जोआचिम

मैं इस गणना में उन्नयन कैसे जोड़ूं?
डेंजरल

62

यह देखते हुए कि आप एक सरल सूत्र की तलाश कर रहे हैं, यह संभवतः ऐसा करने का सबसे सरल तरीका है, यह मानते हुए कि पृथ्वी 40075 किमी की परिधि के साथ एक गोला है।

1 ° अक्षांश के मीटर की लंबाई = हमेशा 111.32 किमी

1 ° देशांतर के मीटर में लंबाई = 40075 किमी * कॉस (अक्षांश) / 360


2
देशांतर समीकरण कैसे काम करता है? 90 डिग्री के अक्षांश के साथ आप इसे 111 किमी के पास दिखाने की उम्मीद करेंगे; लेकिन इसके बजाय यह 0 से पता चलता है; इसी तरह, इसके करीब के मान भी 0.
Reece

9
विषुवत रेखा पर अक्षांश 0 ° और ध्रुव पर 90 ° (और विपरीत नहीं) है। भूमध्य रेखा के लिए सूत्र 40075 किमी * कॉस (0 °) / 360 = 111 किमी देता है। पोल के लिए सूत्र 40075 * cos (90 °) / 360 = 0 किमी देता है।
बेन

मुझे लगता है कि यह दृष्टिकोण विशेष रूप से सरल है क्योंकि सवाल दो बिंदुओं के बीच सटीक दूरी के लिए नहीं पूछा गया था, बल्कि यदि वे "कारण करीब करीब" हैं, तो इन सूत्रों के साथ हम आसानी से जांचते हैं कि क्या उपयोगकर्ता चौकी पर केंद्रित एक वर्ग के भीतर है। । एक वृत्त की तुलना में एक वर्ग के लिए जाँच करना बहुत सरल है।
बेन

29

Http://en.wikipedia.org/wiki/Lat-lon से सूत्रों के अनुसार मैंने दो निर्देशांक के बीच कम दूरी तय करने के लिए :

m_per_deg_lat = 111132.954 - 559.822 * cos( 2 * latMid ) + 1.175 * cos( 4 * latMid);
m_per_deg_lon = 111132.954 * cos ( latMid );

नीचे दिए गए कोड में मैंने wikipedia से सूत्र के संबंध को दिखाने के लिए कच्चे नंबर छोड़ दिए हैं।

double latMid, m_per_deg_lat, m_per_deg_lon, deltaLat, deltaLon,dist_m;

latMid = (Lat1+Lat2 )/2.0;  // or just use Lat1 for slightly less accurate estimate


m_per_deg_lat = 111132.954 - 559.822 * cos( 2.0 * latMid ) + 1.175 * cos( 4.0 * latMid);
m_per_deg_lon = (3.14159265359/180 ) * 6367449 * cos ( latMid );

deltaLat = fabs(Lat1 - Lat2);
deltaLon = fabs(Lon1 - Lon2);

dist_m = sqrt (  pow( deltaLat * m_per_deg_lat,2) + pow( deltaLon * m_per_deg_lon , 2) );

विकिपीडिया प्रविष्टि में कहा गया है कि दूरी बछेड़ा 100 किमी के लिए 0.6 मी के भीतर अनुदैर्ध्य और 1 सेमी के लिए 100 किमी अक्षांशीय रूप से हैं, लेकिन मैंने इसे कहीं भी सत्यापित नहीं किया है कि सटीकता के उपयोग के लिए यह ठीक है।


3
ध्यान दें कि 2017 में विकिपीडिया पृष्ठ में एक और (परिष्कृत लगता है) सूत्र है।
गोर्का ललोना

3
हां, विकिपीडिया में सूत्र थोड़ा अलग है, लेकिन ऐसा लगता है कि अन्य विकिपीडिया का सूत्र इस महान एसओ उत्तर के समान परिणामों पर आधारित है , जहां कोई वास्तव में गणना के माध्यम से गया था।
नॉटआउट 2

10

अक्षांश और देशांतर बिंदु निर्दिष्ट करते हैं, दूरी नहीं, इसलिए आपका प्रश्न कुछ निरर्थक है। यदि आप दो (अव्यक्त, लोन) बिंदुओं के बीच की सबसे छोटी दूरी के बारे में पूछ रहे हैं, तो इस विकिपीडिया लेख को महान-वृत्त दूरी पर देखें।


9
वह संदर्भात्मक रूपांतरण के बारे में बात कर रहा है, इसलिए आपका उत्तर बिंदु पर नहीं है (कोई दंडित इरादा नहीं)
पाउलो नेव्स

1
और जीपीएस पोजीशन के डेटम ट्रांसफॉर्मेशन के लिए रूपांतरण की एक गाइड के संदर्भ में। www.microem.ru/pages/u_blox/tech/dataconvert/GPS.G1-X-00006.pdf
पाउलो नेव्स

2
वह जानना चाहता है कि प्रति मीटर कितने डिग्री है ताकि वह 2 बिंदुओं के बीच दूरी पा सके। छुपी हुई बात समझना।
TheAnonym

1
और आपका जवाब बहुत अधिक निरर्थक है
jerinho.com

7

कई उपकरण हैं जो इसे आसान बना देंगे। क्या शामिल है के बारे में अधिक जानकारी के लिए मोनजार्डिन का जवाब देखें ।

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

UTM अच्छा है, क्योंकि यह मीटर है, इसलिए काम करना आसान है। हालाँकि, आपको अच्छा काम करने के लिए उपयुक्त UTM ज़ोन प्राप्त करने की आवश्यकता होगी । लेट / लॉन्ग पेयर के लिए एक उपयुक्त ज़ोन ढूंढने के लिए गॉगलिंग के माध्यम से कुछ सरल कोड उपलब्ध हैं।


7

पृथ्वी एक कष्टप्रद अनियमित सतह है, इसलिए ऐसा करने के लिए कोई सरल सूत्र नहीं है। आपको पृथ्वी के एक अनुमानित मॉडल के साथ रहना होगा, और उस पर अपने निर्देशांक को प्रोजेक्ट करना होगा। आमतौर पर मैं इसके लिए जिस मॉडल का उपयोग करता हूं वह डब्ल्यूजीएस 84 है । यह वही है जो जीपीएस डिवाइस आमतौर पर सटीक एक ही समस्या को हल करने के लिए उपयोग करते हैं।

NOAA के पास कुछ सॉफ्टवेयर हैं जिनकी मदद से आप उनकी वेबसाइट पर डाउनलोड कर सकते हैं ।


6

यहाँ b-'s फ़ंक्शन का R संस्करण है , बस मामले में:

measure <- function(lon1,lat1,lon2,lat2) {
    R <- 6378.137                                # radius of earth in Km
    dLat <- (lat2-lat1)*pi/180
    dLon <- (lon2-lon1)*pi/180
    a <- sin((dLat/2))^2 + cos(lat1*pi/180)*cos(lat2*pi/180)*(sin(dLon/2))^2
    c <- 2 * atan2(sqrt(a), sqrt(1-a))
    d <- R * c
    return (d * 1000)                            # distance in meters
}

2

एक समुद्री मील (1852 मीटर) को भूमध्य रेखा पर देशांतर के एक अभिलेखागार के रूप में परिभाषित किया गया है। हालांकि, आपको एक मानचित्र प्रक्षेपण ( यूटीएम भी देखें ) को परिभाषित करने की आवश्यकता है जिसमें आप रूपांतरण के लिए काम कर रहे हैं।


1
नहीं, समुद्री मील अंतर्राष्ट्रीय मानक ( v en.wikipedia.org/wiki/Nautical_mile ) द्वारा 1852 मी। पृथ्वी जैसे किसी गोलाकार की सतह पर एक चाप की माप से इसका संबंध अब ऐतिहासिक और अनुमानित दोनों है।
उच्च प्रदर्शन मार्क

2

इसकी गणना करने के कुछ तरीके हैं। वे सभी गोलाकार त्रिकोणमिति के अंशों का उपयोग करते हैं जहां त्रिज्या पृथ्वी में से एक है।

विभिन्न भाषाओं में तरीकों और कोड के लिए http://www.movable-type.co.uk/scripts/latlong.html आज़माएं ।


1
    'below is from
'http://www.zipcodeworld.com/samples/distance.vbnet.html
Public Function distance(ByVal lat1 As Double, ByVal lon1 As Double, _
                         ByVal lat2 As Double, ByVal lon2 As Double, _
                         Optional ByVal unit As Char = "M"c) As Double
    Dim theta As Double = lon1 - lon2
    Dim dist As Double = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + _
                            Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * _
                            Math.Cos(deg2rad(theta))
    dist = Math.Acos(dist)
    dist = rad2deg(dist)
    dist = dist * 60 * 1.1515
    If unit = "K" Then
        dist = dist * 1.609344
    ElseIf unit = "N" Then
        dist = dist * 0.8684
    End If
    Return dist
End Function
Public Function Haversine(ByVal lat1 As Double, ByVal lon1 As Double, _
                         ByVal lat2 As Double, ByVal lon2 As Double, _
                         Optional ByVal unit As Char = "M"c) As Double
    Dim R As Double = 6371 'earth radius in km
    Dim dLat As Double
    Dim dLon As Double
    Dim a As Double
    Dim c As Double
    Dim d As Double
    dLat = deg2rad(lat2 - lat1)
    dLon = deg2rad((lon2 - lon1))
    a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(deg2rad(lat1)) * _
            Math.Cos(deg2rad(lat2)) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2)
    c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a))
    d = R * c
    Select Case unit.ToString.ToUpper
        Case "M"c
            d = d * 0.62137119
        Case "N"c
            d = d * 0.5399568
    End Select
    Return d
End Function
Private Function deg2rad(ByVal deg As Double) As Double
    Return (deg * Math.PI / 180.0)
End Function
Private Function rad2deg(ByVal rad As Double) As Double
    Return rad / Math.PI * 180.0
End Function

मैंने देखा कि लिंक टूटा हुआ है।
tshepang

1

एक्स और वाई प्रतिनिधित्व में अक्षांश और देशांतर को बदलने के लिए आपको यह तय करने की आवश्यकता है कि किस प्रकार का नक्शा प्रक्षेपण का उपयोग करना है। मेरे लिए, अण्डाकार व्यापारी बहुत अच्छी तरह से लगता है। यहां आप एक कार्यान्वयन पा सकते हैं (जावा में भी)।


0

यदि इसके पर्याप्त रूप से करीब आप एक फ्लैट विमान पर निर्देशांक के रूप में इलाज के साथ दूर हो सकते हैं। यह कहता है, सड़क या शहर के स्तर पर काम करता है अगर सही सटीकता की आवश्यकता नहीं है और आपको केवल एक मनमाना सीमा के साथ तुलना करने के लिए शामिल दूरी पर एक मोटा अनुमान है।


3
नहीं, वह काम नहीं करता है! मीटर में x दूरी अक्षांश के विभिन्न मूल्यों के लिए अलग है। भूमध्य रेखा पर आप इससे दूर हो सकते हैं, लेकिन ध्रुवों के जितना करीब आप अपने दीर्घवृत्त प्राप्त करेंगे, उतने ही ध्रुवों पर पहुंचेंगे।
रिका

3
हालांकि आपकी टिप्पणी वाजिब है, लेकिन यह उपयोगकर्ता के सवाल का उत्तर अक्षांश / लिंग डिग्री के अंतर को मीटर में बदलने के बारे में नहीं देती है।
जीवनअमारा

0

पृथ्वी में अध: पतन के लिए औसत दूरी के आधार पर।

1 ° = 111 किमी;

रेडियन के लिए इसे परिवर्तित करना और मीटर के लिए विभाजित करना, RAD के लिए एक जादुई संख्या लेना, मीटर में: 0.000008998719243599958;

फिर:

const RAD = 0.000008998719243599958;
Math.sqrt(Math.pow(lat1 - lat2, 2) + Math.pow(long1 - long2, 2)) / RAD;

3
अंत में, एक सीधा जवाब :)
बेन हचिसन

क्या होगा यदि अक्षांश -179 है और दूसरा 179 है, x दूरी 358 के बजाय 2 डिग्री होनी चाहिए
OMGPOP

7
इस उत्तर का उपयोग न करें (किसी कारण से, यह अपवर्तित है)। देशांतर और दूरी के बीच एक एकल स्केलिंग नहीं है; पृथ्वी समतल नहीं है।
सीपीबीएल

1
मेरा मानना ​​है कि यह १११.१ है
हाबिल jo

6
ध्यान दें कि देशांतर की एक डिग्री भूमध्य रेखा पर 111 किमी है, लेकिन अन्य अक्षांशों के लिए कम है। अक्षांश के फलन में 1 ° देशांतर के 1 ° के बीच की लंबाई ज्ञात करने के लिए एक सरल सन्निकट सूत्र है: 1 ° देशांतर = 40000 किमी * cos (अक्षांश) / 360 (और निश्चित रूप से यह अक्षांश = 90 ° के लिए 111 किमी देता है)। यह भी टिप्पणी करें कि देशांतर का 1 ° अक्षांश के 1 ° से लगभग हमेशा एक अलग दूरी है।
बेन

-1

यदि आप एक सरल समाधान चाहते हैं तो अन्य टिप्पणियों द्वारा उल्लिखित के रूप में हैवरसाइन सूत्र का उपयोग करें । यदि आपके पास एक सटीकता संवेदनशील अनुप्रयोग है, तो ध्यान रखें कि हैवेरसाइन सूत्र बेहतर सटीकता की गारंटी नहीं देता है तो 0.5% है क्योंकि यह मान रहा है कि पृथ्वी एक गोला है। यह विचार करने के लिए कि पृथ्वी विन्सेन्ट के सूत्रों का उपयोग करने वाला एक विस्फारित गोलाकार विचार है । इसके अतिरिक्त, मुझे यकीन नहीं है कि हमें हेवेरसिन सूत्र के साथ क्या त्रिज्या का उपयोग करना चाहिए: {भूमध्य रेखा: 6,378.137 किमी, ध्रुवीय: 6,356.752 किमी, वॉल्यूमेट्रिक: 6,371.0088 किमी}।


it is assuming the earth is a circle^^ कुछ अजीब लोग इस आजकल करना ... लेकिन क्या आप का मतलब शायद बजाय है it is assuming the earth is a sphere;)
derHugo

-2

गोलाकार ज्यामिति करने के लिए आपको निर्देशांक को रेडियन में बदलना होगा। एक बार परिवर्तित होने के बाद, आप दो बिंदुओं के बीच की दूरी की गणना कर सकते हैं। दूरी तो आप चाहते हैं किसी भी उपाय में परिवर्तित किया जा सकता है।

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