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

by 李远祥

最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现了一些小问题,导致地图整饰元素的位置出现了误差。由于最终的生产任务已经到了尾声才发现一些问题,所以需要在出图系统之外使用ArcMap进行修改,这样针对上千幅成果文档进行修改,是个不小的工作量。后来决定使用arcpy.mapping,使用Python进行递归查询mxd文档,最终实现自动化修改和重新出图。虽然当时只是使用了很少的功能,基本上就是对整饰元素的位置和文本进行调整,但arcpy.mapping对此事的帮助确实非常巨大。

后来因为另一件事情对arcpy.mapping 有着更深刻的见解,就是帮助一位朋友制作专题图。由于前期总总原因,导致多次频发修改,而每一次修改都会导致十几个mxd文件,每个mxd文档出十几个专题,出图包括普通的png和pdf格式,光是点击出图的数量就是300多次,每一次重新出图都要两个小时以上。所以,只要涉及到地图修改,重新出图就是个非常麻烦的事情。后来想到了最初帮助的那家单位,使用的是arcpy.mapping去处理,所有的问题都迎刃而解了。

首先来看看笔者要做的专题图,其实非常简单,就是根据土壤采样点的数据进行插值,生成土壤元素分布图。看一下Mxd文档的一些配置,

这里面涉及到的各种的元素插值数据,每一个专题都需要有图例和标题,当然,地图的标题是需要根据图层的名称变化的,但又不能包括括号里面的单位。光是这一个MXD文档就需要出14个专题,png和pdf各一张,合计28张。全部共14个区域,每个区域都要导出28张图,包括空值图层显示,修改标题名称以及选择保存位置、专题图的名称等,确实需要不少时间。

不过多年的制图经验还是给了非常大的帮助,就是地图制作的规范化。最初的时候笔者也没考虑过什么规范的问题,因为基本上一出手处处都是规范操作(请允许我自恋一下)。首先是图层的名称,有着标准的名称,例如每种元素后面都有一个括号,并且里面包含着具体的单位。其次就是每一个图层都是单独的图例,而不是把所有的图图层放到一个图例中,因为需要出的是每种元素的分布专题图,这样跟其他的图层关联不大,直觉告诉我不应该贪图方便讲所有的放在一个图例中(当然放在一起也有它的好处,就是管理容易一些,但不好的地方就是图例的名称不好控制)。最后就是对整饰元素的规范命名,标题和图例都分别给与name属性的名称。如下图

这些规范之后,再配合前面几章所说的arcpy.mapping 三大件,基本上可以高枕无忧了。下面可以来看看代码部分

#coding=gbk
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Users\lazy\Desktop\插值分析(空间分析)\元素分析结果\元素分析专题图.mxd")
quyu = "XX县"
quyu=quyu.decode('gbk')
df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]
inLayer=arcpy.mapping.ListLayers(mxd, "", df)
for layer in inLayer:
    #匹配图层名称
    layerNameStr = layer.name
    danwei = "(mg/kg)"
    canfind = layerNameStr.find(danwei)
    if canfind>0:
        #获取前面字符串
        houzhui = "元素含量分布图"
        if(canfind==3):     
        houzhui=houzhui.decode('gbk')
        picName=layerNameStr[0:canfind]
        picName=picName+".png"
        picName2=picName+".pdf"
        titleName =quyu+layerNameStr[0:canfind] +houzhui
        #设置标题
        for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
            if elm.name == "mapname":
                elm.text = titleName
                #显示图层
                layer.visible=True
                #输出底图
                folderpath = "C:\\Users\\lazy\\Desktop\\插值分析(空间分析)\\出图\\"
                folderpath=folderpath.decode('gbk')
                fullpath = folderpath+picName
                arcpy.mapping.ExportToPNG(mxd, fullpath,resolution=200)
                arcpy.mapping.ExportToPDF(mxd, fullpath,resolution=200)
                #关闭图层
                layer.visible=False

由于已经定义好了标题,那么只需要查找到名为 mapname 的文本元素就行了。这个过程当然是需要综合运用了。充分利用了前面所说的三大件完成。通过MapDocument 去进入查找mxd,然后进而用Layer对象指向图层;利用图层的visible属性进行开关图层,由于每种元素都是一个图层对应一个图例,图层打开的时候图例自然会打开,所以这里layer.visible 非常重要,文档初始化时只需要打开基础背景数据,专题数据一个都不要打开,不然就会出现多个重叠;找到图层之后获取图层名并进行解析,然后获取"(mg/kg)" 前面的字符串(那就是专题图的元素名称了,这对标题和图例都是有作用的),根据不同的单位进行代码复用,为了偷懒,笔者也不去写判断语句了,直接使用将第一个for代码块复用了几次,只是修改了判断单位而已;利用获取的元素名去构建text元素的名称,例如格式就是“XX县X元素含量分布图”,具体见代码的构建方式,利用MapsurroundElement 进行修改,图例名称也是可以这样修改;最后就是出图了,直接使用arcpy.mapping.ExportToPNG 和 arcpy.mapping.ExportToPDF进行出图,出图路径都已经构建好了,就是主要是命名方式可以自定义,就用图层名称提取出来的元素名称作为文件名。

