arcpy.mapping常用四大件-MapDocument

by 李远祥

点开arcpy.mapping的帮助,可以看到其有限的几个类,看起来东西不是很多,但却是非常的使用。由于arcpy定位就是粗粒度的调用,因此,它的类和接口结对不可能像AO那么多,但可别小看了arcpy.mapping的这聊聊无几的类,它几乎封装了ArcMap的所有地图交互操作。下图是arcpy.mapping的类

其中包含了最为常用的几个大类,笔者认为最常用的主要入口的四类分别为MapDocument 、MapsurroundElement 、Layer 、StyleItem 。通过这四个大类作为入口,基本上将地图的几类型操作涵盖在其中。

首先最常用的是MapDocument ,它几乎是获取地图文档内容的第一道入口。通过MapDocument ,能够指向特定路径的mxd文档,继而逐步获取其他的地图文档信息,如框架、图层、数据源、地图整饰要素等。下面可以看看它的一些主要的属性和方法(详细部分可以参考Esri官方帮助,不过对于arcpy.mapping部分还是以英文为主)

MapDocument 的调用方式如下

#使用MapDocument的方式
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
再来看看MapDocument最常见的属性activeDataFrame、activeView、author、credits、description、filePath、relativePaths、tags、title 。从这些常见的属性来看,主要是地图文档的一些基本信息,如活动框架、保存路径、存储为相对路径等;而某一些说明,如标签、标题、作者等基本上用途不大,但一般会在地图发布或者arcgis portal 使用的时候需要附加的一些信息。这些属性稍微懂点英文应该都能明白其作用。
然后就是最常用的几个方法,而且也是非常的实用。其方法主要是
  • 创建或者删除文档的缩略图(makeThumbnail 、deleteThumbnail),对于一般用户来说意义不大;
  • 替换地图文档的数据findAndReplaceWorkspacePaths 和replaceWorkspaces
  • 保存地图文档修改 save (保存修改设置)、saveACopy(将文档另存为arcgis的其他低版本)

前面也说过,如果有大量的使用高版本arcgis软件生成的mxd文档,需要保存为较低版本时,那就不需要逐个打开了,采用arcpy.mapping的MapDocument的saveACopy方法,可以很快的实现批量转换。当然,这需要配合Python的一些读写代码,例如下面的实例代码,将某个目录下的所有mxd文档另存为较低版本的10.0版本(笔者一般都是使用最新版本的arcgis软件,有时候成果分发总是比较麻烦,大家也不妨尝试下下面的这种方式)

#将C:\Mxds 路径下的所有mxd文档另存为10.0版本
import glob
import os
import arcpy
for filename in glob.glob(r'C:\\Mxds\*.mxd'):
    fname = os.path.basename(filename)
    mxd = arcpy.mapping.MapDocument(filename)
    fpath = "C:\\Mxds\\100\\"+fname
    mxd.saveACopy(fpath,"10.0")

通过简单的代码便可实现快速转换。

当然,还有就是更改mxd的数据源的操作,这里同样简单,我们也可以看到其findAndReplaceWorkspacePaths 的方法,下面是通过arcpy代码去修改地图文档的数据源

#coding=gbk
#修改数据源
#
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\PythonTest\changeSource.mxd")
mxd.findAndReplaceWorkspacePaths(r"C:\PythonTest\data\Python.gdb",r"C:\PythonTest\changeSource.gdb","FILEGDB_WORKSPACE")
#另存为一个新的mxd
mxd.saveACopy(r"C:\PythonTest\changeSource2.mxd")

总体上说,MapDocument类提供的功能还是比较直接,作为入口类型的类,基本上通过简单的一两个方法就实现了一些以往通过打开地图来实现的功能。同时,一些基础的信息,如图层信息,也必须通过MapDocument 然后转到DataFrame 再获取图层的指向

#通过MapDocument获取dataframe,从而获取每一个图层
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]
inLayer=arcpy.mapping.ListLayers(mxd, "", df)
for layer in inLayer:
    #打印图层名称
    print layer.name
 一旦能获取到图层的信息,那么,就能使用Layer类对地图的配置进行各种操作了。

arcpy.mapping常用四大件-MapDocument的更多相关文章

  1. arcpy.mapping常用四大件-StyleItem

    arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...

  2. arcpy.mapping常用四大件-MapsurroundElement

    arcpy.mapping常用四大件-MapsurroundElement by 李远祥 在arcpy.mapping 中,除了数据入口MapDocument.图层Layer之外,另一重要的角色就是M ...

  3. arcpy.mapping常用四大件-Layer

    arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...

  4. 【281】◀▶ arcpy.mapping 常用类说明

    arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...

  5. 【282】◀▶ arcpy.mapping 常用函数说明

    arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...

  6. arcpy.mapping实战-专题图制图自动化

    arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...

  7. 使用arcpy.mapping模块批量出图

      出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...

  8. 按字母顺序排序的 arcpy.mapping 类列表

    arcpy.mapping 类可使用地图文档 (.mxd) 或图层文件 (.lyr) 中的不同对象类型的各种方法和属性.此文档可专门用作快速参考.有关详细信息,请使用链接跳转至各帮助页面. arcpy ...

  9. 使用arcpy.mapping 更新和修复数据源

    来自:https://blog.csdn.net/gisinfo/article/details/6675390 在许多情况下,您都可能需要修复数据源或重定向数据源至其他位置.然而,如果是在每个相关的 ...

随机推荐

  1. Analyzing the Meaning of Sentences

    1. How can we represent natural language meaning so that a computer can process these representation ...

  2. 解决在某些IE浏览器下字符乱码的问题

    习惯上我们写字符声明都是 <meta charset="utf-8"> 在绝大多数浏览器都没有问题,但是在操蛋的IE上有时候会出现编码错误!! 解决方案: <me ...

  3. HTML--绝对路径, 表格,表单, 框架

    URL, URI, URN URL: 统一资源定位符: Uniform Resource Locator URN: 持久可用的资源标准名称 Uniform Resource Name , 比如邮箱 U ...

  4. MyEclipse构建Web Service(Xfire框架)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 任务要求: 使用Xfire实现一个简单的CalculatorWebServ ...

  5. STM8的中断系统以及外部中断详解

    STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有 ...

  6. 在spring 3.0中的@value

    在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件 中的文件,进行键值对的注入,例子如下: 1 首先在applicationContext.xml中加入:   ...

  7. UVa 336 - A Node Too Far

    题目大意:在计算机网络中,每条信息都有一个TTL值,在信息到达一个节点时,TTL值首先减1,如果TTL为0,则丢弃该信息报文.给一个网络的配置,给定源点和TTL值,判断该网络中有多少节点不可到达. 无 ...

  8. python 开发者 精品

    当 Python 和 R 遇上北京二手房 http://mp.weixin.qq.com/s?timestamp=1473262097&src=3&ver=1&signatur ...

  9. PLSQL的一些事儿

    每一个软件都是设计精妙的 plsql就可以使用一些简单代码代替长的语句,比如s=SELECT * FROM 数据插入报错: 原因: 一般情况下,数据库的NLS_CHARACTERSET 为AL32UT ...

  10. WGCNA算法研究笔记

    转自:http://www.gogoqq.com/ASPX/8390905/JournalContent/1303140588.aspx 研究了近半年的算法,记录下来给自己一个交代,也应该是考G前地最 ...