【发布时间】:2019-10-30 10:26:18
【问题描述】:
我有描述 .geotiff 图像中点位置的 (lat,long) 坐标。
我希望找到图像内经纬度的等效像素坐标。
我通过以下指令从命令行使用 gdaltransform 成功:
gdaltransform -i -t_srs epsg:4326 /path/imagename.tiff
-17.4380493164062 14.6951949085676
但我想从 python 代码中检索这种类型的等价物。我尝试了以下方法:
from osgeo import osr
source = osr.SpatialReference()
source.ImportFromUrl(path + TIFFFilename)
target = osr.SpatialReference()
target.ImportFromEPSG(4326)
transform = osr.CoordinateTransformation(target,source )
point_xy = np.array(transform.TransformPoint(-17.4380493164062,14.6951949085676))
但它返回此错误:
NotImplementedError: Wrong number or type of arguments for overloaded function 'CoordinateTransformation_TransformPoint'.
Possible C/C++ prototypes are:
OSRCoordinateTransformationShadow::TransformPoint(double [3])
OSRCoordinateTransformationShadow::TransformPoint(double [3],double,double,double)
我做错了什么?我试图解决这个错误,但没有任何成功。还有其他方法吗?
编辑 1:
我通过终端中的 gdaltransform 命令实现了一次转换:
gdaltransform -i -t_srs epsg:4326 /path/image.tiff
-17.4380493164062 14.6951949085676
由于我需要以 Python 方式检索像素,因此我尝试使用子进程调用命令,例如:
# TRY 1:
subprocess.run(['gdaltransform','-i',' -t_srs','epsg:4326','/pat/img.tiff\n'], stdout=subprocess.PIPE)
# TRY 2 :
cmd = '''gdaltransform -i -t_srs epsg:4326 /home/henri/Work/imdex_visio/AllInt/Dakar_X118374-118393_Y120252-120271_PHR1A_2016-03-10T11_45_39.781Z_Z18_3857.tiff
-17.4380493164062 14.6951949085676'''
subprocess.Popen(cmd,stdout=subprocess.PIPE, shell=True)
但它不起作用。可能是因为命令本身的行为方式,比如实际上并没有返回结果并结束自身,而是显示结果并保持忙碌。
【问题讨论】:
-
您是否尝试过仅解析 TransformPoint 的第三个参数?喜欢
transform.TransformPoint(-17.4380493164062, 14.6951949085676, 0) -
你能检查GDAL版本吗?可能是在较旧的 python 绑定实现中,该方法具有不同的签名。
-
@cosmarc 这是我的版本:
$ ogrinfo --version GDAL 2.4.2, released 2019/06/28 -
@the_cheff 我已经尝试过了,只是再次确认,但它返回了同样的错误:
--------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-25-03ed6623ff12> in <module> ----> 1 transform.TransformPoint(-17.4380493164062, 14.6951949085676, 0) Wrong number or type of arguments for overloaded function 'CoordinateTransformation_TransformPoint