🗓️ 2024-03-04 🏷️ #GIS相关#

目录

    • 前言
    • 实现方式
      • python加载项
      • 自定义工具箱
      • 命令行程序
    • 效果

前言

近期收到一个工作任务,为项目编写涉及处理空间数据相关的工具,要求必须集成到当前用户工作流里,不脱离ArcGIS环境。大概了解业务之后认为解决该需求最好的方式是将此工具作为ArcGIS的一个插件(扩展),因为它其提供了多种方式来扩展自身功能,1.python加载项(官方这么叫),2.是自定义工具箱脚本,3.写一个第三方命令行程序。

实现方式

我简单查阅后得知,上述三种方式都不能直接将问题解决。

python加载项

python我很熟悉,各种空间操作库手到擒来,按理说不一会就能写完,但是我查阅一番后发现,插件不适合做复杂输入工作,原因如下:

  • 版本兼容。不管新旧,ArcGIS内置python版本皆为2.7,这是一个古老版本,发布至今已14年,有些库当前用不了,另外如果仅学过3.x的语法,写2.7会出现兼容性问题,代码量小其实问题不算大,但复杂逻辑代码量大写着会很恼火。
  • 输入类型受限。插件仅支持简单输入,如点击,文字,下拉选项等。
  • 无法解析数据格式。当前没有第三方库能解析公司专有的数据格式,这是一个大难点,因为所有的后续工作都依赖于解析成果。

自定义工具箱

相较于加载项,工具箱的输入类型丰富太多,在功能不相上下的情况下安装方式更简单,但是加载项所列出的第2、3缺点依然无法解决。

命令行程序

针对专有数据格式解析,现写一个python解析库时间来不及,求助产品部门的同事,幸亏他们提供有C++和C#的SDK,可以解燃眉之急。其实不仅仅是Python, C#也可以编写ArcGIS插件且功能更为强大,但是它更接近底层,所需要的工作量也异常多,要装一大堆依赖的同时还必须熟悉ArcGIS的SDK以及对象模型等。 我以前接触AE(ArcGIS Engine)的时候有系统学习过,但是毕业后已经几乎要忘光了,因此该工具不打算单独用C#实现,而是将三者耦合。

首先用C#编写主要逻辑,编译成一个命令行程序,然后用python编写ArcGIS加载项和工具箱脚本,目的是在ArcMap里,接收用户输入后调用这个命令行程序执行具体业务。

arcgis_walktool

流程

效果

具体编写过程在这里就不展开,主要是理清思路和方向,最后的效果如下(其中的一个功能)。

walkbox.gif

其中一个功能效果