GPS で得られた位置情報の代表的な活用事例として、「この人はある場所を訪れたか/通ったか」の判断が挙げられます。
この「ある場所」を定めるときに、地図上のある点の座標(緯度経度)の情報は、Google Map などで簡単に取得できますが、駅や建物など、領域を得たい時はそのような方法では簡単にはできません。
そこで、Google My Maps というツールを用いることで、簡単に領域データを得ることができます。
この記事でやること
- Google My Maps の機能を用いて、地図上に任意の多角形(ポリゴン)を描く方法を説明します。
- 描いた多角形の緯度経度情報を取得します。
点ではなく領域を得たいシチュエーション
ここでは「新宿駅を訪れた/通った人」を判定したい場合を考えます。通常の Googleマップも、地図上をクリックすることでその地点における緯度経度は得られます。例えば下図では、新宿駅内のだいたい中心である灰色のピンの地点として「北緯35.689347°, 東経139.700778°」という情報が得られています。

利用者全員がこの地点ピッタリを通ることはないため、この点から新宿駅を利用したかどうかを判定する方法としては「選択した地点から半径〇〇mに入ったか」というように円を描くのが最もシンプルな方法となります。
しかし、新宿駅は比較的縦に長く横には短いため、円による判定では定めた半径によって駅の南北の端が入りきらなかったり、東西の別の施設が含まれてしまったりということが起こります。
また、上図で新宿駅を東西に貫いている黄色い線は車通りの多い国道であり、そこを通った人が駅利用者である可能性は低いため、省きたい領域となります。
このような場合に、点や円ではなく、もっと複雑な図形(ポリゴン)で判定したくなります。
Google My Maps によるポリゴンの描画
Google My Maps は Google が提供する、Googleマップに様々な情報を付与して保存・共有できるツールです。
Google My Maps では地点にマーカーをつけるほか、領域を多角形(ポリゴン)で選択することもできます。下図のように、丸が線で繋がったようなアイコンから「ラインやシェイプを追加」でポリゴンを描けます。

頂点を作りたい部分でクリックしていき、一周して最初の点を再びクリックすることでポリゴンが描け、名前をつけられます。

多角形なので分断されているところは2つのシェイプに分ける必要がありますが、下図のように道路を避けて領域を描くことも可能です。
目的に応じで好きな細かさで領域を描けること(下図ほど細かくなくて良かったかも……)、一度ポリゴンを作成した後も各頂点の丸をドラッグして自由に形を作り直せることが特徴となります。

領域データの取得
描いた領域の緯度経度情報を得ましょう。
ポリゴンが含まれるレイヤをKML形式で保存することで、その緯度経度情報を確認できます。
地図名横の三点ボタンから「KML / KMZ にエクスポート」を選択して出てきたウインドウで、
- 「地図全体」を保存したいレイヤ名に変更
- 「KMZ ではなく KML にエクスポートします」にチェック
を行い、ダウンロードすると “[レイヤ名].kml” のデータが得られます。
メモ帳などで開くと様々な情報が羅列されているのが確認できますが、<Placemark> のタグで囲まれている部分に <coordinates> としてポリゴンの座標データがあります。
:
<Placemark>
<name>新宿駅1</name>
<styleUrl>#poly-000000-1200-77-nodesc</styleUrl>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<tessellate>1</tessellate>
<coordinates>
139.701418,35.6893616,0
139.7010908,35.6905162,0
139.7009299,35.6904988,0
:
:
139.6999106,35.6918668,0
139.6997926,35.6905946,0
139.7000823,35.6891133,0
139.701418,35.6893616,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
:
Googleマップの時と違って「[経度], [緯度](, [高度])」の順であることに気をつけてください。
GPS から得られた座標が領域に入ったかどうか判定するアルゴリズムについても、また機会があれば書こうと思います。