【ArcGIS中根据属性字段从多对象的矢量图层中筛选出特定的对象并建立单个矢量图层】

ArcGIS中根据属性字段从多对象的矢量图层中筛选出特定的对象并建立单个矢量图层(ArcPy)

场景分析

从水系图层中筛选出特定水系的对象,并将每个水系创建单独的矢量图层(单个shp文件)

解决思路和方法

材料准备(处理软件和所需的数据)

通过利用Arcpy工具进行处理,需要准备水系矢量图(属性表中包含水系名称字段)和Excel表格(主注意表格格式选用.xls格式,因为arcmap中不支持.xlsx格式)。
下图中为水系矢量图中的属性表,C-Name字段是水系名称水系图层属性表
下图中表格为需要提取的水系名称(.xls)
在这里插入图片描述

解决思路与步骤

第一步:Arcmap中导入水系矢量文件(导入的同时arcmap默认创建了图层)
第二步:打开属性表,通过通过属性选择工具,根据C_NAME属性字段选择出特定名称的水系对象
第三步:导出已经选中的特定名称水系的矢量数据,此时导出的矢量文件只包含刚才选中的水系
以上每一步骤均可通过arcpy实现,基于这个思路,可以通过arcpy实现批量处理

代码

// 导入包
# -*- coding: UTF-8 -*-
import os
import arcpy
import xlrd
//创建水系矢量文件图层
arcpy.MakeFeatureLayer_management(r"输入水系矢量shp路径", "shuixi")
// 读取xls表格
xls=xlrd.open_workbook(r"输入表格的文件路径")
// 读取xls表格中的Sheet1工作薄
name=xls.sheet_by_name('Sheet1')
// 读取表格中的有效列数
row_sum = name.nrows
row_sum
//循环读取筛选水系的名称,并导出单个的矢量文件
for i in range(0,row_sum):
	a=name.cell(i,0).value #读取表格中第1列第i行数据
	outpath=r"输出shp文件的保存路径文件夹"  #输出文件路径的文件夹
	outname=a+".shp"  #输出文件名
	ziduan1="C_NAME"  #写入通过那个属性字段进行筛选
	ziduan=ziduan1.decode("utf-8") #将“C_NAME”转为“Unicode编码”
	where='\"'+ziduan+'\"'+'='+" \'"+a+"\'"
	arcpy.SelectLayerByAttribute_management("shuixi","NEW_SELECTION",where)
	arcpy.FeatureClassToFeatureClass_conversion("shuixi",outpath,outname)                                                                                                   

注意事项:
(1)输入的shp和xls文件路径最好都是英文
(2)代码中的“‘Sheet1’”为xls文件夹中工作簿的名称,需要根据自己相应的工作薄名称进行修改
(3)where条件语句格式一定要注意!!!,这个可能是真个代码中最费时间了,一直因为编码格式原因导致后面where’语句不成功【因为ziduan与a的编码格式不一致,ziduan为utf-8格式而a为unicode】,之前一直尝将a的编码转为和ziduan’的一致,但一直报错,转不成功,后来将“C_NAME”转为“Unicode编码” 【ziduan=ziduan1.decode(“utf-8”)】成功了。
(4)Where语句中的转义符“\”也不能缺少,否则会报错,也可能选择的对象是全部对象,不是自己所想选择的对象。

结果

生成的结果如下
结构在这里插入图片描述

适用场景

本代码适用场景:要从一个多对象的矢量数据中通过特定属性字段的筛选出符合条件的对象,并为每一个对象建立一个shp文件,并以筛选条件命名。例如,想从中国中国县域边界矢量文件中,导出几个自己需要县的矢量边界文件。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值