『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS中删除重复点要素(三)

ArcGIS中删除重复点要素(三)
在ArcGIS中如何删除重复的点要素,第一种方法是借助ArcGIS自带的扩展,Spatial ETL Tool,该工具是FME的一个模块,通过介绍在ArcGIS环境下逐步地新建一个Spatial ETL Tool,熟悉FME这款软件的风格和主要思想。第二种方法是ArcGIS自身的工具方法,打一套组合拳,亦可以得到想要的结果。第三种方法是新近补上去的,主要思路和FME处理一样:先将点的坐标按 "x,y" 的格式写入一个字段,然后对这个字段进行重复项检查<两步都是使用field Calculate>。
    使用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等等不同方式。
    第三种方式是完全通过field Calculate实现:
    1.新建字段[coordinate] ,类型设置为text,长度默认50,右击该字段,选择field Calculate,点advanced,填入一下表达式:
    ' @ Tsonghua  090924
    Dim Output As string
    Dim pPoint As IPoint
    Set pPoint = [Shape]
    Output = pPoint.X & "," &
    pPoint.Y
    复制代码
    2.新建字段[Dup],类型设置为 long integer,右键选field Calculate,在advanced的表达式框中填入:
    ' @ Tsonghua 090924
    Static d As Object
    Static i As Long
    Dim iDup As Integer
    Dim sField
    '这里填写需要检查的字段名
    sField = [coordinate]
    If (i = 0) Then
    Set d = CreateObject("Scripting.Dictionary")
    End If
    If (d.Exists(CStr(sField))) Then
    iDup = 1
    Else
    d.Add CStr(sField), 1
    iDup = 0
    End If
    i = i + 1
    复制代码
    3.这样,只需要挑选出[Dup]字段值为1的删掉即可。
    4.思考:这里可以不可以删除在一定精度下不完全重复但是靠的很近的点呢?可以在把坐标写入字段的时候控制一下,用format 函数规定好xy坐标输出的小数位数。
      京ICP备08100627号-22 京公网安备 11010802030428号