求取SHP文件的最小外接矩形并裁剪图像

目的:

  1. 求取shp文件中每一个形状的最小外接矩形。
  2. 根据每一个形状的最小外接矩形裁剪图像。

已知数据:

  1. 一个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文件的最小外接矩形并裁剪图像

求取SHP文件的最小外接矩形并裁剪图像

此时可以在保存路径下面看到保存的shp文件了。

求取SHP文件的最小外接矩形并裁剪图像

二、根据shp文件的每一个形状裁剪图像

这里使用ARCGIS自带的python进行二次开发。

打开pycharm,新建工程,将工程的python解释器设置为ARCGIS自带的python

求取SHP文件的最小外接矩形并裁剪图像

此外,为了处理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处理成可以直接打开的图像文件。

求取SHP文件的最小外接矩形并裁剪图像

 

上一篇:ArcGIS Runtime SDK for Android 加载shp数据,中文乱码问题


下一篇:java实例_多态 [长方形类Rect长方体类Cub添加抽象类 Shape]