📦

BBOX ServerでGeospatialな配信サーバーを構築

2024/12/20に公開

https://qiita.com/advent-calendar/2024/foss4g

img

BBOX Serverについて

img

みなさんは、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つのコンポーネントがあります。

img

FOSS4G 2023 Prizrenの発表資料

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プロジェクトファイルを準備しました。検証時はラベルも表示しています。

sample data

img

shi-worksさんのリポジトリで提供されているPLATEAUをPMTilesに変換したデータも利用しました。サイズが大きいデータなので、利用する場合は別途手動でダウンロードをお願いします。

img

これらのデータを任意のディレクトリに格納します。

bbox_server
├── assets
│   ├── plateau.pmtiles
│   ├── pointdata.geojson
│   ├── sample.gpkg
│   └── sapporo.qgz
└── bbox.toml

設定ファイルの作成

BBOX Serverを利用するには、「bbox.toml」という設定ファイルを編集することで、さまざまなカスタマイズができます。

今回は、WMS形式・ラスタタイル形式・ベクトルタイル形式の配信サーバーの設定サンプルを作成しました。この辺の詳細はドキュメントに書いてあるのでぜひ見てみてください。

bbox.toml
[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です。

img

QGIS ServerでWMS形式で配信

次に、QGIS ServerでWMS形式で配信しQGISで表示します。WebGISのアプリケーションでも利用できます。

下記URLをWMSのメニューで設定します。

http://localhost:8080/qgz/sapporo

img

img

QGISプロジェクトファイルのスタイルのままでWMS形式で配信できます。

img

QGIS Serverでラスタタイル形式で配信

次に、QGIS Serverでラスタタイル形式で配信しQGISで表示します。WebGISのアプリケーションでも利用できます。

下記URLをラスタタイルのメニューで設定します。

http://localhost:8080/xyz/sapporo/{z}/{x}/{y}.png

img

QGISプロジェクトファイルのスタイルのままでラスタタイル形式で配信されます。

img

PMTilesでベクトルタイル形式で配信

最後に、PMTilesでベクトルタイル形式で配信しQGISで表示します。WebGISのアプリケーションでも利用できます。

下記URLをベクトルタイルのメニューで設定します。

http://localhost:8080/xyz/plateau/{z}/{x}/{y}.pbf

img

サンプルデータがベクトルタイル形式で配信されます。

img


https://zenn.dev/mierune/articles/try-114-wherobots-cloud

https://zenn.dev/mierune/articles/try-112-amazon-location-service

https://qiita.com/dayjournal/items/201cba368fd8d5b71c94

https://qiita.com/dayjournal/items/5b00ecd34e908487f436

https://memo.dayjournal.dev/tags/try

MIERUNEのZennブログ

Discussion