BBOX ServerでGeospatialな配信サーバーを構築
BBOX Serverについて
みなさんは、BBOX ServerというGeospatialなツールを知っていますでしょうか?
このツールは、昨年のFOSS4G 2023 Prizren終了後、Iguchiさんに紹介していただいてずっと気になっていました。そこで、今回のアドベントカレンダーの機会に試してみることにしました。
BBOX Serverは、オープンソースのコンポーザブルな空間情報サービスであり、OGC API規格に準拠したFeature、Map、Tile、Asset、Processes、Routingなど、複数のコンポーネントを提供します。高性能なHTTPサーバーを内蔵しているため、静的および動的な位置情報データを効率的に処理できます。また、従来構築に手間がかかっていたQGIS Serverが、簡単に利用できる形で実装されています。データソースはさまざまなフォーマットに対応し、PostgreSQL(PostGIS)の利用も可能です。
まだ全然知られていないツールですが、今後日本でも利用が広がるツールになる可能性を秘めているので、ぜひチェックしてみてください!
BBOX Serverのコンポーネント
BBOX Serverには現在6つのコンポーネントがあります。
1. BBOX Feature server
OGC API Features規格に準拠した地理空間データ提供コンポーネントです。効率的なデータ配信を実現し、RESTfulエンドポイントを通じて柔軟なフィルタリングや空間検索が可能です。
2. BBOX Map server
OGC API Maps規格に準拠した地図生成・提供コンポーネントです。QGIS Serverをバックエンドとして利用し、OGC WMS 1.3やOGC API Mapsをサポートしています。地図タイルや画像のレンダリングを提供します。
3. BBOX Tile server
OGC API Tiles規格に準拠し、ラスタタイルとベクトルタイルの配信を効率化する地理空間データ提供コンポーネントです。PMTiles、MBTiles、QGIS Serverを活用した柔軟なタイルを提供します。
4. BBOX Asset server
静的ファイルやテンプレートを配信する統合ファイルサーバーです。フォント、スタイル、スプライトなどのアセットを提供します。
5. BBOX Processes server
OGC API Processes規格に準拠した地理処理タスク実行基盤です。同期・非同期プロセスをサポートし、さまざまな地理解析タスクをRESTfulエンドポイント経由で実行できます。
6. BBOX Routing server
OGC API Routing(experimental)に準拠した経路探索サービスを提供する実験的なコンポーネントです。RESTfulなインターフェイスを通じて経路計算機能を提供します。
今回の記事では、「BBOX Map server」と「BBOX Tile server」について試しました。
事前準備
サンプルデータの準備
今回はサンプルデータとして下記を利用しました。
自作したポイント・ライン・ポリゴンデータと、OpenStreetMapのコンビニデータを組み合わせたQGISプロジェクトファイルを準備しました。検証時はラベルも表示しています。
shi-worksさんのリポジトリで提供されているPLATEAUをPMTilesに変換したデータも利用しました。サイズが大きいデータなので、利用する場合は別途手動でダウンロードをお願いします。
これらのデータを任意のディレクトリに格納します。
bbox_server
├── assets
│ ├── plateau.pmtiles
│ ├── pointdata.geojson
│ ├── sample.gpkg
│ └── sapporo.qgz
└── bbox.toml
設定ファイルの作成
BBOX Serverを利用するには、「bbox.toml」という設定ファイルを編集することで、さまざまなカスタマイズができます。
今回は、WMS形式・ラスタタイル形式・ベクトルタイル形式の配信サーバーの設定サンプルを作成しました。この辺の詳細はドキュメントに書いてあるのでぜひ見てみてください。
[mapserver.qgis_backend]
# QGIS Server settings
project_basedir = "assets"
qgs.path = "/qgis"
qgz.path = "/qgz"
[[tileset]]
# Raster tiles settings
name = "sapporo"
map_service = { project = "sapporo", suffix = "qgz", layers = "all" }
[[tileset]]
# Vector tiles settings
name = "plateau"
pmtiles = { path = "assets/plateau.pmtiles" }
BBOX Serverの構築
インストール & 起動
BBOX Serverをインストールします。今回はDockerを利用しローカルで起動します。「sourcepole/bbox-server-qgis」という、Dockerイメージを利用するとすべての機能を試すことが可能です。
事前準備で用意したディレクトリに移動し、BBOX Serverを起動します。起動時にサンプルデータとbbox.tomlも自動で配置されます。
docker run -p 8080:8080 -v $PWD/bbox.toml:/var/www/bbox.toml:ro -v $PWD/assets:/var/www/assets:ro sourcepole/bbox-server-qgis
起動後に「 http://localhost:8080 」にアクセスします。BBOX Serverのトップページが表示されるとOKです。
QGIS ServerでWMS形式で配信
次に、QGIS ServerでWMS形式で配信しQGISで表示します。WebGISのアプリケーションでも利用できます。
下記URLをWMSのメニューで設定します。
http:/qgz/sapporo
QGISプロジェクトファイルのスタイルのままでWMS形式で配信できます。
QGIS Serverでラスタタイル形式で配信
次に、QGIS Serverでラスタタイル形式で配信しQGISで表示します。WebGISのアプリケーションでも利用できます。
下記URLをラスタタイルのメニューで設定します。
http:/xyz/sapporo/{z}/{x}/{y}.png
QGISプロジェクトファイルのスタイルのままでラスタタイル形式で配信されます。
PMTilesでベクトルタイル形式で配信
最後に、PMTilesでベクトルタイル形式で配信しQGISで表示します。WebGISのアプリケーションでも利用できます。
下記URLをベクトルタイルのメニューで設定します。
http:/xyz/plateau/{z}/{x}/{y}.pbf
サンプルデータがベクトルタイル形式で配信されます。
Discussion