2022-10-25 更新:
最近在网上又找到了一个更加简单的方法,直接使用Matlab内置的WebMap实现轨迹绘制。psins工具箱的位置结果单位是弧度,所以需要转换成角度。
webmap 'Open Street Map';
wmline(ins_avp(:,7)./glv.deg, ins_avp(:,8)./glv.deg);

【缺点】地图需要在线加载,速度比较慢,可以在下表中找出稳定的地图源。
表1 可以调用的地图
Name | Map Source |
'World Street Map' | Worldwide street map provided by Esri®. |
'Open Street Map' | Street map from openstreetmap.org. |
'World Imagery' | Worldwide imagery provided by Esri. |
'World Topographic Map' | Topographic map for the world from Esri. |
'World Shaded Relief' | Surface elevation as shaded relief provided by Esri |
'World Physical Map' | Natural Earth map of the world provided by Esri |
'World Terrain Base' | Shaded relief and bathymetry provided by Esri |
'USGS Imagery' | Composite of Blue Marble, NAIP, and Landsat provided by the USGS. |
'USGS Topographic Imagery' | Topographic map with imagery provided by the USGS. |
'USGS Shaded Topographic Map' | Composite of contours, shaded relief, and vector layers provided by the USGS. |
'USGS Shaded Relief' | Shaded relief from National Elevation Dataset provided by the USGS. |
'National Geographic Map' | General reference map provided by Esri |
'DeLorme World Basemap' | Topographic map provided by Esri |
'Ocean Basemap' | Bathymetry, marine features, depth in meter provided by Esri |
'World Navigation Charts' | Topographic data with nautical information provided by Esri |
'Light Gray Canvas Map' | Neutral background map with minimal colors provided by Esri |
方法

因为经常要处理惯导数据,分析纯惯导或者组合导航的性能,自己做的话用matlab画出轨迹就好了,像这样

<!--more-->
但是如果是写文章、写项目报告、作ppt的话这种图就不太合适,把轨迹绘制在地图上会更美观一点。
我在网上最先找到的是基于python的方法,因为python库多,也适合解决这类问题。在知乎上发现python的folium 库可以下载地图数据,并把轨迹画在地图上保存成网页形式。它的地图数据是临时从网上下载的,所以必须联网,而且KXSW会让地图加载快一些。
我当时看的那篇文章找不到了,直接在知乎中搜索“地图 绘制 folium”就能找到相关文章,讲的非常详细。
我自己用的这个程序是两部分,一部分是matlab函数,在函数中输入参数是10列的avp数据。格式和psins工具箱一致,这样解算完的数据直接调用avp2map函数就能画出轨迹图,并用浏览器打开。
代码
avp2map
function avp2map(avp)
% AVP2MAP 根据解算后的avp数据绘制轨迹
% 请修改RouteMap.py的路径后运行
% 参考:psins toolbox, folium
% by TMR.Nic @ Zhihu
% 2021-07-10
data = [avp(:,7:8).*180./pi avp(:,9:10)];
len = length(data);
fp = fopen('pos.txt', 'w');
for i = 1:len
fprintf(fp,'%.8f %.8f %.8f %.3f\n', data(i,:));
end
fclose(fp);
system('python.exe path\RouteMap.py'); % 这里的path换成RouteMap.py的路径
system('.\trj.html');
delete('pos.txt');
end
RouteMap.py
from folium import plugins
import folium
import re
filein = 'pos'
fileout = 'trj'
fp = open(filein + '.txt','r')
pos0 = fp.readline()
LatLnt0 = re.findall('(.*?) (.*?) (.*?) (.*?)\n',pos0,re.S)
LatLnt0 = [float(LatLnt0[0][0]), float(LatLnt0[0][1])]
LatLnts = fp.readlines()
fp.close()
m = folium.Map(LatLnt0, zoom_start=15.6,
tiles='https://mt.google.com/vt/lyrs=s&x={x}&y={y}&z={z}',
attr='default') #中心区域的确定
location =[]
for item in LatLnts:
LatLnt = re.findall('(.*?) (.*?) (.*?) (.*?)\n',item,re.S)
LatLnt = [float(LatLnt[0][0]), float(LatLnt[0][1])]
location.append(LatLnt)
route = folium.PolyLine( #polyline方法为将坐标用线段形式连接起来
location, #将坐标点连接起来
weight=3, #线的大小为3
color='yellow', #线的颜色为橙色
opacity=0.9 #线的透明度
).add_to(m) #将这条线添加到刚才的区域m内
m.save(fileout + '.html') #将结果以HTML形式保存
print("轨迹绘制完成")
效果
这样画出来的轨迹图就变成了


folium.Map()还有设置不同的地图源等功能,可以根据自己的需要调整参数。
这个方法最大的优点就是简单、快速,只要有python环境,下载相应的包就可以,保存成网页文件也方便互相传递。但是缺点也是有的,网页虽然是本地的,但是要在线加载地图资源,有的时候会比较慢。