2014-07-02 31 views
8

मैं थोड़ी उलझन में हूं, मुझे अपने जीओडीजेंगो प्वाइंटफ़ील्ड में अपने एसआरआईडी मूल्य को Google मानचित्र एपीआई के जरिए जियोकोड किए गए पते के संदर्भ में सटीक बने रहने के लिए क्या करना चाहिए और django-postgis के माध्यम से पूछे जाने वाले दूरी में दूरी तय की जानी चाहिए?GeoDjango, Google मानचित्र V3 API के साथ पॉइंटफ़िल्ल्ड इंटरफेसिंग के लिए क्या SRID उपयोग करना है?

मुझे नेट और स्टैकओवर प्रवाह के चारों ओर धागे पढ़ने के मिश्रित राय मिल रही हैं और मुझे यह सुनिश्चित नहीं है कि क्या करना है। जैसा कि आप देख सकते हैं कि मेरा एप्लिकेशन Google मानचित्र एपीआई के साथ geocode पते पर geopy का उपयोग कर रहा है। अभी मेरे निर्देशांक फ़ील्ड में एक SRID सेट नहीं है जो 4326 पर डिफ़ॉल्ट है (ईपीएसजी: 4326)। अब स्पष्ट रूप से यह पृथ्वी को एक विश्व के रूप में देखता है, न कि एक सपाट सतह।

जैसे कि Google मानचित्र निम्नलिखित प्रश्न बातों में जवाब के अनुसार (EPSG 3857) जो जाहिरा तौर पर 900913. https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet

के SRID तो इसका मतलब मैं 900913 का समर्थन करता करने के लिए अपने SRID स्थापित करना चाहिए करता है का उपयोग करें? मेरे सभी रेस्तरां मॉडल के निर्देशांक जियोकोडर का उपयोग करके नीचे देखी गई विधि में सहेजे गए हैं। मुझे ऐसा लगता है।

अब यह है जहां मुझे फेंक दिया गया है, निम्नलिखित ट्यूटोरियल http://invisibleroads.com/tutorials/geodjango-googlemaps-build.html उनके एसआरआईडी सेट के साथ 4326 (डिफ़ॉल्ट) के साथ एक पॉइंटफील्ड का उपयोग करता है और उनके मार्कर पॉइंट पूरी तरह से Google मानचित्र पर दिखाई देते हैं।

वर्तमान में मेरे प्रश्न ठीक से सटीक हैं लेकिन अभी भी लगता है कि थोड़ा सा लगता है।

सहायता की सराहना की है, धन्यवाद!

from geopy.geocoders import GoogleV3 
from django.contrib.gis.geos import * 
from django.contrib.gis.measure import D 

geo = GoogleV3() 
def home_page(request): 
distance = 3680 
address, coordinates = geo.geocode('Swanston Street, Melbourne Australia') 
ref_location = Point(coordinates) 
query = Restaurant.objects.filter(restaurant_location__distance_lte=(ref_location, D(m=distance))).distance(ref_location).order_by('distance') 
    return render(request, 'swings/home.html', {'restaurants': query}) 

भोजनालय मॉडल

class Restaurant(models.Model): 
    name = models.CharField(max_length=25, blank=False) 
    user = models.ForeignKey(User) 
    address = models.CharField(max_length=50, blank=False) 
    restaurant_location = models.PointField(null=False, blank=False) 
    objects = models.GeoManager() 

    def __str__(self): 
     return self.name 

उत्तर

18

आप 4326 का उपयोग करना चाहिए (जो अक्षांश और देशांतर का मतलब है, दुनिया के आकार मॉडल करने के लिए WGS84 डाटुम और उपगोल का प्रयोग करके) गूगल मैप्स को अंक जोड़ने के लिए। जीपीएस जैसे डिवाइस, जो दुनिया भर में आपकी स्थिति रिकॉर्ड करते हैं, 4326 में डेटा सहेजेंगे, जिसे बाद में Google मानचित्र के भीतर आंतरिक रूप से 3857 (जो मीटर में है) में पेश किया जाएगा। यदि आप example for loading GeoJSON देखते हैं तो आप देखेंगे कि अंक 4326 में हैं।

900913 (जो केवल कैलकुलेटर लेखन में GOOGLE है) ने बहुत भ्रम पैदा किया है और इस तथ्य से उत्पन्न हुआ है कि शुरुआत में ईपीएसजी बहुत कठोर था वे एक गलत प्रक्षेपण के रूप में क्या मानते हैं, अधिकांशतः क्योंकि यह दुनिया को गोलाकार मानता है। यह Google की वैश्विक प्रतिष्ठा और इसकी गणितीय ट्रैक्टिबिलिटी के कारण वैसे भी लोकप्रिय हो गया। इसके बाद, ईपीएसजी ने इसे 3857 का एक नया आधिकारिक पदनाम दिया (अच्छी तरह से तकनीकी रूप से एक और भी था, 3587, अभी तक और अधिक भ्रम पैदा करने के लिए)। इसलिए, जबकि लोग अभी भी 9 00 9 13 के बारे में बात करते हैं, आधिकारिक तौर पर आपको 3587 का उपयोग करना चाहिए। 3587 मीटर में अनुमानित है और Google मानचित्र में डिस्प्ले के लिए टाइल्स जेनरेट करने के लिए उपयोग किया जाता है, लेकिन इसका उपयोग बिंदु स्रोतों को जोड़ने के लिए नहीं किया जाना चाहिए, जहां आप निश्चित रूप से 4326 का उपयोग करना चाहते हैं ।

वहाँ एक अच्छा लेख यहां यदि आप इस के इतिहास के बारे में कोई अधिक जानना चाहते है: http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/

+1

कि काफी मददगार था। इतिहास सबक ने वास्तव में चीजों को स्पष्ट करने में मदद की। धन्यवाद! – user3739703

+0

क्या इसका यह भी अर्थ है कि मुझे खोज एपीआई से वापस आने वाले बिंदुओं के लिए 4326 का उपयोग करना चाहिए? – bigblind

+0

@bigblind, क्षमा करें, कौन सी खोज एपीआई? –

संबंधित मुद्दे