一、Maplex自动点抽稀

    Maplex是ArcGIS的高级智能标注引擎,利用Maplex的牵引线标注,将Symbol作为label显示,从而使点符号与文字标注绑定在一起,通过调整阈值自动进行标注间避让,计算出地图上所有标注的最佳放置位置,达到点抽稀的目的。

    主体思路:Maplex中对label有很好的显示控制,一旦显示symbol,则会出现symbol存在、label不存在,并且可能存在symbol互相叠置的现象;如果不显示symbol,那么就没问题。是否能让symbol作为label一块来显示,通过maplex来控制?研究的结果是可行的,方法如下:

    1、使用Maplex标注引擎,在label manager中选择要显示的点图层。此处可点击Text symbol中的symbol,在symbol selector中选择bullet leader。

arcgis JavaScript 抽稀 arcgis点抽稀_优先级

arcgis JavaScript 抽稀 arcgis点抽稀_字段_02

 

 

 

    2、选择之后点击Properties,进入编辑器。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_03

 

    3、选择Advanced text选项卡,点击Text background的properties。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_04

 

 

    4、进入Text background属性编辑器,在line callout中选中leader,点击Symbol。

 

arcgis JavaScript 抽稀 arcgis点抽稀_数据_05



 

    5、在symbol selector对话框中点击properties。

 

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_06

 

 

    6、在symbol property editor中的type选择Marker line symbol。

 

arcgis JavaScript 抽稀 arcgis点抽稀_数据_07

 

    7、在cartographic line 选项卡中color设置为无色,template选项卡中偏移一个位置。

 

arcgis JavaScript 抽稀 arcgis点抽稀_数据_08

 

    8、在Line properties选项卡中line decorations中选择第二项,点击Porperties

 

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_09

 

    9、在line decoration editor中选中Flip All和Flip First,Rotation中选择第二项,点击symbol。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_10

 

    10、在symbol selector中选择要表达该POI点的符号。(同标准的符号操作一样)。用properties进行更多设置。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_11

 

    11、逐步OK之后,在第4步操作的面板中设置牵引线的容限与间隔。容限值及间隔的设置,可参照“13、补充说明”部分。

 

 

  

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_12

 

    12、Maplex抽稀前后效果如下:

 

点抽稀前

arcgis JavaScript 抽稀 arcgis点抽稀_字段_13

 

抽稀后

arcgis JavaScript 抽稀 arcgis点抽稀_数据_14

    13、补充说明

    点抽稀时有如下几个关键值

    1)label offset:地图上点到对应标注的距离。

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_15

 

    2)牵引线的容差(Leader Tolerance)和间隔(Gap)

arcgis JavaScript 抽稀 arcgis点抽稀_字段_16

 

    Leader tolerance是使牵引线出现时中心点到标注的最短距离(offset),如果offset < Leader tolerance,牵引线将消失。我们要利用牵引线来进行点抽稀,所以应该设置Leader tolerance <= offset,可设置Leader tolerance = 0。

    3)线段符号大小(即箭头符号大小Symbol Size)

    4)它们之间的长度关系如下图:

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_17

 

    为了达到较好的标注效果,应设置:offset > Gap symbol size  (一般可设置Gap=0,offset为symbol size的1.5倍),同时需要注意勾选从要素的几何中心开始计算偏移,如下图,否则转出MSD时会使标注离中心点的距离太远。

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_18

 

二、Subset点抽稀

 

     Subset Features工具是ArcGIS地统计分析模块的一个工具,该工具可将数据按照百分比进行抽稀,生成两个结果数据集,一个是抽稀后保留的数据,另一个是互补的那一部分数据。使用步骤如下。

    1、在扩展模块面板中,勾选地统计分析扩展模块(Geostatistical Analyst),如下图所示。

   

arcgis JavaScript 抽稀 arcgis点抽稀_字段_19

    2、从地统计工具箱(Geostatistical Analyst Tools)中或者Geostatistical Analyst工具条中,选择打开Subset Features对话框,如下图所示。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_20

arcgis JavaScript 抽稀 arcgis点抽稀_字段_21

    3、在Subset Features对话框中,输入要抽稀的图层与相应的参数,如下图所示,其中,训练要素类为默认保留的子类,其大小可在“训练要素子集的大小(可选)”进行选择。默认按照百分比设置输出大小,也可以在“子集大小单位(可选)”中设置按照数量进行输出。点击确定后,将在原始数据的基础上按照设置的百分比或者输出数量,生成保留的子集。

arcgis JavaScript 抽稀 arcgis点抽稀_数据_22

 

     4.SubSet工具使用前后结果对比

