在ArcGIS中如何删除重复的点要素

摘要:在ArcGIS中如何删除重复的点要素,第一种方法是借助ArcGIS自带的扩展,Spatial ETL Tool,该工具是FME的一个模块,通过介绍在ArcGIS环境下逐步地新建一个Spatial ETL Tool,熟悉FME这款软件的风格和主要思想。第二种方法是ArcGIS自身的工具方法,打一套组合拳,亦可以得到想要的结果。第三种方法是新近补上去的,主要思路和FME处理一样:先将点的坐标按 "x,y" 的格式写入一个字段,然后对这个字段进行重复项检查<两步都是使用field Calculate> 

最近看到很多朋友碰到这个个问题,在这里我和大家分享一下我处理此种问题的思路,共同探讨

第一种方法是借助ArcGIS自带的扩展,Spatial ETL Tool,该工具是FME的一个模块,通过介绍在ArcGIS环境下逐步地新建一个Spatial ETL Tool,熟悉FME这款软件的风格和主要思想。

第二种方法是ArcGIS自身的工具方法,打一套组合拳,亦可以得到想要的结果。


第三种方法是新近补上去的,主要思路和FME处理一样:先将点的坐标按 "x,y" 的格式写入一个字段,然后对这个字段进行重复项检查<两步都是使用field Calculate>
ArcGIS Spatial ETL Tool

1.
打开Arctoolbox,选中Arctoolbox根目录,右击,选择new toolbox,自定义一个工具箱。因为在ArcGIS自带的工具箱中,是没法自己新建工具或者脚本的。


紧接着,选中自定义的工具箱,右击,依次 New\Spatial ETL Tool

注:
这里如果报错Error Unable to create a new tool .You do not have the necessary license to create a new tool. 

这不是什么许可不够,只是扩展没有选择而已。
解决办法:arcmap\Tools\Extension 勾选 Data Interoperability如果Extension里面没有这项呢?得重新安装一下扩展,找到ArcGIS desktop 安装文件,开始安装\Modify\Application项叉掉;点开Extension,选择安装需要的常用的扩展

2.
在新建Spatial ETL Tool后,会出现设置向导,如果取消向导呢?直接弹出出错框。

这里个人感觉不是很合理,比如老手在新建的时候,就可以跳过这些繁琐的设置。

下面分别详细介绍一下这个设置向导的每一步。


2.1
2.1.1
设置向导第一个页面是设置数据源格式。点击浏览按钮,在弹出窗口中的左下角输入数据源文件的扩展名<比如 shpdxfdwg等等>
2.1.2
选中后双击,或者选中,点下面的ok确定选择,点 Next,进入下一页

这一页是选择数据源,两个按钮,左侧一个是浏览文件,右侧 “+” 号那个是添加文件夹。
2.2
选好数据源格式,数据源之后,再next出现的是目标格式,选择方式同 2.1.1,略

2.3
数据源,目标都设好之后,再下来,向导页面有个 Setting按钮。在这里,我们可以设置环境参数
eg: Contains Z Value
拿这一项做例子。不知道大家有没有碰到过数据的shape字段出现 point zpolyline zpolygon z等字样,这时候,是不可以等同于 pointpolylinepolygon处理的,因为存储数据类型不一致。有时候,明明z值就没有,可数据类型还是含有 z。通过实践,我发现这里的参数 Contains Z valuesNo,如此,转换结果的shape就是我们常见的pointpolylinepolygon

3
上面的步骤完成后,点击 完成 按钮就会出现 Data Interoperability界面,对应FME的Workbench。
如图所示
数据源,可能有很多层,这里的层,可以是按属性,可以按空间数据类型等
数据流,数据流是箭头,手动连接从哪里到哪里,很直观
目标层,细心观察,不难发现目标层颜色和数据源有差异。这里颜色,是区分各种类型的一种标志

左侧上部,是数据源、目标的详细情况;工具、环境参数详情
左侧中部,是FME转换函数区,可以通过关键词搜索。点击,会显示函数详细情况。本文章会附录FME转换函数对照表
下部是Log日志。

注:参照各人环境,可能稍有出入。

更详细的FME使用,参见 lucy1114 版主 

4.
以删除重复点为例,说明一下FME工作环境里的具体参数设置以及使用方法


数据源,左侧,中间有两个蓝色的框是转换函数,右侧有个浅色的框是目标层

如果按照向导添加进来的数据过多或者不是自己想要的,很简单,全选,delete。然后把你的数据源拖拽添加进来即可。

删除重复点的思路是:
将点坐标作为字段生成,格式为
x,y
根据属性相同,删除重复记录

查找FME函数转换对照表,很容易找到这两个函数
生成点的坐标,作为属性字段CoordinateConcatenator
根据重复属性删除点 DuplicateRemover

转换函数是典型的I/O形式,输入啥,做什么处理,输出啥,一目了然。很简洁清晰明了

具体,DuplicateRemover这个函数设置如上图所示。
还有一点要注意的,我现在也没想明白,目标层的字段是要自己新建的。新建好之后,通过箭头一个个把原始的属性挂到目标层。<寻求一种简单的方式>

最后,点击Run Translation,就可以跑起来啦。


可以保存新建的Spatial ETL Tools

对新建好的可以编辑

使用ArcGIS工具,组合解决删除重复点问题

思路:buffer \ merge \ explode \ feature to point \ spatial join

说明:
1.重复点,在某个精度下很相近而可以认为是同一个点的点

这里所谓的删除重复点,其实是通过点做缓冲,构成面;然后把构成的面合并起来,这样,重复点<或者近距离点>所形成的面的边界就会消融而形成一个面;然后打散,把不相邻的面分散成独立的要素;最后,生成这些面的质心点,即为所求。

2.
2.1 buffer 对点层做缓冲,生成面。这里有个重要的参数,就是缓冲距离,怎么定呢?可以参考数据精度;还可以用 Analysis tools\ proximity \ point distince算一下各点距离,找到认为不重复的点之间的最近距离,设置的缓冲距离应该比这个距离的一半要小

2.2 Merge 这里说的Merge是编辑下的合并功能。Editor \Starting editing \全选buffer后的面层,选择Merge,合并到任一一个图班上。这一步的作用是将相邻过近,以至于重复的点形成的面的边界消掉,融合一起。

2.3 Explode 右击工具栏,选择Advanced Editing,调出高级编辑工具条。


点击一下Merge后的面层,选择Explode Multi-part Feature。这一步的作用是将上一步本不相邻不重合而被融合在一起的构成的复杂多边形的面给炸开,打散。

2.4Feature to point 
Arctoolbox\ data management tools\ features \Features to points 生成buffer后融合的面的质心点。这样生成的点层,就达到了消除重复点的目的。

2.5 Spatial Join
这一个,主要是把原始点层含的属性给带过来。可以点击图层,右键\ Join \Spatial Join
也可以 analysis tools\overlay \spatial Join

位置关系匹配方式,可以选择 closest。属性获取上,可以右键字段,选择属性,然后修改属性合并的规则,是First,还是last 或者join等等不同方式。