python实现高分一号影像计算高程的函数
时间: 2023-12-06 21:04:55 浏览: 89
高分一号影像一般是指GF-1卫星拍摄的影像。要计算高程需要用到DEM数据,这里以读取GeoTiff格式的DEM文件为例,使用GDAL库实现。
以下是一个基于GDAL库的Python函数,实现对GF-1影像进行高程计算:
```python
import gdal
def calculate_elevation(gf1_image_path, dem_path):
"""
计算GF-1影像的高程,返回一个和GF-1影像分辨率一致的高程数组
:param gf1_image_path: GF-1影像路径
:param dem_path: DEM数据路径
:return: 高程数组
"""
# 读取GF-1影像数据
gf1_image = gdal.Open(gf1_image_path)
width = gf1_image.RasterXSize
height = gf1_image.RasterYSize
transform = gf1_image.GetGeoTransform()
projection = gf1_image.GetProjection()
gf1_band = gf1_image.GetRasterBand(1)
gf1_data = gf1_band.ReadAsArray(0, 0, width, height)
# 读取DEM数据
dem = gdal.Open(dem_path)
dem_band = dem.GetRasterBand(1)
dem_data = dem_band.ReadAsArray(0, 0, width, height)
# 计算高程
gf1_elevation = gf1_data - dem_data
# 输出高程数据
driver = gdal.GetDriverByName("GTiff")
output_path = gf1_image_path[:-4] + "_elevation.tif"
output_image = driver.Create(output_path, width, height, 1, gf1_band.DataType)
output_image.SetGeoTransform(transform)
output_image.SetProjection(projection)
output_image.GetRasterBand(1).WriteArray(gf1_elevation)
output_image.FlushCache()
return gf1_elevation
```
这个函数接受两个参数,`gf1_image_path`是GF-1影像的路径,`dem_path`是DEM数据的路径。函数首先使用GDAL库读取GF-1影像和DEM数据,并获取影像和DEM数据的宽度、高度、仿射变换参数和投影信息。然后,函数将GF-1影像和DEM数据作差,得到高程数据。最后,函数将高程数据保存为一个GeoTiff格式的文件,并返回高程数据。
需要注意的是,函数中的计算结果是一个和GF-1影像分辨率一致的高程数组,每个元素代表一个像素的高程值。如果需要得到高程值的物理单位,需要根据DEM数据的信息进行换算。
阅读全文