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

投稿者:

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

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

仕組み

地理院タイルは国土地理院が配信するタイル状の地図データです。タイルのサイズは256×256ピクセル、下記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}:画像の拡張子。pngやjpgなど。

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

スケッチ

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_LEVELは18まで指定できますが、レベルが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
0100
140-10-1
2160-30-3
3640-70-7
42560-150-15
510240-310-31
640960-630-63
7163840-1270-127
8655360-2550-255
92070430-475182-226
107920861-950365-452
11約3万
12約12万
13約50万
14約200万
15約800万
16約3200万
17約1億2000万
18約5億
レベル毎のファイル数とタイル座標の一覧

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

参考

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