首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geodjango: transform() Geodjango/long不正确

Geodjango: transform() Geodjango/long不正确
EN

Stack Overflow用户
提问于 2020-10-01 07:25:03
回答 1查看 662关注 0票数 2

我使用geodjango并加载一个shapefile,如下所示:

代码语言:javascript
复制
datasource = DataSource("/path/to/shape.shp")
for each in datasource[0]:
    geo = each.geom    
    geo.transform(4326)

我在这里要做的是将一个几何图形转换成4326,这样我就可以将它记录在我的数据库中,它使用这个SRID。然而,一件相当奇怪的事情发生了。当我在本地运行这个程序(使用GDAL2.4.0,Django 3.0.6)时,它工作得非常好。这里是一个被转换的多边形的例子。

输入:

多边形(141192.63413501 167690.231242441 141198.39365501 167695.515882441)

然后将其转化为:

多边形(4.24376514198078 50.8195815928706 4.24384675060931 50.819629186136)

这个效果很好。但是,当这在生产中运行时(GDAL 3.0.4,Django 3.0.3),这会以一种非常奇怪的方式失败。没有错误消息,transform()函数做它的事情..。但它颠倒了纬度和经度!所以我的输出变成:

多边形(50.8195818670687 4.24376485512428,50.8196294603646,4.24384646375124)

我搞不懂为什么会发生这种事?!这一切似乎都很好,期待这非常奇怪的交换拉特/长。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-03 23:32:28

问题在于您正在使用不同的环境进行开发和生产。

Django 3.0.3/3.0.6没有造成问题(但是最好用pip install django==3.0.* -U升级到最新的补丁版本)。

但是GDAL创造了。在进入新版本之前,您至少需要阅读GDAL迁移指南

3.0与您似乎遇到的axis不兼容的更改。

您可以尝试方法,即建议的这里

代码语言:javascript
复制
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)

但是您的开发和生产环境必须始终匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64150791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档