GIS_Arcpy.mapping在制图自动化中的使用||| 今天学习了在ArcGIS10中如何使用Python实现制图自动化的课程。学完课程之后发现,其实很多在我目前的应用水平上还用不上这么高级的东西。其实也能,我做的一些组图就可以。但是这毕竟仅仅是修改一些参数。如果想深入使用,还需要进一步学习一些其他的函数功能。 现在对课程中所涉及到的Python程序和相应的函数做一个总结,为以后的学习提供参考,同时也复习相关的内容。 主要内容是将如何使用ArcPy Mapping这个模块。模块的主要作用是使地图的管理和输出自动化。也就是说通过Python编程来流畅操作大量数据的制图和输出过程,而不需要手动单独操作。例如,更新或者修正数据源, 打开和分析地图文件并且更新元数据等。 1. 管理地图和图层 arcpy.mapping 这可以理解为一个编程环境,也可以理解为一个总的函数功能,下面有许多子功能。通过使用它,可以用来调用地图数据的各个属性以及制图元素(layer, layout element) 2. 第一步:设定工作图层 (where to run your script, or can be understood as which map document you will work with) 基本代码: “mxd = arcpy.mapping.MapDocument (“current”)” 这个代码命名了一个新变量 “mxd”,然后使用MapDocument这一函数将current,也就是当前的图层赋值给这个变量。 如果不想用当前图层,可以使用目标图层的地址,代替current 例如: “mxd = arcpy.mapping.MapDocument(r“C:\Maps\city.mxd”)” 这里要注意的是要在地址前面加上个字母“r”。原因是“\”在python中有特殊的含义,加上r后可以使python忽略这一符号,而将其按地址来读取。 MapDocument是一个对象函数,他将是变量能够处理地图的属性。通常,使用这个函数对变量赋值是编程的第一行,因为这将使得变量可以使用arcpy.mapping中的许多子函数。下面将看到。而通常最后两行是保存和删除变量(del mxd)。删除的原因有两个,一个是避免之后如果对不同的地图文件使用变量名,有可能引起错误。另外,如果想给目前的地图文件附以其他名,需要从当前变量名中解放出来。 使用arcpy.mapping的目的是使编程简单。在用他调用地图文件(map document)的时候,需要先建立好地图文件,包括里面的指北针等,都需要先建立好。 3. 修改名字: “mxd.author=”GIS Department””修改之后,可以在data frame的属性表中看到效果。 “mxd.save()” 4. 修改地址和数据源(layer data sources) “path = “C:\Student\Mapscripting2\”” (这相当于建立了一个新的变量,用该代替具体的地址,作用后面会体现) “mxd.replaceWorkspaces(path+r”\cityof\Westerville.mdb”, “ACCESS_WORKSPACE”, path+r”\westervill.gdb”, “FILEGDB_WORKSPACE”)” (这个函数有四个必须的参数,old_workspace_path, old_workspace_type, new_workspace_path, new_workspace_type) 这里就体现了使用path这个新参数的意义,如果新的工作区域和就得工作区域不在一个文件夹里面,需要两个path variable. “mxd.saveACopy(“C:\Student\Mapscripting\newname.mxd”)” 这里面有两种不同的保存选择,上面是直接保存,这个是保存一个新的。 5. 修改属性(properties) 显示Dataframe里面图层的列表: “ListDataFrames”返回一个所有DataFrame里面图层的Python列表。 “mxd = arcpy.mapping.MapDocument(“Current”)” “df = arcpy.mapping.ListDataFrames(mxd)[1]” “print df.name” 后面的1是一个从0开始技术的指数,表示的是所需要参数的个数,比如是第二个,那就用1. 这个是将DataFrame命名,但是如果是Dataframe中的某一个图层,需要用到: “ListLayers” 她有三个参数:map_document, {wildcard}, {data_frame} 比如,为了将West这一Dataframe中的df这一图层赋值给Lyr; “lyr=arcpy.mapping.ListLayers(mxd,””,df)” 关闭图层: lyr.visible=False 为了看到执行的效果,需要使用:arcpy.RefreshActiveView()和arcpy.RefreshTOC() 6. For loop应用 如果不知道某一个图层所在的DataFrame,就用一个循环来解决; “for lyr in arcpy.mapping.ListLayers(mxd):” “if lyr.name==”Hydrography”” “lyr.name=”Lakes””
|
|
来自: 昵称QAb6ICvc > 《python》