【发布时间】:2014-08-22 23:55:41
【问题描述】:
我有点困惑,我应该在 GeoDjango PointField 中将我的 SRID 值设置为什么,以便在通过 google maps api 将地址地理编码为通过 django-postgis 查询的坐标和距离的上下文中保持准确?
我在阅读网络和 stackover 流程中的线程时得到了不同的意见,我不确定该怎么做。如您所见,我的应用程序正在使用 geopy 和 google maps api 对地址进行地理编码。现在我的坐标字段没有设置默认为 4326 的 SRID,即(EPSG:4326)。现在显然这将地球视为一个球体,而不是一个平面。
根据以下问题的答案,例如谷歌地图使用 (EPSG 3857),其 SRID 显然为 900913。https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet
这是否意味着我应该将我的 SRID 设置为 900913?我的所有餐厅模型的坐标都使用地理编码器以与下面相同的方法保存。我会这么认为。
现在这就是我被抛弃的地方,下面的教程http://invisibleroads.com/tutorials/geodjango-googlemaps-build.html 使用了一个点域,其 SRID 设置为 4326(默认),它们的标记点完美地显示在谷歌地图上。
目前我的查询相当准确,但仍然感觉有点不对劲。
感谢您的帮助,谢谢!
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
【问题讨论】:
标签: django google-maps google-maps-api-3 postgis geodjango