मेरे पास एक जीपीएस ट्रैक के साथ GPX file है। अब मैं इस ट्रैक के साथ कवर की गई दूरी की गणना करना चाहता हूं।एक जीपीएक्स फ़ाइल से दूरी की गणना कैसे करें?
इसकी गणना करने का सबसे अच्छा तरीका क्या है?
मेरे पास एक जीपीएस ट्रैक के साथ GPX file है। अब मैं इस ट्रैक के साथ कवर की गई दूरी की गणना करना चाहता हूं।एक जीपीएक्स फ़ाइल से दूरी की गणना कैसे करें?
इसकी गणना करने का सबसे अच्छा तरीका क्या है?
दो बिंदुओं (आपकी जीपीएक्स फ़ाइल में प्रत्येक बिंदु की जोड़ी) के बीच की दूरी की गणना करने का पारंपरिक तरीका हावर्सिन फॉर्मूला के साथ है।
मेरे पास एक SQL सर्वर फ़ंक्शन है जो एल्गोरिदम लागू करता है। यह अन्य भाषाओं में अनुवाद करना आसान होना चाहिए:
create function dbo.udf_Haversine(@lat1 float, @long1 float,
@lat2 float, @long2 float) returns float begin
declare @dlon float, @dlat float, @rlat1 float,
@rlat2 float, @rlong1 float, @rlong2 float,
@a float, @c float, @R float, @d float, @DtoR float
select @DtoR = 0.017453293
select @R = 3959 -- Earth radius
select
@rlat1 = @lat1 * @DtoR,
@rlong1 = @long1 * @DtoR,
@rlat2 = @lat2 * @DtoR,
@rlong2 = @long2 * @DtoR
select
@dlon = @rlong1 - @rlong2,
@dlat = @rlat1 - @rlat2
select @a = power(sin(@dlat/2), 2) + cos(@rlat1) *
cos(@rlat2) * power(sin(@dlon/2), 2)
select @c = 2 * atn2(sqrt(@a), sqrt([email protected]))
select @d = @R * @c
return @d
end
यह माइल्स में दूरी देता है। किलोमीटर के लिए, पृथ्वी त्रिज्या को इसके किमी के बराबर के साथ बदलें।
Here अधिक गहराई से स्पष्टीकरण है।
संपादित करें: यह फ़ंक्शन एक ज़िप कोड डेटाबेस के साथ त्रिज्या खोज करने के लिए पर्याप्त तेज़ और सटीक है। यह वर्षों के लिए this site पर एक अच्छा काम कर रहा है (लेकिन यह अब नहीं करता है, क्योंकि लिंक अब टूटा हुआ है)।
Mike Gavaghan has an algorithm अपनी साइट पर दूरी की गणना के लिए। कोड का एक सी # और एक जावा संस्करण भी है।
Vincenty formulae का डेल्फी कार्यान्वयन here पाया जा सकता है।
क्या आपके पास इसके लिए एक अपडेट किया गया लिंक है? –
@ एडम कार्टर: मैंने यूआरएल की जांच की है और यह अभी भी ठीक है। – menjaraz
यहां एक स्कैला कार्यान्वयन है।
3958.761 मील में mean radius of the Earth है। परिणाम (किमी या कुछ अन्य इकाई) में परिणाम प्राप्त करने के लिए बस इस नंबर को बदलें।
// The Haversine formula
def haversineDistance(pointA: (Double, Double), pointB: (Double, Double)): Double = {
val deltaLat = math.toRadians(pointB._1 - pointA._1)
val deltaLong = math.toRadians(pointB._2 - pointA._2)
val a = math.pow(math.sin(deltaLat/2), 2) + math.cos(math.toRadians(pointA._1)) * math.cos(math.toRadians(pointB._1)) * math.pow(math.sin(deltaLong/2), 2)
val greatCircleDistance = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
3958.761 * greatCircleDistance
}
// A sequence of gpx trackpoint lat,long pairs parsed from the track GPX data
val trkpts: Seq[(Double, Double)] = {
val x = scala.xml.XML.loadString(track)
(x \\ "trkpt").map(trkpt => ((trkpt \ "@lat").text.toDouble, (trkpt \ "@lon").text.toDouble))
}
// Distance of track in miles using Haversine formula
val trackDistance: Double = {
trkpts match {
case head :: tail => tail.foldLeft(head, 0.0)((accum, elem) => (elem, accum._2 + haversineDistance(accum._1, elem)))._2
case Nil => 0.0
}
}
यह प्रश्न पुराना है, लेकिन मैं पूर्णता के लिए एक अजगर विकल्प जोड़ना चाहता हूं। GeoPy में great-circle distance
और Vincenty distance
दोनों हैं।
बहुत बहुत धन्यवाद। मैं इसे जावा में बंद कर दूंगा और इसे यहां पोस्ट करूंगा। @ डीओटीआर का क्या अर्थ है? त्रिज्या से दूरी? – guerda
यही वह कारक है जो डिग्री को रेडियंस, पीआई/180 में परिवर्तित करता है। – cdonner
लिंक के लिए धन्यवाद। मैं जल्द ही अपने जावा संस्करण को पोस्ट करूंगा – guerda