本記事は、生成 AI も活用しながら執筆しましたが、不十分なところも多いので、あとで追記するかもしれません。
はじめに
基盤地図情報の製品仕様書を見ていると、基本項目はポイント、ライン、ポリゴンと分かりやすい構造をしているのですが、数値標高モデル(DEM)やジオイドモデルは、なにやら難解な Coverage というデータ構造になっています。
今までは、手ごろなツールで変換をしてしまっていたので、中身を特に気にすることはなかったのですが、さすがにそろそろデータ構造を把握した方が良いかなと思いまして、勉強してみることにしました。
というわけで、今回は、DEM 等に採用されている 被覆(Coverage) について、勉強した内容をご紹介します。
JPGIS (日本地理情報標準プロファイル)について
基盤地図情報の製品仕様書は JPGIS(日本地理情報標準プロファイル)へ準拠していますので、被覆についても、この規格の中で「9 被覆の幾何及び関数のためのスキーマ」として規定されています。この部分は、JIS X 7123(ISO 19123 と技術的内容は同一)からの引用となっています。
JPGIS(日本地理情報標準プロファイル)とは、地理情報に関する国際規格(ISO 19100 シリーズ)及び日本産業規格(JIS X 7100 シリーズ))の中から基本的な要素を抽出して体系化したものとなります。
被覆(Coverage)とは?
被覆とは、ざっくり言うと「位置を与えると、その場所の値を返すデータ構造」です。
ISO 19123 において、Coverage は、以下の通り「空間・時間・時空間の定義域から属性値への写像(mapping)」と定義されています。
A coverage is a mapping from a spatial, temporal or spatiotemporal domain to attribute values sharing the same attribute type.
どういうことかと言えば、たとえば、以下のような「経緯度から標高を求める」といった変換をイメージいただければと思います。
(経度, 緯度) → 標高
被覆の具体的な実装例としては、いわゆるラスタデータが一番身近だと思いますが、TIN、点群、ポリゴン分割なども含まれます。
被覆の種類
Coverage には大きく 連続被覆(Continuous Coverage) と 離散被覆(Discrete Coverage) に分けられます。
連続被覆
連続被覆は、「任意の位置で値を求められる」被覆です。たとえば JPGIS では、TIN やティーセン分割がこれに含まれます。観測点以外でも、補間によって値を推定できます。
観測点 → 補間 → 任意地点の値
ただし、JPGIS では、操作は扱っていません。ISO 19123 では、補間方法まで定義されているようですが、JPGIS では内挿法として九つの方法を定めているものの、これらの方法によって直接位置から地物属性値を返す機能は提供していない、という形になります。
離散被覆
離散被覆は、「定義された領域ごとに値を持つ」被覆です。代表例としては、DEM や地形分類が考えられます。イメージとしては以下の通りです。
観測点 → グリッド / ポリゴン等 → その地物が持つ値
基盤地図情報の DEM やジオイドモデルは、このうち DiscreteGridPointCoverage を利用しています。
離散被覆の種類
JPGIS で規定されている離散被覆は以下の通りです。
- GridPoint(グリッド点):基盤地図情報の DEM やジオイドモデル等
- Surface(面):一昔前の数値地図25000(土地条件)等
- Curve(線):道路や鉄道、河川等
- Point(点):水路測量による測深値の集合等
CV_GeometryValuePair は地物と値の組を提供する被覆の基盤です。それぞれのジオメトリ型の被覆に合わせて、CV_GeometryValuePair を継承したクラス(例:CV_DiscreteSurfaceValuePair に対しては CV_SurfaceValuePair)が用意されています。CV_GeometryValuePair は、離散被覆だけでなく、連続被覆の基盤にも用いられます。
GridPoint 形式の離散被覆(DiscreteGridPointCoverage)については、対応する CV_GridPointValuePair も用意されていますが、「グリッド形状に基づくデータの保持が望ましい」ため、CV_GridValueMatrix というクラスが規定されており、こちらが被覆の基盤となっています。CV_GridPointValuePair は、CV_GridValueMatrix から導出できるという設計になっています。
イメージしやすいのは、GridPoint(DEM やジオイドモデル)、Polygon(土地条件や地形分類)でしょう。土地条件や地形分類でイメージすると以下のようになります。
観測点 → どのポリゴンに属するか → そのポリゴンに紐づけられている値

出典:国土地理院 数値地図25000(土地条件)VERSION3 製品仕様書
Curve と Point については実際の事例を見たことはないですが、一応 JPGIS の説明からとってくると以下のような活用が想定されているようです。
離散点被覆が主に使用されるのは,連続被覆関数に基盤を提供するためである。連続被覆関数の評価値は,離散点被覆の点の間に内挿することで得る。
離散曲線被覆は,曲線で構成される有限の空間定義域によって特徴付けられる。この曲線は,道路や鉄道,河川などの地物を表すことが多い。(中略)
例 路線番号,名称,舗装幅,舗装材料種別などを,道路を示す曲線の各部分に割り当てる被覆。
なお、国土地理院から刊行されている点群データについては、単なる点状地物として定義されており、被覆の概念は用いられていないようです。

出典:国土地理院 点群データ ファイル仕様書 第1.1版
JPGIS では、離散被覆は同種の幾何オブジェクトのみで構成し、互いに重なってはならないとされています。
基盤地図情報の数値標高モデルを見てみる
最後に、実際に基盤地図情報の製品仕様書に記載されている数値標高モデル(DEM)のクラス図を見てみましょう。
以下が、製品仕様書の一部ですが、なにやら複雑で分かりにくいです。

出典:国土地理院 基盤地図情報ダウンロードデータ ファイル仕様書 第5.2版
ですが、これを JPGIS に基づいて読み解いてみると、以下のようにデータが格納されていることがわかります(仮に3×3のグリッドで再現しています)。これを押さえながら GML を見ると、なんとなく、どこにどんなデータが記述されているかが分かるようになります。
おわりに
通常は、ラスタデータや CSV として処理されることが多い被覆ですが、きちんと定義するとこんな感じになるのですね。しっかりしたデータとなりますが、やっぱり運用上は扱いづらいかも、と感じてしまいます。


