我有(纬度,经度)坐标来描述 .geotiff 图像中一个点的位置。
我希望找到图像内经纬度的等效像素坐标。
我通过以下指令从命令行使用 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
由于我需要以 pythonic 方式检索像素,因此我尝试使用子进程调用命令,例如:
# 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)
但它不起作用。也许是因为命令本身的行为方式,比如实际上并没有返回结果并结束自己,而是显示结果并保持忙碌。