ラスタタイルを作成しているならmaptiler cloudに乗り換えよう

# この記事の目的
ラスタタイルの作成に時間を使っている方に楽をしてもらいたい。
大量のラスタタイルを作成する方は限られると思いますが、そんな方へ。

![maptilercloud](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/21ea827d-6a12-7e9e-cb12-fd0405851b40.png)

# 地図アプリケーションで利用されるタイルとは
## 地図タイルとは
[地理院タイル](https://maps.gsi.go.jp/development/siyou.html)の説明をみてもらうのがいいですね。 
地図表示のリクエストに応じてタイル状に分割したデータを返すことによって、必要なデータのみを効率良く配信/取得する仕組みです。
標準的なタイル分割方法が決まっているため、webアプリケーション側でも標準として取得方法が備わっています。また、デスクトップGISでも標準で対応しているものが多いです。

## ラスタタイル
最近はベクトルタイルが流行りではありますが、まだまだラスタタイルが主流で使われています。  
ただこのラスタタイル、動的に配信するには負荷を考えようとか、キャッシュを考えようとか、運用が考慮すべき事項が出てきて大変です。 
静的に必要なズーム・範囲を作成しておくのもいいのですが、作成時間がかかって大変です。スタイルを変更しようものなら再度作成しなおしとなってしまいます。

# QGISを使ったラスタタイル例
QGISで作成する場合は、次のような手順を取ります。
- ベクトルデータがあるとして、QGISでスタイルを付ける
![QGISでスタイル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/d5178bd9-65fe-8863-b7ba-053460d3681e.png)
- QTilesなどのプラグインを使って、ラスタタイルを作成する
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/e1292065-3314-2358-5e1d-728ed8883ac4.png" width="400">

この方法はQGISでスタイルを設定できるので、スタイル作成についてはとても楽です。ですが、ラスタタイルを作成する際に必要なズームレベル、範囲を指定して作成します。限られたズームレベル、狭い範囲ではいいのですが、日本全域など広域を作成しようとした場合には、作成時間と作成されるファイル数が問題になります。

# maptiler cloudを使うと
## ベクトルタイル作成
mbtilesにベクトルタイルを入れておきます。
作成には[tippecanoe](https://github.com/mapbox/tippecanoe)を使うのがよいでしょう。
tippecanoeの入力としてgeojsonが必要なので、shapefile等から作成を始める場合は、まずgeojsonへの変換を行います。
A29-19_13000.shpというファイルがあったとして、mbtilesまでの変換は、下記のようなコマンドで行えます。
ラスタタイルを作成する時間から比べると、あっというまに変換が出来るはずです。

```
ogr2ogr -f "GeoJSON" A29-19_13000.geojson A29-19_13000.shp
tippecanoe --output=A29-19_13000.mbtiles A29-19_13000.geojson
```

## maptilerへアカウントを作成しておく
MIERUNEで公開している[maptilerの使用方法](https://maptiler-docs.mierune.io/cloud/basics/)を参照してください。
一点注意で、今回のラスタタイル配信はFlex($25/month)以上の有料プランで使用できます。無料のプランの場合は、ベクトルタイルでの配信のみとなります。

## maptiler cloudへアップロード
TilesタブのNEW TILESETから、作成したmbtilesをアップロード出来ます。
![NEWTILESET](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/53bb2b9e-08ec-7d46-dbed-6f8e172b8d9a.png)

アップロード後の表示です。アップロードしたベクトルデータを確認することが出来ます。
![upload](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/85c70e8c-7f1c-f048-d123-471e8f39c817.png)

## スタイル作成
アップロード後の表示画面でCREATESTYLEを選択してください。Mapsに新しいMapが追加されます。
![newmap](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/143dd7eb-8b1b-2247-3aff-357b2895cf84.png)

ベクトルデータに対して、簡易なスタイルが付いた状態のMapが作成された状態です。すべての図形が同じ色で描画されています。EDIT STYLEに進んでスタイルを付け直しましょう。

![maptunik](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/75a97e0b-4a83-adbd-8b0c-73f2a965c83a.png)

## 配信
スタイルを付け終わったら準備完了です。スタイルをSAVEした上で、スタイルエディタをCLOSEします。
あとはMapsの画面に戻って、PUBLISHを行います。
そうするとRaster TilesにアクセスするためのURLが発行されます。このURLをアプリケーションに読み込ませてあげれば、maptiler cloudから配信するデータを利用出来ます。
![publish](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58748/b9030dce-e823-2584-12d2-2c2064320f2c.png)

ベクトルタイル配信のためのURLも同様に発行されます。

# 楽しましょう
静的にラスタタイルを作成するのに比べて、下記のような利点があります。
- 変換に要する時間を短く出来ます
- タイル作成の際に、範囲を気にする必要はありません
- タイル作成の際に、ズームレベルを気にする必要はありません
- スタイルの変更はmaptiler cloud上で行えば、すぐに反映されます
- ベクトルタイルにスタイルを付けて用意することで、ベクトルタイル、ラスタタイル両方での配信が可能です

また、maptilerの配信環境を利用出来ますので、自前でサーバーを用意する手間も省けます。
$25/monthはかかるのですが、作成の手間や自前の運用を考えるとかなり楽出来ると思います。
ぜひお試しください。