arcgis JavaScript 抽稀 arcgis点抽稀_字段_23

 

抽稀前

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_24

 

抽稀后(百分比为30%)

 

 

三、SubPoints点抽稀

 

     

Sub Points工具是Esri中国自主开发的一个插件,该工具优先考虑点在空间分布上的均匀合理性,并结合点数据中包含的“优先级”属性进行筛选。通过获取每个点在一定范围内拥有的相邻点的数目信息,得到地图中点密度的分布状况。抽稀时在若干相临近的点中首先比较优先级,保留优先级高的;优先级相同时比较NAME字段,保留NAME长度短的;两者都相同时随机选择。

    使用Sub Points进行点抽稀的数据,必须包含“优先级”和“name”两个字段。其中优先级用来设置数据的重要性,在抽稀过程中综合考虑数据的优先级别。

1.1安装与部署

    1、首先将GPSubPoints.dll及“注册插件”文件拷贝到本机目录下,然后根据实际存放目录编辑修改“注册插件”中GPSubPoints.dll的存放路径"D:\Program Files (x86)\ArcGIS\Desktop10.0\Bin\GPSubPoints.dll",如下图所示。

arcgis JavaScript 抽稀 arcgis点抽稀_字段_25

 

 

    修改保存后,双击“注册插件”文件,将出现以下对话框。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_26


 

    2、注册完成后可以在ArcCatalog中新建一个ArcToolbox,如下图示。

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_27

 

    然后向其中添加工具,如下图所示。

arcgis JavaScript 抽稀 arcgis点抽稀_数据_28

 

    在弹出的“添加工具”对话框中,选择注册好的Sub Points工具,选中后即可完成添加。如下图所示。

arcgis JavaScript 抽稀 arcgis点抽稀_字段_29

 

    从下图可以看到,刚新建的工具箱中会出现刚添加的GP工具,双击或右键点击打开即可使用了。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_30

 

    也可以将这个工具添加到ArcToolbox的列表中,方便以后直接调用。

 

arcgis JavaScript 抽稀 arcgis点抽稀_数据_31

 

1.2Sub Points 使用

    1、先利用Point Distance工具计算临近要素,如下图所示。

 

arcgis JavaScript 抽稀 arcgis点抽稀_数据_32

 

    Point Distance工具运行结果为一张记录某点在一定距离(比如100米)到范围内相邻点的距离的表,如下图所示。

arcgis JavaScript 抽稀 arcgis点抽稀_数据_33

 

临近要素表

 

    2、原数据中建立“优先级”(short)字段,并给“优先级”字段赋值;

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_34

 

    3、运行Sub Points工具计算status的值,在Input PointDistance Table中输入第一步生成的临近要素表。Input Feature中,输入待抽稀的要素图层。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_35

 

    运行该工具后,将生成status字段,并根据优先级以及临近要素表给status赋值。如下图所示。

 

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_36

 

    4、对于status > -99的值,表示要保留显示的要素;对于status = -99的值,表示要删除或者不在地图上显示的要素。可通过定义查询操作来控制地图显示内容,如下图所示。也可以直接删除不显示的要素。

 

arcgis JavaScript 抽稀 arcgis点抽稀_字段_37

 

    5、Sub Points使用前后效果图

 

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_38

 

抽稀前

arcgis JavaScript 抽稀 arcgis点抽稀_优先级_39

抽稀后

 

四、总结

  

    通过对三种方法的探究,得出如下结论:

    Maplex自动点抽稀方法,方便快捷,只需对图层标注样式进行设置即可完成点抽稀。不足之处在于点符号显示位置与实际位置存在偏差,如下图所示(红色符号为点的真实位置,绿色符号为抽稀后点的显示位置)。

arcgis JavaScript 抽稀 arcgis点抽稀_字段_40

 

    如果POI单纯用于底图浏览,并且对数据精度没有特别高的要求可采用这种方式。

    使用Subset工具执行效率较高,但该方法保持了原图的疏密程度,并不能使数据均匀分布,原有数据密度高的地方抽稀后还是较密,因此单纯利用该工具难以实现底图上的抽稀效果。

    Sub Points点抽稀方法能达到比较好的图面效果,并且能保持点位的精确,但是大数据量时(超过100000条)耗时较长。

    因此,对于大数据量POI,为了兼顾图面效果、数据精确性以及执行效率,建议采用Subset与Sub Points相结合的方法。首先通过Subset方法进行空间上的抽稀以减少数据量,再利用Sub Points方法进行抽稀以达到较好的制图效果。

    总之,三种抽稀方法各有优缺点,在实际应用中可根据需要,选择合适的抽稀方法。