地理院タイルをM5Stack Core2に表示する方法

投稿者:

みなさんこんにちは、佐々木です。

M5Stack Core2にいろいろ表示する方法の第3弾(第1弾第2弾)!今回は地理院タイルをM5Stack Core2に表示する方法をご紹介します。

仕組み

地理院タイルは国土地理院が配信するタイル状の地図データです。タイルのサイズは256x256ピクセル、下記URLからタイル状の地図データをダウンロードし、それらを組み合わせて地図を表示しています。ダウンロードした地図データはSDカードに保存し、繰り返しダウンロードしないようにしています。

https://cyberjapandata.gsi.go.jp/xyz/{t}/{z}/{x}/{y}.{ext}
  • {t}:データID。標準地図stdや全国最新写真seamlessphotoなど。
  • {z}:ズームレベル。0~18
  • {x}:タイル座標X。
  • {y}:タイル座標Y。
  • {ext}:画像の拡張子。pngjpgなど。

地理院タイルの詳細はこちら

スケッチ

PNG画像の描画にM5GFXライブラリを使いました。M5GFXライブラリはファイルメニューからスケッチ > ライブラリのインクルード > ライブラリの管理を選択、M5GFXを検索しバージョン0.0.3をインストールしてください(0.0.5だとタッチ操作がうまく動かない様子)。

スケッチはここからダウンロードしてください。解凍したらフォルダ名をm5_gsitilesに変更しm5_gsitiles.inoを開き以下のWiFi設定を書き換えてM5Stack Core2に書き込んでください。

const char *ssid = ""; //Enter SSID
const char *password = "";  //Enter Password

標準地図std以外の地図を表示したい場合、下記URL・拡張子を書き換えてください。

TileImage::XYZImageSource gsiImage(1, 18, 256, "https://cyberjapandata.gsi.go.jp/xyz/std", "png");

地図の初期位置(緯度経度)とズームレベルを変更したい場合は下記行を変更してください。

latLonToTile(&default_x, &default_y, 35.689440, 139.691670, 0); // 東京都庁
default_z = 7;

地理院タイルの一括ダウンロード

地図データは地理院タイルダウンロードツールを使って一括ダウンロードできます。使い方を簡単に説明します。まずは導入手順書に従ってRubyをインストールしてください。次に地理院タイルダウンロードツールをダウンロードしてください。

git clone https://github.com/gsi-cyberjapan/tdlmn.git

設定ファイル(tdlmn/src/program.ini)を開いて地図データのダウンロード先、ダウンロードするレベルをカンマ区切りで指定します。ZOOM_LEVEL18まで指定できますが、レベルが1つ上がる毎にファイル数が4倍に増加します。ダウンロード時間が非常に長くなるので注意してください。

TILE_FOLDER = cyberjapandata.gsi.go.jp/xyz
TILE_ID = std
ZOOM_LEVEL = 1,2,3,4,5,6,7,8,9,10
PROXY = 
PROXY_USER =
PROXY_PASSWORD =

次のコマンドで地図データのダウンロードが始まります。

cd tdlmn/src
ruby tdlmn.rb -mn -dt -merge

ダウンロードが終わったら地図データをSDカードに次のディレクトリ構造になるようにコピーしてください。

/cyberjapandata.gsi.go.jp/xyz/std

レベル毎のファイル数とタイル座標

地図データの地域はレベル0~8までは世界全体、レベル9~18は日本地域に限定されます。レベル12以降はファイル数が10万を超えてきます。レベル18となるとファイル数は5億枚にもなります。すべてのファイルをダウンロードするのは現実的ではないので、地域を絞ってダウンロードすることを検討してください。

レベル ファイル数 タイル座標X タイル座標Y
0 1 0 0
1 4 0-1 0-1
2 16 0-3 0-3
3 64 0-7 0-7
4 256 0-15 0-15
5 1024 0-31 0-31
6 4096 0-63 0-63
7 16384 0-127 0-127
8 65536 0-255 0-255
9 2070 430-475 182-226
10 7920 861-950 365-452
11 約3万
12 約12万
13 約50万
14 約200万
15 約800万
16 約3200万
17 約1億2000万
18 約5億
レベル毎のファイル数とタイル座標の一覧

以上です、ぜひご活用ください!

参考

地理院タイルについて
地理院タイル一覧
正方形タイルによる地図の表現
座標の変換(世界座標、ピクセル座標、タイル座標、緯度・経度)
Pythonでタイル座標⇔緯度経度の変換