【MATLAB】自学记录之读取DEM高程数据文件并渲染成三维地形图

news/2025/1/7 11:58:57/文章来源:https://www.cnblogs.com/fantasyboyce/p/18653612

1. 前言

近日在学习MATLAB编程以及地理高程数据处理等相关知识时,希望通过MATLAB的绘图等相关函数,读取高程数据文件,最后以可视化的方式展示全球陆地范围内的三维高程数据图。

2. 运行环境及数据

序号 配置项 说明
1 CPU Intel i5-12490F
2 内存 16G*2, 3600MHz
3 磁盘 256G,SSD
4 显卡 RTX4060Ti
5 MATLAB 2023b
6 高程数据文件 GMTED2010.TIFF,包含全球陆地的高程数据

3. 实现过程

  1. 通过readgeoraster函数读取tiff文件,获取DEM数据大小。

    clc;clear;
    file = 'GMTED2010.tif';
    [dem_data, ~] = readgeoraster(file);
    [row,col,~] = size(dem_data);
    
  2. (可选)设置缩放倍数。

    由于计算机内存受限,以原始DEM数据进行渲染3D效果时,会导致内存不够。

    % 设置缩放倍数
    % 10代表从dem_data数据中每隔10个点取一次
    multiple = 10;
    % 缩放后的XY坐标向量(经度轴和纬度轴)
    small_col = col / multiple;
    small_row = row / multiple;
    
  3. 初始化Z轴向量(高程轴)。

    alt = int16(zeros(small_row, small_col));for ri = 1: small_rowfor ci= 1: small_colalt(ri, ci) = dem_data((ri-1)*multiple + 1, (ci-1)*multiple + 1);enddisp("total data: " + small_row*small_col + ", copied: " + ri*ci);
    end
    
  4. (可选)清除无用的变量,腾出内存空间。

    clear dem_data;
    
  5. 对横坐标longitude和纵坐标latitude生成二维网格矩阵,矩阵大小为 \(small\_row \cdot small\_col\),与alt变量纬度保持一致。

    [longitude, latitude] = meshgrid(1:small_col, 1:small_row);% 默认是double类型,转换成int16,减少内存占用
    longitude = int16(longitude);
    latitude = int16(latitude);
    
  6. 使用mesh函数渲染3D曲面图形。

    % 将alt矩阵进行左右翻转
    alt = fliplr(alt);
    mesh(longitude, latitude, alt);
    
  7. 为图形加上三轴标签。

    xlabel("longitude");
    ylabel("latitude");
    zlabel("alt");
    hold on;
    

4. 渲染效果

高程数据3D渲染图

5. 完整代码

clc;clear;
file = 'GMTED2010.tif';
[dem_data, ~] = readgeoraster(file);
[row,col,~] = size(dem_data);multiple = 10;small_col = col / multiple;
small_row = row / multiple;alt = int16(zeros(small_row, small_col));for ri = 1: small_rowfor ci= 1: small_colalt(ri, ci) = dem_data((ri-1)*multiple + 1, (ci-1)*multiple + 1);enddisp("total data: " + small_row*small_col + ", copied: " + ri*ci);
endclear dem_data;
[longitude, latitude] = meshgrid(1:small_col, 1:small_row);longitude = int16(longitude);
latitude = int16(latitude);
alt = fliplr(alt);
mesh(longitude, latitude, alt);
xlabel("longitude");
ylabel("latitude");
zlabel("alt");
hold on;

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

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

相关文章

Redpanda Console - 流数据管理控制台

Redpanda Console - 流数据管理控制台 简介 Redpanda是一个与Kafka兼容的流媒体数据平台,该平台具有高性能、操作友好和云就绪性。这家总部位于旧金山的公司成立于2019年,专注于Kafka公司关键任务系统的替代产品。 Redpanda使用C++重写Kafka,与Kafka API完全兼容,可以与所有…

Prometheus+Grafana监控flink任务指标

