Python遥感开发之批量掩膜和裁剪 | 您所在的位置:网站首页 › Python批量裁剪tiff › Python遥感开发之批量掩膜和裁剪 |
Python遥感开发之批量掩膜和裁剪
1.使用arcpy进行批量掩膜1.1 批量掩膜代码1.2 单个掩膜代码
2.使用GDAL进行批量掩膜3.使用rasterio进行批量裁剪
前言:主要介绍了使用arcpy、gdal、rasterio对遥感影像进行批量掩膜和裁剪。 1.使用arcpy进行批量掩膜注意:arcpy是基于python2.7版本的,也就是arcgis里面自带的,使用的时候添加arcgis的python2.7,即可使用arcpy。 环境如图所示: 注意:GDAL是基于Python3.x系列的,需要自己安装GDAL,使用的时候arcpy使用的时候一定要区分开。 from osgeo import gdal import os import glob def mask_gdal(inMaskData,filepath,outfile): """ GDAL掩膜提取 :param inMaskData: 圈选范围的路径 shp文件可以换成tif文件 :param filepath: 要掩膜的tif文件 :param outfile: 掩膜好的tif文件 :return: """ dataset = gdal.Open(filepath) # 打开遥感影像 gdal.Warp(outfile, dataset, cutlineDSName=inMaskData, cropToCutline=True) # 按掩膜提取 print(filepath + '-----掩膜成功') if __name__ == '__main__': filepath = r"D:\0000Desktop\AAAAAwork\研究方向\data\河南NDVI" # 要裁剪的tif文件所在的文件夹 outfile = r"D:\0000Desktop\AAAAAwork\研究方向\data\鹿邑NDVI" inMaskData = r"D:\0000Desktop\AAAAAwork\研究方向\矢量图\鹿邑县\luyixian.shp" # 圈选范围的路径 shp文件可以换成tif文件 os.chdir(filepath) names = glob.glob("*.tif") # 读取文件 for name in names: out = outfile + "\\" + name.split(".")[0] + ".tif" # 按照圈选范围提取出的影像所存放的路径 mask_gdal(inMaskData,name,out)注意:rasterio也是基于python3.x系列的,需要自己安装rasterio包 import os import glob import rasterio as rio import rasterio.mask import numpy as np from geopandas import GeoDataFrame def clip_raster(inMaskData,filepath,outfile): """ raster裁剪提取 :param inMaskData:圈选范围的路径 shp文件可以换成tif文件 :param filepath:要裁剪的tif文件 :param outfile:裁剪好的tif文件 :return: """ #shp转geojson shpdata = GeoDataFrame.from_file(inMaskData) geo = shpdata.geometry[0] feature = [geo.__geo_interface__] #裁剪 src = rio.open(filepath) out_image, out_transform = rio.mask.mask(src, feature, crop=True, nodata=np.nan) out_meta = src.meta.copy() out_meta.update({"driver": "GTiff","height": out_image.shape[1],"width": out_image.shape[2],"transform": out_transform}) band_mask = rasterio.open(outfile, "w", **out_meta) band_mask.write(out_image) print(filepath + '-----裁剪成功') if __name__ == '__main__': filepath = r"D:\0000Desktop\AAAAAwork\研究方向\data\河南NDVI" # 要裁剪的tif文件所在的文件夹 outfile = r"D:\0000Desktop\AAAAAwork\研究方向\data\鹿邑NDVI" inMaskData = r"D:\0000Desktop\AAAAAwork\研究方向\矢量图\鹿邑县\luyixian.shp" # 圈选范围的路径 shp文件可以换成tif文件 os.chdir(filepath) names = glob.glob("*.tif") # 读取文件 for name in names: out = outfile + "\\" + name.split(".")[0] + ".tif" # 按照圈选范围提取出的影像所存放的路径 clip_raster(inMaskData,name,out) |
CopyRight 2018-2019 实验室设备网 版权所有 |