Python和ArcGIS自动化制图完全指南(四):自动制图

Python和ArcGIS自动化制图完全指南(四):自动制图

前言:在完成了《指南》第二章和第三章后,获得了 PAGESIZE 字段的值,终于来到了最后的制图阶段。运用 Python 和 ArcPy 自动设置 mxd 模板定义查询语句、图框居中、图层样式更新、比例尺的校正、另存 mxd 和各种制图要素的摆放赋值等操作。

1.限制 MXD 模板

1

《指南》第三章做的努力在这里得到了显现,在第三章中,我们根据大小、面积等规则给每个制图单位分配了合适的 mxd 模板,其信息就储存在 PAGESIZE 字段中。

每一个制图模板对应的 PAGESIZE 的值就是为其指配的模板大小,或者说名字,毕竟模板用其大小来命名。

如下图所示,巴中市的 PAGESIZE 值是1180x900,表示给巴中市分配的制图模板就是1180x900.mxd。

对应关系

可能细心的读者已经发现了,到目前为止,仅仅是更新了 MappingIndex 图层及其字段 PAGESIZE 。

但每一个 mxd 模板都是没有限制的,这些模板可以生成所有17个地级市的地图,这显然是不对的。

在这里我们需要对每一个 mxd 模板文件作出限制。

所以我们要对 mxd 模板中的 MappingIndex 图层中设置定义查询语句,从而限制模板,使模板仅生成大小适合的制图单位。

定义查询如下所示,三个模板对应不同的查询语句:

模板文件查询语句

如果还是不太明白,读者可以手动去给 MappingIndex 图层设置定义查询语句,看看会发生什么。

自动设置查询语句的代码 C1 (…/main/part2.py)如下:

# -*- coding:utf-8 -*-
# ----------------------------------------------------------
# Author: LiaoChenchen
# Created on: 2021/1/29 17:34
# ----------------------------------------------------------
from __future__ import absolute_import
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
import arcpy
import os


"""_______global_values_______"""
# 地址
mxd_template = "E:/doc/main/tempMXDS"  # 模板文件位置
output_dir = "E:/doc/main/out"  # 制图输出位置
gdb_path = "E:/doc/main/arcpy指南.gdb"  # 数据库地址
# 重要常量
FIELD = "CITY" # 检索字段
MI = "MappingIndex" # 制图索引文件名称
SCALE = 200000 # 制图的比例尺
"""_______global_values_______"""

arcpy.env.overwriteOutput = True
arcpy.env.workspace = gdb_path

sba = arcpy.SelectLayerByAttribute_management


class MakeMXD(object):
    
    def __init__(self, m, lyrs, idx, query_fielt, scale=None):
        """
        :param m: {Object} MXD文件对象
        :param lyrs: {List} 需要设置定义查询语句图层的名称列表
        :param idx: {String} 索引图层名字;MappingIndex
        :param query_fielt: {String} 定义查询使用的字段名;CITY
        :param scale: {Int} 比例尺
        """
        self.mxd = m
        self.df = arcpy.mapping.ListDataFrames(self.mxd)[0]
        self.lyrs = lyrs
        self.idx = idx
        self.field = query_fielt
        self.scale = scale
        
        # MappingIndex
        self.mapidx = arcpy.mapping.ListLayers(self.mxd,self.idx)[0]
        
        self.mapping_index_query()
        self.make_mxd()
        
        del self.mxd
    
    def mapping_index_query(self): # ▶注释1◀
        """
        给 MappingIndex 图层设置定义查询语句;
            PAGESIZE = '1080x700'
        :return:
        """
        map_path = self.mxd.filePath
        # ▶注释2◀
        name = os.path.splitext(os.path.basename(map_path))[0]
        definition_query = ["PAGESIZE"," = ","'",name,"'"]
        self.size = name
        # ▶注释3◀
        self.mapidx.definitionQuery = "".join(definition_query)

▶注释1◀:

目前这里我们只需要关注方法 mapping_index_query,上面的初始化方法等拉通梳理一遍后再看。

mapping_index_query 方法用于对 MappingIndex 图层设置定义查询语句。

▶注释2◀:

获取当前模板文件的名称(不包括后缀),赋值给变量 name。

▶注释3◀:

“”.join(LIst) 用于拼接字符串,且比使用运算符”+“来拼接字符快。




2.遍历制图单位

3

对 mxd 模板文件进行限制处理后,就需要把与该模板匹配的制图单位导出为单独的 mxd 文件出来。

一个 mxd 模板通常对应了几个制图单位。

比如 1080x1300.mxd 这个模板对应着达州市、绵阳市、雅安市三个制图单位。

尽管在第一步中使用定义查询限定了 mxd 模板对应的制图单位,但是一个 mxd 模板通常对应了几个制图单位,比如 1080x1300.mxd 这个大小的模板对应着达州市、绵阳市、雅安市三个制图单位。

所以我们需要遍历 mxd 模板(大白话就是一个一个处理),将其每个对应的制图单位处理出来,而为了制作处理相应制图单位,凸出显示需要的信息、图层、标注等,还要隐藏不需要的其他制图单位的信息。

所以为了完成上述的功能。

会对图层设置定义查询语句以实现图层的显示和隐藏;

设置图层自动居中;

标题、标注的自动更细;

甚至是直接指定或者通过一定规则间接指定各种元素的摆放位置和显示;



2.1定义查询

首先,图层中设置定义查询语句的代码 C2 如下:

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcGIS是一个集成了地理信息系统(GIS)功能的软件,可以用于空间数据的管理、分析和制图。它也提供了Python编程接口,可以通过Python脚本来扩展其功能。 要运行Python脚本,首先需要确保已经安装了ArcGIS软件,并且在安装过程中选择了安装Python解释器。在安装完成之后,打开ArcGIS软件。 在ArcGIS软件中,有两种主要的方式可以运行Python脚本: 1. ArcGIS Python窗口: 在ArcGIS软件的顶部菜单栏中选择“Geoprocessing”选项,然后选择“Python”子菜单。这将打开一个Python窗口,可以在其中编写和运行Python脚本。在Python窗口中,可以使用ArcGIS提供的Python库和模块来访问和操作地理数据,执行地理分析操作等。 2. ArcGIS Python IDE: ArcGIS还提供了一个名为“Python IDE”的集成开发环境。要打开Python IDE,可以在ArcGIS软件的顶部菜单栏中选择“Geoprocessing”选项,然后选择“Python IDE”子菜单。在Python IDE中,可以编写和调试Python脚本,并使用ArcGIS提供的内置功能和库来操作GIS数据。 无论使用哪种方式,可以通过在Python脚本中导入ArcGISPython库,来访问和操作GIS数据,执行地理数据分析和制图操作。可以使用ArcPy模块来执行各种地理处理操作,使用ArcGIS API for Python来访问和操作ArcGIS Online中的数据和服务。 总结起来,要在ArcGIS中运行Python脚本,需要选择合适的Python开发环境,导入相关的ArcGIS Python库和模块,然后编写和执行Python脚本来实现所需的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值