九溪

溪水润知林,滴露启慧心

用户工具

站点工具


wiki:gis:arcpy-batch-clip-shp

这是本文档旧的修订版!


批量处理裁剪矢量数据

需求

本示例要解决什么问题?

有河北省东北部矢量数据,包含53个图层,例如城市名、立交桥、功率、水系、县乡道等,需要将北戴河行政区划内所有的相关图层数据都提取出来,生成53个新的图层,文件名称保持一致,只包含北戴河数据。

待处理shp

思路

ArcGIS 可以通过 ArcToolbox - Analysis Tools - Extract - Clip 实现对矢量数据的裁剪功能。但是只能一次只能处理生成一个文件。

ArcGIS-Clip

但该功能显然不适用于本示例,每次只能处理一个,要累死人。

使用 ArcPy (Python in ArcGIS) 编写脚本,即可批处理运行。

ArcPy入口

  1. 【开始菜单】-【ArcGIS】-【Python (command line)】
  2. C:\Python27\ArcGIS10.2\python.exe (与实际安装路径相关)

ArcPy官方

创建北戴河图层

单独编辑县界图层,只保留北戴河,保存为 北戴河.shp

具体方法就不说了。

创建 ArcPy 脚本

ArcPy 进行Clip处理,主要代码如下

arcpy.Clip_analysis("公路面.shp","北戴河.shp","C:/home/00-library/download/SHP_OUTPUT/公路面.shp")

本次使用python遍历工程文件夹,将所有shp进行clip处理,所需代码如下

clippatch.py.txt
#conding=utf8  
 
import sys
reload(sys)
sys.setdefaultencoding('utf8')
 
import os 
 
import arcpy
 
from arcpy import env
 
path_out="C:/home/00-library/download/SHP_for"
path_in="C:/home/00-library/download/SHP"
path_clipfile="北戴河.shp"
 
env.workspace = path_in
g = os.walk(path_in) 
num=0
for path,dir_list,file_list in g:  
    for file_name in file_list:  
        if os.path.splitext(file_name)[-1]=='.shp' and file_name!=path_clipfile:
            num=num+1
            shpfileto=path_out+“/”+file_name
            print 'Clipping', file_name
            try:   
                #print 'test', shpfileto
                arcpy.Clip_analysis(file_name.decode("gb2312"),path_clipfile.decode("gb2312"),shpfileto.decode("gb2312"))
            except:
                print '-----error-----', num, '----------------------'
                #print '********* Sth is happened, but still go on.'
            print '-----over-----', num, '----------------------'

成果如下:

可能遇到的问题

评论

请输入您的评论. 可以使用维基语法:
 
wiki/gis/arcpy-batch-clip-shp.1589189470.txt.gz · 最后更改: 2023/01/03 15:24 (外部编辑)