【问题标题】:GeoDjango Converting SRID 4326 to SRID 3857GeoDjango 将 SRID 4326 转换为 SRID 3857
【发布时间】:2015-08-29 16:45:47
【问题描述】:

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

【问题讨论】:

    标签: django python-2.7


    【解决方案1】:

    我也在这里跌跌撞撞。问题是,在调用 Point 构造函数时,经度需要在纬度之前。 (不要介意纬度/经度,按照这个顺序,可能会在我们的脑海中根深蒂固......)经度是'x',纬度是'y'。所以,你应该有:

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

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

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

    【讨论】:

    • 我也遇到了类似的错误。你能检查一下吗? stackoverflow.com/questions/60139673/…
    • 完成此操作,但在远程服务器上仍然出现相同的错误。本地开发服务器一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2022-07-09
    • 2015-07-22
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多