【PythonGIS】Arcpy中常用出图函数详解

news/2025/3/15 17:34:24/文章来源:https://www.cnblogs.com/RSran/p/18343610

        出图是每个GISer都要经历的事,但有时候会有许多重复且多且无聊的出图任务,这个时候我们肯定想能不能自动化出图。ArcGIS中的模型创建就可以实现,但是我的数据大部分是在Python中处理的,所以就想能不能使用Python进行批量出图,正好今天跟大家分享一下。这里使用的mxd作为模板,然后替换/新加图层的方案。

前提:Arcpy使用的前提是安装了ArcGIS才有Python2.7的环境,才有Arcpy这个库!!!

1 添加新图层至mxd

        这里提供两种方案,一种是直接添加图层,一种是从另一个mxd加载图层再添加至当前mxd中。这样添加的图层需要额外进行样式设置,我这里就不介绍了。

# -*- coding: utf-8 -*-
"""
@Time : 2024/3/11 10:25
@Auth : RS迷途小书童
@File :MXD Processing.py
@IDE :PyCharm
@Purpose :arcpy中mxd出图相关函数
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import sys
import arcpy.mapping as mapping# 添加新的图层至mxd中
def add_layer_to_mxd():# --------------------------------------添加新图层至mxd中--------------------------------------mxd = arcpy.mapping.MapDocument(r"C:\RS迷途小书童\Project.mxd")# 使用mapping模块中的MapDocument函数打开MXD文件df = arcpy.mapping.ListDataFrames(mxd, "New Data Frame")[0]# df = arcpy.mapping.ListDataFrames(mxd)[0]# 获取MXD文档中的第一个数据框,并将其对象赋值给变量dfnew_layer = arcpy.mapping.Layer(r"C:\RS迷途小书童\Data\Orthophoto.lyr")# 加载新的图层arcpy.mapping.AddLayer(df, new_layer, "BOTTOM")# 将新的图层加入数据框的底层中,"AUTO_ARRANGE"自动放置图层,类似于添加数据按钮在 ArcMap 中的工作原理,"TOP"在数据框顶部放置图层mxd.saveACopy(r"C:\RS迷途小书童\Project2.mxd")# 保存mxd文件del new_layer, mxd# -------------------------------从另一个mxd中的图层添加至这个mxd中-------------------------------mxd2 = arcpy.mapping.MapDocument(r"C:\RS迷途小书童\ProjectTemplate.mxd")df2 = arcpy.mapping.ListDataFrames(mxd2, "Layers")[0]# 获取MXD文档中的第一个数据框,并将其对象赋值给变量dfnew_layer = arcpy.mapping.ListLayers(mxd2, "NE_Layers", df2)[0]# 根据图层名称在MXD文档的数据框中查找图层,并获取其对象mxd = arcpy.mapping.MapDocument(r"C:\RS迷途小书童\Project.mxd")df = arcpy.mapping.ListDataFrames(mxd, "New Data Frame")[0]arcpy.mapping.AddLayer(df, new_layer, "AUTO_ARRANGE")mxd.saveACopy(r"C:\RS迷途小书童\Project2.mxd")del mxd2, mxd

2 替换mxd中的图层

        这个替换方案使用于栅格数据、矢量数据等,这个会保存原有格式,如mxd该图层是空心、边线是红色加粗,那么替换后还是如此,简单来说就是会保存样式。

# -*- coding: utf-8 -*-
"""
@Time : 2024/3/11 10:25
@Auth : RS迷途小书童
@File :MXD Processing.py
@IDE :PyCharm
@Purpose :arcpy中mxd出图相关函数
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import sys
import arcpy.mapping as mapping# 替换mxd中的某个图层
def replace_layer_from_mxd():mxd_path = r"G:/彭俊喜/old.mxd"# mxd路径及名称(只需要设置mxd模板)folder_path = r"G:/彭俊喜/"image = r"1.tif"mxd = mapping.MapDocument(mxd_path)# 使用mapping模块中的MapDocument函数打开MXD文件,并将其对象赋值给变量mxddf = mapping.ListDataFrames(mxd)[0]# 获取MXD文档中的第一个数据框,并将其对象赋值给变量dflyr_name = "1=quick_dom.tif"# 定义了一个图层名称,这通常应该是图层在MXD文档中的实际名称(即需要被替换的图层名称)lyr = mapping.ListLayers(mxd, lyr_name, df)[0]# 根据图层名称在MXD文档的数据框中查找图层,并获取其对象lyr.replaceDataSource(folder_path, "RASTER_WORKSPACE", image)# 替换图层的数据源为当前遍历到的TIFF文件。("替换数据的父路径", 存储方式, 替换数据的名称)mxd.saveACopy(r"G:/RS迷途小书童/new.mxd")# 保存mxd文件del new_layer, mxd

