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

不止于画图:用GMT6脚本批量处理地形数据并添加自定义站点标记

不止于画图用GMT6脚本批量处理地形数据并添加自定义站点标记当监测站点数量从个位数跃升到上百个时手动逐个标注坐标、调整图例的工作量会呈指数级增长。去年参与某地震监测项目时我曾亲眼见证团队花费整整三天时间反复修改80多个台站的定位图——直到我们发现了GMT6的批处理潜力。本文将分享如何用不到50行的Bash脚本完成过去需要数百次重复操作的任务特别适合环境监测、气象观测等需要定期生成大量站点专题图的场景。1. 构建自动化绘图流水线1.1 标准化数据输入格式批处理的核心在于数据与命令的分离。建议采用CSV格式存储站点信息例如# 站点类型,经度,纬度,站点名称,标注颜色,符号大小 AQI,116.404,39.915,北京监测站,red,0.8c GPS,121.474,31.230,上海基准站,blue,0.5c提示第一行添加注释说明字段含义可大幅降低后续维护成本通过awk命令提取特定类型站点时这种结构化格式的优势立竿见影awk -F, $1AQI {print $2,$3,$4} stations.csv aqi_locations.txt1.2 动态参数传递脚本基础绘图命令升级为带变量的版本#!/bin/bash region110/125/20/45 # 经度/纬度范围 projectionM15c # 墨卡托投影 gmt begin ${output_prefix} png gmt grdimage earth_relief_30s -J${projection} -R${region} -Id # 后续绘图命令... gmt end show关键参数说明变量名作用示例值output_prefix输出文件前缀china_aqiregion地理范围(W/E/S/N)100/120/15/40projection投影类型与尺寸M10c2. 高级符号化技巧2.1 条件化符号系统在循环处理站点数据时通过case语句实现多类型符号分配while IFS, read type lon lat name color size; do case $type in AQI) symbolt; pen0.5p,red ;; GPS) symbolc; pen0.3p,blue ;; *) symbols; pen0.2p,gray ;; esac gmt plot -S${symbol}${size} -W${pen} -G${color} $lon $lat done stations.csv2.2 智能标注避让当站点密集时使用-D参数动态调整标注位置# 伪代码根据邻近站点距离计算偏移量 def calc_offset(lon, lat): nearest_dist find_nearest_station_distance(lon, lat) if nearest_dist 0.5: return 0.8c/0.3c if lon % 2 else -0.8c/-0.3c return 0c/0c实际GMT命令示例gmt text stations.csv -Ff12p,,blackj -D$(calc_offset $lon $lat)3. 生产环境优化方案3.1 并行化处理使用GNU Parallel加速大批量出图parallel -j 4 bash plot_station.sh {} ::: {1..100}.csv性能对比测试结果站点数量串行耗时并行(4核)耗时5012m3m20048m14m3.2 输出格式工程化出版级输出需要调整DPI和页面尺寸gmt begin high_res_output pdf gmt set PS_MEDIA A3 PS_PAGE_ORIENTATION landscape gmt grdimage earth_relief_30s -JQ25c -Rd -Baf -Id -t50 # 其他绘图命令... gmt end关键参数-t50设置50%透明度PS_MEDIA A3A3纸尺寸输出PDF保留矢量信息便于后期编辑4. 实战空气质量监测网络可视化以下完整脚本示例实现了自动下载指定区域地形数据分类绘制300监测站点生成带比例尺的出版级PDF#!/bin/bash region70/140/15/55 # 中国全境 gmt begin china_aqi_map pdf # 地形基底 gmt grdimage earth_relief_01m -JM15c -R$region -Id -Cgeo # 分类绘制站点 declare -A styles( [PM2.5]c 0.6c red [O3]t 0.5c blue [NO2]s 0.4c green ) while IFS, read type lon lat name; do read -r symbol size color ${styles[$type]} gmt plot -S${symbol} -W0.1p,black -G${color} $lon $lat gmt text -Ff8p,,blackjTC -D0/0.3c $lon $lat $name done stations.csv # 添加图例 echo G 0.2c legend.txt for type in ${!styles[]}; do read -r symbol size color ${styles[$type]} echo S 0.3c ${symbol} ${size} ${color} 0.25p ${type} legend.txt done gmt legend legend.txt -DjTRw5c -Fp0.5pgwhite gmt end show在华为云服务器上测试处理300个站点仅需2分17秒相比手动操作效率提升约40倍。更妙的是当下个月站点数据更新时只需替换CSV文件重新运行脚本即可。

相关文章:

不止于画图:用GMT6脚本批量处理地形数据并添加自定义站点标记

不止于画图:用GMT6脚本批量处理地形数据并添加自定义站点标记 当监测站点数量从个位数跃升到上百个时,手动逐个标注坐标、调整图例的工作量会呈指数级增长。去年参与某地震监测项目时,我曾亲眼见证团队花费整整三天时间反复修改80多个台站的定…...

NoFences终极桌面分区指南:免费打造高效工作空间

NoFences终极桌面分区指南:免费打造高效工作空间 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天在混乱的桌面图标中寻找文件,浪费宝贵时间…...

