解析ArcGis的字段计算器(二)——有玄机的要素Geometry属性,在属性表标记重复点线面...

本文介绍了一种使用Python处理GIS数据中重复要素的方法,通过计算并比较要素的几何属性,如面积、周长、质心坐标等,来识别并删除重复的面要素,适用于多Shpfile文件合并后的数据清理。

这里所说的重复是指完成重复的,不是叠在一起的两个或多个要素,这种应该叫做“压盖”或“重叠”。重复往往是在合并多Shpfile文件时不小心重复导入造成的。

这里提供一种可能的解决办法,数据无价,请备份!

本篇使用Python语句

暂不说如何处理,先获取要素的一些几何属性。下文中所有的语句使用Python解析。

!shape.type!
要素的类型,返回一个文本值,点线面(point,polyline,polygon)等。这个想不出有啥用来

对于面要素(polygon):
!shape.area!
计算要素几何面积,前面有讲,一个double数值。

此外,在字段标题上右键——计算几何(Calculate Geometry)——面积(area)也可以。

!shape.length!
计算要素长度,一个double数值。

此外,在字段标题上右键——计算几何(Calculate Geometry)——周长(perimeter)也可以。

!shape.centroid.x!

计算质心的X坐标值,一个double。

同样可以在字段标题右键

!shape.centroid.y!

计算质心的Y坐标值,一个double。

同样可以在字段标题右键

结果可以看下图:

选中的记录为重复的3个面要素,很明显,他们的上述各种值是一样的,那么我们做一个字符串拼接游戏,面积+周长+质心X坐标+质心Y坐标是不是应该可以确定一组重复了?

拼好后把属性表搞到Excel(不会请百度,也许有时间我会写一下),根据这个表识字段(这里命名用了unique)排一下序,使用一个简单的函数简单的Excel函数=COUNTIF(H$2:H2,H2)给相同项编个号,结果如下图。

上图已经很明晰,干掉所有编号为1的,挂接回ArcMap属性表,能挂接上值的就是应该删掉的,能想明白不?

多说一句,挂接也是有些道道儿的。挂接这个事儿需要写一下吗?好多……

今天就遇到一个根据FID挂接不上的,Object 类型能挂接才怪,如果依据它的值做连接,需要新建一个字段(最好文本),把FID值计算过来再挂接。

 

对于线要素:

计算一下起点、终点、长度啥的拼一下可以处理了

!shape.firstPoint.x! 是起点x

!shape.lastPoint.y!是终点y

对于点:

还有必要赘述吗?

转载于:https://www.cnblogs.com/yzhyingcool/p/10075906.html

为了在ARCGIS中对地理数据属性表里的重复编号进行自动编号,可以利用字段计算器中的Python脚本来实现这一功能。首先,了解字段计算器是一个在属性表中进行快速计算和字段更新的强大工具。自动编号的实现依赖于一个全局变量列表来跟踪已经出现过的字段值,并为其分配递增的编号。 参考资源链接:[ARCGIS字段计算器自动编号方法详解](https://wenku.csdn.net/doc/646082375928463033ae0910) 具体操作步骤如下: 1. 打开你的ARCGIS软件,并加载包含你想要编号的属性表的数据集。 2.属性表,选择你想要进行编号的字段,或者如果需要的话,创建一个新的字段来存放编号结果。 3. 点击所选字段右侧的小计算器图标来打开字段计算器窗口。 4.字段计算器的设置中,选择Python作为解析器,并勾选“显示代码块”选项。 5. 在代码块区域,定义一个全局列表变量和一个编号函数,例如: ```python # 定义全局列表变量 L = [] # 定义编号函数 def findNumber(x): global L L.append(x) return L.count(x) ``` 6.字段计算器的“表达式”框中,调用这个函数,将字段变量替换为你要处理的字段名,例如: ```python findNumber(!你的字段名!) ``` 7. 点击“确定”或“计算”按钮,字段计算器将自动为每个记录计算编号,并更新到选中的字段中。 通过这种方法,当 参考资源链接:[ARCGIS字段计算器自动编号方法详解](https://wenku.csdn.net/doc/646082375928463033ae0910)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值