GeoDjango का उपयोग करके 2 बिंदुओं के बीच दूरी प्राप्त करना? [बन्द है]


11

मेरे पास 2 स्थान हैं जो जीपीएस कोपर्स द्वारा परिभाषित हैं, लैट / लॉन्ग जैसे गूगल मैप्स द्वारा लौटाए गए:

http://gmaps-samples.googlecode.com/svn/trunk/geocoder/singlegeocode.html

मुझे उनके बीच की दूरी की गणना करने की आवश्यकता है। मुझे पता है कि मैं Google API का उपयोग कर सकता हूं, लेकिन मैं बल्क क्वेरी को प्रोसेस कर रहा हूं, इसलिए मैं इसे अपने सर्वर पर करूंगा।

मैंने डॉक्स के साथ कुछ घंटे बिताए हैं, जियोडोजांगो ओके स्थापित किया है, लेकिन मैं इसका उदाहरण नहीं ढूंढ सकता हूं। साहित्य में सब कुछ मेरी ज़रूरत से ज़्यादा जटिल है।

जवाबों:


9

उत्तर इस Google समूह थ्रेड में लगता है :

from django.contrib.gis.geos import GEOSGeometry
pnt = GEOSGeometry('SRID=4326;POINT(40.396764 -3.68042)')
pnt2 = GEOSGeometry('SRID=4326;POINT( 48.835797 2.329102  )')
pnt.distance(pnt2) * 100

3
याद रखें कि POINT () फॉर्म POINT (XY) लेता है। आप शायद मैड्रिड के लिए एक उदाहरण देने की कोशिश कर रहे थे, लेकिन आपके द्वारा उपयोग किए जाने वाले बिंदु क्रमशः हिंद महासागर और केन्या में हैं।

6
का उद्देश्य क्या है * 100?
क्रिस्टियन सियुपिटु

4
आप मीटर में एक प्रक्षेपण में अंक नहीं बदलना चाहिए? यदि आप जानते हैं तो बेहतर सटीकता के लिए UTM ज़ोन का उपयोग करें। >>> pnt.transform (900913) >>> pnt2.transform (900913) >>> pnt.distance (pnt2) 1153485.9216961625
monkut

ऐसा लगता है जैसे Pointअप्रयुक्त है
ओलेग बेलौसोव

1
इस उत्तर का उपयोग न करें। दूरी फ़ंक्शन किसी भी रूप में SRID का सम्मान नहीं करता है और बस 2d विमान पर दूरी देगा।
जोनाथन रिचर्ड्स


2

आप प्वाइंट का भी इस्तेमाल कर सकते हैं।

from django.contrib.gis.geos import Point
p1 = Point(37.2676483,-6.9273579)
p2 = Point(37.2653293,-6.9249401)
distance = p1.distance(p2)
distance_in_km = distance * 100

1
इस उत्तर का उपयोग न करें। दूरी फ़ंक्शन किसी भी रूप में SRID का सम्मान नहीं करता है और बस 2d विमान पर दूरी देगा।
जोनाथन रिचर्ड्स

1

परिणाम प्राप्त करने के लिए आप स्वेन मार्नाच के पायथन कोड का भी उपयोग कर सकते हैं । मैंने मीटर में परिणाम प्राप्त करने के लिए कोड की एक पंक्ति जोड़ी है ।

कोड:

from math import sin, cos, radians, degrees, acos

def calc_dist(lat_a, long_a, lat_b, long_b):
    lat_a = radians(lat_a)
    lat_b = radians(lat_b)
    long_diff = radians(long_a - long_b)
    distance = (sin(lat_a) * sin(lat_b) +
                cos(lat_a) * cos(lat_b) * cos(long_diff))
    resToMile = degrees(acos(distance)) * 69.09
    resToMt = resToMile / 0.00062137119223733
    return resToMt

0

यदि आप एक उत्तर चाहते हैं कि एक जियोजेन्जंगो लाइब्रेरी या फ़ंक्शन का उपयोग न करें। टैग के साथ कुछ सवालों और जवाबों के लिए देखें। वे आपको ऐसे सूत्र देते हैं जो किसी भी भाषा या ढांचे के साथ काम करेंगे। ऐसा ही एक प्रश्न जीपीएस निर्देशांक के बीच की दूरी है


मैं जियोडजैंगो का उपयोग करूंगा क्योंकि मैं थोक गणना करने के लिए सबसे कुशल तरीका मानता हूं जो एक स्थानिक नायब के आंतरिक तर्क के साथ है। और मेरी साइट के बाकी हिस्सों में django है, इसलिए एक ही ढांचे के तहत सब कुछ प्राप्त करना अच्छा होगा।
मैडमार्डिगन

0

मुझे बहुत सारे समाधान पसंद आए जो मैंने एक बार django और geopy की मदद से देखे हैं। फिर भी, मैंने केवल दो बिंदुओं से अधिक दर्ज करने की स्वतंत्रता के लिए कोड को थोड़ा बदल दिया।

from django.contrib.gis.geos import Point
from geopy.distance import distance as geopy_distance
from itertools import tee, izip


def pairwise(iterable):
    a, b= tee(iterable)
    next(b, None)
    return izip(a,b)

chicago = Point(41.50, 87.37)
san_francisco = Point(37.47, 122.26)
st_louis = Point(38.62, 90.19)
washington = Point(38.53, 77.02)

points = (washington, st_louis, chicago, san_francisco)

d = sum(geopy_distance(a,b).meters for (a,b) in pairwise(points))

distance_km = d/1000
distance_miles = distance_km*0.621371

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