GeoDjango,用于PointField与Google Maps V3 API接口的SRID是什么?

时间:2014-07-02 08:59:28

标签: django google-maps google-maps-api-3 postgis geodjango

我有点困惑,我应该在我的GeoDjango PointField中设置我的SRID值,以便在地址通过谷歌地图api进行地理编码的情况下保持准确,通过django-postgis查询坐标和距离?

我在阅读网络和堆栈流程中的线程时得到了不同的意见,我不确定该怎么做。正如您所看到的,我的应用程序使用geopy和google maps api来对地址进行地理编码。现在我的坐标字段没有SRID集,默认为4326,即(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

1 个答案:

答案 0 :(得分:22)

你应该使用4326(这意味着纬度和经度,使用WGS84基准和椭球体来模拟地球的形状)来为谷歌地图添加点数。记录您在地球上的位置的GPS等设备将在4326中保存数据,然后在Google地图内部将数据投影到3857(以米为单位)。如果您查看example for loading GeoJSON,您会看到这些点位于4326。

900913(在计算器编写中只是GOOGLE)引起了很多混乱,并且出现了这样一个事实,即最初EPSG对于他们认为是不准确的预测非常嗤之以鼻,主要是因为它假定世界是一个球。无论如何,它变得流行,因为谷歌的全球声望和数学易处理性。随后,EPSG给它一个新的官方名称3857(技术上还有另一个,3587,只是为了引起更多的混乱)。因此,虽然人们仍然在谈论900913,但正式你应该使用3587. 3587以米为单位投影并用于生成瓷砖以便在谷歌地图中显示,但不应该用它来添加点源,你绝对想要使用4326

如果您想了解更多关于此历史的文章,请在此处发表一篇好文章:http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/