当前位置: 首页 > news >正文

利用 ArcMap 的 MXD 布局视图以及ArcPy 脚本实现批量自动生成油井点之记并导出 PDF(实操+亲测)

文章目录

    • 1、思路(点之记基于 MXD 模板)
    • 2、实现步骤
      • 2.1、程序具体流程:
      • 2.2、MXD 模板设计要点
      • 2.3、代码
    • 3、运行并输出效果

最近项目中有这样一个需求:某油田有上千口油气井,每口井需要按照一定的模板单独生成pdf格式的点之记文件;井口的数据是shp文件形式;本文利用 ArcMap 的 MXD 布局视图(Layout View) 来生成点之记;直接在 ArcPy 脚本里批量导出 PDF,每个点都生成一份独立的 点之记 PDF 文件。

点之记模板pdf如下:

在这里插入图片描述

1、思路(点之记基于 MXD 模板)

  • 准备一个 MXD 模板文件

  • 打开 ArcMap,切换到 Layout View(布局视图)。

  • 在布局中插入 两个 Data Frame(数据框):

  • 大比例尺视图(比如 1:2,000,显示点的细节)MainView。

  • 小比例尺视图(比如 1:50,000,显示点的大环境)Overview。

  • 在布局上预留文本框(点号、坐标、高程、施工信息等),可以用 动态文本(Dynamic Text) 或者后续用 ArcPy 替换。

  • 保存为well.mxd。

在这里插入图片描述
上述为Arcmap创建的well模板。

2、实现步骤

使用ArcGIS安装后自带的Python中的ArcPy 脚本进行编程实现:

2.1、程序具体流程:

  • 打开 well.mxd。

  • 遍历点要素:

    • 设置主数据框(MainView)的中心到点坐标,并缩放到指定比例尺。

    • 设置副数据框(Overview)的中心到点坐标,并缩放到另一个比例尺。

    • 更新布局中的文本元素(比如点号、高程)。

    • 导出为 PDF 或 PNG(每个点一份)。

2.2、MXD 模板设计要点

  • 数据框(Data Frame):

  • 给两个数据框命名,例如 MainView 和 Overview,方便在脚本里定位。

  • 布局文本(Text Element):

  • 在布局里插入三个 文本框(Text Element),命名为 PointID、Coords、Height。

  • ArcPy 可以用 ListLayoutElements() 按名字更新内容。

  • 比例尺:

    • 主视图:1:2000

    • 副视图:1:50000

    • 可根据需求调整。

  • 模板中有两个 Data Frame(大比例尺、小比例尺),分别命名为 MainView 和 Overview

  • 模板中有三个 文本框(Text Element),名字分别是 PointID、Coords、Height

2.3、代码

# -*- coding: utf-8 -*-
import arcpy
import os# 输入参数
shp_path = r"F:\python_project\web_demo_flask\data\well.shp"
mxd_template = r"F:\ADNOC_3D\Survey2025\Mxdfiles\well.mxd"
output_dir = r"F:\ADNOC_3D\Survey2025\output_pdf"if not os.path.exists(output_dir):os.makedirs(output_dir)# 打开模板 MXD
mxd = arcpy.mapping.MapDocument(mxd_template)# 获取数据框
df_main = None
df_overview = None
for df in arcpy.mapping.ListDataFrames(mxd):if df.name == "MainView":df_main = dfelif df.name == "Overview":df_overview = dfif not df_main or not df_overview:raise Exception("请确认 MXD 模板中包含 MainView 和 Overview 数据框!")# 遍历点数据
with arcpy.da.SearchCursor(shp_path, ["PointName", "X", "Y"]) as cursor:for row in cursor:PointName, X, Y = row# 设置主视图范围(大比例尺)df_main.extent = arcpy.Extent(X - 0.001, Y - 0.001, X + 0.001, Y + 0.001)df_main.scale = 2000  # 可调整比例尺# 设置副视图范围(小比例尺)df_overview.extent = arcpy.Extent(X - 0.01, Y - 0.01, X + 0.01, Y + 0.01)df_overview.scale = 10000# 更新文本框for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):if elm.name == "PointID":elm.text = "点号:{}".format(PointName)elif elm.name == "Coords":elm.text = "X={:.3f}, Y={:.3f}".format(X, Y)# 导出 PDFout_pdf = os.path.join(output_dir, u"点之记_{}.pdf".format(PointName))arcpy.mapping.ExportToPDF(mxd, out_pdf)print(u"已导出: {}".format(out_pdf))print("所有点之记 PDF 已批量生成!")
del mxd

3、运行并输出效果

打开ArcGIS—IDLE(Python GUI)
在这里插入图片描述
请添加图片描述

运行后,在 D:\project\output_docs\ 里生成:


点之记_1.pdf
点之记_2.pdf
点之记_3.pdf
...

在这里插入图片描述

每份 PDF 都会包含:

一个大比例尺视图(放大到点位附近)

一个小比例尺视图(显示整体位置)

自动填充的点号、坐标、高程信息等信息;

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


http://www.dtcms.com/a/441807.html

相关文章:

  • 计算机工作原理(简单介绍)
  • 自己如何建设网站聊天室做医药代表去什么招聘网站
  • 指针和数组解析
  • 【AI4S】3DSMILES-GPT:基于词元化语言模型的3D分子生成
  • Transformer推理优化全景:从模型架构到硬件底层的深度解析
  • MySQL 索引全解析:结构、优化与索引下推实战指南​
  • clear configuration interface概念及题目
  • 设计模式(C++)详解——策略模式(1)
  • 基于html5设计的网站建设做一些购物网站
  • Vivado综合通关指南:从IP打包失败到工具崩溃的四重考验
  • 语义分割概述
  • 数据结构之排序算法
  • 绍兴网站建设优化手机企业网站建设开发
  • 偏导数解释
  • Linux内核与设备管理:USB存储驱动usb_storage/uas的安全卸载与复原
  • fallocate: fallocate failed: Text file busy
  • visio实现扇形图绘制的方式方法-以三等分扇形为例
  • 以太坊私有链搭建与智能合约部署指南
  • 网站开发 教学大纲网页设计图片与图片的位置
  • python+flask_socketio+pyautogui实现简易远程桌面功能
  • flask_socketio+pyautogui实现的具有加密传输功能的极简远程桌面
  • 深入了解linux网络—— TCP网络通信(上)
  • Android Jetpack 核心组件实战:ViewModel + LiveData + DataBinding 详解
  • 商务厅网站建设意见怎么做网站注册推广
  • Fragment 崩溃恢复后出现重叠问题的复现方式
  • 设计模式(C++)详解——策略模式(2)
  • 使客户能够大规模交付生产就绪的人工智能代理
  • Layui 前端和 PHP 后端的大视频分片上传方案
  • 无状态HTTP的“记忆”方案:Spring Boot中CookieSession全栈实战
  • Java 内存模型(JMM)面试清单(含超通俗生活案例与深度理解)