由gdal3.0更新引起的坐标转换的问题

6 篇文章 0 订阅
6 篇文章 0 订阅

gdal3X版本相比gdal2版本有一个重大的改变,即将空间参考SRS中的经纬度调换了顺序。gdal3.0之前的版本都是纬度第一、经度第二的顺序。从GDAL3.0之后改成了经度在前纬度在后的顺序。坐标轴完全相反了,高版本GDAL也没打算兼容低版本。这显然是没地说理去了。

此次更改虽然很小很小,但是对于开发者来讲影响是巨大的。不少人感慨此次变更简直就是反人类,很多人表示看不懂。如此巨大的改变,想让原来在gdal3.0之前版本上开发的系统(涉及到坐标转换的程序)无缝的迁移至gdal3.0是根本不可能的。如果有人甚至不知道这次更新内容,那大概率要花时间研究gdal的报错问题了,以及如何改代码以兼容gdal3了(很神奇的逆向兼容)。根据官方的说法,此次更新是为了纠正gdal一直以来忽略的错误,这一次呢我只是改过自新而已,并不是要跟大家过不去。无论如何,请大家一定要及时闭坑。GDAL有风险,升级需谨慎。瞎特么改,也不提前通知一声。

瞅瞅国外也不少人吐槽:

GDAL 3.0 Coordinate transformation (backwards compatibility (?)) · Issue #1546 · OSGeo/gdal · GitHub



A bug calculating landsat angles · Issue #28 · ubarsc/python-fmask · GitHub

 

 以下是官方的说法:

空间参考系统C++ API — GDAL 文档

在GDAL 3.0之前 OGRSpatialReference 类不遵守由定义CRS的机构强制的轴顺序,因此当顺序是纬度第一、经度第二时,从WKT字符串中剥离轴顺序信息。使用ogrcoordinateransformation类的坐标转换还假定该类的Transform()方法传递或返回的地理坐标使用经度、纬度顺序。

从GDAL 3.0开始,由定义CRS的权威授权的axis命令默认由OGRCoordinateTransformation类执行,并始终在WKT1中导出。因此,使用“EPSG:4326”或“WGS84”字符串创建的CRS使用纬度第一、经度第二轴顺序。

为了帮助从仍然使用经度、纬度顺序坐标的代码基迁移,可以将元数据信息附加到OGRSpatialReference实例,以指定为了进行坐标转换,有效传递或返回的值的顺序将是经度、纬度。为此,必须调用以下命令

oSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER);

传给 OGRSpatialReference::SetAxisMappingStrategy() 是数据轴到CRS轴的映射策略。

  • OAMS_TRADITIONAL_GIS_ORDER 也就是说,对于lat/long顺序的地理CRS,数据仍然是long/lat顺序的。类似地,对于具有北距/东距顺序的投影CRS,数据仍将是东距/北距顺序的。
  • OAMS_AUTHORITY_COMPLIANT means that the data axis will be identical to the CRS axis. This is the default value when instantiating OGRSpatialReference.
  • OAMS_CUSTOM means that the data axes are customly defined with SetDataAxisToSRSAxisMapping().

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值