当前位置: 首页 > news >正文

arcengine遍历属性表_【Python@arcpy】python操作Excel与属性表批处理

701a00c05603c00b110019ad46c1f739.png

最近在搞事情时发现ArcMap里的【空间连接】工具可以实现根据图层间的空间关系进行属性的连接,关于空间连接的详细内容可以参考官网的帮助文档(https://pro.arcgis.com/zh-cn/pro-app/tool-reference/analysis/spatial-join.htm);

如下图所示,利用点数据分别与村、镇的面数据进行空间连接,即可根据空间关系把村镇的属性赋值给点数据。

03723647aa67929d60ef771862937c72.png

c0c2300bd630fd03bf72324a9e5f1719.png

村镇面属性表 ↑

77b2510c221af67c5097d958e4fc4a3b.png进行点与村空间连接 ↑

44aaaef86413d170c8bd6ec65dfe95cc.png

点与村空间连接的成果再与镇进行空间连接 ↑

ea94852ff7e4ff1fce5ea4afaf8dbf8d.png两次空间连接后属性表的效果 ↑

从两次连接后的点数据属性表可以看到村镇的属性已经赋值给点数据了,然后利用字段计算器即可进行相关的操作完成对应的需求;

获得Excel表格中重复的地名

python操作excel表格需要先安装第三方类库xlrd,xlrd库只能操作97-2003版本的(.xls)(经过后面的实验验证,xlrd可以同时操作.xls或者.xlsx版本的表格);然后就可以调用该类库的函数去操作Excel,获得我们需要的信息。地名都位于第一列,所以读取相对简单点(如图2)

21b12d7cfa19250918dc6409d50dfeff.png
图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

f7b30f2152ffaa0cf26b96b5cca700e4.png

图3 测试数据

9ced7e0507488058e2e7ef07e970559b.png

图4 地名点图层属性表

9904496d8d28794f49cdcf0c6481c834.png

图 5 村域图层属性表

25023094de8161f0f18076c22e2e6852.png

图 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表格时故意没有让它重复,所以它就被排除在外,不用更新了。

3f9da4d00c5f66d8637492e0b9a70094.png

更新后的属性表

【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】地图布局出图

a2b51421e2e7ee9e6ef6039453c79f1b.png

END

 

请:右下点在看1611497a5f5c73b43242e6d556ac244b.gif,右上点【···】分享

2b0b6e405d4dca81f5c4519f9b3b7e18.png

关注我

发现更多精彩

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ExtremeTable的导出问题
  • 运动估计算法的程序实现_光流法--Lucas Kanade算法
  • 网吧系统母盘制作(系统分区整体考虑优化配置篇)
  • 点在多边形内_空间分析:2-4.Python生成泰森多边形
  • struts2的s:param标签使用
  • leetcode 打印_剑指 Offer 32 - I. 从上到下打印二叉树
  • 使用spring的MBeanExporter暴露hibernate的StatisticsService对象方法
  • springboot分页插件_Spring boot整合Mybatis Generator以及PageHelper源码分析
  • ext2.0不能与prototype1.6一起使用
  • c语言scanf一次不定_初学C语言编程时最容易犯的错误,你踩坑了吗?
  • 知识可以触类旁通。。。
  • cmd bat删除文件命令_ftp下载文件命令地址,用cmd命令访问ftp下载文件地址
  • 洪昭光:21世纪的健康新标准
  • python做图片美化_Python实现简单的照片磨皮(照片智能磨皮) 最新免费版
  • excel公式大全详解_财务常用的Excel函数公式大全(共484个),帮你整理好了!...
  • AngularJS指令开发(1)——参数详解
  • JAVA_NIO系列——Channel和Buffer详解
  • Magento 1.x 中文订单打印乱码
  • Python 基础起步 (十) 什么叫函数?
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 复习Javascript专题(四):js中的深浅拷贝
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何利用MongoDB打造TOP榜小程序
  • 入口文件开始,分析Vue源码实现
  • 算法---两个栈实现一个队列
  • 移动端 h5开发相关内容总结(三)
  • 由插件封装引出的一丢丢思考
  • 《天龙八部3D》Unity技术方案揭秘
  • Java数据解析之JSON
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #70结构体案例1(导师,学生,成绩)
  • #include
  • #微信小程序:微信小程序常见的配置传旨
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (¥1011)-(一千零一拾一元整)输出
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (20050108)又读《平凡的世界》
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (52)只出现一次的数字III
  • (6)STL算法之转换
  • (solr系列:一)使用tomcat部署solr服务
  • (SpringBoot)第七章:SpringBoot日志文件
  • (不用互三)AI绘画工具应该如何选择
  • (二)linux使用docker容器运行mysql
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (七)Flink Watermark
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...