モバイル デバイスからの GPS データの取得と位置および速度のマップ上へのプロット
この例では、Android™ または iOS のモバイル デバイスから位置データを収集して、マップ上に表示する方法を説明します。緯度と経度の座標を使用して、デバイスの経路をマークします。速度情報を使用して、経路に色を加えます。最終結果は、デバイスが移動した位置と速度の視覚的表現になります。
この例には、Mapping Toolbox™ が必要です。
モバイル デバイスの設定
モバイル デバイスからのデータを MATLAB® で受信するには、モバイル デバイスに MATLAB Mobile™ アプリをインストールして設定する必要があります。
MATLAB Mobile の [設定] から MathWorks® Cloud にログインします。
モバイル デバイスへの接続の作成
MATLAB Mobile の [コマンド] 画面で mobiledev
コマンドを使用して、モバイル デバイスを表すオブジェクトを作成します。
m = mobiledev;
表示された出力は Connected: 1
になるはずです。これは、mobiledev
オブジェクトがアプリへの接続を正常に確立したことを示します。
位置センサーからデータを取得するための準備
GPS データを収集するには、まずデバイスの GPS がオンになっていることを確認します。モバイル デバイスの位置設定が有効になっている場合は、モバイル ネットワークおよび Wi-Fi を使用して位置を判定することもできます。
モバイル デバイスの位置センサーを有効にします。
m.PositionSensorEnabled = 1;
デバイスは GPS 信号を検索する必要があるため、データが MATLAB Mobile の [センサー] 画面に表示されるまで時間がかかることがあります。通常、GPS 信号は屋内で使用できません。
データ取得の開始
センサーを有効にすると、MATLAB Mobile の [センサー] 画面にはセンサーで測定された現在のデータが表示されます。Logging
プロパティを使用して、センサー データの mobiledev
への送信を開始できます。
m.Logging = 1;
位置データの収集
これで、デバイスに記録されたすべての位置センサー データが mobiledev
によりログに記録され始めます。
ここで示す例は、デバイスを MathWorks の周辺を走行する短いドライブに持ち出したときのものです。
データのログ記録の停止
再び mobiledev
のログ プロパティを使用して、データのログ記録を停止します。
m.Logging = 0;
ログ記録された位置データの取得
マップを作成するには、緯度、経度および速度のデータが必要です。関数 poslog
を使用して、mobiledev
からの情報を取得できます。
[lat,lon,t,spd] = poslog(m);
この例では、データのログ記録と保存が既に行われています。
load drivingAroundMathWorks lat lon spd;
速度のカラー値へのビン化
離散的な色の数値を使用して、観測された速度を表すために、速度値をビン化します。
nBins = 10; binSpacing = (max(spd) - min(spd))/nBins; binRanges = min(spd):binSpacing:max(spd)-binSpacing; % Add an inf to binRanges to enclose the values above the last bin. binRanges(end+1) = inf; % |histc| determines which bin each speed value falls into. [~, spdBins] = histc(spd, binRanges);
速度による緯度データと経度データの分割
速度ビンごとに、不連続の線分を作成します。これらの線分にはそれぞれ 1 色が割り当てられます。これにより、隣接する緯度値と経度値の各ペアを個別の線分として扱うよりも、作成される線分の総数がはるかに少なくなります。
Mapping Toolbox の geoshape
を使用して、各線分を地理的特徴として保存します。
lat = lat'; lon = lon'; spdBins = spdBins'; % Create a geographical shape vector, which stores the line segments as % features. s = geoshape(); for k = 1:nBins % Keep only the lat/lon values which match the current bin. Leave the % rest as NaN, which are interpreted as breaks in the line segments. latValid = nan(1, length(lat)); latValid(spdBins==k) = lat(spdBins==k); lonValid = nan(1, length(lon)); lonValid(spdBins==k) = lon(spdBins==k); % To make the path continuous despite being segmented into different % colors, the lat/lon values that occur after transitioning from the % current speed bin to another speed bin will need to be kept. transitions = [diff(spdBins) 0]; insertionInd = find(spdBins==k & transitions~=0) + 1; % Preallocate space for and insert the extra lat/lon values. latSeg = zeros(1, length(latValid) + length(insertionInd)); latSeg(insertionInd + (0:length(insertionInd)-1)) = lat(insertionInd); latSeg(~latSeg) = latValid; lonSeg = zeros(1, length(lonValid) + length(insertionInd)); lonSeg(insertionInd + (0:length(insertionInd)-1)) = lon(insertionInd); lonSeg(~lonSeg) = lonValid; % Add the lat/lon segments to the geographic shape vector. s(k) = geoshape(latSeg, lonSeg); end
Web マップおよび経路オーバーレイの作成
ここで、各データを組み合わせて webmap を表示できます。緯度データと経度データが処理され、マップに重ね合わせる各線分が構成されました。各線分には、それぞれの位置で記録された速度に対応する色が付いています。
Mapping Toolbox には、Web マップを操作するための多数の関数があります。
webmap
を使用して、ブラウザーで Web マップを開きます。
wm = webmap('Open Street Map');
基準地として、MathWorks をマップ上にマークします。
mwLat = 42.299827; mwLon = -71.350273; name = 'MathWorks'; iconDir = fullfile(matlabroot,'toolbox','matlab','icons'); iconFilename = fullfile(iconDir, 'matlabicon.gif'); wmmarker(mwLat, mwLon, 'FeatureName', name, 'Icon', iconFilename);
速度ビンに対応する色のリストを、autumn
カラーマップを使用して生成します。これは、各ビンについて RGB 値をもつ [nBins x 3]
行列を作成します。
colors = autumn(nBins);
地理的形状ベクトルを使用してラインを webmap 上に描画します。この形状ベクトルの各要素は、ビン化された速度値を表す不連続な線分に対応します。これらの要素は、先ほど作成した色のリストの要素に対応します。
wmline(s, 'Color', colors, 'Width', 5);
マップの経路上にズームインします。
wmzoom(16);
最終的な表示は、経路全体の位置と速度の視覚的表現になります。デバイスは明らかに、駐車場内とカーブ時に、直線道路よりも低速で移動しています。
クリーンアップ
位置センサーをオフにして、mobiledev
をクリアします。
m.PositionSensorEnabled = 0;
clear m;
この例をデスクトップの MATLAB で実行するには、ご使用のモバイル デバイスに応じて MATLAB Support Package for Android Sensors または MATLAB Support Package for Apple iOS Sensors のいずれかをインストールする必要があります。