位置を数値で表すとは、地球上の場所に座標という識別子を割り当てることである。球面を平面へ写す投影法と、座標値の意味を定める測地系は、どちらも取り決めであり、何を優先し何を犠牲にするかの選択を含む。

緯度経度と見かけの桁数

位置を表す最も標準的な方式は緯度経度である。スマートフォンの地図が現在地を示すときにも使われている [UC-009 §地理情報とは何か]。高さを加えれば3次元になるが、地図は平面で表示されるため、基本的には2次元の座標として扱われる [UC-009 §地理情報とは何か]。

緯度経度の扱いにくさは、座標値が二つ必要なことに加え、何桁まで精度の裏づけがあるかが見た目から分からない点にある。プログラムが返す数値は小数点以下15桁ほどになることもあるが、実際に意味を持つのは6桁程度で、これがおよそ1メートルの精度に相当する [UC-009 §座標を指定するその他の方式]。有効桁数を確認せずに使うと、見かけの精度と実際の精度のあいだに齟齬が生じる。

グリッドと単語による位置の指定

緯度経度の限界を補うため、地球を区画に分割して識別子を与える方式が考案されている。Uberが用いるH3は地球を六角形に分割し、各セルにIDを付ける。分割には三角形・四角形・六角形があるが、四角形では縦横と斜めで隣接セルまでの距離が異なる。H3の六角形では隣り合うセルへの距離がすべて等しい [UC-009 §座標を指定するその他の方式]。ズームインするほどIDが長くなり、ID自体が解像度の情報を含む点も特徴である。同じく六角形を用いる方式にGeoHexがある [UC-009 §座標を指定するその他の方式]。

3つの単語の組み合わせで位置を表すwhat3wordsは、覚えにくいIDの代わりに覚えやすい言葉を使うという発想に立つ。ただし、実際にはあまり普及していないとの見方が示されている [UC-009 §座標を指定するその他の方式]。

球面を平面に写す決断——地図投影法

地球全体を表示するには、3次元の球面を2次元の平面に写す必要がある。球面を平面に押し込めるとどこかが必ず歪み、長さ・面積・角度・形のすべてを同時には保存できない。投影法とは何を保存し何を捨てるかの選択であり、目的に応じて100種類以上が提案されてきた [UC-009 §地図投影法]。

保存の対象によって性格が分かれる。正角図法は角度を、正積図法は面積を、正距図法は中心から各点への距離を保存する。正距図法は、ある都市から各地までの距離を正しく示す航空路線図などに使われる [UC-009 §地図投影法]。

広く知られるメルカトル図法は、緯度と経度が直交する格子を作るが、極に近づくほど面積が拡大し、極域を描けない。これを改良したUTM(ユニバーサル横メルカトル図法)は、地球を経度6度ずつ60のゾーンに分け、各ゾーンの中央子午線からの距離をx座標、赤道からの距離をy座標とすることで、全体の歪みを最小化する [UC-009 §地図投影法]。このほか、データ処理に便利な正距円筒図法や、視点を無限遠に置いて地球を眺める正射図法がある [UC-009 §地図投影法]。

投影法を一つ選ぶことは、何かを優先する決定であると同時に、他の幾何学的性質を犠牲にする決定でもある。

測地系——座標値の意味を決める基準

投影法と並ぶもう一つの取り決めが測地系で、地球の中心と形を定義する枠組みである。緯度経度や高さの値はこの定義に依存し、同じ場所でも基準の取り方によって座標値が変わる [UC-009 §測地系と高さの基準]。

地球は完全な球ではなく、自転によって赤道方向にわずかに潰れた楕円体として近似される。かつて測地系は国ごとに異なり、日本も2000年ごろまで独自の測地系を用いていた。GPSの普及に伴い世界測地系WGS84が標準となり、日本も2000年に移行した。このとき全国の緯度経度値が変わり、古い地図を使ったカーナビゲーションで位置がずれる事例も生じた [UC-009 §測地系と地球の形]。地球の中心を重力の中心として定めたことで、ニュートン力学に従って運動するGPS衛星との親和性が高まり、複数の衛星の信号から高精度の測位ができるようになった [UC-009 §測地系と地球の形]。異なる時期のデータを統合するときは、どの測地系に基づくかの確認が欠かせない。

高さの基準はさらに複雑である。GPSが与える高度は、基準楕円体の表面からの高さである。一方、日本で伝統的に使われてきた高さは、東京湾の平均海水面を基準とする。これは重力が釣り合う水面であるジオイド面に対応するが、山や深い海、地下の岩石密度によって重力の強さが場所ごとに異なるため、ジオイド面は不規則な形になる [UC-009 §高さは何を基準に測るか]。そのためGPSが示す高さと海抜による高さは食い違う可能性がある。水面基準の高さは過去に積み上げたデータとの連続性のために使われ続け、GPSだけから高さを推定するときには楕円体基準が用いられる [UC-009 §高さは何を基準に測るか]。

空間を索引する——R-treeと空間検索

座標・投影法・測地系が決まれば、空間オブジェクトを格納して検索する仕組みが問題になる。対象が少なければ一件ずつ調べるリニアスキャンで足りるが、100万、1000万件になると時間がかかり、オブジェクトをインデックス化するアルゴリズムが必要になる [UC-009 §空間検索を高速化する仕組み]。

代表的な構造が1984年に提案されたR-tree(R木)で、大きな矩形から順に内側の小さな矩形へとたどることで、すべてを調べずに検索できる [UC-009 §空間検索を高速化する仕組み]。

典型的な検索には二種類ある。ある領域に含まれるオブジェクトを探すcontainsと、ある地点から一定距離以内のオブジェクトを探すwithinである。後者は、距離を一つずつ測る代わりに、バッファリングで範囲を領域に変換し、contains検索と組み合わせて実現する。領域を拡張してインデックス構造を使うことで高速化できる [UC-009 §空間検索を高速化する仕組み]。

点・線・ポリゴンのあいだには、交わる・接する・含む・重なるといった空間関係が定義され、和・距離・交差といった図形操作も提供されている。これらの計算幾何の処理を担うライブラリとして、C/C++で書かれたGEOSがある [UC-009 §空間的な関係と操作]。Google Mapsのような地理情報サービスの機能も、こうしたアルゴリズムが支えている [UC-009 §空間検索を高速化する仕組み]。

地名による位置の指定については「地名という接点」を、空間境界の時間的変化については「時間をもつ空間」を参照されたい。