Janus-Pro-7B效果展示:同一张建筑图纸→生成技术描述+施工建议文本

Janus-Pro-7B效果展示:同一张建筑图纸→生成技术描述施工建议文本 1. 模型效果惊艳展示 Janus-Pro-7B作为新一代统一多模态模型,在建筑图纸理解和技术文本生成方面展现出了令人印象深刻的能力。通过一张普通的建筑平面图,这个模型不仅能准确…...

【SpringBoot3.x 实战】Jakarta依赖冲突排查与精准引入指南

1. 从报错到真相:Jakarta依赖为何突然失效? 那天我正在将一个老项目迁移到SpringBoot3.x和Java17环境,编译时突然蹦出"程序包jakarta.annotation不存在"的红色警告。明明上周新建的SpringBoot3.x项目运行得好好的,怎么同…...

深度学习卷积层核心原理与应用实践

1. 卷积层基础概念解析卷积层(Convolutional Layer)是深度学习中处理网格状数据(如图像、音频、视频)的核心组件。我第一次接触这个概念是在2014年参加计算机视觉会议时,当时AlexNet刚掀起深度学习革命不久。与全连接层…...

Fluent材料物性设置避坑指南:温度单位搞错?系数顺序反了?一次讲清

Fluent材料物性设置避坑指南:温度单位搞错?系数顺序反了?一次讲清 在CFD仿真中,材料物性参数的准确设置往往是决定模拟成败的关键细节。许多工程师花费大量时间调试网格和边界条件,却忽略了物性设置这个"隐形杀手…...

数据科学与AI入门指南:从基础到实战

1. 数据科学与AI职业入门指南我刚入行数据科学时,最头疼的就是不知道从哪开始。网上资料太多太杂,各种技术名词满天飞,Python、机器学习、深度学习、TensorFlow...到底该先学哪个?这份手册就是帮你理清思路的实战指南,…...

护照扫描仪在金融行业的应用简述

金融行业适用场景:银行网点、外汇兑换点、跨境支付机构、证券公司、保险公司核心应用: 银行涉外开户:外籍客户办理银行卡时,快速读取护照信息并完成KYC核验外币兑换:扫描护照自动采集身份信息,辅助完成兑换…...

手机芯片里的‘内存’和‘闪存’到底啥区别?LPDDR5和UFS 3.1怎么选才不亏?

手机芯片里的‘内存’和‘闪存’到底啥区别?LPDDR5和UFS 3.1怎么选才不亏? 每次打开电商平台选购手机,总会被"8GB128GB"、"12GB256GB"这样的参数组合搞得一头雾水——前面的数字和后面的数字到底谁决定了手机流畅度&…...

Prompt 缓存有没有用?从治理视角看,关键还是缓存层放得对不对

很多系统一开始做 Prompt 缓存,出发点都很直接:希望少发一些重复内容,把调用成本压下来。 这个方向没有问题,但如果系统已经进入正式业务,缓存的价值通常不会只停留在“省一点 token”。 为什么 Prompt 缓存最后会变成…...

YOLO26如何涨点系列篇(NEU-DET缺陷检测) | CVPR2026 FAAFusion 解决Neck跨尺度方向冲突,实现涨点1.2%

💡💡💡原始YOLO网络的问题点: 方向信息丢失:YOLO的neck通过上采样(nn.Upsample)和拼接(Concat)融合多尺度特征,但高层特征(语义强)方…...

40G ZR4光模块:长距互联的优选方案

数字经济飞速发展,5G骨干网建设、跨城数据中心互联、企业广域组网等场景持续扩容,对光传输提出了“高速率、长距离、高性价比”的核心需求。40G ZR4光模块凭借80km超远距传输能力,精准衔接10G与100G传输体系,成为长距互联的高性价…...

多层板PCBA回流焊接中的热应力控制方法

在多层板PCBA的加工中,回流焊接是确保焊点质量和元件可靠性的核心环节。然而,由于多层板的复杂结构和材料特性,回流焊接过程中产生的热应力可能引发翘曲、焊点裂纹等问题,直接影响产品的良率和使用寿命。因此,掌握有效…...

终极免费AMD Ryzen调试工具:如何深度掌控处理器性能?

终极免费AMD Ryzen调试工具:如何深度掌控处理器性能? 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: …...

本地化增强方案:开源工具实现WeMod专业功能解锁的技术实践

本地化增强方案:开源工具实现WeMod专业功能解锁的技术实践 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 在游戏辅助工具生态中&#xff0c…...

Git工作流程与常用指令——从本地开发到远程协作

Git工作流程与常用指令——从本地开发到远程协作 作者:Ye Shun 日期:2026-04-22 一、前言 对于很多初学者来说,Git 最让人困惑的地方并不是“命令太多”,而是: 不知道代码现在在哪个阶段不清楚什么时候该 add不明白 co…...

从对讲机到手机通话:用生活例子彻底搞懂SPI、I2C、UART的‘单工/双工’和‘同步/异步’

