我在将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;弯曲: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。

最佳答案

我也偶然在这里。问题在于,在调用Point构造函数时,经度必须先于纬度。 (不要在意我们会根深蒂固纬度/经度……)经度是“ x”,纬度是“ y”。因此,您应该具有:

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


或者,更好的是,使用命名参数来保持清晰:

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

关于django - GeoDjango将SRID 4326转换为SRID 3857,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30823988/

10-13 00:52