从您的移动设备获取GPS数据,并在地图上绘制您的位置和速度
这个例子展示了如何从Android™或iOS移动设备收集位置数据并显示在地图上。经纬度坐标用于标记设备的路径。速度信息用于为路线添加颜色。最终的结果是设备运行的位置和速度的可视化表示。
此示例需要Mapping Toolbox™。
设置移动设备
为了在MATLAB®中从移动设备接收数据,您需要在移动设备上安装和设置MATLAB mobile™应用程序。
从MATLAB移动设置登录到MathWorks®Cloud。
创建到移动设备的连接
在命令屏幕的MATLAB移动,使用mobiledev
命令来创建表示移动设备的对象。
M = mobiledev;
显示的输出应该显示联系:1
,表示mobiledev
对象已成功建立到应用程序的连接。
准备从位置传感器获取数据
为了收集GPS数据,首先要确保你的设备的GPS是打开的。如果在移动设备的位置设置中启用,移动网络和Wi-Fi也可以用来确定位置。
启用移动设备上的位置传感器。
m.PositionSensorEnabled = 1;
上显示数据可能需要一些时间传感器屏幕的MATLAB移动,因为设备将需要搜索一个GPS信号。在室内,GPS信号通常是不可用的。
开始获取数据
使能传感器后,传感器MATLAB Mobile的屏幕将显示传感器测量到的当前数据。的日志记录
属性允许您开始将传感器数据发送到mobiledev
.
m.Logging = 1;
收集位置数据
记录在设备上的所有位置传感器数据现在正在被记录mobiledev
.
在本例中,设备被带到了MathWorks附近的一个短车道上。
停止记录数据
使用mobiledev
的日志属性来停止日志数据。
m.Logging = 0;
检索记录位置数据
要创建地图,需要使用纬度、经度和速度数据。的poslog
函数可用于检索此信息mobiledev
.
[lat,lon,t,spd] = poslog(m);
对于本例,已经记录并保存了数据。
负载drivingAroundMathWorks纬度朗社会民主党;
Bin速度转换为颜色值
速度值被分组,以便使用离散数量的颜色来表示观察到的速度。
nBins = 10;binSpacing = (max(spd) - min(spd))/nBins;binRanges = min(spd):binSpacing:max(spd)-binSpacing;%在binRanges中添加一个inf,以包围最后一个bin以上的值。binRanges(end+1) = inf;% |histc|决定每个速度值落入哪个bin。[~, spdBins] = histc(spd, binRanges);
根据速度拆分纬度和经度数据
一个不连续的线段被创建为每个速度仓。每个片段将被分配一个单一的颜色。这比将每个相邻的纬度和经度值作为它们自己的线段来处理要少得多。
各个片段被存储为使用的地理特征geoshape
从映射工具箱。
Lat = Lat ';Lon = Lon ';spdBins = spdBins';创建一个地理形状向量,它将线段存储为%的特性。S = geoshape();为k = 1:nBins只保留与当前bin匹配的lat/lon值。离开% rest为NaN,它们被解释为线段中的断点。latValid = nan(1, length(lat));latValid(spdBins==k) = lat(spdBins==k);lonValid = nan(1, length(lon));lonValid(spdBins==k) = lon(spdBins==k);使路径连续,尽管被分割成不同的。控件转换后出现的经度/经度值%当前速度仓到另一个速度仓将需要保留。transitions = [diff(spdBins) 0];insertionInd = find(spdBins==k & transitions~=0) + 1;预分配空间,并插入额外的纬度/长度值。latSeg = 0(1,长度(latValid) +长度(insertionInd));latSeg(insertionInd + (0:length(insertionInd)-1)) = lat(insertionInd);latSeg(~latSeg) = latValid;lonSeg = 0(1,长度(lonValid) +长度(insertionInd));lonSeg(insertionInd + (0:length(insertionInd)-1)) = lon(insertionInd);lonSeg(~lonSeg) = lonValid;将纬度/长度段添加到地理形状向量。s(k) = geoshape(latSeg, lonSeg);结束
创建一个Web地图和路由覆盖
这些碎片现在可以组合成一个网络地图显示。经纬度数据被处理成单独的线段,覆盖在地图上。每个线段都有一个颜色,对应于在各自位置记录的速度。
“映射工具箱”提供了许多使用web地图的功能。
使用webmap
在浏览器中打开网络地图。
Wm = webmap(“公开街道地图”);
作为参考,MathWorks在地图上有标记。
mwLat = 42.299827;mwLon = -71.350273;name =“MathWorks”;iconDir = fullfile(matlabroot,“工具箱”,matlab的,“图标”);iconFilename = fullfile(iconDir,“matlabicon.gif”);wmmarker (mwLat mwLon,“FeatureName”、名称、“图标”, iconFilename);
控件生成与速度箱对应的颜色列表秋天
colormap。这将创建一个[nBins x 3]
矩阵,每个bin的RGB值。
颜色=秋天(nBins);
使用地理形状向量在webmap上绘制一条线。形状向量的每个元素都对应于一个不连续线段,对应于一个分箱速度值。这些元素与刚刚创建的颜色列表的元素相匹配。
wmline(年代,“颜色”、颜色、“宽度”5);
把地图放大到路线上。
wmzoom (16);
最后的显示提供了整个路线的位置和速度的可视化表示。显然,在停车场和转弯时,该设备的速度比在直道上要慢。
清理
关闭位置传感器并清除mobiledev
.
m.PositionSensorEnabled = 0;清晰的米;