gdal从TerraSAR-X Tiff读取的地理转换不正确

时间:2017-06-14 18:02:33

标签: python gdal geotiff

我正在使用python的gdal模块来分析卫星图像 - RADARSAT-2和TerraSAR-X - 保存为.tif文件。我需要在从shapefile读取的坐标处获取像素值。虽然代码适用于RS2图像,但我在使用TSX图像时遇到了问题。

对于TSX产品,gdal读取的地理转换是关闭的,这会产生图像上shapefile要素位置的负像素索引。同一段代码适用于RS2产品。

知道发生了什么以及如何解决这个问题?

来自RS2产品的正确地理转换示例:

(-74.98992283355103, 7.186522272956171e-05, 0.0, 62.273587708987776, 0.0, -7.186522272956171e-05)

我为TSX产品获得的地理变换示例:

(506998.75, 2.5, 0.0, 6919001.25, 0.0, -2.5)

代码段:

import gdal

gdal.UseExceptions()

# Read image, band, geotransform
dataset = gdal.Open(paths['TSXtiff'])
band = dataset.GetRasterBand(band_index)        
gt = dataset.GetGeoTransform()

# Read shapefile
shapefile = ogr.Open(paths["Shapefile"])    
layer = shapefile.GetLayer()

# Add pixel_value for each feature to associated list
pixels_at_shp = []
for feature in layer :

    geometry = feature.GetGeometryRef()             

    # Coordinates in map units
    # In GDAL, mx = px*gt[1] + gt[0], my = py*gt[5] + gt[3]
    mx,my = geometry.GetX(), geometry.GetY()

    # Convert to pixel coordinates
    px = int((mx-gt[0])/gt[1])
    py = int((my-gt[3])/gt[5])

    band_values = band.ReadAsArray(px,py,1,1)

    pixels_at_shp.append(band_values)

shapefile = None

return pixels_at_shp

1 个答案:

答案 0 :(得分:0)

预测TSX产品,而RS2产品只是地理配准。解决方案:通过将GeoTIFF文件重新投影到WGS84上,返回纬度/长度坐标。

我使用gdal命令行工具进行重投影,如下所示:

for f in *.tif
do 
    gdalwarp "$f" "${f%%.*}_reproj.tif" -t_srs "+proj=longlat +ellps=WGS84"
done