3 导出mxd为PDF/PNG

        应该也是可以导出TIF等常见格式的,但是我工作中没用到所以就没看,感兴趣可以自己看看官方的函数文件。

# -*- coding: utf-8 -*-
"""
@Time : 2024/3/11 10:25
@Auth : RS迷途小书童
@File :MXD Processing.py
@IDE :PyCharm
@Purpose :arcpy中mxd出图相关函数
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import sys
import arcpy.mapping as mapping# 导出mxd为PNG/PDF
def Export_from_mxd():mxd_path = r"G:/彭俊喜/131.mxd"# mxd路径及名称(只需要设置mxd模板)out_path = r"G:/彭俊喜/1.png"out_path1 = r"G:/彭俊喜/1.pdf"mxd = mapping.MapDocument(mxd_path)# 使用mapping模块中的MapDocument函数打开MXD文件,并将其对象赋值给变量mxd# df = mapping.ListDataFrames(mxd)[0]  # 获取MXD文档中的第一个数据框,并将其对象赋值给变量dfmapping.ExportToPNG(mxd, out_path, color_mode="24-BIT_TRUE_COLOR", resolution=1000, transparent_color="255,255,255")# 导出为PNG图像,设置为24位真彩色、分辨率为1000dpi、图像背景为透明mapping.ExportToPDF(mxd, out_path1, resolution=1500)# 导出为PDF影像,分辨率为1500

4 修改布局要素

        这里的布局函数指的是标题、图例等,可以通过这个函数修改它的样式、值等。毕竟批量出图的标题不可能一模一样吧。

# -*- coding: utf-8 -*-
"""
@Time : 2024/3/11 10:25
@Auth : RS迷途小书童
@File :MXD Processing.py
@IDE :PyCharm
@Purpose :arcpy中mxd出图相关函数
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import sys
import arcpy.mapping as mapping# 修改mxd中的布局元素,如标题、图例等
def Repair_Elements_from_mxd():mxd_path = r"G:/彭俊喜/131.mxd"# mxd路径及名称(只需要设置mxd模板)mxd = mapping.MapDocument(mxd_path)# 使用mapping模块中的MapDocument函数打开MXD文件,并将其对象赋值给变量mxdfor element in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):# 遍历数据框中的文本元素(标题/图例/文本)if element.text == "Old String":# 如果文本为Old Stringelement.text = "New String"if element.name == "title":# 如果元素的名称为titleelement.text = "RSer\n你好!"mxd.save()del mxd

5 支持格式类型

        这里是替换图层时,函数支持的格式类型。需要注意的是:替换栅格和要素时需要注意名称结构和路径要求!!!

