GeoDjango将SRID 4326转换为SRID 3857

时间:2015-06-13 22:00:35

标签: django python-2.7

我很难将SRID 4326坐标从地理编码器转换为SRID 3857,以便在我的postgres-postgis数据库中存储。我使用以下代码来测试SRID之间的转换:

from django.contrib.gis.gdal import SpatialReference, CoordTransform
from django.contrib.gis.geos import Point
gcoord = SpatialReference(4326)
mycoord = SpatialReference(3857)
trans = CoordTransform(gcoord, mycoord)

pnt = Point(47.61, -122.33, srid=4326)
print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)

x:47.61; y:-122.33; srid:4326

pnt.transform(trans)
print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)

django.contrib.gis.gdal.error.GDALException:OGR失败。

在Django中,我收到了更有用的错误消息:

变换:无法投影点(47.61 -122.33 0):纬度或经度超出限制(-14)

我已经进行了一些基本测试并确定0-90之外的纬度/经度坐标触发了这种情况。将Django中的Point字段设置为srid = 4326并迁移数据库仍会导致Point转换为SRID 3857。

1 个答案:

答案 0 :(得分:4)

我也在这里跌跌撞撞。问题在于,在调用Point构造函数时,经度需要在纬度之前。 (不要紧,纬度/经度,按此顺序,可能会在我们的脑海中浮现......)经度为'x',纬度为'y'。所以,你应该:

pnt = Point(-122.33, 47.61, srid=4326)

或者,更好的是,为了清晰起见,使用命名参数:

pnt = Point(x=-122.33, y=47.61, srid=4326)