Geodjango:transform() 错误地交换 lat/long
Geodjango: transform() swaps lat/long incorrectly
我正在使用 geodjango 并按如下方式加载 shapefile:
datasource = DataSource("/path/to/shape.shp")
for each in datasource[0]:
geo = each.geom
geo.transform(4326)
我在这里要做的是将几何图形转换为 4326,以便我可以将其记录在我的数据库中,该数据库使用此 SRID。然而,一件相当奇怪的事情发生了。当我 运行 在本地(使用 GDAL 2.4.0、Django 3.0.6)时,它工作得很好。这是一个转换后的多边形示例。
输入:
POLYGON ((141192.63413501 167690.231242441,141198.39365501
167695.515882441...
然后转化为:
POLYGON ((4.24376514198078 50.8195815928706,4.24384675060931
50.819629186136...
这很好用。然而,当这个 运行s 投入生产时(GDAL 3.0.4,Django 3.0.3),这会以一种非常奇怪的方式失败。没有错误消息,并且 transform() 函数完成了它的工作……但是它颠倒了纬度和经度!所以我的输出变成:
POLYGON ((50.8195818670687 4.24376485512428,50.8196294603646
4.24384646375124...
我不明白为什么会这样...?!一切似乎都很好,期待这种非常奇怪的 lat/long.
交换
问题是您使用的开发环境和生产环境不同。
Django 3.0.3/3.0.6 不会产生问题(但最好使用 pip install django==3.0.* -U
升级到最新的补丁版本)。
但 GDAL 创建。在继续使用新版本之前,您至少需要阅读 GDAL migration guide。
3.0 与您似乎遇到的轴有不兼容的更改。
你可以试试方法,建议here:
import osgeo
# ... so something to create and SRS:
srs = SpatialReference()
if int(osgeo.__version__[0]) >= 3:
# GDAL 3 changes axis order: https://github.com/OSGeo/gdal/issues/1546
srs.SetAxisMappingStrategy(osgeo.osr.OAMS_TRADITIONAL_GIS_ORDER)
但是您的开发环境和生产环境必须始终匹配。
我正在使用 geodjango 并按如下方式加载 shapefile:
datasource = DataSource("/path/to/shape.shp")
for each in datasource[0]:
geo = each.geom
geo.transform(4326)
我在这里要做的是将几何图形转换为 4326,以便我可以将其记录在我的数据库中,该数据库使用此 SRID。然而,一件相当奇怪的事情发生了。当我 运行 在本地(使用 GDAL 2.4.0、Django 3.0.6)时,它工作得很好。这是一个转换后的多边形示例。
输入:
POLYGON ((141192.63413501 167690.231242441,141198.39365501 167695.515882441...
然后转化为:
POLYGON ((4.24376514198078 50.8195815928706,4.24384675060931 50.819629186136...
这很好用。然而,当这个 运行s 投入生产时(GDAL 3.0.4,Django 3.0.3),这会以一种非常奇怪的方式失败。没有错误消息,并且 transform() 函数完成了它的工作……但是它颠倒了纬度和经度!所以我的输出变成:
POLYGON ((50.8195818670687 4.24376485512428,50.8196294603646 4.24384646375124...
我不明白为什么会这样...?!一切似乎都很好,期待这种非常奇怪的 lat/long.
交换问题是您使用的开发环境和生产环境不同。
Django 3.0.3/3.0.6 不会产生问题(但最好使用 pip install django==3.0.* -U
升级到最新的补丁版本)。
但 GDAL 创建。在继续使用新版本之前,您至少需要阅读 GDAL migration guide。
3.0 与您似乎遇到的轴有不兼容的更改。
你可以试试方法,建议here:
import osgeo
# ... so something to create and SRS:
srs = SpatialReference()
if int(osgeo.__version__[0]) >= 3:
# GDAL 3 changes axis order: https://github.com/OSGeo/gdal/issues/1546
srs.SetAxisMappingStrategy(osgeo.osr.OAMS_TRADITIONAL_GIS_ORDER)
但是您的开发环境和生产环境必须始终匹配。