Plus Code(プラスコード)は緯度経度でどこ? — 8Q7XMP5W+C5 の読み方と、地域メッシュコードとの違い

,

Plus Code(プラスコード)は緯度経度でどこ? — 8Q7XMP5W+C5 の読み方と、地域メッシュコードとの違い

Plus Code(プラスコード)は緯度経度でどこ? — 8Q7XMP5W+C5 の読み方と、地域メッシュコードとの違い

Plus Code は住所ではなく、緯度経度そのものを文字に置き換えたものです。 だから住所辞書もサーバも要らず、電卓と20文字の表さえあれば緯度経度に戻せます。基準は WGS848Q7XMP5W+C5 のように8文字+++2文字で書かれ、この10文字で約14m四方の範囲を指します。以下、変換のしくみと、日本の地域メッシュコードとの違いを整理します。

Plus Code とは何か

正式名称は Open Location Code(OLC)。Google が2014年に公開した位置参照コードで、仕様と参照実装は Apache License 2.0 で公開されています。設計の要点は3つです。

  • 座標の変換であって、住所の検索ではない。オフラインで計算できる
  • 短いほど広い範囲を指す。桁数がそのまま精度になる
  • 紛らわしい文字を使わない。使う文字は 23456789CFGHJMPQRVWX の20種類だけ(01AEIOU などは不採用で、読み間違いと単語の偶然生成を避けている)

読み方:2文字で1回、20分割する

計算はとても素直です。まず座標を正の数に直します。

lat' = 緯度 + 90     (0〜180)
lon' = 経度 + 180    (0〜360)

そのうえで、20度 → 1度 → 0.05度 → 0.0025度 → 0.000125度 と20分割を繰り返し、各段で「緯度の文字」「経度の文字」の順に1文字ずつ取ります。8文字目のうしろに + を書くのが表記の決まりです。

桁数 1セルの大きさ(度) 南北の距離(およそ)
2文字 20度 約2,200km
4文字 1度 約111km
6文字 0.05度 約5.6km
8文字 0.0025度 約278m
10文字 0.000125度 約13.9m

10文字より細かくしたいときは、11文字目以降で4行×5列のグリッドにさらに分割します。11文字なら南北が約3.5m、東西が約2.8m(赤道付近)になります。

文字の対応表は次のとおりです(左から番号0〜19)。

 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
 2  3  4  5  6  7  8  9  C  F  G  H  J  M  P  Q  R  V  W  X

実際に1文字ずつ求めてみる

例として緯度 35.658581・経度 139.745433(東京タワー付近・WGS84)を入れてみます。

lat' = 35.658581 + 90  = 125.658581
lon' = 139.745433 + 180 = 319.745433

第1段(20度)    : 125.658581 ÷ 20     = 6  余り 5.658581   → 番号6  = '8'
                  319.745433 ÷ 20     = 15 余り 19.745433  → 番号15 = 'Q'
第2段(1度)     : 5.658581  ÷ 1       = 5  余り 0.658581   → 番号5  = '7'
                  19.745433 ÷ 1       = 19 余り 0.745433   → 番号19 = 'X'
第3段(0.05度)  : 0.658581  ÷ 0.05    = 13 余り 0.008581   → 番号13 = 'M'
                  0.745433  ÷ 0.05    = 14 余り 0.045433   → 番号14 = 'P'
第4段(0.0025度): 0.008581  ÷ 0.0025  = 3  余り 0.001081   → 番号3  = '5'
                  0.045433  ÷ 0.0025  = 18 余り 0.000433   → 番号18 = 'W'
                                     ここまでで8文字 → '+' を入れる
第5段(0.000125): 0.001081  ÷ 0.000125 = 8            → 番号8  = 'C'
                  0.000433  ÷ 0.000125 = 3            → 番号3  = '5'

結果は 8Q7XMP5W+C5。逆に戻すときは、各文字を番号に直して段ごとの幅を掛けて足し、最後に緯度から90・経度から180を引きます。返ってくるのは点ではなくセル(矩形)なので、代表点として中心を使うのが普通です。

計算上の注意がひとつあります。この手順は引き算を繰り返すので、浮動小数点の丸め誤差が最後の桁に効きます。座標がちょうどセルの境界に乗っているとき(たとえば経度の余りが 0.002125 のように、0.000125 で割り切れる値になるとき)、実装によって最後の1文字が隣のセルにずれることがあります。自前で実装するなら、整数化してから割るか、参照実装をそのまま使うのが安全です。

短縮形(+ の前を落とす書き方)

MP5W+C5 港区 のように、先頭4文字を省いて地名を添える書き方があります。これは地名を手がかりに、省いた4文字を復元するという約束です。先頭4文字は1度(約111km)のセルなので、地名がそのくらいの範囲に効いていれば復元できます。

