一、前言
搞地图和自动驾驶的都知道,坐标转换是非常频繁的事情,有时候需要在各种坐标之间来回的转换,最近使用python代码处理地图数据,在使用osgeo库中的gdal时,发现了gdal v2和V3的一些不同之处,研究了一下,这里分享出来。
二、问题描述
经纬度转高斯的过程中,发现3.0一直出现的转换结果是’inf’,经过查看官方github上的issue,才知道,gdal V3.0以后,转换需要设置转换策略,具体看后面代码中的说明,现象截图如下:
三、解决后封装的代码
下面代码使用osgeo库和pyproj库分别实现,底层调用都是gdal,代码经过测试。
#!/usr/bin/python3
__author__ = 'ISmileLi'
from osgeo import gdal, ogr, osr
from pyproj import Transformer
'''
osgeo底层坐标转换使用的库还是proj,下面函数中的espg值需要根据自己的需求进行修改,
下文测试使用的是wgs84与中国区高斯-克吕格EPSG码为21460区的转换
'''
def lonLat_to_gauss(lon, lat, from_epsg=4326, to_epsg=21460):
'''
经纬度转高斯
:param lon:
:param lat:
:param from_epsg:
:param to_EPSG:
:return:
'''
from_spa = osr.SpatialReference()
'''
gdal版本大于3.0以后必须设置转换策略才能正确显示结果,否则结果将会输出'inf'
可以了解官方的这个issue说明:https://github.com/OSGeo/gdal/issues/1546
'''
if int(gdal.__version__[0