任务描述:有一张全国的DEM图以及一个流域的边界文件,想要从全国DEM图中裁出一个包含该流域的矩形区域,以便将流域以外的邻近区域也考虑进来
# -*- coding: utf-8 -*-
""" 这篇代码是用于提取比目标流域大一点(包含目标流域)的矩形区域 """import sys
import os
import shapefile
import arcpy
from arcpy import env #导入 env 类(env 类包含所有地理处理环境)
from arcpy.sa import * #arcpy.sa 即Spatial Analyst 模块,管理模块和分析模块都将被导入为 *arcpy.CheckOutExtension("spatial") #仅在使用浮动版许可的情况下需要 CheckOutExtension
arcpy.gp.overwriteOutput=1sf = shapefile.Reader("F:\\Data of Flash Flood\\PRE_interpolation_test\\5876_China_62505400_Boundary_Line.shp") #读取流域边界文件的信息
print(sf.bbox) #输出此时流域边界的经纬度范围,该顺序是 西 南 东 北
sf.bbox[0] = sf.bbox[0]-1 #向西方向扩展1°(具体扩展多少可根据需要决定)
sf.bbox[1] = sf.bbox[1]-1 #向南方向扩展1°(具体扩展多少可根据需要决定)
sf.bbox[2] = sf.bbox[2]+1 #向东方向扩展1°(具体扩展多少可根据需要决定)
sf.bbox[3] = sf.bbox[3]+1 #向北方向扩展1°(具体扩展多少可根据需要决定)
print(sf.bbox) #输出扩展后的边界范围,并根据此范围进行裁减in_raster = 'F:\\Data of Flash Flood\\PRE_interpolation_test\\China_filled_Resample.tif' #这是个DEM数据,只要是raster格式的就行
rectExtract = ExtractByRectangle(in_raster, Extent(sf.bbox[0],sf.bbox[1],sf.bbox[2],sf.bbox[3]), "inside")
rectExtract.save("F:\\Data of Flash Flood\\PRE_interpolation_test\\test_1111")
结果图如下:
黑白色为该流域的DEM,金黄色的则是流域以外1°的区域
如果提示没有shapefile模块,请看:
Sublime 如何手动添加python库(以shapefile.py为例)
参考文献:
导入 ArcPy
按矩形提取