Prometheus+Grafana监控flink任务指标 前期准备 Prometheus 是一款基于时序数据库的开源监控告警系统,由go语言开发,Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。 Grafana 是一款采用Go语言编写的开源应用…

Visual Studio中的C#项目连接本地mysql数据库

一、给项目搭载Mysql连接所需的NuGet包 1.点击visual studio上方导航栏的"工具"选项 2.在下拉框中选中"NuGet包管理器" 3.在展开的侧边栏中选择"管理解决方案的 NuGet 程序包" 4.在新打开的窗口中选择"浏览" 5.搜索框中输入"mysq…

P6822 [PA 2012 Finals] Tax

一个小Trick。很牛的题目!! 直接做可能比较困难,你要考虑一些东西重构一下原图。 这一个题目因为是与边相关的,考虑拆边,拆成两条有向边,那么对于一个点的贡献,我们暴力枚举他的边,两条边的贡献就是取 max。 但这个显然过不了,我们有一种差分建边的方式,按照边权排序…

20241421 《计算机基础与程序设计》课程总结

第一周作业 1.学习了有关专业的技能培养方向 2.对《计算机基础与程序设计》进行了大致的浏览,大概了解了计算机的相关理论知识 3.学习了有关2进制、8进制、10进制、16进制之间的转换第二周作业 1.《计算机科学概论》:第一章向我们介绍了计算机科学这门学科的内容以及其基本概…

[.NET] 单位转换实践:深入解析 Units.NET

在现代软件开发中,准确处理不同单位的转换是一个常见而复杂的需求。无论是处理温度、长度、重量还是其他物理量,都需要可靠的单位转换机制。本文将深入介绍 Units.NET 库,展示如何在 .NET 应用中优雅地处理单位转换。单位转换实践:深入解析 Units.NET 摘要 在现代软件开发中…

卡诺图化简

卡诺图化简 卡诺图(Karnaugh Map,简称K图)是一种用于简化布尔代数表达式的工具。它通过将真值表的值图形化,帮助我们更直观地找到最小项和最大项,从而简化逻辑表达式。 卡诺图的基本概念单元格:每个单元格代表一个布尔变量的可能取值组合。 邻接:两个单元格如果只有一个…

Postman与ElasticSearch交互

为了方便测试,修改ES安装路径下的config/elasticsearch.yml中的安全配置,不使用密钥访问。 以下配置的enabled都改为false # Enable security features xpack.security.enabled: falsexpack.security.enrollment.enabled: false# Enable encryption for HTTP API client conn…

本地搭建ElasticSearch

1:在elastic.co下载安装包 https://www.elastic.co/downloads/elasticsearch windows版本的是个zip包,下载解压缩后可直接通过命令行运行 cd [安装路径]/bin elasticsearch2:配置 默认需要ssl、密码等安全配置,会导致localhost:9200访问失败。可通过以下方式关闭安全配置,…

20241307《计算机基础与程序设计》课程总结

目录 第一节 第二节 教材学习内容总结 C语言程序设计第十三章和第十四章的总结: 第十三章:文件操作文件的打开与关闭 • 使用fopen()函数打开文件,它接受文件名和模式作为参数,返回一个FILE指针。 • fclose()函数用于关闭文件,释放资源。 文件的读取 • fgetc()和getc…

错误记录:[Synth 8-6895] The reference checkpoint

报错详情点击查看代码 [Synth 8-6895] The reference checkpoint E:/Projects/Vivado2023/2.ExampleDesign_my/iic_ms/iic_ms.srcs/utils_1/imports/synth_1/Master.dcp is not suitable for use with incremental synthesis for this design. Please regenerate the checkpoin…

4 跨音速

可以的话请点个赞吧,欧内盖,如果没有大伙支持的话,瓦达西!4 跨音速 基本 升力的基本计算公式为:\(L=\frac{1}{2}\rho_{\infty}V_{\infty}^{2}Sc_{l}\) 对于二维翼型升力系数\(c_l\)而言,它直接和机翼截面几何结构相关,即随翼型弯度增大、厚度-弦长比增大而增大。 ‍ ​​…