arcengine遍历属性表_【Python@arcpy】python操作Excel与属性表批处理
最近在搞事情时发现ArcMap里的【空间连接】工具可以实现根据图层间的空间关系进行属性的连接,关于空间连接的详细内容可以参考官网的帮助文档(https://pro.arcgis.com/zh-cn/pro-app/tool-reference/analysis/spatial-join.htm);
如下图所示,利用点数据分别与村、镇的面数据进行空间连接,即可根据空间关系把村镇的属性赋值给点数据。
村镇面属性表 ↑
进行点与村空间连接 ↑
点与村空间连接的成果再与镇进行空间连接 ↑
两次空间连接后属性表的效果 ↑
从两次连接后的点数据属性表可以看到村镇的属性已经赋值给点数据了,然后利用字段计算器即可进行相关的操作完成对应的需求;
获得Excel表格中重复的地名
python操作excel表格需要先安装第三方类库xlrd,xlrd库只能操作97-2003版本的(.xls)(经过后面的实验验证,xlrd可以同时操作.xls或者.xlsx版本的表格);然后就可以调用该类库的函数去操作Excel,获得我们需要的信息。地名都位于第一列,所以读取相对简单点(如图2)
代码如下:
#coding=utf-8
import xlrd
import arcpy
def getpointNameList(Exclepath):
PointNameList=[]
#excle表格格式要为.xls
data=xlrd.open_workbook(Exclepath) #打开excle表格
table=data.sheets()[0] #获得Excel里的第一张表
nameList=table.col_values(0) #获得第一列(地名),为列表格式
#在nameList中查找查找重复的点名
for name in nameList:
if nameList.count(name)>1:
PointNameList.append(name) #获得的是所有重复值
PointNameList = list(set(PointNameList)) #在重复值列表中去重
return PointNameList
完善点图层的属性信息
因为我手上也没有调试数据,所以根据小仙女的需求,简单的构建了测试数据需要的字段,数据的属性表如下图3,4,5,6
图3 测试数据
图4 地名点图层属性表
图 5 村域图层属性表
图 6 镇区属性表
字段名称,表格名称尽量不要用中文吧,因为python2对中文兼容性不好,刚刚开始我用中文是也报错了
利用getpointNameList()函数的返回值在点图层里找到对应的点,然后分别利用该点去与镇区、村域图层进行位置关系的判断(这里是利用contains函数),如果点在面中,就获取镇名,村名写入到点图层属性表相应的字段中,最后更改地名点的名称。
def WriteAttribute(PointNameList,pointpath,zhenpath):
for name in PointNameList: #遍历地名列表
pointCursor = arcpy.UpdateCursor(pointpath) # 点数据更新游标
for pointrow in pointCursor:
pointGeo=pointrow.shape #获得点的几何图形
if pointrow.PointName==name: #判断点名是否相等
zhenCursor = arcpy.SearchCursor(zhenpath) # 镇区的搜索游标
for zhenrow in zhenCursor: #循环判断点是否在面中
zhenGeo=zhenrow.shape
if(zhenGeo.contains(pointGeo)):
pointrow.zhenName=zhenrow.zhenName #如果在面中,获得该面的镇名并填入点属性表中
cunCursor = arcpy.SearchCursor(cunpath)
for cunrow in cunCursor:
cunGeo = cunrow.shape
if (cunGeo.contains(pointGeo)):
pointrow.cunName = cunrow.cunName
pointrow.PointName = cunrow.cunName + name
pointCursor.updateRow(pointrow)
存入相应的参数,调用上面两个函数,就基本完成需求了。
程序运行后的结果如图7所示。对比图4的表,我们可以看到PointName,zhenName,cunName这三个字段已经更新了。至于有些地名点没有更新,是因为我在构建Excel表格时故意没有让它重复,所以它就被排除在外,不用更新了。
更新后的属性表
【Python@arcpy】批量偏移点线面
【Python@arcpy】GeoDataBase 导出为Shapefile
【Python@arcpy】ArcMap中使用ArcPy实现Geometry与WKT的相互转换
「python@arcpy」获取几何图形的GeoJson与Extent
【Python@arcpy】arcpy自动化制图
【Python@arcpy】近邻分析工具进行点线拓扑
【Python@arcpy】小图斑处理
【ArcGIS Pro】
【ArcGIS Pro】三维基础
【ArcGIS Pro】玩转三维数据处理与服务发布
【ArcGIS Pro】模型构建器Model Builder
【ArcGIS Pro】制图特效公开课视频
【ArcGIS Pro】三维模型、BIM、OSGB在ArcGIS中的使用
【ArcGIS Pro】制图应用
【ArcGIS Pro】制图技巧
【ArcGIS Pro】地图符号化
【ArcGIS Pro】地图布局出图
END
请:右下点在看,右上点【···】分享
关注我
发现更多精彩