当前位置:   article > 正文

python利用shp面对tif进行批量裁剪(掩膜)_python批量裁剪利用shp文件裁剪tif栅格影像数据

python批量裁剪利用shp文件裁剪tif栅格影像数据

文章目录


前言

不知道各位在日常处理遥感影像时,是否会遇到这种情况:就是假设有一个shp文件,里面有很多面,需要基于这些面对tif分别进行裁剪。这种裁剪其实arcgis也可以,但是就比较麻烦,于是乎我想到了利用python代码直接批量裁剪,请看下文。


一、基于那些库?

主要利用的库有geopandasrasterioos

1.geopandas主要用于处理地理空间数据。提供了一个GeoDataFrame对象,它是pandas的DataFrame对象的扩展,能够存储和操作地理空间数据。

2.rasterio用于读取、写入和处理栅格数据集。它建立在GDAL(Geospatial Data Abstraction Library)之上,提供了一种简单而高效的方式来处理遥感和地理信息系统数据。

3.os不做介绍,懂得都懂。

二、使用步骤

1.引入库

代码如下:

  1. import os
  2. import geopandas as gpd
  3. import rasterio
  4. from rasterio.mask import mask
  5. from rasterio.crs import CRS

2.定义裁剪函数

代码如下:

  1. def clip_raster_by_shp(raster_path, shp_path, output_folder):
  2. # 读取shp文件
  3. gdf = gpd.read_file(shp_path)
  4. # 读取栅格数据
  5. with rasterio.open(raster_path) as src:
  6. # 获取栅格数据的元数据
  7. src_meta = src.meta
  8. if src.crs:
  9. gdf_crs = CRS.from_user_input(gdf.crs) if gdf.crs else None
  10. src_crs = CRS.from_user_input(src.crs) if src.crs else None
  11. if gdf_crs != src_crs:
  12. gdf_projected = gdf.to_crs(src.crs)
  13. else:
  14. gdf_projected = gdf
  15. else:
  16. gdf_projected = gdf
  17. # 遍历shp文件中的每个区域
  18. for index, row in gdf_projected.iterrows():
  19. # 获取当前区域的几何形状
  20. geometry_projected = row['geometry']
  21. # 使用区域的几何形状裁剪栅格数据
  22. out_image, out_transform = mask(src, [geometry_projected], crop=True)
  23. # 更新元数据
  24. out_meta = src_meta.copy()
  25. out_meta.update({
  26. "driver": "GTiff",
  27. "height": out_image.shape[1],
  28. "width": out_image.shape[2],
  29. "transform": out_transform
  30. })
  31. # 保存裁剪后的栅格数据
  32. out_filename = os.path.join(output_folder, f"clip_{index}.tif")
  33. with rasterio.open(out_filename, "w", **out_meta) as dest:
  34. dest.write(out_image)

3.引用函数裁剪

代码如下:

  1. raster_path =r'demo.tif' # 设置需要裁剪的tif路径
  2. shp_path = r'fanwei.shp' # 设置shp路径
  3. output_folder = r'cut_result' # 设置结果保存路径
  4. # 调用函数实现裁剪
  5. clip_raster_by_shp(raster_path, shp_path, output_folder)

总结

本文利用python实现了 基于shp中的每个单独面批量对tif进行裁剪功能的开发,代码简洁、易懂,有需要的话拿去参考。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/632497
推荐阅读
相关标签
  

闽ICP备14008679号