GDAL重新投影错误:在方法'Geometry_Transform'中,类型'OSRCoordinateTransformationShadow *'的参数2

问题描述 投票:3回答:2

将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()

这是错误:

/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 *'

CoordinateTransform是SWIG生成的C ++ OSRCoordinateTransformationShadow类的代理。根据source code for osgeo.ogr.Geometry(点是什么),将正确的类型传递给了Transform方法。

[最佳猜测:这可能是由于使用的_ogr版本太旧而导致的,因此_ogr.Geometry_Transform(self,* args)的实现预期会有所不同吗?_ogr是另一个由SWIG生成的代理,我猜是OGR类吗?

python transform gdal map-projections
2个回答
3
投票

GDAL新手必须学习的知识:分配一个错误处理程序。 (例如:http://pcjericks.github.io/py-gdalogr-cookbook/gdal_general.html#install-gdal-ogr-error-handler

分配了错误处理程序后,输出将包含错误说明。在这种情况下,它是:“无法加载PROJ.4库(libproj.so),OGRCoordinateTransformation的创建失败。”

希望,提供启用GDAL错误处理的知识将帮助可能偶然发现此问题的其他人。


0
投票

可以在on a rasterio FAQunable to load "gcs.csv" file in gdal中找到相似的信息。

我在Anaconda3 QGIS环境中运行GDAL转换时遇到了这个问题。这里的问题是坐标系统信息没有通过GDAL_DATA环境变量加载。要解决此问题,请找到系统中存在的目录gcs.csv(可能在... / Library / share / gdal中)。在导入GDAL和任何依赖项之前,请将其添加到您的环境中。

import os
os.environ['GDAL_DATA'] = r'/path/to/dir/'
© www.soinside.com 2019 - 2024. All rights reserved.