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. Ubuntu安装MongoDB和PHP扩展

    MongoDB是一个可伸缩的,高性能的开源NoSQL 文档数据库.主要用C++开发完成.面向文档存储,全索引支持,可复制和高可用性,自动分片等特征.其在非关系型数据库中是功能最丰富,最像关系型数据库 ...

  2. 基于MDK编程STM32程序无法使用,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”

    为方便工作上做测试,移植FreeRTOS到STM32F103xx,先做简单的UART1 printf. 工程编译通过,运行逻辑也确认可行,可就是无法正常打印消息.对比了网上的移植工程也是一致,硬件仿真 ...

  3. iOS调用相机,相册,上传头像

    一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...

  4. java语法:字符串数组的赋值

    字符串数组怎么赋值呢? 首先当然得先定义啦:String infoPack[] : 然后想当然的以为在for循环里,new一个数组, String infoPack[i] = imgurls; 事实证 ...

  5. var d = document.getElementById 错误

    var d = document.getElementById; var s = d("demo").innerHTML; alert(s); // IE 没有问题,其他浏览器必须 ...

  6. UITextField 之 手势收起键盘

    1. 注册手势 /** * 注册手势 */ -(void)gestureReg{ //放弃第一响应者 UITapGestureRecognizer * tap = [[UITapGestureReco ...

  7. html <select> 用JS控制默认选中项

    <html> <head> <!--禁止页面缓存--><meta http-equiv="content-type" content=&q ...

  8. ubuntu修改环境变量

    1.修改/etc/profile后重启之后就失效了,需要修改/etc/environment才可以 以下情况是失败的: 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文 ...

  9. Alamofire 4.0 迁移指南

    Alamofire 4.0 是 Alamofire 最新的一个大版本更新, 一个基于 Swift 的 iOS, tvOS, macOS, watchOS 的 HTTP 网络库. 作为一个大版本更新, ...

  10. iOS 之 UICollectionView

    1. iOS 之 UICollectionView 之 原理介绍 2. iOS 之 UICollectionView 之 开发步骤 之 OC 3. iOS 之 UICollectionView 之 开 ...