在 Python 中使用 ArcObjects

1. 为什么使用 Python?

  • ArcGIS 10.0 之后官方将不再提供对 VBA 的支持。
  • 从 10.0 版本开始,ArcMap 和 ArcCatalog 里面都集成了 Python 命令行。
  • ESRI 提供了 Python 的脚本对象。
  • IDLE 是一个像样的开发和调试环境。
  • Python 中可以使用 ArcObjects。

2. 关于地理处理对象

  • 从 9.3(arcgisscripting) 和 10.0(arcpy)开始, Python 随时都可以使用地理处理对象。
  • 在 9.3 中:包含了诸如游标之类的数据访问对象等附加功能。
  • 在 10.0 中:包含了诸如地图文档自动化等附加功能。
  • 尽管如此,大量的功能只能通过 ArcObjects 才能实现。

3. 使用 ArcObjects

 

        在 Python 中要调用基于 COM 的 ArcObjects 就得使用 comtypes 模块。从以下地址下载:http://sourceforge.net/projects/comtypes/

 

读取和导入模块

 

 

创建和对象类型转换

 

 

独立运行程序的许可

 

 

从外部寻找一个已运行的 ArcGIS 实例

 

 

获取已选择的图元

 

 

 

使用 IObjectFactory 创建会话对象。 获取了 ArcGIS 程序的实例之后,就可以使用 IObjectFactory 创建新的对象

在 10.0 中,可以使用 ArcGIS 程序里面内置的 Python 命令行运行脚本。另外,也可以使用 AppRef 获得进程的句柄

 

 

 

UID 和枚举

同样,也可以返回多个值

 

 

 

空值、IsNull 和 None。 支持使用 None 作为参数中的空值

通过布尔测试来判断是否空值,使用 is None 来判断是否数据库中的空值(图元属性的空值)

 

 

 

写入和检索属性 (最好是使用地理处理工具来创建表以及增加字段)

 

 


创建一个用于 ArcMap 或 ArcCatalog 的 COM 对象

  1. 新建一个 IDL 文件,用来定义对象和接口。
  2. 使用 MIDL 编译器编译并生成一个 TLB 文件:midl DemoTool.idl
  3. 使用 Python 实现这个类并注册
  4. 注册 COM 对象: python DemoTool.py -regserver

 

其他一些建议

  • 对 COM 的调用有任何疑问都可以查看 comtypes 生成的封装代码(在 Python25/Lib/sitepackages/comtypes/gen 目录下)
  • 避免在 Python 中大量的使用细粒度的 ArcObjects
  • 为了获得更好的性能,建议使用 C++ 去创建粗粒度的 COM 对象
  • 使用地理处理对象(geoprocessing)和地理处理工具(arctoolsbox)来简化任务(提高性能)
  • 注意阅读桌面版帮助,了解脚本中可以使用哪些功能

 

本文翻译自 Mark Cederholm 的 PDF:Using ArcObjects in Python

示例代码:http://www.pierssen.com/arcgis10/python.htm

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值