免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2425|回复: 12
收起左侧

Python和ArcGIS自动化制图完全指南(二):制作mxd模板

  [复制链接]

4

主题

4529

铜板

5

好友

地信专家组

Rank: 14Rank: 14Rank: 14Rank: 14

积分
183

爱心勋章地信专家组冰雪节勋章

发表于 2021-4-26 18:42 | 显示全部楼层 |阅读模式
本帖最后由 hygnic 于 2021-4-26 18:47 编辑

Python和ArcGIS自动化制图完全指南(二):制作mxd模板

​
前言:mxd 模板是我们出图的标准样式,我们所有的成果图都是以 mxd 模板为基础。模板文件不要求对某些特定数据进行特定的展示(设置定义查询语句)等等,但是额外的,模板文件需要多添加一个 MappingIndex(制图索引)图层...


Note: 批量生成的地图都是通过一个或者多个 mxd 模板来生成的。其原理在《指南》的前言章节中有相关的说明。

​

​

1.初始数据

我们结合案例来说明
“...以地级市为单位,对中国某省份的地级市制作铁路、道路分布的专题图...”
原始数据如下:


  • buidings
    用于显示建筑物
  • landuse
    用于显示部分的土地利用情况
  • natural
    用于显示自然地物
  • railways
    用于显示铁路,线要素
  • roads
    用于显示道路,线要素
  • waterways
    用于显示水系,线要素(不会使用到水系)
  • 市级区域&市界
    市界是由市级区域数据转线要素得到。

    市界用于显示不同地级市之间的界线,而市级区域图层用于显示标注,显示各地级市的名称;同时也会用于制作 MappingIndex 图层(之后会说到)。
    选取了四川省17个地级市作为案例来具体的说明和分析。



​

​

2.原始数据的处理

制作专题图时,我们会凸显当前制图单位的信息,而部分隐藏其他单位的信息,如下图所示:


在 mxd 中如何实现该功能呢?大家都知道要使用图层的定义查询功能。这里也不例外,只不过需要人为处理一下数据。
在最后会让计算机一个图层一个图层的、一个 mxd 文件一个 mxd 文件自动的设置定义查询语句。
现在需要使用市级区域图层基础信息图层buidingslandusenaturalrailwaysroads 执行标识(或者相交)操作,目的是分割基础信息图层并将市级区域图层的字段属性赋予给该图层 (如市级区域图层的 CITY 字段)。

如下图所示:处理完成后的 roads 图层的属性表中已经有了 CITY 字段,而该字段会被用于定义查询。


​
Note:
标识:该工具位于分析工具>叠加分析>标识
相交:该工具位于分析工具>叠加分析>相交
标识和相交处理数据都不会直接覆盖原数据,所以需要手动重命名、替换数据。如果数据量大,可以编写代码来完成一系列操作。

​



​

​

3.MappingIndex

MappingIndex。它是一个面矢量图层,需要自己创建。他有如下几个功能:
  • 如它的名字所示,MappingIndex,他类似一个索引文件,我们编写的自动制图工具就是以该图层作为顺序依次进行 mxd 文件的制作、地图的导出。
    MappingIndex 中有多少个要素(属性表有多少条),就表示有多少个制图单位,整个系统就会制作多少个地图。
  • 使用 CITY 字段的值作为定义查询语句的参数。
    该图层中也必须有作为定义查询的字段存在。在这个案例中,这个字段就是 CITY 字段。整个系统就是从该图层的 CITY 字段中读取数据,然后对每一个图层的定义查询语句进行更新。
    这样才能保证自动更新,不然最后输出的所有地图都是一样的。
  • 使用 PAGESIZE 字段的值适配模板大小。
    在运行我们最终编写的自动制图程序后,程序会自动给该图层添加一个名为 PAGESIZE 的字段。
    并且会计算各个制图单位(各地级市)在当前比例尺下的最小制图尺寸——宽和高。用于适配不同大小的 mxd 模板(因为有的地级市很大,有的很小,就像同一件衣服不会同时适合一个胖子和一个瘦子)。
    之前我们就说过,无法通过 ArcPy 来修改出图的页面大小的,所有我们要制作几个不同尺寸的 mxd 供程序选择大小合适的模板。


根据以上几个功能来看,市级区域图层就满足我们的要求,所以我们可以直接复制市级区域这个图层,然后重命名为 MappingIndex 图层即可。


​

​

4.不同大小的模板

17个地级市,有大有小,有长条状的也有呈躺卧状的。所以就需要制作几个不同大小的模板来适应需求,因为单单使用 arcpy 是无法直接修改页面大小的。

如下图所示,我们可以将 ArcMap 的布局界面分成两个区域:
蓝色区域:具体显示地图地理信息内容的区域。
红色区域:整个地图区域,包括了地图显示区域,以及必要的文字描述、四周的留白和花纹等。

在 mxd 模板与制图单位相适配的过程中,其比较的大小就是对比蓝色区域的大小。(如果使用红色区域也可以,只是最后计算尺寸需要减去四周白边的距离)


制作了3种不同大小的 mxd 模板:
1080x700(完整页面大小为1100x900)
1080x1300(完整页面大小为1100x1500)
1180x900(完整页面大小为1200x1100)
名字分别为:1080x700.mxd、1080x1300.mxd、1180x900.mxd。

​
Note: mxd 模板文件的命名方法必须按照 宽x高 的方式来命名,因为程序是会读取模板文件的名称。

​




​

​

5.完成的 mxd 模板展示

最终制作完成的模板展示

​内容列表

​


​布局视图

​



​

​

结束语


下载:
  • 演示文件数据
  • 源代码
  • 《指南》文档PDF小册子,便于电脑查看


关注公众号 GIS荟 回复:自动化制图    ,获取所有下载!

​

​

​分享GIS,不止于Python。荟GIS精粹,关注我,带你飞!(长按扫码也行)




4

主题

4529

铜板

5

好友

地信专家组

Rank: 14Rank: 14Rank: 14Rank: 14

积分
183

爱心勋章地信专家组冰雪节勋章

 楼主| 发表于 2021-4-27 14:01 | 显示全部楼层
有什么问题直接微信公众号问我,不然不一定能及时看到
回复 支持 反对

使用道具 举报

47

主题

2万

铜板

20

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3670
发表于 2021-5-27 21:26 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

4409

铜板

5

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1538
发表于 2021-6-27 21:30 | 显示全部楼层
66666666
回复

使用道具 举报

0

主题

1万

铜板

2

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2605
发表于 2021-12-16 10:52 | 显示全部楼层
感谢分享,支持
回复 支持 反对

使用道具 举报

2

主题

4万

铜板

7

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6686
发表于 2021-12-19 09:04 | 显示全部楼层
谢谢分享
回复

使用道具 举报

4

主题

1万

铜板

0

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6022
发表于 2022-5-13 08:51 | 显示全部楼层
谢谢分享
回复

使用道具 举报

3

主题

2万

铜板

30

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2656
QQ
发表于 2022-7-7 11:37 | 显示全部楼层
谢谢分享
回复

使用道具 举报

3

主题

2万

铜板

30

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2656
QQ
发表于 2022-7-9 22:47 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

5148

铜板

1

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2100
发表于 2022-7-10 06:45 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表