当大功告成好,就不再怕不停的需求修改了,导出地图再也不用疯狂点击鼠标和键盘了。只需要将这个Python脚本双击调用一下,就可以轻松喝一杯上好的铁观音,然后等待几分钟就了事。相对于传统的手工导图的方式,确实省事更省心。可以看看下面一个区域的出图结果

总结:从这个实战例子中可以看到,如果要使用arcpy.mapping去自动化出图,地图制作必须要非常规范,这种规范虽然没到地图模版的那样苛刻,但必须加入一些地图的可控手段。如果一开始没有进行一些标准的命名、制作处理等,后期将会非常被动。arcpy.mapping本身并不难,可以使用的对象和方法并不多,所以学习和使用时非常容易的。掌握了arcpy.mapping的四大件之后(抱歉第四件还没写出来 ^_^ ),在面对同样问题的时候就可以举重若轻了。

关于arcpy.mapping的相关基础,可以查看之前的内容:

arcpy.mapping-认识arcpy.mapping

arcpy.mapping常用四大件-MapDocument

arcpy.mapping常用四大件-Layer

arcpy.mapping常用四大件-MapsurroundElement

arcpy.mapping实战-专题图制图自动化相关推荐

  1. arcgis批量出图python代码_python使用arcpy.mapping模块批量出图

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

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

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

  3. ArcGIS全流程从无到有制作一张全国人口专题图(以七普数据为例)

    前几日我们直播教学<全流程全无到有制作一张全国人口专题图(以七普数据为例)>,那晚直播主要还是互动给大家的解决问题,我们会在近期(10月11日.12日)再次直播与大家互动,大家可以先行关注 ...

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

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

  5. arcpy.mapping-认识arcpy.mapping

    arcpy.mapping-认识arcpy.mapping by 李远祥 ArcMap提供了强大的地图制图功能,在实际的工作中,只要涉及到专题地图和地图册的制作,难免会遇到非常多的出图工作和地图图面元 ...

  6. ArcPY实现分图斑批量制图

    1.数据准备 1.1在MXD文档中以其中一个图斑为例,准备好样式. 类似于下图,图层 重点居住单元 是需要分图斑出图的图层,图层 重点居住单元01 是每个图斑出图所需要的边框, 图层 重点居住单元遮罩 ...

  7. 第八章 ArcGIS地图制图 点线面符号、专题图、标记的制作

    文章目录 第一节 点符号的制作方法 1 ArcGIS的样式管理器使用 2 制作一些点符号,如一个图中间一个字 3 FontCreator使用 4 修改己有的符号库 第二节 线面符号制作 1 简单线符号 ...

  8. 超图举例单值专题图色带样式控制

    此文是用.NET Iobject 7c 下利用vs2010开发的winform版 单值专题图的创建及色带的修改.在此记下来以便后期参考(可能很快就会被淹没,超图的更新换代很快) 初期由于不知道样式的承 ...

  9. 计算机辅助遥感制图的基本过程,项目八-遥感专题图的制作

    项目九遥感专题图的制作,授课教师:王冬梅,任务一遥感专题图的制作,一.遥感影像地图,遥感影像地图是一种以遥感影像和一定的地图符号来表现制图对象地理空间分布和环境状况的地图.在遥感影像地图中,图面内容要 ...

最新文章

  1. libev源码解析——监视器(watcher)结构和组织形式
  2. Hotel California
  3. 检查点重做检查点队列简单总结Strut2教程-java教程
  4. android studio安装在其他盘,Android Studio配置移动到D盘(亲测)
  5. object getkey java_Java S3Object.getKey方法代码示例
  6. 日常工作必备之 linux 常用命令分类归纳
  7. 初一模拟赛(4.20)
  8. ROS小白——knict相机标定(2)
  9. 特设三场!!快来看看 NVIDIA DLI 深度学习入门课程有没来到你的城市~
  10. 第三章EF的基本使用 EF数据实体模型的更新
  11. outlook登陆邮件接收服务器(POP3)失败问题
  12. 周末阅读:北漂程序员边城的幸福生活
  13. 浅谈恐怖漫画-恐怖的源头 恐怖漫画:漫画文化里的一枝奇葩
  14. win10常用软件汇总
  15. 群晖Synology DS918+使用笔记-基础篇
  16. 什么是二维数组以及二维数组传参
  17. 徐州好玩实用的微信小程序
  18. 前端系列——vue2+高德地图web端开发(使用和引入)
  19. iOS 双声道效果实现方式
  20. Ceph分布式存储(架构 配置与使用 原理 性能调优)

热门文章

  1. ios 后台唤醒应用_苹果不用背锅了!微信被杀后台是因为“耍流氓”?用户该听谁的?...
  2. opc读取ab的plc数据_使用OPC的模式去连接PLC进行AB SLC-5_04数据的采集
  3. Java基础概念干货(字符、标识符、数据类型... ...)
  4. 实测解决:在此系统上禁止运行脚本。有关详细信息,请参阅 httpsgo.microsoft.comfwlinkLinkID=135170 中的 about_Execution_Policies。
  5. 数据库的字段属性(重点)
  6. iView UI常用组件DatePicker清空技巧
  7. [Vue warn]: Duplicate keys detected: '0'. This may cause an update error. found in解决办法
  8. 生鲜连锁品牌天鲜配获千万级PreA轮战略投资,2018年销售额将达1亿元
  9. 计算机专业术语全称及含义整理
  10. mysql系统特性_MySQL · 引擎特性 · InnoDB 事务系统