MATLAB

【MATLAB】任意の位置情報が指定したポリゴンデータの中に含まれるかどうかを判別する

はじめに

IoTセンサや位置情報を記録するスマートフォンアプリケーションの普及によって,データ分析で位置情報データを扱うことが飛躍的に増えました。また,都道府県市区町村別の地図データも政府や地方自治体からオープンデータとして公開されることも多くなってきています。これらのデータを組み合わせて分析することで,例えば,市区町村別のアプリケーションのユーザー数の分析を行うことができます。この投稿では,MATLABのMapping toolboxを使用して任意の位置情報データが,指定した都道府県市区町村のポリゴンデータの中に含まれるのかどうかを判定する方法を紹介します。

データの用意

都道府県市区町村のポリゴンデータ

以前の投稿で,政府統計のオープンデータサイト e-Stat で提供されている市区町村別のshapefileを使用して,愛知県豊田市のポリゴンデータを描画する方法を紹介しました。今回も引き続き愛知県豊田市を対象に進めていきたいと思います。こちらの投稿で抽出している toyota_shp が計算されている前提で以降は進めますので,算出方法など詳しくはこちらの投稿を参照してください。

位置情報ダミーデータの作成

豊田市周辺の位置情報データを作成します。rand関数を使用して,以下のように指定の値の範囲内でダミーの位置情報を100点作成しました。

% 豊田市周辺でダミーデータを作成:北緯34.9~35.4, 東経137.0~137.7 を100点作る
lat = 34.9 + (35.4-34.9).*rand(100,1);
long = 137.0 + (137.7-137.0).*rand(100,1);

% plotで確認
figure()
geoplot(toyota_shp)
hold on
geoscatter(lat,long,'red','filled')
MATLAB

実行結果

ダミーデータの作成結果

作成した位置情報データが指定ポリゴンデータ内に含まれるかを判別する

Mapping Toolboxを導入すると geopointshape関数とisinterior関数とを使用することができるようになります。geopointshape関数によって作成した位置情報データをshapefile化することができます。それによって,isinterior関数で扱える形になります。isinterior関数では,shapefile形式で作成したクエリ点が,指定したポリゴンデータ内に含まれるかどうかを判別します。これらを使用して以下のようにコードを作成しました。

% 作成したデータが豊田市に入っているかどうかの判別
dat.Shape = geopointshape(lat, long);
dat.toyota_flg = false(length(dat.Shape),1);
for i=1:height(toyota_shp)
    inpoly = isinterior(toyota_shp.Shape(i),dat.Shape);
    dat.toyota_flg(inpoly,:) = true;
end

%「豊田市」と「それ以外」に分類
toyota_dat = dat.Shape(dat.toyota_flg,:);
other_dat = dat.Shape(~dat.toyota_flg,:);

% plotで確認
figure()
geoplot(toyota_shp)
hold on
geoplot(toyota_dat,'MarkerSize',15,'MarkerFaceColor','r','MarkerEdgeColor','r')
geoplot(other_dat,'MarkerSize',15,'MarkerFaceColor','b','MarkerEdgeColor','b')
MATLAB

実行結果

赤が豊田市内にあるデータで青がそれ以外のデータです。きっちりと判別できていることがわかります。

作成データが豊田市の中にあるかどうかの判別結果
判別結果。赤いプロットが豊田市内,青いプロットがそれ以外

まとめ

任意の位置情報データが指定した市町村ポリゴンデータ内に含まれるかどうかを判別する方法を紹介しました。Mapping Toolboxの導入によって使用できるgeopointshape関数とisinterior関数とを使用することで,緯度・経度の位置情報データがポリゴンデータ内に含まれるかどうかを判別することができます。皆様の参考になればうれしいです。

-MATLAB
-, , ,