Python加载项与.NET加载项对ArcGIS for Desktop的优缺点是什么?


11

我在ESRI .NET帮助中找到了:

蟒蛇

所有ArcGIS Desktop应用程序都包含一种称为Python的嵌入式脚本语言。通过简化的Python应用程序编程接口(API)可以访问ArcGIS的许多区域(尤其是地理处理区域),从而使创作和自动执行常见任务变得容易。Python脚本易于共享,无需外部开发环境即可生成。有许多公共领域的Python模块专注于科学,工程和数学等领域。凭借其所有优点,Python并不适合所有编程任务。尽管覆盖范围有所改善,但当前并非所有ArcGIS领域都可以使用Python。此外,Python的编辑和调试经验不像商业开发环境(如Visual Studio)所包含的那样复杂或易于使用。最后,您无法使用Python侦听和响应ArcGIS事件,实现COM接口或插入ESRI的许多COM可扩展性点。

并在ArcGIS Desktop帮助中:

ArcGIS 10.1将Python引入了用于编写桌面外接程序的语言列表,从而为您提供了扩展桌面功能的简单解决方案。为了简化Python加载项的开发,必须下载并使用Python加载项向导声明自定义类型。该向导将生成该外接程序正常工作所需的所有必需文件。

Python和.NET加载项是否具有相同的功能?这是否意味着我可以在Python和.NET中做同样的事情?


它在哪里说“ Python和.NET具有创建外接程序的相同功能”?
PolyGeo

对不起,我不好意思表达我的意思。(我更新帖子)
user7172 2013年

1
implement a COM interface, or plug into ESRI’s many COM extensibility points using Python真奇怪 Python可以在COM上正常工作。
内森·W

确实,我已经创建了(简单的)Python加载项,这些加载项通过comtypes使用ArcObjects。但是我还没有尝试在Python中实现COM接口。我不确定与.NET相比是否可行或有多困难。同样,两种类型的加载项都不允许在COM上自动注册,因此某些更高级的东西可以与可以由其安装程序或(ESRI)RegAsm注册的传统COM组件更好地配合使用。
blah238 2013年

1
这不是ArcGIS,但这是我使用Python for MapInfo实现了COM接口的方式nathanw.net/2011/04/07/using-python-and-mapinfo-with-callbacks 我想说,.NET会更容易: )
内森(Nathan W

Answers:


24

这个问题的答案是肯定的。可能需要付出一些努力才能在Python中完成您可以在.Net中完成的所有工作,但是简单却又可能是两件截然不同的事情。在此之后,最简单的解释是“ 否”,Python加载项的功能不如.Net加载项。但是,Python加载项可以完成的任务更易于实现和测试,而且速度更快。

从纯粹的技术角度来看,ArcGIS Desktop外接程序框架提供以下功能:

  • 一个良好的,基于XML的架构,用于描述一系列常见的桌面集成点和组件:按钮,工具栏,菜单,工具,多项目菜单和扩展,以及一种以声明方式轻松地从您的代码到ArcGIS Desktop
  • .esriaddin用于分发桌面自定义代码的文件格式和文件结构()。
  • 一种用于安装,验证和缓存已安装的机制.esriaddins,因此,如果已安装插件的源文件已更改,它将把已更改的文件重新加载到本地桌面加载项缓存中。
  • 外接程序中代码的一组安全性和身份验证机制:.esriaddin文件的数字签名,对允许安装外接程序所需的身份验证级别的管理控制。

这里的外接程序框架所缺少的是按钮等后面的行为或功能的任何形式上的约定。当安装.Net SDK for ArcGIS时,可以在项目管理对话框中以外接程序向导的形式获得Visual Studio集成。 ,文档,代码段,ArcObjects绑定等。因此,一旦您超出了外接程序框架提供的入口点,.Net外接程序就可以让您继续使用ArcObjects API的其余部分,它也捆绑在一起,以及包含已经可以使用的常见任务的代码片段库。ArcGIS中没有这样的Python Developer SDK:Python的所有功能都是通过arcgisscripting / arcpy公开的,并且已经捆绑在产品中。因此,.Net SDK是大量下载文件,而Python中最接近的是相对较小的“加载项向导”下载文件。

在另一方面,Python的能够消耗/实现COM接口,但使用COM从Python是不与任何ArcGIS的SDK捆绑,或在ArcGIS的帮助系统中记录。如果您不熟悉ArcGIS开发,除非您真的知道自己在做什么,否则这足以成为入门的障碍。您可以在此处使用Python进行COM,但它与Turing Tarpit十分接近,除非您已经是熟悉COM和ArcObjects内幕的专家级用户,否则很难证明花费的时间。

我建议您看看使用arcpy可以做什么。您可以自动执行许多任务,例如调用地理处理工具对地图文档进行批处理,并且Python加载项使您可以使用某些明确定义的事件接收器一些对话框控件,以及arcpy的基本功能。如果您无法根据文档中的说明来想办法在Python中完成任务(您需要进行一些复杂的用户界面交互,或者陷入Python外接程序向导中未公开的事件,或者仅使用ArcObjects中提供的功能) ,然后在.Net加载项中进行开发。

抱歉,这比一成不变的肯定或否定答案更细微差别,但是它应该使您了解应该使用外接程序中的Python还是.Net路由。

我想我应该添加此公开内容:我设计并开发了许多Python特定于ArcGIS的外接程序的功能。


我想知道2013年和Desktop 10.1的答案是否仍然有效。例如,看起来python加载项现在称为python工具箱?Python和SDK库中的其他功能可能已更改。
intotecho

2

在.NET中开发外接程序的缺点之一是,每个新版本的ArcGIS都使用不同版本的不兼容的ArcObjects和不同版本的不兼容的Visual Studio。.NET外接程序生成的二进制文件通常与更高版本的ArcGIS兼容,但前提是您不希望在高于最初版本的ArcGIS版本中对外接程序进行任何更改。发达。

我开发了一个.NET加载项,用于将人口普查局TIGER /线数据图层加载到ArcGIS 10.0中的地图,并且二进制加载项在ArcGIS 10.4中仍然有效。不幸的是,当我想对外接程序进行修改时,我尝试将解决方案引入与ArcGIS 10.4兼容的Visual Studio版本中,由于对ArcObjects的调用和ArcGIS功能的不兼容,我充斥了大量错误消息。视觉工作室。

使用Python开发外接程序涉及使用ArcPy而不是ArcObjects,因此文档更易于访问,并且为新版本的ArcGIS修改代码的过程应该更加容易。

使用Python而不是.NET的主要缺点是在Python中构建GUI界面要困难得多。可以使用诸如wxPython之类的软件包,但是要使其在ArcGIS中运行存在很多困难。与.NET中可以建立的对话框相比,“工具箱”用户界面的局限性要大得多。


1

您正在寻找桌面环境,因此.NET当然是一个选择。但是,由于大部分ArcGIS Server可在多个平台上运行,因此您将无法使用.NET进行操作。

我的两分钱:如果您要进行深入的UI工作,我建议您使用.NET,因为您可以轻松地将UI调高。如果您真的只是脚本编写人员,并且正在使用ArcGIS Python的更深入的分析部分,则可以轻松得多地迁移到Server(或“云”)。

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.