删除重复的要素之-点篇.docxVIP

  • 20
  • 0
  • 约3.17千字
  • 约 4页
  • 2017-03-05 发布于重庆
  • 举报
删除重复的要素之-点篇

删除重复的要素之---点大家在用数据的时候,经常会碰到有重复的点。此文根据网上各位前辈的方法做了一个归总,提供给需要的人员。文中参考了/ESRI/space.php?uid=33214tj051181和来生缘版主的帖子,新东芳的博客和ArcGIS中国培训中心的新浪微博,在此感谢!1 使用ArcGIS工具,组合解决删除重复点思路:buffer \ merge \ explode multi-part feature \ feature to point \ spatial join说明:重复点,在某个精度下很相近而可以认为是同一个点的点。这里所谓的删除重复点,其实是通过点做缓冲,构成面;然后把构成的面合并起来,这样,重复点或者近距离点所形成的面的边界就会消融而形成一个面;然后打散,把不相邻的面分散成独立的要素;最后,生成这些面的质心点,即为所求。Buffer 对点层做缓冲,生成面这里有个重要的参数,就是缓冲距离,怎么定呢?可以参考数据精度;还可以用 Analysis tools\ proximity \ point distince算一下各点距离,找到认为不重复的点之间的最近距离,设置的缓冲距离应该比这个距离的一半要小。Merge 这里说的Merge是编辑下的合并功能。Editor \Starting editing \全选buffer后的面层,选择Merge,合并到一个空图班上。这一步的作用是将相邻过近,以至于重复的点形成的面的边界消掉,融合一起。Explode Multi-part Feature在Editor下拉菜单选择Advanced Editing,调出高级编辑工具条。点击一下Merge后的面层,选择Explode Multi-part Feature。这一步的作用是将上一步生成的不相邻不重合而被融合在一起的多部件面给炸开,打散。Feature to point Arctoolbox\ data management tools\ features \Features to points, 生成打散后面的质心点。这样生成的点层,就达到了消除重复点的目的。Spatial Join这一步,主要是把原始点层含的属性给带过来。可以点击图层,右键\Join and Relates \Join\Join data from another layer based on spatial location,也可以从工具箱里analysis tools\overlay \spatial Join,位置关系匹配方式,可以选择 closest。2完全通过field Calculate实现思路:先将点的坐标按 x,y 的格式写入一个字段,然后对这个字段进行重复项检查。两步都是使用field Calculate,输入VBA的计算字符即可。计算x,y 的格式的坐标串新建字段[coordinate] ,类型设置为text,长度默认50,右击该字段,选择field Calculate,点advanced,填入一下表达式: ---------------------------------------- @ Tsonghua??090924 ----------------------------------------Dim Output As stringDim pPoint As IPointSet pPoint = [Shape]Output = pPoint.X , pPoint.Y找到重复的字符串新建字段[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以下是原作者对上段代码的解释:这段代码的思

文档评论(0)

1亿VIP精品文档

相关文档