"""['RASTER_WORKSPACE', 'VPF_WORKSPACE', 'TEXT_WORKSPACE', 'SDE_WORKSPACE', 'PCCOVERAGE_WORKSPACE','OLEDB_WORKSPACE', 'TIN_WORKSPACE', 'NONE', 'ACCESS_WORKSPACE', 'CAD_WORKSPACE', 'EXCEL_WORKSPACE','FILEGDB_WORKSPACE', 'SHAPEFILE_WORKSPACE', 'ARCINFO_WORKSPACE']"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778215.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot-事件监听机制

SpringBoot-事件监听机制本文参考的SpringBoot版本是2.6.13一、Spring Boot 启动事件顺序事件执行顺序:  1. ApplicationStartingEvent         spring boot最开始启动时触发,SpringApplication.run() 之前发送。2. ApplicationEnvironmentPreparedEvent   …

免费为您的网页创建在线客服,扣子(COZE) WEB SDK图文使用教程

🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 我的教程《AI应用开发系列教程之扣子(Coze)实战教程》上线了,完全免费学习。最近,扣子(COZE) 的 Web SDK 正式上线了。有同学问"Web SDK"如何使用?今天,斜杠君就带大家学习COZE 「Web SDK」的使…

Mysql的length函数,char_length函数与字符,字节的区别

在存储中,1个英文单词或1个英文字符为1个1字节,1个中文或1个中文字符为3个字节在Mysql5.0之前,VARCHAR(20)中的20表示20个字节,英文可以存储20个,但中文只能存储6个在Mysql5.0之后,varchar(20)中的20表示20个字符,不管中文还是英文都可以存储20个length()函数是查找字节…

技术的八荣八耻

1. 以接口兼容为荣,以接口裸奔为耻以接口兼容为荣,怎么理解呢?很多bug都是因为修改了对外旧接口,但是却不做兼容导致的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误。所以我们修改老接口的时候,一般要做好兼容。如果你的需求…

解决windows报错:该文件没有与之关联的应用来执行该操作

报错截图:解决方案 1、新建txt文件2、复制内容到txt文件 taskkill /f /im explorer.exe reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "C:\Windows\system32\imageres.dll,154" /t reg_sz /f …

tomcat10 springboot项目部署成功但springboot没有启动日志问题

问题描述项目在tomcat8可以启动成功,请求也可以正常处理,在tomcat10上只有部署成功信息比如: deployWAR Deployment of web application archive [/data1/WWW/webapps/XXX.war] has finished in [127] ms, 但是没有springboot启动的信息。 该问题 不属于springboot打包为war包…

Centos7 安装 Imc

centos 7 安装 imc 注意:安装的时候必须选择图形化安装。即安装系统的时候,“软件选择”那块选择“带 GUI 的服务器”。关闭 selinux 和 防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g&q…

USB协议基础篇

初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB。一,从最常见的名词说起 1.1 什么是USB 这个我就不多解释了,直译就是通用串行总线。再不明白的就百度。 1.2 USB协议版本USB 1.0/1.1(low/full speed),传输速率最大为12Mb…

【YashanDB数据库】statement级别的触发器在jdbc接口调用executeBatch时被多次触发

问题现象 某客户使用jdbc接口向yashandb的表A插入数据。 表A上有一个语句级触发器,其内容为在触发时执行alter sequence操作;另外还有一个insert时的行级触发器,其内容为将每行的部分列赋给新值,这些新值要么来自sequence.nextval,要么来自于current_timestamp。 客户向表…

Redis分布式锁防止缓存击穿

一、Nuget引入 StackExchange.Redis、DistributedLock.Redis依赖 二、使用 StackExchange.Redis 对redis操作做简单封装public class RedisHelper { private static ConnectionMultiplexer _redis; private static string _connectionString;// 静态构造函数,确保在程序启动时…

新西兰 WHV 打工度假签证 All In One

新西兰 WHV 打工度假签证 All In One New Zealand WHV (Working Holiday Visas)新西兰 WHV 打工度假签证 All In OneNew Zealand WHV (Working Holiday Visas)打工度假常见问题答疑我们为你整理一些关于新西兰打工度假签证的常见问题及解答,希望能够帮助准备中的你。我该如何申…

词云图大师(WordCloudMaster)上线Web端!

我们非常激动地宣布,词云图大师(WordCloudMaster)现已正式上线Web端!这一全新版本为用户带来了更多的便捷和功能,让创建和分享词云变得更加轻松。无论是企业、教育机构还是个人用户,都可以通过Web端实现快速生成和定制属于自己的词云图。 https://studio.wordcloudmaster…