GeoTIFF 软件生成
GeoTIFF software generation
我有一些关于一组点高度的数据(例如,来自 Google 高程 API)。有一项任务是将这些数据保存为 GeoTIFF 格式,然后在 osgEarth (GDAL) 中使用。如何才能做到这一点?什么语言都无所谓。
网上一搜只给了我反题的答案(How do I open geotiff images with gdal in python?)
如有任何帮助,我将不胜感激。
所以我会用来自 python 的 GDAL 来做这个(你也可以使用 rasterio 这是 gdal 的一个很好的包装器用于文件光栅文件处理)
你应该把你的数据放在一个 numpy 数组中,我们称之为 some_nparray
。
然后创建 tif 数据集gtiffDriver.Create()
。您可以在此处提供文件名称、图像的列数和行数、波段数(此处为 1)和数据类型。这里我说的是 float32,但是 byte、int16 等也可以工作,具体取决于您的数据(您可以使用 heigh_data_array.dtype 进行检查)
接下来你应该设置geotransform,这是关于角坐标和像素分辨率的信息,你应该设置你正在使用的投影。这是通过 dataset.SetGeoTransform
和 dataset.SetProjection
完成的。我认为这些是如何创建的不在这个问题的范围内。如果你不需要它,我想你甚至可以跳过那部分。
最后用 WriteArray
将数组写入文件并关闭文件。
您的代码应如下所示。这里我使用的约定是前缀为some_的变量应该由你提供。
from osgeo import gdal
height_data_array = some_nparray
gtiffDriver = gdal.GetDriverByName('GTiff')
dataset = gtiffDriver.Create('result.tif',
height_data_array.shape[1],
height_data_array.shape[0],
1,
gdal.GDT_Float32)
dataset.SetGeoTransform(some_geotrans)
dataset.SetProjection(some_projection)
dataset.GetRasterBand(1).WriteArray(height_data_array)
dataset = None
我有一些关于一组点高度的数据(例如,来自 Google 高程 API)。有一项任务是将这些数据保存为 GeoTIFF 格式,然后在 osgEarth (GDAL) 中使用。如何才能做到这一点?什么语言都无所谓。
网上一搜只给了我反题的答案(How do I open geotiff images with gdal in python?)
如有任何帮助,我将不胜感激。
所以我会用来自 python 的 GDAL 来做这个(你也可以使用 rasterio 这是 gdal 的一个很好的包装器用于文件光栅文件处理)
你应该把你的数据放在一个 numpy 数组中,我们称之为 some_nparray
。
然后创建 tif 数据集gtiffDriver.Create()
。您可以在此处提供文件名称、图像的列数和行数、波段数(此处为 1)和数据类型。这里我说的是 float32,但是 byte、int16 等也可以工作,具体取决于您的数据(您可以使用 heigh_data_array.dtype 进行检查)
接下来你应该设置geotransform,这是关于角坐标和像素分辨率的信息,你应该设置你正在使用的投影。这是通过 dataset.SetGeoTransform
和 dataset.SetProjection
完成的。我认为这些是如何创建的不在这个问题的范围内。如果你不需要它,我想你甚至可以跳过那部分。
最后用 WriteArray
将数组写入文件并关闭文件。
您的代码应如下所示。这里我使用的约定是前缀为some_的变量应该由你提供。
from osgeo import gdal
height_data_array = some_nparray
gtiffDriver = gdal.GetDriverByName('GTiff')
dataset = gtiffDriver.Create('result.tif',
height_data_array.shape[1],
height_data_array.shape[0],
1,
gdal.GDT_Float32)
dataset.SetGeoTransform(some_geotrans)
dataset.SetProjection(some_projection)
dataset.GetRasterBand(1).WriteArray(height_data_array)
dataset = None