PYTHON 由shp文件裁剪tif文件,其中shp文件中是由多个数据组成
时间: 2024-04-29 20:25:50 浏览: 141
,每个数据都是一个单独的多边形或多个多边形组成的区域。裁剪tif文件可以使用gdal库中的gdalwarp函数。
以下是一个示例代码:
``` python
import os
from osgeo import gdal, ogr
# 设置输入和输出文件路径
tif_file = "path/to/input.tif"
shp_file = "path/to/input.shp"
output_file = "path/to/output.tif"
# 打开输入的tif文件和shp文件
tif_ds = gdal.Open(tif_file)
shp_ds = ogr.Open(shp_file)
shp_layer = shp_ds.GetLayer()
# 获取shp文件的空间参考
shp_srs = shp_layer.GetSpatialRef()
# 创建输出tif文件
driver = gdal.GetDriverByName("GTiff")
output_ds = driver.Create(output_file, tif_ds.RasterXSize, tif_ds.RasterYSize, tif_ds.RasterCount, tif_ds.GetRasterBand(1).DataType)
# 设置输出tif文件的空间参考
output_ds.SetProjection(tif_ds.GetProjection())
output_ds.SetGeoTransform(tif_ds.GetGeoTransform())
# 对每个多边形进行裁剪
for feature in shp_layer:
geom = feature.GetGeometryRef()
# 将shp文件的空间参考转换为tif文件的空间参考
geom.TransformTo(shp_srs.CloneGeogCS())
# 获取多边形的范围
xmin, xmax, ymin, ymax = geom.GetEnvelope()
# 计算多边形的范围在tif文件中的像素坐标
ulx, uly = map(int, gdal.ApplyGeoTransform(tif_ds.GetGeoTransform(), xmin, ymax))
lrx, lry = map(int, gdal.ApplyGeoTransform(tif_ds.GetGeoTransform(), xmax, ymin))
# 裁剪tif文件
gdal.Warp(output_ds, tif_ds, srcWin=[ulx, uly, lrx - ulx, lry - uly], dstNodata=-9999)
# 关闭文件
tif_ds = None
shp_ds = None
output_ds = None
```
注:该代码仅适用于裁剪单波段tif文件。如果需要裁剪多波段tif文件,请稍做修改。
阅读全文