早在ArcGIS9.0版本已经支持Python2.1了,通过Dispatch Geoprocessor方式调用GP工具,还依赖于PythonWin。
ArcGIS9.2版本引入了arcgisscripting模块,支持跨平台操作,支持Python2.4版本,而且不再依赖于PythonWin,Calculate Field工具也支持Python作为解释器。
在ArcGIS9.3/9.3.1时期,Python进行了微小的调整,支持了Python2.5版本,对arcgisscripting模块进行了升级。
ArcGIS10是一个里程碑式的版本,该版本引入了ArcPy,这也是本章学习的焦点,支持Python2.6版本,Python Windows的引入让Python开发者使用更加方便,而且也引入了制图等模块来丰富相关的功能。ArcGIS10.1引入了Python Addin与Python Toolbox,更加坚定了Esri支持Python的决心,而且Label Expression也支持Python作为解释器。
ArcPy.Mapping 是ArcGIS10推出的一个针对所有许可均可使用的 Python 脚本模块,主要是用于操作现有地图文档和图层文件的内容;提供自动执行导出和打印的函数。ArcPy.Mapping 可用于自动执行地图生产;它扩展了数据驱动页面的功能,同时,因其包含PDF文档的处理函数,可以为用户构建完整地图册提供便利。另外ArcPy.Mapping 脚本可以自动创建和管理要通过ArcGIS for Server 发布的地图服务。
地图文档(MapDocument)是ArcGIS经常使用的一种数据格式,它可以存储地图图层、页面布局和所有其他地图属性的规范(包括符号、标注等用户常用的制图需求)。通过地图文档,用户可以方便地在 ArcMap 中保存、重复使用和共享自己的工作内容。
MapDocument 对象通常是在地图自动化脚本中创建的首批对象引用之一,因为它是许多 ArcPy.Mapping 函数的必要参数。通过MapDocument 对象,用户基本上可以访问地图文档中的几乎所有其他对象(例如,数据框、图层、页面布局元素)。
一般情况下,用户只需要输入正确的地图文档绝对路径即可获得地图文档对象,然后可以获得该地图文档的相关属性(如描述信息、存储路径、概要信息、标题信息、页面大小等),如果对某些属性信息进行了修改,也会支持地图文档的保存和另存为“拷贝”功能,另外也支持不同类型工作空间的替换功能。
·地图文档(MapDocument)
语法:MapDocument (mxd_path),只需要输入地图文档的绝对路径即可。
以下为该函数的脚本示例:
·列出问题数据源(ListBrokenDataSources)
语法:ListBrokenDataSources (map_document_or_layer)。
有时候用户经常会打开已经丢失数据源的地图文档,一旦打开这种地图文档,会占用用户大量的时间,ArcPy提供了查看问题数据源的函数,可以方便地让用户了解问题数据源的信息。
以下为该函数的脚本示例:
·替换工作空间(replaceWorkspaces)
如果用户已经得知所操作的地图文档的数据源有问题,就需要用正确的数据源来进行替换,那么就需要使用ArcPy提供的修复数据源函数来完成。ArcPy提供了几种修复数据源的方法,针对地图文档对象(MapDocument)、图层对象(Layer)、表视图对象(TableView)分别有两种适用方法:一个是findAndReplaceWorkspacePaths函数,该函数只适合同一个工作空间类型的转换;另一个是replaceWorkspaces函数,该函数可以适合于不同工作空间类型的转换,比较通用。
在介绍该函数之前,需要再着重说明一下几个重要的概念:工作空间、工作空间路径、工作空间类型。
工作空间是一种数据容器,也可以理解为数据源。工作空间可以是包含 shapefile、CAD 文件或栅格数据等内容的文件夹,也可以是 ArcInfo Workstation coverage、个人地理数据库、文件地理数据库和 SDE 连接等。工作空间路径指工作空间的系统路径。对于基于文件的数据(如 CAD、shapefile 或栅格),工作空间路径包括了该数据所在的文件夹的名称;对于基于文件的地理数据库,工作空间路径包括地理数据库的名称。SDE 工作空间路径由 SDE 连接文件的系统路径定义。工作空间类型是 ArcGIS 支持的数据模型格式。例如,shapefile、个人地理数据库、文件地理数据库、CAD、SDE,等等。
接下来以地图文档的replaceWorkspaces函数为例,来看一下该函数的用法。
语法:replaceWorkspaces (old_workspace_path, old_workspace_type,new_workspace_path, new_workspace_type, {validate})。
以下为该函数的脚本示例: