Val*_*l H 5 python transform gdal map-projections
使用 Python 2.7.9 和 GDAL 1.11.1,并使用 miniconda 进行包管理 --
执行此操作时,对坐标点进行简单的重新投影会导致下述错误。
我对 GDAL 比较陌生,所以我检查了Python GDAL/OGR 1.0 Cookbook中的代码是否 会产生相同的问题,结果确实如此:
from osgeo import ogr
from osgeo import osr
source = osr.SpatialReference()
source.ImportFromEPSG(2927)
target = osr.SpatialReference()
target.ImportFromEPSG(4326)
transform = osr.CoordinateTransformation(source, target)
point = ogr.CreateGeometryFromWkt("POINT (1120351.57 741921.42)")
point.Transform(transform)
print point.ExportToWkt()
Run Code Online (Sandbox Code Playgroud)
这是错误:
/opt/miniconda/envs/pygeo/lib/python2.7/site-packages/osgeo/ogr.pyc in Transform(self, *args)
4880 OGRERR_NONE on success or an error code.
4881 """
-> 4882 return _ogr.Geometry_Transform(self, *args)
4883
4884 def GetSpatialReference(self, *args):
TypeError: in method 'Geometry_Transform', argument 2 of type 'OSRCoordinateTransformationShadow *'
Run Code Online (Sandbox Code Playgroud)
CoordinateTransform 是 C++ OSRCooperativeTransformationShadow 类的代理,由 SWIG 生成。根据osgeo.ogr.Geometry(Point 是什么)的源代码,正确的类型被传递给 Transform 方法。
最佳猜测:这是否是由于使用太旧的 _ogr 版本引起的,因此 _ogr.Geometry_Transform(self, *args) 的实现期望有所不同?_ogr 是另一个 SWIG 生成的代理,我猜是 OGR 类?
每个刚接触 GDAL 的人都必须学习的内容:分配错误处理程序。(示例: http: //pcjericks.github.io/py-gdalogr-cookbook/gdal_general.html#install-gdal-ogr-error-handler)
分配错误处理程序后,输出包括错误的解释。在本例中,它是:“无法加载 PROJ.4 库 (libproj.so),创建 OGRCooperativeTransformation 失败。”
希望传授启用 GDAL 错误处理的知识能够帮助其他可能偶然发现这个问题的人。