已安装Python,又想用ArcPy农民想搞开发没资金,怎么搞

一种基于Python与arcpy的批量图形文件转换方法_参考网
一种基于Python与arcpy的批量图形文件转换方法
刘桂英摘 要:在基于ARCGIS的地理信息系统的开发中,有时需要把MDB空间数据库文件转换为shp格式文件,传统调用工具箱进行转换的方法在转换量较多的时候显得十分麻烦。该文设计了一种使用Python脚本和arcpy库,实现对MDB空间数据库文件的批量转换方法,有效减轻人工转换的工作量,又省去学习AO接口的麻烦。关键词:arcpy Python 批量转换中图分类号:TP3 文献标识码:A 文章编号:(2015)11(a)-0001-02在基于ARCGIS的地理信息系统的开发中,人们在很多地方下载或是地图数据交换的时候,通常是以单一文件MDB的格式操作,因为单一文件确实更方便发布和传播,但是在基于ArcGIS的GIS系统开发中,往往喜欢使用矢量地图文件shp格式,这样方便在系统中查找和修改相应的图层。这种情况下,大家就需要把单一的MDB地图数据转化为shp格式的矢量地图数据。虽然ArcGIS提供很方便的转换方法,但是如果量大的情况下,人工转换会变得好麻烦。为了解决上述问题,很多人可能会选择运用AO接口,编写一个工具实现批量转换。虽然这不失为一个好方法,但是需要对庞大的AO接口非常熟悉的工程师才能以较快时间的开发出来,对于一般人来说,学习AO接口的成本实在太高了。该文介绍了一种非常简单高效的解决方法。1 环境介绍Python 是一种面向对象的跨平台的解析性的脚本语言。Python具有脚本语言中最丰富和最强大的类库,而且能把其他语言制作的各种模块轻松地联结在一起。Python非常简单易学,开发效率极高。arcpy是ArcGIS的一个Python包,包含对地图操作和地图代数的支持,支持编辑处理和几何操作。Python已经与ArcGIS高度集成,方便实现GIS的各种处理流程。2 实现方法使用Python与arcpy库可以方便地实现图形文件的批量转换。如图1所示,实现步骤大概可以分为5步,首先收集整理MDB,然后判断是否全部已经转换完毕,如果没转换完毕,则逐个调用自定义函数MDB2SHP进行转换,最后将转换结果放到一个输出目录里。2.1 收集整理MDB数据将所有需要转换的MDB文件都放进一个文件夹里,作为转换前准备。2.2 导入arcpy库在Python中操作使用ArcGIS的功能,必须先导入ArcGIS提供的Python类库arcpy。arcpy库是ArcGIS产品自带的,不需要额外安装。导入方法是:import arcpy2.3 文件转换文件转换实现自定义了一个转换函数MDB2SHP,从MDB文件转换到矢量文件shp,需要使用arcpy库提供的FeatureClassToShapefile_conversion方法。该自定义函数的具体实现如下:import arcpydef MDB2SHP(MdbFile, dct):arcpy.env.workspace = MdbFileoutDir = dctfcs = arcpy.ListFeatureClasses()fcCount = len(fcs)for fc in fcs:arcpy.FeatureClassToShapefile_conversion(fc, outLocation)2.4 批量执行批量执行就是运用目录遍历的方法,逐个执行。在Python中,内置了一个非常简单目录遍历方法os.walk()。该函数会返回一个三元tupple(dirpath, dirnames, filenames) ,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。然后利用for循环进行遍历。3 测试与验证该次测试在ArcGIS10.2.2环境下进行的。以湛江市地图为例,有4个mdb文件,分别为市镇乡线界.MDB,地理环境.MDB,地标.MDB, 渔业.MDB运行脚本后,得到很多shape文件,加载这些shape文件后,得到一个综合多种信息的地图,如图2所示。4 结语该文介绍了一种利用Python和arcpy库快速开发批量图形文件转换的方法,通过这个方法可以了解到Python的强大和灵活易用,结合arcpy可以实现很多ArcGIS的功能和特性,合理利用会对GIS开发效率提高极大的帮助。参考文献[1] 吴战克.基于ArcGIS10_1的区图层批处理合并[J].地理信息空间,):93-94.[2] 秦思娴.基于Python实现地理国情房屋建筑专题信息提取 [J].测绘与空间地理信息,):1-3.[3] 朱道强,关海涛. Python在ArcGIS中的应用[J].测绘与空间地理信息,):152-154.[4] 田学志.基于Python的Arcgis地理处理应用研究[J].计算机光盘软件与应用,2013(7):46,50.
2015年31期
科技资讯的其它文章4861人阅读
第1章&ArcPy简介
<span style="font-size:14 color:#.1什么是
是一个以成功的 模块为基础并继承了
功能进而构建而成的站点包。目的是为以实用高效的方式通过
执行地理数据分析、数据转换、数据管理和地图自动化创建基础。
该包提供了丰富纯正的 体验,具有代码自动完成功能(输入关键字和点即可获得该关键字所支持的属性和方法的弹出列表;从中选择一个属性或方法即可将其插入),并针对每个函数、模块和类提供了参考文档。
在 中使用 的另一个主要原因是,是一种通用的编程语言。是一种支持动态输入的解释型语言,适用于交互式操作以及为称为脚本的一次性程序快速制作原型,同时其具有编写大型应用程序的强大功能。用
应用程序的优势在于,可以使用由来自多个不同领域的
专业人员和程序员组成的众多
小群体开发的附加模块。
<span style="color:#.2 ArcPy
利用 可访问地理处理工具和其他函数、类和模块,使用它们可快速轻松地创建简单或复杂工作流。使用以
应用程序和脚本的优势在于,可以访问并使用由来自多个不同领域的
专业人员和程序员开发的大量
一般来说,按工具、环境、函数、类和模块进行组织。
<span style="color:#、运行工具
以下示例显示了如何执行缓冲区工具。执行该工具时,消息将默认显示在帮助部分中
窗口的右侧。
例<span style="font-size:14 color:#.1
执行缓冲区工具
&&& arcpy.Buffer_analysis(&c:/data/Portland.gdb/streets&,
&c:/data/Portland.gdb/steets_buffer&,
&500 METERS&)
以下是另一个运行工具的示例。该示例使用的是数据管理工具箱和转换工具箱中的工具。向输入
要素类添加一个字段并计算该字段,然后将要素类加载到
企业级地理数据库中。
例<span style="font-size:14 color:#.<span style="font-size:14 color:#&执行多个工具
&&& arcpy.AddField_management(&c:/data/Portland.gdb/streets&,
&LENGTH_MILES&, &TEXT&)
&&& arcpy.CalculateField_management(&c:/data/Portland.gdb/streets&,
&LENGTH_MILES&, &!shape.length@miles!&,
&PYTHON_9.3&)
&&& arcpy.FeatureClassToFeatureClass_conversion(&c:/data/Portland.gdb/streets&,
&Database Connections/MySDE.sde/PortlandDataset&,
&streets&)
执行地理处理工具时,工具的结果会返回到
对象中。通常,该对象是由工具生成或更新的输出数据集的路径。在其他情况下,它可能会包含其他类型的&#20540;,如数&#20540;或布尔&#20540;。如果工具的输出是多&#20540;参数,则这些&#20540;可在列表中以列表的形式返回。
以下代码示例显示了如何捕获返回&#20540;以及这些&#20540;的具体内容:
返回输出要素类的路径,该结果可用作其他函数的输入;返回要素数目。
例<span style="font-size:14 color:#.<span style="font-size:14 color:#&从工具获取结果
&&& result = arcpy.Buffer_analysis(&rivers&,
&riverBuf&, &50 METERS&)
&&& print&result
C:\Portland\Portland_OR.gdb\riverBuf
&&& arcpy.Clip_analysis(&streets&, result,
&streets_50m_of_rivers&)
&&& result = arcpy.GetCount_management(&streets_50m_of_rivers&)
&&& print&result.getOutput(0)
<span style="color:#、使用环境设置
可将地理处理环境设置视为影响工具执行结果的附加参数。这些参数与正常的工具参数不同,因为它们是通过工具单独进行设置的,并且供工具在运行时查询和使用。诸如、以及新栅&#26684;数据集的
等环境设置均可通过工具进行指定和支持。
可通过 类来获得属性形式的环境设置。这些属性可用于检索和设置当前环境&#20540;。下面是如何使用环境&#20540;的示例:
例<span style="font-size:14 color:#.<span style="font-size:14 color:#
设置工作空间环境
&&& arcpy.env.workspace =
&c:/data/Portland.gdb&
&&& arcpy.Buffer_analysis(&streets&,
&streetBuf&, &500 METERS&)
&&& arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management(&streets&).getOutput(0)
&&& if&arcpy.env.cellSize != 30:
&&&&&&&&arcpy.env.cellSize = 30
<span style="color:#、使用函数
函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。除工具之外,还提供了多种函数,用来更好地支持地理处理工作流。函数可用于列出某些数据集、检索数据集的属性、检查数据是否存在、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。
以下示例代码显示的是获得数据的属性:
例<span style="font-size:14 color:#.<span style="font-size:14 color:#
import&arcpy
# prints True
print&arcpy.Exists(&c:/data/Portland.gdb/streets&)
# prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr = arcpy.Describe(&c:/data/Portland.gdb/streets&).spatialReference
print&sr.name
<span style="color:#、使用类
类,如&和&类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。类的作用类&#20284;于建筑设计蓝图。蓝图为如何创建事物提供了一个框架,而类则可用来创建对象,即通常所称的实例。
例<span style="font-size:14 color:#.<span style="font-size:14 color:#
import&arcpy
spatial_ref = arcpy.SpatialReference(&Hawaii Albers Equal Area Conic&)
<span style="color:#、使用模块
包含涉及其他 领域的模块。有一系列模块支持
,包括&(arcpy.da)、&(arcpy.mapping)、&(arcpy.sa)
和&(arcpy.na)。
例如,模块中的工具将使用 工具箱中的工具,但被配置为支持“地图代数”。因此,执行 与执行 工具箱中的坡度工具的作用是相同的。
第章 使用准备工作
<span style="color:#.<span style="color:#&导入
在导入 之后,可以运行随 安装的标准工具箱中的所有地理处理工具。
例<span style="font-size:14 color:#.1
# Importing arcpy
import&arcpy
模块为通常包含函数和类的 文件。有一系列模块支持 ,包括制图模块、模块 和模块 。
要导入整个模块,请使用导入模块:
例<span style="font-size:14 color:#.<span style="font-size:14 color:#&导入模块
# Import only arcpy.mapping
import&arcpy.mapping
在很多情况下,用户可能不想使用整个模块或无需使用整个模块。如果只导入某一模块的一部分,可以使用
语句。在下例中,将导入
类(类包含所有地理处理环境)。现在无需以 的形式访问环境,而可以将其简化为 。
例<span style="font-size:14 color:#.<span style="font-size:14 color:#&导入部分模块
# Import env from arcpy and set the workspace environment
from&arcpy&import&env
env.workspace = &c:/data&
遵循相同的思路,有时用户可能需要注意:如何对模块或模块的一部分进行标识以使脚本更具可读性,以及对于首选项来说默认名称可能过长。在上述任一情况下,均可以使用
的形式。与先前的示例相同,下面的示例中也将导入
类,但会指定
类的名称:
例<span style="font-size:14 color:#.<span style="font-size:14 color:#&使用别名
# Import env from arcpy as ENV and set the workspace environment
from&arcpy&import&env
ENV.workspace = &c:/data&
模块的内容将被直接导入到命名空间中,这表示用户随后可以直接使用所有这些内容,而无需为它们添加前缀。使用此方法存在一些风险。具有相同名称的其他对象、变量、模块等将被覆盖,另外在使用大型模块时,命名空间可能会变得异常拥挤和杂乱。此方法可能导致在阅读脚本时出现不确定或难以阅读的情况。
但是在某些情况下,可以简化代码,例如,在使用 扩展模块的 模块的情况下。模块的优势之一在于,可以在一行中嵌套多个类和函数以生成输出栅&#26684;对象。
例<span style="font-size:14 color:#.<span style="font-size:14 color:#&直接导入
# Import arcpy and the sa module
import&arcpy
from&arcpy&import&sa
arcpy.CheckOutExtension(&spatial&)
# Get input parameters
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (sa.Raster(inRaster1) &#43; (sa.Raster(inRaster2) -
sa.Raster(inRaster3)))
<span style="color:#.2
地理处理环境设置()
每个工具都含有一组用于执行操作的参数。其中一些参数在所有工具中通用,如容差或输出位置。这些参数可从所有工具在运行期间使用的地理处理环境中获得默认&#20540;。执行某一工具时,当前环境设置也可用作全局输入参数&#20540;。诸如感兴趣区域、输出数据集的空间参考以及新栅&#26684;数据集的栅&#26684;像元大小等设置都可以使用地理处理环境指定。
<span style="color:#、获取和设置环境设置
环境设置以&类的属性的方式公开。这些属性可用于检索或设置当前&#20540;。每个环境设置都有一个名称和一个标注。标注显示在
中的环境设置对话框上。名称用在脚本或
应用程序的命令行中。下面是如何使用环境&#20540;的示例:
环境可作为环境类中的读写属性进行访问,方法为
环境名称。还可以利用
语句简化代码,而不必为每个环境名称都添加
例设置环境&#20540;
import&arcpy
from&arcpy&import&env
# Set the workspace environment setting#
env.workspace = &c:/St_Johns/data.gdb&
# Set the XYTolerance environment setting#
env.XYTolerance = 2.5
# Calculate the default spatial grid index, divide in half, then
# &&set the spatial grid 1 environment setting#
result = arcpy.CalculateDefaultGridIndex_management(&roads&)
env.spatialGrid1 = float(result.getOutput(0)) / 2
# Clip the roads by the urban area feature class#
arcpy.Clip_analysis(&roads&,&urban_area&,&urban_roads&)
例获取和设置环境&#20540;
import&arcpy
from&arcpy&import&env
# Check the current raster cell size and make sure it is a certain size
# &&for standard output#
env.workspace = &c:/avalon/data&
if&env.cellSize & 10:
&&&&env.cellSize = 10
elif&env.cellSize & 20:
&&&&env.cellSize = 20
arcpy.HillShade_3d(&island_dem&,
&island_shade&, 300)
设置环境&#20540;时要注意拼写和大小写。将&#20540;指定给
(注:是正确的&#26684;式)是不同的。
<span style="color:#、使用环境设置处理临时数据
是提供保证存在的地理数据库和文件夹位置的只读环境。这意味着,您可以随时可靠地使用地理数据库或文件夹,而不必创建或管理一个。
例处理临时数据
import&arcpy
inputFC = arcpy.GetParameterAsText(0)
clipFC = arcpy.GetParameterAsText(1)
outputFC = arcpy.GetParameterAsText(2)
# Use scratchGDB environment to write intermediate data#
tempData = arcpy.CreateScratchName(workspace=arcpy.env.scratchGDB)
bufferResult = arcpy.Buffer_analysis(inputFC, tempData,
&50 METERS&)
arcpy.Clip_analysis(clipFC, bufferResult, outputFC)
<span style="color:#、重新设置环境
由于地理处理环境对工具操作和输出有着很大的影响,因此需要保证能够追踪环境设置并在必要时将其重置为默认状态。
可使用&函数恢复默认环境&#20540;,或者可以使用&函数重置特定环境。
例重新设置环境
# Reset geoprocessing environment settings
arcpy.ResetEnvironments()
# Reset a specific environment setting
arcpy.ClearEnvironment(&workspace&)
<span style="color:#、常用设置
环境设置以 类的属性的方式公开。这些属性可用于检索或设置当前&#20540;。可将地理处理环境设置视为影响工具执行结果的附加参数。
表常用属性
支持像元大小环境设置的工具可以设置在操作时使用的输出栅&#26684;像元大小或分辨率。默认输出分辨率由最粗糙的输入栅&#26684;数据集决定。
支持输出范围环境的工具只会处理落入此设置中所指定范围内的要素或栅&#26684;。
支持掩膜环境的工具只会考虑运行过程中落入分析掩膜范围内的像元。
支持 环境设置的工具将仅处理其中 有效的栅&#26684;
spatialGrid1
spatialGrid2
spatialGrid3
遵循输出空间&#26684;网
、和 环境的工具将创建具有指定空间索引&#26684;网的要素类(如果要素类支持空间索引&#26684;网)。
支持分块大小环境的工具用于为存储在数据块中的栅&#26684;设置分块大小。
支持当前工作空间环境设置的工具将指定的工作空间用作地理处理工具输入和输出的默认位置。
属性域环境的工具可为输出地理数据集的
属性域设置特定范围。
XYResolution
支持此环境的工具可将 分辨率应用到输出地理数据集中。
XYTolerance
支持此环境的工具会覆盖在地理数据库内创建的地理数据集上的默认
<span style="color:#.3
访问许可和扩展模块
每当在脚本中执行工具时,都会需要 许可。此外,运行 扩展模块中的工具,如 扩展模块,也需要针对该模块的许可。如果无法获得必要的许可,工具将运行失败并返回错误消息。例如,如果您安装有
的许可,并试图运行需要 或 的许可,则工具将运行失败。
使用 或 许可时,脚本应将产品设置为 或 。同样,使用
许可时,脚本应将产品设置为
。如果未明确设置许可,将根据首次访问
工具、函数或类时的最高可用许可等级初始化许可。
每种工具都将执行检查以确保具有相应的许可。如果不具有所需的许可,工具将运行失败。为避免脚本在执行到一半时失败,可以在脚本开头执行检查,以尽早发现失败。
注意:只有在独立脚本中才必须设置产品和扩展模块。如果从
窗口运行工具或者使用脚本工具,产品已在应用程序内进行设置,激活的扩展模块取决于“扩展模块”对话框。
<span style="color:#、、许可
产品模块会在导入 前导入,以定义脚本使用的 许可。&函数可用于检查
许可的可用性,而&函数能报告当前的产品许可。
例检查许可。
import&sys
import&arcpy
arcpy.env.workspace =
&c:/data/world.gdb&
if&arcpy.CheckProduct(&ArcInfo&) ==
&Available&:
&&&&arcpy.PolygonToLine_management(&Lakes&,
&LakeLines&)
&&&&msg = 'ArcGIS for Desktop Advanced license not available'
&&&&print(msg)
&&&&sys.exit(msg)
<span style="color:#、扩展模块许可
可以从许可管理器中获取扩展模块许可,并在不再需要时将其归还。&函数用于查看是否存在可为特定类型的扩展模块检出的许可,而&会真正获取许可。脚本获取到扩展模块许可后,即可执行扩展模块工具。脚本使用完特定扩展模块中的工具后,应使用&函数将许可归还给许可管理器,以便其他应用程序使用。当脚本完成时,所有检出的扩展模块许可和设置的产品许可都将归还给许可管理器。
下面的示例将执行一些 工具,并将 产品许可设置为 ,因为执行扩展模块中的工具时不需要
的许可。如果未明确设置 的许可,并且无可用的 许可,则脚本将失败,因为运行扩展模块工具需要 许可。
例检查扩展模块许可
class&LicenseError(Exception):
# Set desktop license used to ArcGIS for Desktop Basic#
import&arcview
import&arcpy
from&arcpy&import&env
&&&&if&arcpy.CheckExtension(&3D&) ==
&Available&:
&&&&&&&&arcpy.CheckOutExtension(&3D&)
&&&&&&&&# Raise a custom exception&&&&&&&&#
&&&&&&&&raise&LicenseError
&&&&env.workspace = &D:/GrosMorne&
&&&&arcpy.HillShade_3d(&WesternBrook&,
&westbrook_hill&, 300)
&&&&arcpy.Aspect_3d(&WesternBrook&,
&westbrook_aspect&)
except&LicenseError:
&&&&print&&3D Analyst license is unavailable&&&
&&&&print&arcpy.GetMessages(2)
&&&&# Check in the ArcGIS 3D Analyst
扩展模块&&&&#
&&&&arcpy.CheckInExtension(&3D&)
调用地理处理工具
<span style="color:#.1
地理处理工具
<span style="color:#、地理处理
地理处理适合于各类使用 的用户。无论是初学者还是高级用户,地理处理都可能是日常使用 的重要组成部分。地理处理的基本目的是提供用于执行分析和管理地理数据的工具和框架。地理处理所提供的建模和分析功能使得
成为一个完整的地理信息系统。
地理处理提供了大量成套工具,用于执行从简单的缓冲区和面叠加到复杂的回归分析和影像分类等各项
任务。执行自动操作的任务可以是普通任务
例如,将大量数据从一种&#26684;式转换为另一种&#26684;式。也可以是很有创造性的任务,这些任务使用一序列操作对复杂的空间关系进行建模和分析
例如,通过交通网络计算最佳路径、预测火势路径、分析和寻找犯罪地点的模式、预测哪些地区容易发生山体滑坡或预测暴雨事件造成的洪水影响。
<span style="color:#、常用地理处理工具
可将地理处理视为一种语言,其中名词是地理数据(例如要素、表和栅&#26684;),而工具是动词(例如复制、裁剪和连接)。与任何语言一样,需要知道一些名词和动词才能进行交流,而本部分(及后续内容)向您介绍这些常见的地理处理动词(工具)。如果您不熟悉要素类和栅&#26684;等名词,则可作为一份很好的入门材料。
最常用的 工具可自动执行一些以往手动完成的任务,例如,通过在一张地图上方叠加另一张地图来编译新地图,或者以物理方式将地图剪切成表示特定研究区域的各个部分,然后更改其投影。在此类手动执行的任务中,有些任务操作起来非常困难和复杂,以至于它们阻碍了地理知识和数据的宣传普及,而它们也是发明
的主要动力。
·&叠加分析和邻域分析
这两个常用的工具集可以回答两个最基本的地理问题:什么在什么之上?以及什么在什么附近?
·&表面分析
地理现象不仅仅局限于离散的点、线和面,还包括在地球表面(或正在研究的任何星球或物体)上连续变化的数据,例如,高程、坡度、降雨量和温度等。这种连续数据称为表面并用栅&#26684;和
进行建模。
·&空间统计数据和非空间统计数据
地理学中有这样一条公理:事物的距离越近,其相&#20284;程度越高。该公理不仅为用来发现和表征地理模式且功能强大的空间统计工具奠定了基础,而且还为标准的非空间统计工具(如最小&#20540;、最大&#20540;、总和、频率、均&#20540;和标准差)奠定了基础。
将数据存储在易于访问的表中,并且大部分工作流都包括某种表管理操作,例如,添加或删除字段、创建表间关系或根据包含坐标的列创建要素。
·&选择和提取
数据集包含的数据通常远超出需求,而一组常见的任务可用于从较大且较复杂的数据集中减去数据或提取数据。
<span style="color:#、工具和工具箱
地理处理工具用于对地理数据执行一些非常小但非常重要的操作,例如提取和叠加数据、更改地图投影、向表中添加列、计算属性&#20540;、面叠加和最优路径等等。您不仅用于数百种工具可供选用,还可通过模型构建器可视化编程语言)或脚本(文本编程语言)创建您自己的工具。
工具都储存在工具箱中。提供了数百种工具,并将它们进行了分类并放到了十余个工具箱中,这些工具功能丰富、涉及领域广泛。
图提供的工具箱
<span style="color:#.2
地理处理工具运行方法
可以使用多种方法来执行工具。最常见的方法是打开工具对话框,填入工具参数,然后单击确定执行工具。对于系统工具,工具执行操作在后台进行,这意味着在工具执行的同时也可继续在
中工作。工具执行完成时,将收到一条通知消息,可以在结果 窗口中查看有关工具执行情况的信息。通常,工具创建的输出会自动添加到
内容列表。
要执行工具,首先必须找到该工具,方法是在搜索 窗口中搜索该工具或在目录 窗口中浏览到该工具。
<span style="color:#、使用工具对话框执行工具
要从搜索 窗口中打开工具对话框,请单击该工具名称。
图搜索工具
要从目录 窗口或 窗口中打开工具对话框,请双击该工具,或右键单击并选择打开。
图打开工具
工具对话框打开后,填入工具的参数。各工具自己都有唯一一组参数。有些参数为必需参数,只有填入这些参数(即,它们必须具有&#20540;)后工具才可执行。其他参数为可选参数,也就是说,可以将这些参数留空或接受其默认&#20540;。工具具有输入和输出参数。输入参数通常是现有数据集或选项,它们控制着工具的功能。输出参数通常是工具创建的新数据集。对于输出数据集参数,在您输入一个或多个输入参数后,将自动创建输出数据集名称和位置。
<span style="color:#、使用模型构建器执行工具
模型构建器是一款功能强大的应用程序,通过它可将一系列工具串联在一起,一个工具的输出用作另一个工具的输入,如下所示。
图模型构建器
在模型构建器中,添加工具,打开其对话框,填入参数,然后单击确定按钮。如果单击确定后,工具并未执行,那么必须运行模型,该工具才能执行。这样可将多个工具串联在一起,可以一次性执行所有相关工具。
模型是自动处理工作的方式。创建模型时,保留可以使用不同输入数据多次执行的数据处理工作流。使用模型可自动处理无数的任务。
<span style="color:#、通过
窗口执行工具
还可使用基于文本的编程语言(如 )来执行工具。由于 是基于文本的编程语言(而不是像模型构建器那样的可视化编程语言),因此要依次输入工具名称及其参数。在下图所示的
窗口中,您可以输入
代码并立即执行该代码。
虽然与使用工具对话框相比,该工作显得有些多余(谁也不愿意输入成批的代码),但使用
窗口具有很多优势:
·&可以使用逻辑语句(如
)进行条件执行或使用
循环遍历数据集,也可访问
数据结构(如字典和列表)。
·&可以访问标准
模块中的功能来对字符串、数学或文件和文件夹进行操作。下图中,模块被用于浏览系统文件夹中的所有文件。
具有丰富的可用于操纵和变换数据的第三方模块。
站点包(在下图中通过
语句进行加载)时,可以访问所有地理处理工具以及许多用于逐行读取要素、描述数据或与
交互的其他函数。例如,在下图中,使用
模块向当前地图中添加图层。
图代码示例
<span style="color:#、通过
脚本执行工具
可在 窗口中输入代码并立即将其进行执行。但您也可使用文本编辑器或集成开发环境
)在磁盘中创建
文件(带有
扩展名的文件)。这些文件(称为脚本)是可从操作系统提示符或通过创建执行脚本的脚本工具执行的程序。脚本工具与所有其他地理处理工具一样,可以在模型、窗口或 脚本中,通过其对话框来执行脚本工具。
<span style="color:#.3
通过 使用工具
<span style="color:#、工具参数与调用
每个都具有一组固定的参数,这些参数为工具提供执行所需的信息。工具通常包含多个输入参数以定义一个或多个数据集,这些数据集一般用于生成新的输出数据。参数具有几个重要属性:
·&每个参数具有一种或多种特定的数据类型,如要素类、整型、字符串或栅&#26684;。
·&参数为输入&#20540;或输出&#20540;。
·&参数需有&#20540;,或为可选。
·&各个工具参数都具有唯一的名称。
在 中使用工具时,必须正确设置工具的参数&#20540;,以便在脚本运行时工具可以执行。一旦提供了一组有效的参数&#20540;,工具即准备好执行。参数将被指定为字符串或对象。
字符串是唯一标识参数&#20540;的简单文本,如数据集的路径或关键字。在下面的代码示例中,为缓冲区工具定义了输入和输出参数。请注意,工具名称要追加其工具箱的别名。在该示例中,两个字符串变量用于定义输入和输出参数,以便对工具的调用更容易阅读。
例使用字符串作为参数
import&arcpy
roads = &c:/base/data.gdb/roads&
output = &c:/base/data.gdb/roads_Buffer&
# Run Buffer using the variables set above and pass the remaining
# parameters in as strings
arcpy.Buffer_analysis(roads, output,
&distance&, &FULL&,
&ROUND&, &NONE&)
对于部分参数(如空间参考),还可以指定对象。在下面的代码示例中,使用其可选“坐标系”参数的&对象执行
创建要素类工具。
例使用对象作为参数
import&arcpy
in_workspace = &c:/temp&
output_name = &rivers.shp&
# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')
# Run CreateFeatureclass using the spatial reference object
arcpy.CreateFeatureclass_management(
&&&&in_workspace, output_name, spatial_reference=spatial_ref)
大部分地理处理工具同时包含必选参数和可选参数。通常,在许多情况下都存在多个不需要进行指定的可选参数。有两种方法可以处理这些未使用的参数。一个方法是保持所有可选参数有序,然后将您不需要的参数引用为空字符串
的参数。另一种方法是使用关键字参数,并使用参数名称来分配&#20540;。使用关键字参数可以跳过未使用的可选参数或以不同的顺序指定它们。
例使用空字符串跳过可选参数
import&arcpy
arcpy.AddField_management(&schools&,
&school_id&, &LONG&,
&&, &&, &NON_NULLABLE&)
例使用关键字参数跳过可选参数
import&arcpy
arcpy.AddField_management(&schools&,
&school_id&, &LONG&, field_is_nullable=&NON_NULLABLE&)
<span style="color:#、工具输出
当作为&对象执行时,会返回工具的输出&#20540;。结果对象的优点是可以保留工具执行的相关信息,包括消息、参数和输出。即使在运行了多个其他工具后仍可保留这些结果。
下面的示例说明了如何在执行地理处理工具后获取结果对象的输出。
例获取结果对象的输出
import&arcpy
arcpy.env.workspace =
&c:/city/data.gdb&
# Geoprocessing tools return a result object of the derived
# output dataset.
result = arcpy.CopyFeatures_management(&roads&,
&urban_roads&)
# A print statement will display the string
# representation of the output.
print&result
# A result object can be indexed to get the output value.
# Note: a result object also has a getOutput() method that
# can be used for the same purpose.
result_value = result[0]
如果为结果对象建立索引或使用其 方法,那么返回&#20540;为 字符串。当使用派生输出参数运行诸如获取计数(提供表中的记录数)或计算默认拓扑容差(提供拓扑容差&#20540;)之类的工具时,需要重点考虑这一点。要将
字符串转换为所需类型,可使用
注:派生参数不需要用户的交互,并且不会在工具对话框上或作为
中的工具的参数出现。输出参数通常是“派生”类型。
例派生输出参数
import&arcpy
import&types
arcpy.env.workspace =
&c:/base/data.gdb&
# Many geoprocessing tools return a result object of the derived
# output dataset.
result = arcpy.GetCount_management(&roads&)
result_value = result[0]
# The result object's getOutput method returns values as a
# unicode string. &To convert to a different Python type, use
# built-in Python functions: str(), int(), long(), float()
count = int(result_value)
print&count
print&types.TypeType(count)
如果创建的输出仅为大型工作流的一个中间阶段,那么输出参数可以省略,以便工具为输出创建唯一路径和名称。可以通过将输出设置为“”或“”来完成此操作,或如果输出是所使用的最后一个参数,则可以完全跳过此操作。在每种情况中,返回&#20540;都是新数据源的完整路径。
例输出参数的省略
import&arcpy
arcpy.env.workspace =
&c:/city/data.gdb&
result = arcpy.CopyFeatures_management(&roads&,
result = arcpy.CopyFeatures_management(&roads&,
result = arcpy.CopyFeatures_management(&roads&)
<span style="color:#、中的工具组织
地理处理工具以两种不同的方法进行组织。所有工具均以
函数的形式提供,但也可以通过匹配工具箱别名的模块调用。尽管帮助中的大多数示例都以
函数的形式显示工具,但两种方法同样有效。使用哪一种方法具体取决于个人喜好和编码习惯。在下面的示例中,使用两种方法显示获取计数工具。
例工具调用方式
import&arcpy
in_features = &c:/temp/rivers.shp&
# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)
# Or from modules matching the toolbox name
arcpy.management.GetCount(in_features)
通过模块使用工具时,有时可能要注意标识模块的方式,以便脚本具有更好的可读性。在这种情况下,可以使用&#26684;式
例标识模块的方式
# Clean up street centerlines that were digitized without
# having set proper snapping environments
import&arcpy
from&arcpy&import&edit
from&arcpy&import&management
streets = &c:/data/streets.gdb/majorrds&
streets_copy = &c:/output/Output.gdb/streetsBackup&
DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets,
&10 Feet&, &KEEP_SHORT&)
EDIT.ExtendLine(streets,
&15 Feet&, &EXTENSION&)
<span style="color:#.4
示例:如何按照字段列表创建
<span style="color:#、创建
“工作空间”工具集包含一系列可创建 所使用的数据存储结构的工具。这些结构包括工作空间、文件、两种类型的地理数据库、要素数据集和一个
连接文件。
Shapefiles是文件类型的空间数据存储&#26684;式,从而在“工作空间”工具集中选用“”工具来完成这一目标。
CreateFolder_management (out_folder_path, out_name)
n&out_folder_path:要创建文件夹的磁盘位置。数据类型为
n&out_name:&要创建的文件夹。数据类型为
# Import system modules
import&arcpy
from&arcpy&import&env
# Set workspace
env.workspace = &C:/data&
# Set local variables
out_folder_path = &C:/output&&
out_name = &folder1&
# Execute CreateFolder
arcpy.CreateFolder_management(out_folder_path, out_name)
如果想创建文件地理数据库,则需调用“”工具。
CreateFileGDB_management (out_folder_path, out_name, {out_version})
n&out_folder_path:将创建文件地理数据库的位置(文件夹)。数据类型为
n&out_name:要创建的文件地理数据库的名称。数据类型为&
# Import system modules
import&arcpy
# Set local variables
out_folder_path = &C:/output&&
out_name = &fGDB.gdb&
# Execute CreateFileGDB
arcpy.CreateFileGDB_management(out_folder_path, out_name)
<span style="color:#、创建
“要素类”工具集提供了一组专用于执行基本要素类管理(包括创建、追加、整合和更新多个要素类)的工具。
要素类是具有相同几何类型的要素的集合:点、线、多边形或注记。 要素类可与其他要素类一起存储在地理数据库中的要素数据集内,也可作为独立要素类存储在地理数据库中。此外,要素类还可存储在
中,或者与具有不同几何的其他要素类一起存储在
要想在 地理数据库、文件地理数据库或个人地理数据库中创建空要素类;在文件夹中此工具将创建
。要使用“”工具。
CreateFeatureclass_management (out_path, out_name, {geometry_type}, {template}, {has_m},
{has_z}, {spatial_reference}, {config_keyword}, {spatial_grid_1}, {spatial_grid_2},
{spatial_grid_3})
n&out_path:创建输出要素类所在的
地理数据库、文件地理数据库、个人地理数据库或文件夹。此工作空间必须已经存在。数据类型为:Workspace;Feature
n&out_name:要创建的要素类的名称。数据类型为
n&geometry_type:要素类的几何类型,可设置为“POINT”、“MULTIPOINT”、“POLYGON”、
“POLYLINE”。数据类型为
# Name: CreateFeatureclass_Example2.py
# Description: Create a feature class to store the gnatcatcher habitat zones
# Import system modules
import&arcpy
from&arcpy&import&env
# Set workspace
env.workspace = &C:/data&
# Set local variables
out_path = &C:/output&
out_name = &habitatareas.shp&
geometry_type = &POLYGON&
template = &study_quads.shp&
has_m = &DISABLED&
has_z = &DISABLED&
# Use Describe to get a SpatialReference object
spatial_reference = arcpy.Describe(&C:/workspace/studyarea.shp&).spatialReference
# Execute CreateFeatureclass
arcpy.CreateFeatureclass_management(out_path, out_name, geometry_type, template, has_m, has_z, spatial_reference)
<span style="color:#、添加
“字段”工具集包含一组用于向要素类表添加字段或对该表中的字段进行更改的工具。字段是表中的列;每个字段包含一个属性的多个&#20540;。表中可包含任意数量的字段。可指定字段设置,如字段类型和可存储在字段中的最大数据量。
添加字段是指向表或要素类表、要素图层、栅&#26684;目录和或带属性表的栅&#26684;添加新字段。“”工具。
AddField_management (in_table, field_name, field_type, {field_precision}, {field_scale},
{field_length}, {field_alias}, {field_is_nullable}, {field_is_required}, {field_domain})
n&in_table:要添加指定字段的输入表。该字段将被添加到现有输入表,并且不会创建新的输出表。可将字段添加到
的要素类、文件或个人地理数据库的要素类、、、栅&#26684;目录、独立表、带属性表的栅&#26684;和或图层。
n&field_name:要添加到输入表的字段的名称。
n&field_type:在创建新字段时所使用的字段类型。
?&TEXT —名称或其他文本特性。
?&FLOAT —特定范围内含小数&#20540;的数&#20540;。
?&DOUBLE —特定范围内含小数&#20540;的数&#20540;。
?&SHORT —特定范围内不含小数&#20540;的数&#20540;;编码&#20540;。
?&LONG —特定范围内不含小数&#20540;的数&#20540;。
?&DATE —日期和或时间。
?&BLOB —影像或其他多媒体。
?&RASTER —栅&#26684;影像。
?&GUID —GUID
# Name: AddField_Example2.py
# Description: Add a pair of new fields to a table
# Import system modules
import&arcpy
from&arcpy&import&env
# Set environment settings
env.workspace = &C:/data/airport.gdb&
# Set local variables
inFeatures = &schools&
fieldName1 = &ref_ID&
fieldPrecision = 9
fieldAlias = &refcode&
fieldName2 = &status&
fieldLength = 10
# Execute AddField twice for two new fields
arcpy.AddField_management(inFeatures, fieldName1,
&LONG&, fieldPrecision,
&&&&&&&&&&&&&&&&&&&&&&&&&&fieldAlias,
&NULLABLE&)
arcpy.AddField_management(inFeatures, fieldName2,
&TEXT&, &&,
&&, fieldLength)
<span style="color:#、完整程序
中的函数和类
在 中,所有地理处理工具均以函数形式提供,但并非所有函数都是地理处理工具。除工具之外,还提供多个函数以更好地支持使用 的地理处理工作流。函数可用于列出某些数据集、检索数据集的属性、在将表添加到地理数据库之前验证表名称或执行其他许多有用的地理处理任务。这些函数只能从
获得,而不能作为
应用程序中的工具,因为它们专为
工作流所设计。
函数的一般形式与工具类&#20284;;它接受参数(可能需要也可能不需要)并返回某些结果。非工具函数的返回&#20540;可以为各种类型
从字符串到地理处理对象。工具函数会始终返回结果对象,并提供地理处理消息支持。
工具参数通常使用简单文本字符串来定义。数据集名称、路径、关键字、字段名称、容差、域名可通过带引号的字符串指定。对于需要多个属性的较复杂参数,难以使用简单字符串对其进行定义。这种情况下可使用类(例如,、和 类)来定义这些字符串,而不必输入复杂的长文本字符串。
<span style="color:#.1
列出数据并描述数据
<span style="color:#、ListWorkspaces
列出所设置的工作空间中的所有工作空间。可以为工作空间名称和工作空间类型指定搜索条件,从而限制所返回的列表。 必须先设置工作空间环境,之后才能使用多个列表函数。
ListWorkspaces ({wild_card}, {workspace_type})
n&wild_card
:通配符,可限制返回的结果。如果未指定任何通配符,则会返回所有&#20540;。
n&workspace_type
:工作空间类型,有六种可能。&
?&Access —Only personal geodatabases will be selected.
?&Coverage —Only coverage workspaces will be selected.
?&FileGDB —Only file geodatabases will be selected.
?&Folder —Only shapefile workspaces will be selected.
?&SDE —Only ArcSDE databases will be selected.
?&All —All workspaces will be selected.
(默认&#20540;为
import arcpy
arcpy.env.workspace = &c:/data&
# List all file geodatabases in the current workspace
workspaces = arcpy.ListWorkspaces(&*&, &FileGDB&)
for workspace in workspaces:
&&&&# Compact each geodatabase
&&&&pact_management(workspace)
<span style="color:#.2
(对进行遍历、增、删改)
<span style="color:#.3 Geometry及其构建
(及、、、或 )
<span style="color:#.4
消息和错误处理
<span style="color:#.5
示例:添加至
第章 数据访问模块
数据访问模块 是一个用于处理数据的 模块。通过它可控制编辑会话、编辑操作、改进的游标支持(包括更快的性能)、表和要素类与
数组之间相互转换的函数以及对版本化、复本、属性域和子类型工作流的支持。
<span style="color:#.1 NumPy
Numerical Python (NumPy)
是一个用于在 中进行科学计算(包括支持功能强大的多维数组对象)的基础包。为用户提供了执行复杂数学运算的途径,而且在 版本之后已作为 软件安装过程的一部分。数组专用于处理大型数组。很多现有 函数都是为了处理 数组而创建,而 数组是包含在 的 科学计算包中的最著名数组。
要将 数组转换为表和要素类,数组必须为结构化数组。结构化数组包括用来在
表和要素类中将数据映射至字段的多个字段(或结构体)。
import&numpy
array = numpy.array([(,
)], numpy.dtype([('X',
'&f8'),('Y',
一经创建,结构化 数组即可转换为要素类或表。
创建数组的 取决于输入表的字段类型或要素类。
NumPy dtype
numpy.float32
numpy.float64
SmallInteger
numpy.int32
numpy.int32
numpy.int32
&u1、&u10 等
numpy提供了函数进行文本文件加载,该功能不仅能实现数据加载,而且能按照将数据按照要求进行标准化,如为结构化数据类型,则加载后的数据直接为结构化数组。
numpy.loadtxt(fname,
dtype=&type 'float'&, comments='#', delimiter=None,
converters=None, skiprows=0, usecols=None, unpack=False,
loadtxt函数要求文本文件每一行必须包含同样数量的&#20540;。
fname&: 文件或字符串
将要读取的文本文件,或者该文件的文件名
dtype&: 数据类型, 可选参数
结果数组的数据类型,缺省情况下为float。若其为结构化数据,结果数组将是1维数组,文本文件中的每一行将成为该数据中的一个元素。此时,文本文件中数据的列数必须与数据类型中的字段数相同。
comments&: 字符串, 可选参数
用于标识注释文字的字符,缺省&#20540;为‘#’。
delimiter&: 字符串, 可选参数
用于分隔文本文件数&#20540;的分隔符,缺省情况下为空&#26684;,根据文本文件中数据&#26684;式,可以设置为诸如‘,’等。
skiprows&: 整数, 可选参数
读取文件时跳过文件头上的skiprows&行,缺省&#20540;为 0。
usecols&: 数&#20540;序列, 可选参数
Which columns to read, with 0 being the first. For example, usecols = (1,4,5)&will extract the 2nd, 5th and 6th columns. The default, None, results in all columns being read.
NumPyArrayToFeatureClass将&NumPy 结构化数组转换为点要素类。
NumPyArrayToFeatureClass (in_array, out_table, shape_fields, {spatial_reference})
NumPy 结构化数组。
数组必须包含字段名称和&numpy dtype。
NumPyArray
The output point feature class to which the records from the NumPy array will be written.
shape_fields
[shape_fields,...]
A list (or tuple) of field names used to create the feature class' geometry. Coordinates are specified in the order of x, y, z, and m. z-coordinate and m-value fields are optional.
Assuming field names of x, y, z, and m in a numpy array, feature classes could be constructed as below.
spatial_reference
要素类的空间参考。可以使用SpatialReference&对象或等效字符串来指定。
(默认&#20540;为&None)
SpatialReference
shape_fields使用示例:
import arcpy
# Create a feature class with x,y fields
arcpy.da.NumPyArrayToFeatureClass(array, fc, (&x&, &y&))
# Create a feature class with x,y,z fields
arcpy.da.NumPyArrayToFeatureClass(array, fc, (&x&, &y&, &z&))
# Create a feature class with x,y,m fields
arcpy.da.NumPyArrayToFeatureClass(array, fc, (&x&, &y&, &&, &m&))
# Create a feature class with x,y,z,m fields
arcpy.da.NumPyArrayToFeatureClass(array, fc, (&x&, &y&, &z&, &m&))
<span style="color:#.2 da中的
<span style="color:#.3
编辑会话与事务
<span style="color:#.4 示例:将包含点的坐标信息的数据文件转换为
(在中,能够调用完成该项功能)
数据文件内容为:
<span style="font-size:14 color:#.000,0.500
<span style="font-size:14 color:#.000,1.500
<span style="font-size:14 color:#.000,2.500
<span style="font-size:14 color:#.000,3.500
<span style="font-size:14 color:#.000,4.500
<span style="font-size:14 color:#.000,5.500
<span style="font-size:14 color:#.000,6.500
<span style="font-size:14 color:#.000,7.500
<span style="font-size:14 color:#.000,8.500
<span style="font-size:14 color:#.000,9.500
<span style="font-size:14 color:#.000,10.500
<span style="font-size:14 color:#.000,11.500
使用编写以下程序:
import numpy
import arcpy
dtype=[('x', '&f8'), ('y', '&f8')]
coords=numpy.loadtxt(&d:\\coords.txt&,dtype,delimiter=&,&)
此时,coords是读入数据文件的内容,即按照dtype的样式,将数据文件的数据描述为形式为x,y的坐标对。
array([(0.0, 0.5), (1.0, 1.5), (2.0, 2.5), (3.0, 3.5), (4.0, 4.5),
&&&&&&&(5.0, 5.5), (6.0, 6.5), (7.0, 7.5), (8.0, 8.5), (9.0, 9.5),
&&&&&&&(10.0, 10.5), (11.0, 11.5)],
&&&&&&dtype=[('x', '&f8'), ('y', '&f8')])
out = &d:\\out.shp&
arcpy.da.NumPyArrayToFeatureClass(coords,out,(&x&,&y&))
按照x,y坐标对,将coords输出为d:\\out.shp。将其加载到ArcMap窗口,即可显示坐标内容。
记住,loadtxt中要将dtype设置为正确的形式才能将数据正确读入。上述数据在numpy中输出方式如下:
numpy.savetxt(&d:\\out.txt&, coords, fmt=&%.3f&, delimiter=&,&)
若数据文件中包含有除x,y之外的信息,则需要重新构造dtype以适应数据文件中的记录内容。
制图模块()
<span style="color:#.1 arcpy.mapping
<span style="color:#、什么是
Arcpy.mapping
是作为 站点包一部分的一个
脚本模块。随
一同安装,并对所有许可均可用。其设计初衷主要是用于操作现有地图文档
和图层文件
的内容。此外,还提供自动执行导出和打印的函数。可用于自动执行地图生产;它扩展了数据驱动页面的功能,同时,因其包含导出至 文档、创建和管理 文档的函数,而为构建完整地图册所必需。最后,可将 脚本发布为地理处理服务,并将脚本功能提供给 应用程序。
通过描述 执行的一些方案来了解其功能将会更容易些。以下是
脚本可完成的众多方案中的一小部分:
n&创建有关地图文档中所含信息(如数据框坐标系、图层数据源、数据源损坏的图层或布局元素位置)的报告。
n&更新、修复或替换地图文档或图层文件中的图层数据源。
n&更新图层符号系统而无需实际打开地图文档。
n&查找并替换文件夹内所有地图文档中的文本字符串。
n&将地图文档保存至之前的
版本以便分发。
n&更新地图文档元数据(例如,关键字、摘要和描述)。
n&使用地图导出命令批量创建地理数据,例如由数据框中要素列表驱动的一系列
n&自动创建和管理要通过
发布的地图服务。
n&构建多种
?&含标题页、多个地图页面以及任意数量含辅助内容(如表&#26684;式报表和联系人列表)的附加页面的专题或时态地图册。
?&基于数据驱动页面输出的参考地图册。
<span style="color:#、构建
Arcpy.mapping
专门面向专业的 分析人员(以及开发人员)而构建。以前,以上列出的方案必须使用
来完成,然而事实多次证明,对于普通
专业人员而言,该编程环境非常难学。是一种粗粒度对象模型,也即函数的设计原则是单个 函数可代替多行 代码。以下这个简单示例显示了如何使用 通过仅仅两行代码引用现有地图文档并将其导出至 文档。
&&& mxd = arcpy.mapping.MapDocument(&C:/Project/Watersheds.mxd&)
&&& arcpy.mapping.ExportToPDF(mxd, &C:/Project/Output/Watersheds.pdf&)
Arcpy.mapping
不是 的替代品,而是作为其支持的不同情景的一种备选方案。对于细粒度开发和应用程序自定义来说,仍是必不可少的,而 主要用于自动处理现有地图文档和图层文件的内容。
<span style="color:#.2
在环境中使用
<span style="color:#、窗口
要学习 ,首先应从 窗口着手。窗口是 框架的一部分,它所提供的自动完成功能使您能够轻松读取函数参数的名称和顺序。以下步骤显示了如何设置
窗口,以实现令人满意的最终用户体验并使其与本文档中的屏幕截图一致。
中打开一个新的空地图文档。
n&单击地理处理
窗口的代码窗&#26684;(具有
字符)中单击。会有一些帮助文本出现在右侧的帮助窗&#26684;中。
n&右键单击代码窗&#26684;并选择帮助放置
底部。帮助即会出现在代码窗&#26684;的下方。
n&现在输入以下语句(请注意,区分大小写):
&&& arcpy.mapping.ExportToPDF(
窗口应如下图所示。第一个必需参数称为 ,处于高亮显示状态。如果输入一个逗号,则第二个参数会变为高亮显示。只有两个必需参数:和 。可选参数使用大括号
n&右键单击代码窗&#26684;,然后单击全部清除以清除代码窗&#26684;。
<span style="color:#、引用现有地图文档
通常,通过 脚本执行的首要操作之一即引用要处理的现有地图文档
或图层文件
引用地图文档的方法有两种。第一种方法是通过提供
文件的路径在磁盘上进行引用。如果要构建将在
环境外部运行的脚本,则必须使用地图文档的路径对其进行引用。第二种方法是引用当前加载至
应用程序中的地图文档(在这种情况下,指的是
窗口中进行操作时,引用当前加载的地图文档十分方便,因为在应用程序中可直接看到对地图文档执行的更改。以下步骤将介绍如何引用当前加载至
中的地图文档。
在 窗口中输入以下内容,完成输入后按 :
&&& mxd = arcpy.mapping.MapDocument(&CURRENT&)
MapDocument
函数为称为 的变量返回一个
对象参考。字符串
是用于引用当前已加载地图文档的关键字。也可以在此处提供地图文档的路径来代替
在 窗口中输入以下内容,完成输入后按 :
&&& mxd.author = &YOUR NAME GOES HERE&
将打开 对象具有一个称为 的属性。只需将其&#20540;设置为字符串即可。
在 窗口中输入以下内容,完成输入后按 :
&&& mxd.save()
由于该地图文档未保存,因此会出现一个对话框提示您提供路径和文件名。方法不具有任何参数,但由于它是一个方法,因此仍必须加上左、右括号。事实上,如果要处理的是已经存在的地图文档,并不需要处理弹出的保存对话框。要验证地图文档的保存位置,请尝试以下操作:
在 窗口中输入以下内容,完成输入后按 :
&&& print mxd.filePath
代码窗&#26684;中会打印出路径:
<span style="color:#、将图层文件添加到地图文档中
接下来要做的是向地图文档中添加图层文件
。此操作可通过
函数完成。步骤如下:
在 窗口中,输入以下内容:
&&& arcpy.mapping.AddLayer(
自动完成功能显示有两个必需参数。第一个参数是对地图文档中数据框的引用。第二个参数是对要添加的图层的引用。该图层可以是地图文档或图层文件中的图层。第三个参数是可选参数,用于控制内容列表中图层的放置。由于这是第一个也是仅有的一个图层,可以忽略第三个参数并使用其默认&#20540;。
添加该图层之前,需要引用相应的对象。首先将引用数据框。
在 窗口中,输入以下内容,完成输入后按 :
&&& df = arcpy.mapping.ListDataFrames(mxd, &Layers&)[0]
ListDataFrames
函数需要引用地图文档和通配符过滤器(可选)。可以提供数据框的全名以进行搜索。还可以输入类&#20284; 的内容。
所有 列表函数将返回 列表对象。在列表中返回的这些项目从零开始,这表示列表中的第一个项目的索引&#20540;为
,第二个项目为
,依此类推,一直到
。由于要让
对象而不是
列表对象,因此必须在函数后追加索引号。在函数末尾追加
会返回列表中的第一个数据框。在这里,将返回列表中仅有的数据框。如果在地图文档中对数据框进行唯一命名并使用相应的通配符&#20540;分隔项目,应始终返回仅有一个项目的列表,而索引
将会起到作用。如果在地图文档中有两个数据框,并且不想通过
&#20540;引用第二个数据框,则需要在函数末尾加上
,例如,。
接下来,在使用 函数之前需要引用图层文件。引用图层文件的过程与通过提供 完整路径引用图层文档的过程相同,所不同的是需使用 函数而非 函数。
在 窗口中输入以下内容,完成输入后按 。注意:路径很可能与以下示例不同。
&&& lyrFile = arcpy.mapping.Layer(r&C:\Project\data\Rivers.lyr&)
在以上步骤中,创建了对现有图层文件的引用,该引用存储在名为
的变量中。
请注意,路径字符串的前面有一个小写 。这是 中的特殊字符,代表 。这表示要按原样解释该字符串并忽略字符串中的其他任何特殊字符。
所有必需的变量参考即已创建完毕。接下来将使用
函数将图层文件添加至当前地图文档。
在 窗口中输入以下内容,完成输入后按 :
&&& arcpy.mapping.AddLayer(df, lyrFile)
该图层应已添加到内容表和数据视图中,窗口应如下图所示:
<span style="color:#、将地图文档导出至
将地图文档导出至 极其容易,仅需要单行代码。在教程开始处已看过 函数的语法。现在将完成该语法。步骤如下:
在 窗口中输入以下内容,完成输入后按 。路径很可能与以下示例不同。
&&& arcpy.mapping.ExportToPDF(mxd, r&C:\Project\Doc1.pdf&)
有很多参数与 中的设置一致。仅有两个必需参数:和 。
已在指定位置创建了 文档,窗口应如下图所示:
<span style="color:#、使用
函数引用图层,并更改图层属性
有许多属性和方法可用于处理地图文档中的图层。之前已将图层文件中的图层添加至地图文档。创建的名为
的变量即引用添加至地图文档的图层。使用此变量,可修改已添加图层的某些属性。步骤如下:
在 窗口中,输入以下内容:
&&& lyrFile.
输入点之后,请注意 对象上的所有不同属性和方法。使用 变量,可更改地图文档中的这些属性,在调用 方法时,会将这些更改保存至磁盘上的图层文件 。
并非所有可能的图层属性都可用于 对象,只有那些对于地图自动化情景最常见的图层属性才可用。可通过创作图层文件中的属性以及使用
函数来修改更多属性。
大多数情况下,地图文档中已经具有图层。在以下这些步骤中,将假定图层已在地图文档中,再次对其进行引用。在地图文档中引用图层与引用数据框非常相&#20284;。
在 窗口中,按 删除当前文本,输入以下内容,然后按 :
&&& lyr = arcpy.mapping.ListLayers(mxd)[0]
ListLayers
函数需要提供地图文档参考。该函数有两个附加参数:一个用于执行通配符搜索,另一个用于指定数据框。由于只有一个图层和一个数据框,因此不必提供其他参数。同样,语句结尾仍需要加上
索引&#20540;,以便返回
对象而不是
列表对象。
使用新的 变量,可更新某些图层属性。
在 窗口中输入以下两行,在每行后面按 :
&&& lyr.name = &Some New Name&
&&& lyr.visible = False
运行后不会立即看到更改。不是所有的属性更改或方法都会自动更新应用程序。这是有意设计成这样的,目的在于避免应用程序经常刷新。使用
中当前加载的地图文档时,有时需要刷新内容列表或活动视图(数据视图或布局视图)。
在 窗口中输入以下两行,在每行后面按 :
&&& arcpy.RefreshTOC()
&&& arcpy.RefreshActiveView()
内容列表和数据视图将刷新。注如果在
外部运行独立脚本,则不需要这些附加函数。
窗口应如下图所示:
<span style="color:#、更改数据框范围
在本节中,将更改数据框范围以使其与所选要素的范围相符。在脚本中,通常使用类&#20284;
的函数来完成此操作。为了简化操作,您将以图形的方式选择一些要素。首先需要使用
再次开启图层可见性。步骤如下:
在 窗口中输入以下三行,在每行后面按 :
&&& lyr.visible = True
&&& arcpy.RefreshTOC()
&&& arcpy.RefreshActiveView()
在 中,以图形方式选择图层中的一个或多个要素。然后,创建存储所选要素范围的变量,并将该范围应用于所引用的
在 窗口中输入以下两行,在每行后面按 :
&&& lyrExtent = lyr.getSelectedExtent()
&&& df.extent = lyrExtent
窗口应如下图所示:
<span style="color:#、将地图文档(再次)导出至
将再次导出至 。这次将另外创建一个 文档,该文档最终将与第一个文档一起追加到新文档中。步骤如下:
在 窗口中输入以下内容,完成输入后按 。提供的路径很可能与以下示例不同。
&&& arcpy.mapping.ExportToPDF(mxd, r&C:\Project\Doc2.pdf&)
窗口应如下图所示:
新建 文档并追加两页
arcpy.mapping
模块包含一些 文档管理函数,这对于创建多页文档十分理想。例如,完整的地图册除包含数据驱动页面生成的标准参考地图页面以外,往往还包含一些其他页面。的使用对于构建完整地图册来说是必要的步骤。
教程本部分将模拟多页报告的创建过程。首先要新建一个
文档,然后追加在先前步骤中创建的
。假设这些
文档只是构成地图册的单个文档。例如,可以是表示标题页和内容列表等的多页 。第二个
文档可以是将所有数据驱动页面地图页面导出至单个多页
第一步是新建 文档。
在 窗口中输入以下内容,完成输入后按 :
&&& PDFdoc = arcpy.mapping.PDFDocumentCreate(r&C:\Project\Final.pdf&)
称为 的变量引用内存中的 对象。只有在保存并关闭文档后,该变量才会存在于磁盘中。
在 窗口中输入以下三行,在每行后面按 :
&&& PDFdoc.appendPages(r&C:\Project\Doc1.pdf&)
&&& PDFdoc.appendPages(r&C:\Project\Doc2.pdf&)
&&& PDFdoc.saveAndClose()
前两行分别将每个 追加至新建的 文档中。最后一行是提交更改并在磁盘上创建最终 。
已在指定位置创建了 文档,窗口应如下图所示:
<span style="color:#.3 arcpy.mapping
本节重点介绍了 模块的一些重要使用原则。还针对 设计提出了一些见解,并就不同情景给出了策略建议。
<span style="color:#、必须处理现有地图文档或图层文件
arcpy.mapping
模块的设计初衷是用于修改已存在的地图文档
或图层文件 中的现有元素。也就是说,它旨在帮助实现现有要素处理的自动化,但不可用于创作新对象。设计的出发点并非想让其成为
的完全替代品,也不会将其用于为
界面中的所有按钮、对话框、菜单选项或快捷菜单项创建函数、方法或属性(这些功能由
提供)。必须预先在
中认真创作一个含所有相应元素的地图文档或图层文件,然后使用
操作其内容。
以下提供一些 应用的简单示例:
n&替换图层的数据源。
n&遍历一系列数据框范围,查找并替换文本&#20540;,然后将页面布局导出至
文档追加到最终产品的方式构建完整的地图册。
注:可对现有地图文档或图层文件执行更改,然后使用
方法将这些更改保存至一个新文件。
<span style="color:#、添加图层并处理模板地图文档
arcpy.mapping
不允许创作全新的地图文档。按照设计,它也不提供更改现有地图文档的页面大小或方向的功能。解决方案很简单。预先创作含各种相应元素、页面大小、方向等内容的模板地图文档,然后使用
操作其内容。
常见的一种情景是创作一个不含图层的模板地图文档,然后使用
、或 函数向地图文档添加图层。如果图例元素已事先创作为自动将新项目添加到图例,则会自动出现图例项。
另一种常见情景涉及含对开页面的地图册。左侧和右侧页面各偏移一定的距离,以便为装订留出空间。该情景需要有两个地图文档:一个是左侧页面,另一个是右侧页面。使用
脚本逻辑将所有单个页面合到一起,形成最终的多页
输出。请参阅创建包含对开页面的地图册,该文档详细介绍了此情景并提供了
代码示例。
<span style="color:#、创作任何对象时均使用唯一名称
为便于引用地图元素(例如,数据框、图层、布局元素或表)以对其访问和修改,地图元素必须具有唯一名称。许多
列表函数(例如
、、和 )都含有通配符参数,允许您对名称属性进行过滤。这些列表函数始终会返回一个
列表对象。为引用
列表中的地图元素,您可以通过循环遍历列表,也可以在函数末尾追加一个索引号。如果使用通配符并指定唯一名称,则返回的
列表将始终包含一个项目,并可使用索引&#20540;
对其进行引用。
mxd = arcpy.mapping.MapDocument(&CURRENT&)
riverLyr = arcpy.mapping.ListLayers(mxd, &Rivers&)[0]
titleTxt = arcpy.mapping.ListLayoutElements(mxd, &TEXT_ELEMENT&, &title&)[0]
页面布局元素有一个独立属性,称为元素名称。可在元素的属性 对话框内的大小和位置 选项卡中对其进行设置。
数据框、图层和表不像页面布局元素那样具有独立的名称属性。它们的名称基于内容列表中显示的标注。理想情况下,将为同一地图文档内的所有数据框、图层和表给定唯一名称。如果出现需要有重复名称又不能将二者混淆的情况,那么您需要创作地图文档以使用其他属性进行区分。
以下代码显示了如何使用 对象的 属性对数据框中具有相同名称的图层进行区分的示例。
mxd = arcpy.mapping.MapDocument(&C:/Project/Project.mxd&)
df = arcpy.mapping.ListDataFrames(mxd, &County Maps&)[0]
for lyr in arcpy.mapping.ListLayers(mxd):
&&if lyr.name == &Streets&:
&&&&&if lyr.description == &1:10000&:
&&&&&&&&lyr.visible = True
&&&&&if lyr.description == &1:100000&:
&&&&&&&&lyr.visible = False
<span style="color:#、创作额外布局元素并视需要将其移入和移出页面布局
有时可能会遇到这种情况,您在创建地图系列时,其中某些页面具有附加地图元素,例如,额外的数据框、附加图片或文本元素等。这种情况下,您可以创作一个含所有可能布局元素的地图文档,然后根据需要使用
脚本逻辑将这些元素移入和移出页面,而不必专门针对这些情景创作独立的地图文档。如果某个元素被移到页面布局边界以外,则不会将其打印或导出。
在以下示例中,结果布局将基于当前数据框比例显示不同样式的比例尺。如果比例大于
,则比例尺单位将以米计。如果比例大于或等于
,则比例尺单位将以千米计。
mxd = arcpy.mapping.MapDocument(&C:/Project/Project.mxd&)
m_scale = arcpy.mapping.ListLayoutElements(mxd, &MAPSURROUND_ELEMENT&, &m scale bar&)[0]
km_scale = arcpy.mapping.ListLayoutElements(mxd, &MAPSURROUND_ELEMENT&, &km scale bar&)[0]
df = arcpy.mapping.ListDataFrames(mxd, &Main DF&)[0]
if df.scale & 25000:
&&m_scale.elementPositionX = 5 #on the page
&&km_scale.elementPostitionX = 15 #off the page
&&m_scale.elementPositionX = 15 #off the page
&&km_scale.elementPostitionX = 5 #on the page
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:74065次
排名:千里之外
转载:34篇
(3)(1)(1)(4)(2)(1)(1)(1)(5)(14)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 不搞大开发 的文章

 

随机推荐