0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UNVT naru を使ってOSMからベクトルタイルを作る

Last updated at Posted at 2022-03-06

はじめに

趣旨

ベクトルタイルでいろいろと試して見る際に、背景地図を使って見たいときがあります。今回、OpenStreetMapをUNVTのツール(naru)を使ってベクトルタイルにしました。具体的には、unvtでは技術移転を目的とした naru というパッケージがありますが、これをつかって国ごとのosmデータ(pbfファイル)をベクトルタイルに変換したので、そのやり方をメモしておきます。

OpenStreetMap(OSM)について

この場で詳しく説明することはしませんが、OpenStreetMapは世界中のマッパーが編集しているオープンな地図です。利用にあたっては、ライセンス以外にも位置精度や地物の信頼性などの注意すべき点はあると思いますが、私もテスト用などに利用する場合があります。

OpenStreetMapをベクトルタイルに変換するには

OpenStreetMapをベクトルタイルに変換する方法は、MapTilerを使う方法などもあり、ベクトルタイル Advent Calendar 2021の13日目(kanahiroさんによるtilemakerを使って爆速でOSMベクタータイルを作る)の記事が大変参考になります。

一方、unvtのツールを使っても、OSMのデータ(osm.pbf)をベクトルタイルに変換することが出来ます。実際に (optgeo)[https://github.com/optgeo] のkokoromiシリーズなどでもosmデータをベクトルタイルに変換していたりします。私は、慣れたツールで、将来的に自分でデータの構造をいじりたいという思いもあり、今回はunvtのツールでosmデータを変換しました。

unvt/naruについて

UNVTでは技術移転を目的とした naru というパッケージがあります。naruは開発から少し時間がたっているので、古くなった部分もありますが、まだ使えます。naruではDockerを使っているので、Windowsユーザーでも簡単にベクトルタイル作成等の作業をすることが出来ます。

  • 私自身はmaptilerでのベクトルタイル変換を試していませんが、naruを使うとconfigセッティングやmodify.jsなどを編集することでベクトルタイルの属性などを編集することができるので柔軟に設計できるというメリットもあると思います。タイルのデータサイズを適切にするためには、このfilter.jsとmodify.jsの調整が重要になってきます(慣れてきた方向け)。
  • 開発当時、UNVTではDockerベースで動くツールを多く利用していました。現在はラズベリーパイなど、本物のLinux環境を指向している部分がありますね。

慣れている方は、unvt/naruのレポジトリを見ればこの使い方がわかると思いますが、初心者の方の参考にもなるかもしれないので自分自身の作業手順メモをここに残しておきます。

作業した環境

  • Windows 10 (Enterprise)
  • Docker version 20.10.8
  • PowerShell version 5.1.19041.1237

手順

Step 1: GitHubレポジトリーをコピー

自分のPCに作業フォルダを作ります。パワーシェルでそのフォルダに移動したのちGit cloneでレポジトリをコピーしてきます。そしてそこに移動します。

git clone https://github.com/unvt/naru
cd naru

レポジトリがコピーされていることも確認します。(下の図は私の作業環境の例)
image.png

Step 2: 地域の設定

.env.exampleを参考にして、.env を作ります。拡張子はちがいますが、これらはテキストファイルですのでテキストエディタで作成できます。例えば、ウクライナのOSMデータ(ukraine-latest.osm.pbf)を使いたい場合は以下の様にしておきます。このとき、データ変換だけなら SITE_ROOT は使わないので、デフォルトのままにしておいても大丈夫です。
地域の指定は https://download.geofabrik.de を参考にして、REGIONとAREAを指定します。

REGION=europe
AREA=ukraine
SITE_ROOT=http://localhost:9966

Step 3: Dockerイメージの作成とDockerコンテナの起動

naruの中には Dockerfile が入っています。ですのでこれを使ってDockerイメージを作ります(docker build)。そしてDockerコンテナをスタートします(docker run)。作業ディレクトリを/dataに関連付けているので(-vオプション)、Dockerを起動したら/dataフォルダに移動しておきます。

docker build -t naru .
docker run -it --rm -v ${PWD}:/data -p 9966:9966 naru
cd /data

runの時に、念のためポート9966をつなげてありますが、ポートはベクトルタイル作成作業ではつけなくても大丈夫です。(下の図では私の環境なのでポート8080を使っています。)
image.png

Step 4: rakeファイルの確認

naruではrubyが入っていて、rakefile(こちら )で作業を簡単に実施することができます。rubyのバージョンと、rakeタスクの一覧を以下の様に確認してみます。
image.png
rakeの作業がいろいろありますね。今回は、inet:downloadとtilesという作業をすることになります。これらが何をやっているのかはnaruの中のRakefileを見ると確認することができます(再掲・こちら )。

Step 5: osmファイルのダウンロード

Step 2において、.envファイル中で地域の設定をしていますが、そこで指定したデータをダウンロードすることができます。

rake inet:download

とすることで、ダウンロードがスタートします。
image.png

  • ダウンロードのミラーサイトはRakefileの中で指定していますが、https://download.geofabrik.de/ になっています。
  • ダウンロードされたファイルはsrcフォルダの中にあります。
  • srcフォルダに "(area名)-latest.osm.pbf" という ファイルがあるかどうか判断してからダウンロードしているので、ファイルを更新する場合は古いファイルを削除しましょう。

Step 6: ベクトルタイル作成

ベクトルタイルの作成もRakefileのタスクとして実行できます。

rake tiles

image.pngimage.png

地域によっては、時間がかかるので、しばらく待つ場合があります。これでdocsフォルダのzxyフォルダにpbfのベクトルタイルができますし、srcフォルダに tiles.mbtiles という名前でmbtiles形式のベクトルタイルができます。なお、rake tilesではsrcフォルダ中にtiles.mbtilesがない場合に変換が実施されるので、更新したい場合は古いファイルを削除するか、Rakefile中のコマンドを編集しましょう。

これでベクトルタイルができました。用途に応じて、zxyタイルとmbtielsを使っていけます。

Step 7: 確認

最後にベクトルタイルが出来ていることを確認します。
mbtilesがsrcフォルダの中に出来ています。
image.png
zxyフォルダ中にpbf形式でのベクトルタイルが入っています。
image.png

まとめ と コメント

今回、OpenStreetMapデータ(osm.pbf)から、ベクトルタイルを作ることができました。
そのほかのコメントや今後に向けてのポイントは以下の通りです。

  • スタイルについては、naruではhoconを使ってstyle.jsonを作るというアプローチをとっています。これは、unvt/charitesが開発される前に我々がとっていた方法です。rakeのコマンドでスタイルを作れるので、naruで作ったベクトルタイル(デフォルトのままの場合)用のスタイルがほしい人は、rake sytleを実行すれば、docsフォルダの中にstyle.jsonが生成されます。
  • OpenStreetMapの魅力は、ライブ更新というか、クラウドソーシングでどんどん更新されていくことだと思います。今回のベクトルタイル作成は、ミラーサイトからOSMデータをダウンロードしていますので、データベースの更新頻度や更新時期についてはミラーサイトを確認しましょう。
  • UNVTでは最近はラズベリーパイをつかって作業を行っています。したがって、naruは今後あまり更新されないかもしれませんが、前述のようにstyleの作業にcharitesを使うようにしたり、nodejsのバージョンを更新したり、少しメンテナンスの余地があります。
  • naruにはベクトルタイルの作成だけでなく、sprites(地図記号等)の作成など、ベクトルタイルの作成、スタイリング、ホスティングの練習ができるようになっています。興味がある方は探検してみてください。
  • 作ったベクトルタイルをホスティングする方法はこの記事では書きません。zxyタイル(pbf)形式が1GB以下ならGitHubのページでのホスティングがいいと思いますし、もしも1GB以上であれば、mbtilesをnodejsサーバーでホスティングするのがよいと思います。(こちらの記事が参考になるかもしれません。)
  • Dockerの中でやっていることをLinuxサーバーで実施して、crontabで定期的なタスクにしてしまえば、osmソースのベクトルタイルを簡単に更新することも可能だと思います。

References

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?