GISとWebで地図を表示させる仕組み
GIS や Web ブラウザ上で地図を表示する方法など、全くの初心者だったので、「GIS とは何なのか、Web ブラウザで地図を表示させる仕組みはどうなっているか」を整理しました。
GIS と GIS ソフトについて
そもそも GIS とは
地球上の建物や地形などの情報を地図上に可視化し、付加情報をつけて表示するシステムです。
詳細はこちら:GIS (地理情報システム)とは | ESRI ジャパン GIS をはじめよう | ESRI ジャパン
ベクターデータとラスターデータ
GIS で取り扱うデータは大きく分けて「ベクターデータ」と「ラスターデータ」があります。
ベクターデータは現実世界に存在するものを「ポイント」「ライン」「ポリゴン(面)」で表現したデータです。それぞれが座標と属性情報を持っており、その地物を表現します。たとえば信号や ATM はポイント、線路や道路はライン、建物などはポリゴンといった形で表されます。座標点で形を表現するため拡大しても劣化しないメリットを持ちます。データ形式としてはシェープファイルやジオリファレンスといった形式があります。
ラスターデータは一般的な画像でよくあるデータ形式です。四角いピクセルを1つのドットとしてそれを集合させて表現するもので、そのため拡大すると画像がカクカクになり劣化するデメリットがあります。色による違いを表現しやすいため、地形や気温といったデータに適しています。例としては衛星画像や標高データ(DEM)が挙げられます。
地理情報のデータ形式
地理情報を表現するためのデータ形式はいくつかありますが、シェープファイルが標準的です。
シェープファイル
シェープファイルとは、地図上に存在する施設などの目標物や道路・建物などの位置や形状、属性情報を持つベクターデータのことです。ESRI 社が提唱したフォーマットで、GIS の標準規格となっています。ESRI 社とはアメリカの GIS のトップ企業です。
図形情報が格納される.shp、属性情報が格納される.dbf、図形と属性の関係情報が格納される.shx などの拡張子を持つファイルから構成されます。
シェープファイルの詳細は、ESRI 社が公開している PDFに整理されています(2006 年最終更新で古いですが)。
ジオデータベース
また、ESRI 社は ArcGIS という自社の GIS ソフトのために、シェープファイルに代わる新たな規格、ジオデータベースを考案し、利用しています。シェープファイルは上述の通り、複数のファイルで1つの場所の情報を管理する形式ですが、ジオデータベースではその名の通り、リレーショナルデータベースの形式で情報を管理する形式であるため1つのファイルで管理できます。詳細はジオデータベースとは? | GIS 基礎解説 | ESRI ジャパン Esri の GIS データフォーマット | GIS 基礎解説 | ESRI ジャパンに記載されています。
そのほかのデータ形式
- gml 形式:Geography Markup Language の略で、地理情報に対応した XML 形式のデータです。
- geojson 形式:地理情報を JSON 形式で格納したデータ形式です。
- kml 形式:KML(Keyhole Markup Language)は、地理データと関連コンテンツを格納するための XML ベースの形式で、OGC(Open Geospatial Consortium)の公式標準規格です。
- tiff 形式: Tagged Image File Format の略称で、画像の色数や解像度、圧縮形式などを指定して画像を保存できるデータ形式。これらの情報がタグとしファイル内に保存されており、読み込み時にそのタグ情報をもとに画像が展開される。
- geotiff 形式: tiff 形式のデータに地理情報を追加したデータ形式。タグに位置情報(座標変換に使用する幾何学情報)を持つ。
ベースマップとレイヤー構造
GIS で地理情報を表現するときには、最初に大元となる地図を指定します。衛星画像、地形図などがそれにあたり、ベースマップと呼びます。このベースマップに KML ファイルやシェープファイルなど他の情報が載ったレイヤーを重ねることで、GIS として様々な情報を載せた地図情報となります。
CRS
Coordinate Reference System の略称で、座標参照系/空間参照系と呼ばれます。GIS で扱う空間のデータは、CRS に基づいた位置情報と関連した情報を保持しています。CRS は大別して緯度経度で定義された球形座標系と平面上(XY の2次元)で定義された投影座標系があります。
GIS ソフト
Web 上で地理情報を表示する
マップサーバ
QGIS のように PC にインストールする形で利用する GIS ソフトは、ベクターデータやラスターデータをレイヤー構造で重ねて地理情報を表示します。
しかし、Web ブラウザ上で地理情報をそうやって表示させようとするには必要なデータが多く、表示方法も複雑になり、表示にかなり時間がかかってしまいます。
そこで WMS(Web Mapping System)というシステムが考え出されました。マップサーバと呼ばれるサーバ側で、あらかじめ GIS ソフトで行うような処理を実行し、1枚の地図画像に変換して、クライアントである Web ブラウザに配信するという方法です。こうすることで Web ブラウザはマップサーバにリクエストを出すだけで必要な地理情報を表示させることができるようになります。
マップサーバには、GeoServer、MapServerといったオープンソースのものもあり、自分で構築することができます。
WMS や WMTS とは
WMS や WMTS は、インターネットを介して地理データを取得するためのインターフェースです。OGC が定めた国際規格となっています。
この WMS 方式で地図画像を配信すると、異なるプラットフォーム間でも地図データのやりとりができ、地図を簡単に表示・利用することができます。
WMS は昔からある規格で、1つのリクエストがあるたびに、サーバ側で必要な地図情報を算出し1つの画像を返す方式になっています。この場合、表示したい地図の範囲が変わるたびに画面を再描画する必要があるため、毎回時間がかかるというデメリットがありました。
OGC はこのデメリットを無くすために、WMTS という新しい規格を制定しました。あらかじめサーバ側で地理情報を小さなタイル画像に分割してレンダリングしておき、そのタイル画像を配信する、という仕組みです。そうすることで必要な部分のみを配信できたり、画像をキャッシュとして保存し再利用できたりするため、高速に地図を描画できるようになりました。
空間情報用の DB
マップサーバに保管し配信するデータは、ベクタデータやラスタデータなど多岐にわたるため、専用のデータベースを利用することが一般的になっています。
商用でいえばOracle Spatialが有名であり、オープンソースの場合は PostgreSQL を拡張したPostGISという DBMS があります。
Web で地図を表示させる JS ライブラリ
WMTS 形式で保存されているマップサーバからマップタイルを取得したあとは、専用の JavaScript ライブラリを利用してマップタイルを変換し、Web ブラウザに表示させることになります。
OpenLayers や Mapbox GL、Leaflet、Cesium あたりが有名です。
NPM トレンドとしては Mapbox GL か Leaflet がよく利用されているようですが、Mapbox GL は現在は有償化されています。OSS を使いたい場合は Leaflet が良いかもしれませんが、GitHub の更新が1年前から止まっており、あまり積極的に開発されていないようです。
COG と MRF
COG は Cloud Optimized GeoTIFF の略称。
MRF は Mete Raster Format の略称。
画像の一部を表示するためだけに画像全体をダウンロードすることは、時間とリソースの無駄。したがって、部分的なダウンロードをサポートする画像形式が必要になる。それが Cloud OptimizedGeoTIFF と MetaRasterFormat。
-
COG
COG は、HTTP 形式で GeoTIFF 画像を取得できるようにしたデータ形式。特徴はタイル化とダウンサンプリング。
タイル化とは、ピクセルをグルーピングして保存すること。
一般的なラスタデータは行ごとにピクセルを保存するため一部の領域のデータだけが欲しくても、画像全体を読み込む必要がある。しかし、COG ではタイル化によってリクエストのあった一部の領域をカバーするタイルのみを読み取ることができる。つまり、ユーザの GET リクエストによって必要な部分の画像データのみを取得できるということ。ダウンサンプリングとは、元の画像をダウンサンプリングした画像をあらかじめ保存しておくこと。これによりユーザのズームレベルによって、必要な画像をすぐに提供できるメリットが得られる。
-
MRF
MRF は JPL によって導入されたフォーマット。
COG と同様にタイル形式で画像を保存し、高速アクセスを可能にしている。ダウンサンプリングの機能も同様に有している。では COG とは何が異なるか。
MRF の実際のファイルは、MRF ファイル(圧縮方式などメタデータを提供する XML ファイル)、データファイル(JPEG や PNG などの画像ファイル)、インデックスファイルの3つのファイルで構成されている。COG はただタイル化されたデータファイルがあるだけ。
インデックスファイルによってタイルの位置を保存しているため、データファイル内ではタイルを順番に保存する必要がない。その結果、データファイルの更新が効率的(順番を気にせずただ一番後ろに追加するだけ)になる。COG はリクエストに応じた領域のタイル化したデータを提供するだけなのでリクエスト側(つまりはクライアント側)でデータの順番を保持する必要がある。
また、インデックスファイルでは、画像の欠落している部分を「空のタイル」を参照する形で保存するため、スパースファイルと言える。つまり「空」を示す箇所のデータを圧縮して保存するためサイズが小さくなるメリットを得られる。
こういった特徴があることから、COG と比較すると、MRF は読み書きのオーバヘッドが少なく、素早い動きになる。
ただし、「複数ファイルあることにより管理が複雑になりがち」「サーバがインデックスファイルの中身を理解している必要がある」といったデメリットがある。また、S3 などスパースファイルをサポートしていないファイルシステムの場合は、インデックスファイルが巨大化しパフォーマンスが悪くなってしまうデメリットもある。
-
COG か MRF か
COG はサーバから取得したデータの順番(バイト範囲)を保持しておく必要があるため、クライアントに負荷がかかる。サーバのサポートがほとんどない大規模なデータセット(S3 など)にアクセスするような状況の場合は、COG が良い。
MRF はサーバに負荷がかかる。ただの HTTP サーバでは動かず、MRF ファイル群をコントロールするロジックが必要になる。ファイルの更新頻度が多く、スパースファイルをサポートしている環境であり、他サーバ機能が必要といった状況の場合は MRF が良い。
適宜、加筆・修正していくかもです(2022/2/23)
Discussion