ここが実務上の注意点で、短縮形は単独では座標に戻せません。CSVやデータベースに位置を保存するなら、地名とセットにするか、省略しない完全形(10文字以上)で持つべきです。

測地系は WGS84 — ここだけは間違えやすい

Plus Code の緯度経度は WGS84 です。日本で使う JGD2011/JGD2024 とは実用上ほぼ同じ大きさなので、そのまま扱って問題になることはまずありません。

問題は旧日本測地系(Tokyo Datum)の座標をそのまま Plus Code にしてしまうケースです。旧測地系の緯度経度は世界測地系と数百m違うため、生成される10文字コードはまったく別のセルになります。約14mのセルに対して数百mのずれですから、当然です。

民生機器のGPS座標とWGS84・JGD2011・JGD2024の関係

古い図面や台帳から起こした座標を Plus Code に変換するときは、先に測地系を世界測地系へそろえる。順番を逆にしても取り返せません。

地域メッシュコード・geohash との違い

日本には標準地域メッシュコードという、同じ発想の古い仕組みがあります。並べると性格の違いが見えます。

Plus Code 標準地域メッシュコード geohash
分割のしかた 20分割の繰り返し 1次(緯度40分×経度1度)→8分割→10分割と段階ごとに異なる 32分割(ビット交互)
使う文字 20文字(紛らわしい文字を除外) 数字のみ 32文字(base32)
代表的な細かさ 10文字=約14m 3次メッシュ=約1km 8文字=約19m
対象範囲 全世界 日本の範囲を前提 全世界
セルの形 緯度経度で等分(高緯度ほど横に細い) 同左 同左
主な用途 場所の共有・住所のない土地 統計・国勢調査・メッシュ集計 データベースの近傍検索

要点は目的が違うことです。地域メッシュは統計を集計するための区画で、コードが揃っていること自体に意味があります。geohash は文字列の前方一致が空間の近さに対応するので、索引に向きます。Plus Code は「人が読み上げて伝える」ことを狙っているので、紛らわしい文字を捨て、短縮形を用意しています。

共通するのは、どれも緯度経度の格子であって、面積が一定の区画ではない点です。高緯度ほど東西方向が詰まります。日本国内でも、北海道と沖縄では同じ桁数のセルの横幅が1割ほど違います。

現場でどう使うか

測量・建設の実務で Plus Code が効くのは、住所が付いていない場所を口頭や短文で伝えるときです。

  • 山中の作業地点、海岸の護岸、造成前の区画など、住所表記が使えない場所
  • 写真の添付ができない連絡手段(無線・電話)で、おおよその位置を確実に伝えたいとき
  • 緯度経度を読み上げると桁の聞き間違いが起きる場面(35.658581 より 8Q7XMP5W+C5 の方が復唱しやすい)

一方で、成果として残す座標を Plus Code で持つのは避けたほうが無難です。セルの大きさ(約14m)は測量成果の精度に対して粗すぎますし、桁を増やしても格子の制約は残ります。位置の共有はコード、成果は緯度経度または平面直角座標、と使い分けるのが現実的です。

緯度経度を手入力して測地系を変換する画面

まとめ

  • Plus Code(Open Location Code)は、WGS84 の緯度経度を20進の文字列に変換したもの。オフラインで相互に変換できる
  • 2文字ごとに20分割を繰り返す。10文字で約14m四方、11文字目からは4×5グリッドでさらに細かくなる
  • 使う文字は 23456789CFGHJMPQRVWX の20種のみ。紛らわしい文字を最初から排除している
  • 短縮形は地名とセットでないと座標に戻せない。保存するなら完全形で
  • 旧日本測地系の座標をそのまま入れると、数百mずれた別のセルになる。変換は世界測地系にそろえてから
  • 地域メッシュコードは統計集計、geohash は近傍検索、Plus Code は人が伝えるため——目的が違う

出典

  • Open Location Code specification — GitHub(google/open-location-code): https://github.com/google/open-location-code/blob/main/docs/olc_definition.adoc
  • Open Location Code(リポジトリ・参照実装): https://github.com/google/open-location-code
  • Plus Codes: https://maps.google.com/pluscodes/
  • 地域メッシュ統計の概要 — 総務省統計局: https://www.stat.go.jp/data/mesh/gaiyou.html
  • 世界測地系 — 国土地理院: https://www.gsi.go.jp/sokuchikijun/datum-main.html

本記事で計算した値(いずれも仕様どおりの手順を python3 で検算)

根拠
10文字セル=0.000125度 20度 ÷ 20⁴
同・南北約13.9m 0.000125度 × 111,319.49 m/度
35.658581 / 139.745433 → 8Q7XMP5W+C5 仕様どおりの手順を Decimal(誤差なし)で符号化
11文字セル=南北約3.5m・東西約2.8m 13.9m ÷ 4行 / 13.9m ÷ 5列

次に確認する


開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。


お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

トップへ戻る