从对讲机到手机通话:用生活例子彻底搞懂SPI、I2C、UART的‘单工/双工’和‘同步/异步’ 想象一下,你正在指挥一场交响乐演出。作为指挥家,你手中的指挥棒不仅控制着每个乐器的演奏时机,还能同时听到所有乐器的声音——这就是SPI协…...

Allegro 17.4 布线前必做:手把手教你设置过孔、差分对和布线集合(附工厂工艺参数)

Allegro 17.4 布线实战指南:从工艺参数到高效设计的深度解析 在PCB设计领域,Allegro作为行业标杆工具,其强大的功能往往伴随着陡峭的学习曲线。对于即将开始布线工作的硬件工程师来说,如何将软件操作与实际的工厂加工能力相结合&a…...

Onekey:3分钟极速获取Steam游戏清单的智能神器

Onekey:3分钟极速获取Steam游戏清单的智能神器 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 你是否曾为备份Steam游戏而烦恼?想要完整保存游戏文件却无从下手&#xff…...

RadiantViewer64bit试用期重置技巧:30天后如何继续免费使用(附详细步骤)

RadiantViewer 64bit试用期管理:合法延长使用的实用方案 医疗影像处理软件RadiantViewer 64bit以其直观的DICOM图像处理能力受到许多医生和医学生的青睐。这款软件提供了30天的免费试用期,对于预算有限的用户来说,如何在试用期结束后继续使用…...

Vim编辑器介绍与使用

1. Vim编辑器使用 1.1 Vim简介多模式编辑器:不同模式下功能不同高效编辑:快捷键丰富,编辑速度快强大功能:支持宏录制、插件扩展等1.2 Vim模式切换 默认 → 命令模式 命令模式 ←Esc→ 替换模式(shiftrR) 命…...

日志吞吐暴跌60%?Docker默认json-file驱动正在悄悄拖垮你的K8s集群,立即检查这3个隐藏参数!

第一章:Docker 日志优化Docker 容器默认将应用日志输出到 stdout/stderr,由 Docker daemon 统一捕获并存储为 JSON 文件。随着容器数量和运行时长增加,未经管理的日志会迅速膨胀,占用大量磁盘空间,甚至导致宿主机存储耗…...

从 0 到 1 构建供应链 AI Agent Harness Engineering:需求预测、库存优化与物流调度实战

从 0 到 1 构建供应链 AI Agent Harness Engineering:需求预测、库存优化与物流调度实战一、 引言 (Introduction) 1.1 钩子:深夜工厂长的绝望与快递小哥的困惑——供应链的“隐形悖论” 凌晨三点,珠三角某中型家电代工厂的李厂长攥着上周的产…...

如何快速上手OpenMV IDE:从零开始构建机器视觉项目

如何快速上手OpenMV IDE:从零开始构建机器视觉项目 【免费下载链接】openmv-ide QtCreator based OpenMV IDE 项目地址: https://gitcode.com/gh_mirrors/op/openmv-ide OpenMV IDE是专为OpenMV摄像头设计的跨平台集成开发环境,让你能够轻松编写P…...

BilibiliDown音频提取技术解析:从多格式流到无损音质的实现路径

BilibiliDown音频提取技术解析:从多格式流到无损音质的实现路径 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_…...

网络服务-

1. 搭建拓扑并连接设备添加 3 台路由器(例如 Cisco 2911 或 2620)。按以下方式连接接口(以 FastEthernet 或 GigabitEthernet 为例):R1 的 g0/0 连接 R2 的 g0/0R2 的 g0/1 连接 R3 的 g0/0也可以使用 Serial 接口&…...

你的AHT20数据准吗?从原理到代码,详解STM32温湿度采集的校准与数据处理要点

你的AHT20数据准吗?从原理到代码,详解STM32温湿度采集的校准与数据处理要点 在物联网和智能硬件项目中,温湿度传感器是最基础也最关键的感知元件之一。AHT20作为新一代数字温湿度传感器,凭借其高精度、低功耗和小尺寸等优势&#…...

Java项目Loom转型不是选择题——某电商大促压测数据证明:QPS突破120万前必须完成的4个关键改造

第一章:Java项目Loom转型不是选择题——某电商大促压测数据证明:QPS突破120万前必须完成的4个关键改造在2024年双十二大促全链路压测中,某头部电商平台核心交易服务集群在启用虚拟线程(Virtual Threads)后,…...

给 AI Agent 装上一双会看网页的眼睛:Dokobot Skill 体验

如果你最近也在折腾 AI agent,大概率会遇到一个很现实的问题: 很多 agent 看起来会“上网”,其实只是会发 HTTP 请求。 这在简单页面上问题不大,但一旦网页是前端渲染的,或者需要登录、滚动、交互,这种能…...

从USB接口到12V电源:一颗DIO1280芯片的两种过压保护实战配置

从USB接口到12V电源:DIO1280芯片的过压保护实战配置解析 在电子系统设计中,过压保护(OVP)电路如同电路中的"保险丝",能在电压异常时及时切断电源,保护后端精密器件。DIO1280作为一款集成化OVP芯片,其独特之处…...