2014-07-02 45 views
8

我有點困惑,我應該如何將我的SRID值設置到我的GeoDjango PointField中,以便通過Google地圖api將地址解析爲經由django-postgis查詢的座標和距離的地址環境中保持準確?GeoDjango,用於PointField與Google Maps V3 API接口的SRID是什麼?

我正在閱讀圍繞網絡和疊層流程的線程,並且不確定要做什麼。正如你可以看到我的應用程序正在使用gemap和谷歌地圖API來對地址進行地理編碼。現在我的座標字段沒有設置默認爲4326的SRID(EPSG:4326)。現在顯然這將地球視爲一個地球,而不是一個平坦的表面。

根據以下問題的東西,如谷歌地圖的答案使用(EPSG 3857),這顯然有900913. https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet

的SRID那麼,這是否意味着我要我的SRID設置爲900913?我的餐廳模型的所有座標都使用地理編碼器以下面所示的相同方法保存。我會這樣認爲的。

現在這是我扔掉的地方,以下教程http://invisibleroads.com/tutorials/geodjango-googlemaps-build.html使用SRID設置爲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數據和球體的地球的形狀模型)把點添加到谷歌地圖。記錄您在地球上的位置的GPS等設備將保存4326中的數據,然後將其內部投影到3857(以米爲單位)。如果你看看example for loading GeoJSON,你會發現點數在4326.

900913(這只是計算機寫作中的GOOGLE)引起了很多混淆,並且由於最初EPSG非常嗅探他們認爲這是一個不準確的預測,主要是因爲它假定世界是一個球體。無論如何,它因Google的全球影響力和數學易處理性而變得流行起來。隨後,EPSG給了它新的官方稱號3857(技術上還有另外一個3587,只是爲了引起更多混淆)。所以,當人們仍然談論900913時,官方應該使用3587. 3587以米爲單位進行投影,並用於生成在Google地圖中顯示的貼圖,但不應用於將點源添加到它,您肯定要使用4326 。

這裏有,如果你想了解任何更多的這個歷史上的好文章:http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/

+1

這是非常有益的。歷史課實際上有助於清理事情。謝謝! – user3739703

+0

這是否也意味着我應該使用4326從搜索API返回的點? – bigblind

+0

@bigblind,對不起,哪個搜索API? –