【Esri Community Blog】
はじめに
本ブログでは、Web GIS の基盤となる ArcGIS Enterprise で公開できる主要な Web サービスの概要や主な機能に関して紹介するシリーズ第二回目 ベクター タイル サービス編です。
※ もともとフィーチャ サービスの予定でしたが、関連性も含めて順番を繰り上げてベクター タイル サービスを紹介します。
前回の記事 – ArcGIS Enterprise で公開できるサービス:マップ サービス編
また、ベクター タイル サービスは、以前下記のようなブログも公開されています。
概要や特長は上記のブログを参照していただき、本ブログではもう一段掘り下げていきたいと思います。
メリットで言われている部分も、元をたどればベクターデータの配信の効率性によるところだと思いますので、 そこに関連する部分を私なりの理解とともに紹介できればと思います。
ベクター タイルの内部構造
ベクター タイルは、タイルで区切られた領域内のベクター情報(画素に集約された情報ではなく、点、線、面のジオメトリの数値情報と属性値に関するテキストおよび数値情報)をサーバーから取得して、描画されるものです。
ベクター タイル サービスは、しばしばタイル サービスと比較されることが多いですが、 タイルと単純に表現されるサービスは、画像データを配信しますので、サーバーから受け取る物がそもそも異なります。 軽量といわれるところもただ画像だからという話でもなく全体的に見て軽量化されるということで、やはりその内部データの持ち方が工夫されているポイントは大きいと思います。
実際にやり取りする情報の中身としては、ArcGIS のベクター タイル サービスも Mapbox 社の仕様に基づいているため、その仕様を見ると、データがどのように持たれているかが説明されています。
(上記のページは、マウス操作やカーソルで、インタラクティブに説明されていますので、非常にわかりやすいと思います。)
属性や属性値については、 Key-Value 形式で保持され、keys キーで、属性名を value として属性名を格納し、 values キーで、実際の値を型情報と実際の値のセットを格納しているのがわかります。 そして、features の情報で tags キーと各種 keys と values のインデックスの組み合わせで表現しています。 こうすることで、実際的には重複を削除した状態で属性情報を保持しておくことができます。
詳細は割愛しますが、ArcGIS のベクター タイルで取得できるデータ(後述する ProtocolBuffer Binary データ)を Mapbox Vector Tile Spec のスキーマでシリアライズすると下記のように得られます。
また、位置情報に関する情報も各タイルの範囲空間の中で一般化されて表現されるので、結果として全体としてデータ量が削減されることも、特長で言われるような軽量化に寄与しています。
もちろんこれだけではなく、Protocol Buffer のエンコーディングやバイナリ形式であるということも配信においては、重要です。
そして、サーバーサイドで必要なすべての縮尺で画像化するプロセスを行わないため、 より効率的に更新データを反映させることにもつながり、 結果として以下の 2 点のメリットが享受できるというわけです。
- 軽量化
- データ更新を反映させやすい
ちなみに、昨今ではベクター タイルのように、より効率的なデータ配信やデータ分析のための GIS データの各種フォーマットが定義されてきています。1
1 – これらはベクター タイルに代わるものではありません。それぞれ目的が異なります。
ArcGIS ベクター タイル サービス
ArcGIS のベクター タイル サービスで利用できる機能(Operations)を下記に示します。
マップ サービスでは Query や Identify などの機能も利用できましたが、ベクタータイルサービスでは、 ExportTiles のみです。
実際のベクター タイル サービスでやり取りするタイル情報は、サービスで取得できる情報(Child Resources) の下記エンドポイントで取得することができます。 https://developers.arcgis.com/rest/services-reference/enterprise/vector-tile.htm
そして、見た目を定義するデフォルトスタイルの情報などを取得して、クライアントで描画されます。 スタイル 2 の変更方法については下記でも紹介されていますので、デフォルトスタイルではなく、オリジナルに定義したスタイルを利用することで、見た目を変更することができます。
2 – スタイルの仕様については、Mapbox Style Specification を採用しています。
ArcGIS API for JavaScript で参照する場合は、VectorTileLayer クラス(JavaScript 4.x 系、JavaScript 3.x 系どちらも同じ)を利用します。
https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-VectorTileLayer.html https://developers.arcgis.com/javascript/3/jsapi/vectortilelayer-amd.html
REST API のヘルプページにも記載があるように、拡張子は pbf 3 というファイルをやり取りします。 ProtocolBuffer Binary Format で、このデータに必要な属性情報やジオメトリ情報が含まれています。
pbf データの定義は Mapbox 社が公開している proto ファイル 4 に記載されており、各種デコードするためのツールなどが存在していますので、GeoJSON データとして読むこともできます。
3 – ProtocolBuffer Binary Format でのやり取りは、ベクター タイル サービスだけでなく、ダイナミック マップ サービスやフィーチャ サービスのクエリでも利用されます。
4 – proto ファイルは、Protocol Buffer の IDL(Interface Definition Language)で、サービスおよびやり取りするデータフォーマットに関するスキーマ定義ファイルです。)
公開方法
ベクター タイル サービスの公開方法は下記のブログでも紹介しております。ぜひご参照ください。 合わせて、Esri ヘルプで詳細に記載されておりますので、併せてご参照ください。
また、ArcGIS Enterprise でもホスト フィーチャ サービスから、ベクター タイル サービスを公開するという機能を備えておりますので、必要に応じてこちらの方法もお試しください。
なお、ちょっとした補足情報としては、ArcGIS Pro で作成したベクター タイル パッケージをそのまま解凍しても、ProtocolBuffer Binary Formart のファイルという形で含まれていません。Esri 独自のコンパクト キャッシュのデータフォーマット bundle ファイルで構成されています。 こちらは中身を確認することはできませんが、ArcGIS Pro のパッケージの抽出ツールで、 ストレージ フォーマット タイプで “エクスプロード” を選択して、ベクター タイル パッケージを解凍すると、ProtocolBuffer Binary Format のデータを展開することができます。
まとめ
今回は以前の記事から少し掘り下げた内容でしたが、効率的だとされる部分はご理解いただけたのではないかと思います。 これまで紹介してきた内容と上記で紹介したような内容から普及が進んでおり、 ArcGIS Enterprise でも、ベクター タイル サービスを公開して、各種クライアントで利用することができます。
ArcGIS Online や ArcGIS Enterprise では、 背景地図として配信することについては、 ベクター タイル サービス、キャッシュ マップ サービスが代表的な選択になります。
主題図として配信することについては、 ArcGIS Enterprise では、上記のサービスに加えて、 サーバー側での画像生成、および各種レイヤーの各種データへのアクセスを可能にするという側面を得ることができる ダイナミック マップ サービスも選択肢に含まれてきます。
さらに、データの編集可否も考慮すると、 そこにフィーチャ サービスを選択できることになります。(次回以降ご紹介予定です。)
また、3D での表現を実現するためにシーン サービスがありますね。(次回以降ご紹介予定です。)
このように ArcGIS Online では提供されていない様々なサービスを適材適所で選択することができるのも ArcGIS Enterprise の特徴です。
参考情報
これまでの記事の紹介。
ベクター タイル サービスのパフォーマンスに関する Esri の発表資料について。
bundle ファイルについて、さらに詳細を知りたい方下記の情報も。
その他、本コミュニティからの情報以外に、下記のように Esri および Esri ジャパンから情報を発信しております。