目的:
- 求取shp文件中每一个形状的最小外接矩形。
- 根据每一个形状的最小外接矩形裁剪图像。
已知数据:
- 一个shp文件,包含若干个形状。
2.shp文件对应的影像。
工具
ARCGIS10.4
python2.7(ARCGIS自带)
步骤
一、求取shp文件中各个形状的最小外接矩形
首先打开ArcMAP的工具箱,依次点击Data Management tools——Features——Minimum Bounding Geometry。该工具使用方法和参数含义详见https://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/minimum-bounding-geometry.htm
使用该工具之后即可求得各个形状的最小外接矩形
将求得的最小外接矩形按照下面的步骤保存为shp文件。
此时可以在保存路径下面看到保存的shp文件了。
二、根据shp文件的每一个形状裁剪图像
这里使用ARCGIS自带的python进行二次开发。
打开pycharm,新建工程,将工程的python解释器设置为ARCGIS自带的python
此外,为了处理shp文件,还需安装pyshape包。此外由于pyshape对中文的支持不好,当文件路径里有中文的时候可能会出现错误。
具体处理代码如下
# -*- coding: utf-8 -*-
import os
import shutil
import arcpy
import shapefile
arcpy.env.workspace = r'F:\桌面\csdn\csdn.gdb' # arcgis地理数据库目录
shp_path = 'G:\\test\\Export_Output_2.shp' # shp文件的路径, shapefile不支持中文路径
raster = 'F:\\桌面\\csdn\\multi\\img.tif' # 图像路径
out_dir = "G:/test/clip/" # 裁剪后图像保存路径
if os.path.exists(out_dir):
shutil.rmtree(out_dir)
os.mkdir(out_dir)
sf = shapefile.Reader(shp_path) # 读取shp文件
shapes = sf.shapes()
for i in range(len(shapes)):
shp = shapes[i] # 获取shp文件中的每一个形状
out_path = os.path.join(out_dir, str(i) + '.tif')
point = shp.points # 获取每一个最小外接矩形的四个点
x_list = [ii[0] for ii in point]
y_list = [ii[1] for ii in point]
x_min = min(x_list)
y_min = min(y_list)
x_max = max(x_list)
y_max = max(y_list)
cor = str(x_min) + ' ' + str(y_min) + ' ' + str(x_max) + ' ' + str(y_max)
arcpy.Clip_management(raster, cor, out_path, "#", "#", None) # 调用工具箱函数
print i
运行结果如下,此时的图像不能直接打开,但是可以用ARCGIS打开,或者用opencv处理成可以直接打开的图像文件。