python 根据矢量数据裁剪栅格数据 代码
时间: 2023-05-26 20:01:58 浏览: 301
以下是Python根据矢量数据裁剪栅格数据的代码示例:
```python
# 导入需要的库
import gdal
import ogr
import osr
# 定义输入矢量数据路径和栅格数据路径
vector_path = 'path/to/vector.shp'
raster_path = 'path/to/raster.tif'
# 打开矢量数据文件并获取几何信息
vector_ds = ogr.Open(vector_path)
layer = vector_ds.GetLayer()
feature = layer.GetFeature(0)
geometry = feature.GetGeometryRef()
# 打开栅格数据文件并获取地理参考和变换信息
raster_ds = gdal.Open(raster_path)
geo_transform = raster_ds.GetGeoTransform()
proj = osr.SpatialReference()
proj.ImportFromWkt(raster_ds.GetProjection())
# 将矢量数据的几何信息转换为栅格数据坐标系下的坐标
minX, maxX, minY, maxY = layer.GetExtent()
ulX, ulY = gdal.ApplyGeoTransform(geo_transform, minX, maxY)
lrX, lrY = gdal.ApplyGeoTransform(geo_transform, maxX, minY)
# 计算裁剪后的栅格数据的大小和地理参考
x_pixels = int((lrX - ulX) / geo_transform[1])
y_pixels = int((lrY - ulY) / geo_transform[5])
clip_proj = raster_ds.GetProjection()
# 创建输出栅格数据文件
driver = gdal.GetDriverByName('GTiff')
clip_raster_path = 'path/to/clip_raster.tif'
clip_raster_ds = driver.Create(clip_raster_path, x_pixels, y_pixels, 1, gdal.GDT_Float32)
clip_raster_ds.SetGeoTransform((ulX, geo_transform[1], 0, ulY, 0, geo_transform[5]))
clip_raster_ds.SetProjection(clip_proj)
# 裁剪栅格数据
gdal.Warp(clip_raster_ds, raster_ds, cutlineDSName=vector_path, cropToCutline=True)
# 关闭文件
clip_raster_ds = None
raster_ds = None
vector_ds = None
```
请注意,此代码假定输入矢量数据为多边形,并且只裁剪了栅格数据的第一个波段。如果需要裁剪多个波段,则需要使用适当的循环来处理每个波段,并将结果保存到多波段栅格数据中。此外,代码还需要更多的错误检查和边缘情况的处理。
阅读全文