matlab奇技淫巧——绘制三维地图

  在数据处理工作中,常常会用到地图的绘制,最常用的自然是绘制平面的区域/全球地图,通过

matlab 复制代码
worldmap('world')           % 创建世界地图坐标区域
load coastlines             % 导入海岸线数据
plotm(coastlat,coastlon)

即可绘制,效果如下,其中经度为 − 180 ∼ 180 -180\sim180 −180∼180 ,负为西经,正为东经,纬度为 − 90 ∼ 90 -90\sim90 −90∼90 ,北纬为正,南纬为负。

  不过本博文题目是 matlab 奇技淫巧,岂可局限于此,下面我们就画一个三维地图,就像地球仪那样的。 ๑乛◡乛๑

  首先,需要绘制一个球体,这个可以用 sphere 函数生成,然后使用 mesh 绘制,这样就获得了一个球体。随后再绘制海岸线,需要将经纬度转换成 x , y , z x,y,z x,y,z 三维坐标,然后用 plot3 绘制,代码如下

matlab 复制代码
figure('color','w')
hold on

[x,y,z]=sphere(36);             % 生成一个球,36边,即分辨率:经度10度,纬度5度
mesh(x,y,z,'EdgeColor','k');    % EdgeColor属性设置网格颜色
axis equal;

% 绘制海岸线
load coastlines             % 导入海岸线数据
x2=cosd(coastlat).*cosd(coastlon);
y2=cosd(coastlat).*sind(coastlon);
z2=sind(coastlat);
plot3(x2,y2,z2,'k')

hold off

就可以得到三维地球了,如下

在这个地图上,可以用 scatter 或 plot3 绘制自己需要的散点数据,譬如绘制 WWLLN 闪电定位数据如下

  但有时我们不止需要绘制散点数据,还要绘制场强等数据(类似 surf 的绘制结果),这时就要用到纹理贴图了,如下

复制代码
[x,y,z]=sphere(36);
h=surface(x,y,z);
set(h,'CData',map,'FaceColor','texturemap');	%texturemap纹理贴图

其中 map 数据就是需要绘制的场强数据,map 为 180*360 的二维矩阵,对应 9 0 ∘ S ∼ 9 0 ∘ N , 18 0 ∘ W ∼ 18 0 ∘ E 90^\circ S\sim90^\circ N,\ 180^\circ W\sim180^\circ E 90∘S∼90∘N, 180∘W∼180∘E ,利用这一方法绘制的 CHAMP 卫星观测的地球磁场强度图如下

(完)

相关推荐
YYYing.6 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
邪修king7 小时前
Re:Linux系统篇(十九):进程篇(八): 进程等待详解:wait/waitpid,僵尸进程到底该如何回收
java·开发语言
我爱写代码i7 小时前
SKAPP SK影视反编译详细教程+源码 含苹果端ipa
开发语言·javascript·ecmascript
吴声子夜歌7 小时前
Java扩展——OkHttp
java·开发语言·okhttp
啊阿狸不会拉杆8 小时前
《计算机网络-自顶向下方法》5.7 网络管理、SNMP和NETCONF/YANG 读书笔记
开发语言·计算机网络·php
长友cy8 小时前
Qt官方示例D-BusListNames阅读
开发语言
萧瑟余晖8 小时前
Java深入解析篇六十一之编译器API(javax.tools)详解
java·开发语言
蜡台8 小时前
Kotlin 零基础完整版实战教程|从语法入门到Android工程实战
android·开发语言·kotlin
jimy18 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
码云数智-园园8 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言