我正在 ubuntu 22.04.3 LTS 中运行 Python 脚本 (Python 3.9.16)。我正在通过 Docker 执行此操作,尽管我已经在 Jupyter Notebook 中进行了双重检查,并且获得了相同的结果。 我想将边界框从纬度长坐标 (EPSG 4326) 转换为 EPSG 32630,但生成的坐标是错误的。我没有收到任何错误或警告。
from osgeo import ogr, osr, gdal
bbox=[-7.84831, 39.71484, -7.73302, 39.81967]
sourceSR = osr.SpatialReference()
sourceSR.ImportFromEPSG(4326) # WGS84 lat lon
targetSR = osr.SpatialReference()
targetSR.ImportFromEPSG(32630) # WGS84 / UTM zone 30N
coordTrans = osr.CoordinateTransformation(sourceSR, targetSR)
minX_lon, minY_lat, maxX_lon, maxY_lat = bbox
minX, minY, _ = coordTrans.TransformPoint(minX_lon, minY_lat)
maxX, maxY, _ = coordTrans.TransformPoint(maxX_lon, maxY_lat)
trans_bbox = [minX, minY, maxX, maxY]
print(trans_bbox)
生成的坐标是:[5696620.047694968、-1177782.6621069708、5714320.913186516、-1162605.0876848244],我期望的坐标是:[84341.6581044693、4407359.86 13803, 94846.54347402562, 4418472.2108658375].
我已经验证X坐标对应于经度,Y坐标对应于纬度。尽管如此,我仍然无法确定我可能缺少什么。任何见解或建议将不胜感激。谢谢!
我想出了解决方案!
在 GDAL 3.0 之前,轴顺序是先经度,后纬度。从使用“EPSG:4326”或“WGS84”字符串创建的 GDAL 3.0 CRS 开始,使用纬度第一、经度第二轴顺序
与
oSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER)
您可以设置正确的顺序。
我编辑了我的代码:
sourceSR = osr.SpatialReference()
sourceSR.ImportFromEPSG(4326) # WGS84 lat lon
sourceSR.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER)
targetSR.ImportFromEPSG(32630) # WGS84 / UTM zone 30N
coordTrans = osr.CoordinateTransformation(sourceSR, targetSR)
minX_lon, minY_lat, maxX_lon, maxY_lat = bbox
minX, minY, _ = coordTrans.TransformPoint(minX_lon, minY_lat)
maxX, maxY, _ = coordTrans.TransformPoint(maxX_lon, maxY_lat)
trans_bbox = [minX, minY, maxX, maxY]
print(trans_bbox)
得到的坐标符合预期。我希望这可以帮助别人!