zoukankan      html  css  js  c++  java
  • ArcGIS制图之Sub Points点抽稀

    简介

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

    修改程序

    原始版本是基于10.0开发的,在10.1及以上版本需要修改两处:

    一是SubPointsFunctionFactory.cs文件中CreateGPFunctionNames方法的MinimumProduct属性修改为:

    functionName.MinimumProduct = esriProductCode.esriProductCodeBasic;
    

    二是SubPointsFunction.cs文件中IsLicensed()函数修改为:

    IAoInitialize myAoInitialize = new AoInitializeClass();
    ILicenseInformation myLic = (ILicenseInformation)myAoInitialize;
    string myLic= myLic.GetLicenseProductName(myAoInitialize.InitializedProduct());
    if (myLic == "Advanced") return true;
    else return false;
    

    如果这两处不修改将会出现许可报错的问题:

    三是SubPointsFunction.cs字段名称的修改。在10.0的版本中字段名称是小写,从10.1起字段名称为大写(本来arcgis不区分大小写,但程序代码中的判断语句区分了大小写,没有使用大小写转换函数)。

    int iInputFID = pPDTable.FindField("INPUT_FID");
    int iNearFID = pPDTable.FindField("NEAR_FID");
    int iDistance = pPDTable.FindField("DISTANCE");
    

    除此之外,我还修改了界面的语言为中文。

    使用方法

    第一步,注册文件。将GPSubPoints.dll拷到arcgis安装目录下(如C:Program Files (x86)ArcGISDesktop10.1in),在dll上右键,选择打开方式为ESRIRegAsm.exe (浏览到C:Program Files (x86)Common FilesArcGISinESRIRegAsm.exe),一般情况下会注册成功,并弹出提示消息。(如果安装360等,请将它加入白名单)

    第二步,添加工具。打开ArcMap,在我的工具箱(非系统工具箱)上添加工具箱,然后添加工具,选择sub points.

    第三步,生成邻近表。使用点距离工具生成邻近表,输入和邻近要素都为需要进行抽稀的点数据,搜索半径为抽稀后任意两个点的最大距离。

    第四步,新建字段。在需要抽稀的点数据属性表中新建名称"NAME"和"优先级"( short)的字段,并给"优先级"字段赋值。其中优先级用来设置数据的重要性,在抽稀过程中综合考虑数据的优先级别。如果没有相应的字段将会报错或警告。

    第五步,执行抽稀工具。输入邻近表和要进行抽稀的要素,执行抽稀。

    第六步,定义查询。结果并未生成新数据、也未删除原来的点,只是增加了标记字段status. 对于 status > -99 的值,表示要保留显示的要素; 对于 status = -99 的值,表示要删除或者不在地图上显示的要素。可通过定义查询操作来控制地图显示内容,如下图所示。也可以直接删除不显示的要素。

    结果

    抽稀效果如下:对于本来就稀疏的位置,并没有进行抽稀。对于原来密集的地区(小于最小邻近距离)抽稀效果比较良好。

    源码和工具下载:http://www.400gb.com/file/125432726

  • 相关阅读:
    velocity模板引擎学习(2)-velocity tools 2.0
    silverlight: http请求的GET及POST示例
    职责链(Chain of Responsibility)模式在航空货运中的运用实例
    H2 Database入门
    velocity模板引擎学习(1)
    Struts2、Spring MVC4 框架下的ajax统一异常处理
    企业应用通用架构图
    nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡
    nginx学习(1):编译、安装、启动
    eclipse/intellij Idea集成jetty
  • 原文地址:https://www.cnblogs.com/liweis/p/4891021.html
Copyright © 2011-2022 走看看