基于行业的在Python中使用ArcPy进行地理处理的示例?


12

最近,一些学生问我,GIS Analyst / Developer通常试图通过在ArcGIS和ArcPy网站包中使用带有地理处理功能的Python来实现自动化的操作类型。我想知道在搜索一些练习时可能很有用,以确保您创建的内容与行业相关,并且以后可能已经在工作场所重复使用。

最简单的答案是“阅读Esri帮助并仔细阅读样本”,但是我正在寻找最常见的更具体的方案。因此,非常欢迎共享工作流,因为“我们将获得一个带有shapefile的.zip文件,我们使用Python对其进行解压缩,将它们全部投影到X坐标系,加载到ArcSDE地理数据库中,并授予用户访问这些数据的权限”。请轻松提供工作流程的简要说明,不需要任何极端细节。

Answers:


10

对我来说,正如您的问题所暗示的那样,我大量使用Python来实现批处理的自动化,特别是创建可重复的专家计算。如今,我不使用ArcPy,因为我负担不起作为自由GIS顾问的ESRI许可证。我经常使用GDAL / OGR,Shapely,PostGIS,Numpy和SciPy,尽管我列表中的所有内容都可以使用ArcPy来完成(其中有些是可以做到的)。示例包括:

  1. 导出整个英国的区域统计信息,首先需要镶嵌两种不同数据类型的20km栅格图块,在这些栅格上执行一些“映射”,合并10km矢量多边形图块的等效面积,计算结果的区域统计量在输出到逻辑目录结构中的shapefile并刻录到客户端的CD之前,先对栅格mapematics进行栅格处理,然后将统计信息表与原始矢量数据结合起来。
  2. 沿道路或轨道每100m执行一次可见性计算,然后将计算结果分配为路线数据中的M值。
  3. 通过镶嵌/合并栅格和矢量数据的图块,裁剪到所需区域然后转换为专有(非GIS)3D格式的自动化过程来创建3D景观模型。我在兼职工作中经常使用为此开发的Python小库。
  4. 我在一个团队中进行的一个大型项目使用ArcPy创建批处理流程,以将GIS数据中的新数据转换或导出为一种格式,该格式可以由程序性计算机游戏资产生成器使用。批处理“从属驱动程序”也用Python编写并通过Django运行,从而调用了地理处理脚本。
  5. 即使对于小任务,Python也是非常有用的,特别是在有重复的地方(例如,逐个特征处理)。通过版本10中提供的流控制功能,ArcGIS的Model Builder有了很大的改进,但是即使如此,它仍然经常无法提供必要的控制,并且/或者仅用ArcPy编写流程比尝试使用该流程更快,更容易。强大的模型生成器。
  6. 我在Python中创建了一个工具来执行扫掠路径分析(以计算很长的车辆是否可以遵循给定的路线,以及拖车在建筑物之间可能会急转弯的位置。这是自由职业者的另一种专业工具兵工厂。
  7. 从Mapnik产生输出
  8. 在ArcGIS成为多线程之前,我使用Python允许我生成子流程,这些子流程有时可以加速长而缓慢的计算,而不会导致ArcMap的开销使内存混乱。

商业地理处理中的Python很棒,因为您具有Python提供的所有脚本的速度和简洁性,以及处理已编译的C样式代码所提供的速度,因为在解释Py​​thon的同时,它主要是在后台调用已编译的C样式代码。Python提供了可以将大量顺序地理处理任务结合在一起的粘合剂,上面的列表只是我个人使用它的一些东西的小快照。在“过去的美好时光”中,我们将设置一个Watch文件,并让ArcInfo记录我们的命令行输入,然后清理AML(谁记得Arc Macro Language!),以便将可重复使用的地理处理过程与AML粘合在一起。这些天没有什么不同,除了我们使用Python或C#作为粘合剂。


1
有趣的是,我刚刚回答了这个问题(gis.stackexchange.com/questions/52478/…)-这是另一个使用Python作为击败ArcGIS内存泄漏的方法的示例!
MappaGnosis

+1,我特别想看#4上的GIS.SE博客主题
blah238

1
尽管该公司现已解散,而我不久前就离开了,但另一家公司购买了该IP,所以我不知道我能说出多少。无论如何,您可以从我上面评论中的链接中的答案中获得有关多处理方面的一些线索。我想我还可以补充一点,我们的地理处理场有一台16核计算机,两台8核服务器和大约十二个“退役”双核PC,这些PC都是由从属驱动程序运行的。ESRI甚至派了一些人来看看我们做了什么,因为我们没有为此使用ArcServer。我们非常努力地运行机器,以至于两个甚至着火了!
MappaGnosis

7

从哪里开始……尽管我现在在上级/州政府工作,但我在企业中大力支持Python。以下是一些我使用Python执行的任务示例:

  1. 移动数据。使用Python可以非常轻松地完成非常简单的任务,例如定期移动数据,尤其是使用shutil开箱即用的模块时。
  2. 将要素类导出到ArcSDE数据库中导出到shapefile中,以供其他软件包使用。ArcSDE(或其他一些关系数据库)通常是组织中的主记录,但并非每个软件包都可以挂接到数据库中。许多软件包仍然会消耗大量的ole shapefile,并且使用arcpy,无需夜间将其导出,这样您的用户就可以获得最新数据。
  3. 从不同的数据集创建空间数据集。企业中的每个人都使用(并且经常滥用)Excel来保存其数据。使用arcpy(或其他Pythonic方法),可以轻松地获取具有空间成分的表格数据,并从中快速创建空间数据集。文本文件也是如此。我最近为客户端创建了一个ArcToolbox工具,该工具可以读取专有XYZ格式的文本文件并创建启用ZM的折线(实际上共享的折线不能太多)。
  4. 转换GIS数据,以便可以将其输入甚至不知道“空间”是什么的软件中。我现在正在编写工具,这些工具需要GIS数据集(栅格,矢量),并通过其Python API将数据推送到3D建模程序中。该3D包根本不能使用空间数据格式,但是可以使用空间数据后面的文本值和属性。为此,我正在使用arcpy从地理数据库中提取信息并将其推送到文本文件或XML配置文件的方法。
  5. 正在获取数据。是否拥有包含所需数据表的网站?使用beautifulsoup提取它。是否有需要获取数百或数千个文件的FTP站点?使用urllib2ftplib轻松下载它们。

这只是几个例子。在企业中使用Python的最大好处是,即使没有对计算机的完全管理权限(通常是这种情况),您仍然可以完成很多工作。结合良好的学习曲线和Python的可读性,您将获得一个出色的GIS Tech / Analyst自动化工具,该工具没有太多的编程经验。


6

我在一个市政部门工作,而GIS帮派则为我们的各个部门(工程,建筑检查,章程,公园,消防等)提供支持。

  1. 更新包裹和市政地址信息。 我们有相当长的脚本来处理空间数据和属性数据,这涉及使用各种地理处理工具来执行空间工作以及连接到关系数据库以获取信息,然后再将这些信息加入我们的空间数据中。
  2. 自定义工具。 我们使用一些新的Python加载项向导为我们的某些Non-GIS人员创建了自定义工具。我们的一些员工需要读取空间数据并执行一些基本操作。我们设计了工具栏,使他们可以做任何需要做的事情,而无需进入ArcGIS环境的胆量。

正如其他人所说,这些只是几个例子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.