Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モバイル デバイスからの 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;