我正在尝试使用 gdal_grid 从 geojson 中的表面创建高程网格。我使用这个命令:
gdal_grid -a linear:radius=0 inputSurface.geojson outputFile.tif
它似乎给出了正确的像素值,但如果我在 Global Mapper 或 QGIS 中打开结果,图像会在水平轴上翻转/镜像,这样 tif 就直接位于表面下方并且上下颠倒。 这是什么原因以及如何解决它?
更新
我已经尝试更改地理变换,但它并没有完全解决我的问题。
我在gdalinfo中查看了生成的图像,发现左上角实际上是左下角,所以我使用SetGeoTransform进行设置。这将其移动到正确的位置,但它仍然是颠倒的。 (这可能取决于投影,这可能会在以后引起问题)
我还尝试查看地理变换中的像素宽度,如下所述:
Xgeo = GT[0] + Xpixel*GT[1] + Yline*GT[2]
Ygeo = GT[3] + Xpixel*GT[4] + Yline*GT[5]
gdal_grid 返回的图像具有正 GT[5],但不幸的是,将其更改为 -GT[5] 不会改变任何内容。
我用来更改地理变换的代码:
transform = list(ds.GetGeoTransform())
transform = [upperLeftX, transform[1], 0, upperLeftY, 0, -transform[5]]
ds.SetGeoTransform(transform)
最佳答案
GDAL 的地理配准通常由两组参数指定。第一个是空间引用,它定义坐标系(UTM、WGS,更本地化的东西)。栅格的空间引用是使用 gdal.Dataset.setProjection() 设置的。地理配准的第二部分是 GeoTransform,它将(行、列)像素索引转换为坐标系中的坐标。您可能需要更新地理变换才能使图像“不翻转”。
GeoTransform 是一个包含 6 个值的元组,它将栅格索引与坐标相关联。
Xgeo = GT[0] + Xpixel*GT[1] + Yline*GT[2]
Ygeo = GT[3] + Xpixel*GT[4] + Yline*GT[5]
因为这些是光栅图像,所以(行,像素)或(行,列)坐标从图像的左上角开始。
[ ]----> column
|
|
v row
这意味着当图像在坐标系中“直立”定位时,GT[1]
将为正值。同样,有时与直觉相反,GT[5]
将为负数,因为图像中每增加一行,y 值就会减小。这不是必需的,但很常见。
修改地理变换
您声明图像是上下颠倒的并且低于应有的位置。这并不能保证一定能解决问题,但它可以帮助您入门。如果您面前有图像并且可以试验或比较坐标,那就更容易了...
import gdal
# open dataset as readable/writable
ds = gdal.Open('input.tif', gdal.GA_Update)
# get the GeoTransform as a tuple
gt = gdal.GetGeoTransform()
# change gt[5] to be it's negative, flipping the image
gt_new = (gt[0], gt[1], gt[2], gt[3], gt[4], -1 * gt[5])
# set the new GeoTransform, effectively flipping the image
ds.SetGeoTransform(gt_new)
# delete the dataset reference, flushing the cache of changes
del ds
关于python - 为什么 gdal_grid 会使图像上下颠倒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40464969/