位置データは正常系だけでなくエッジケースでもテストする
よく地図化された市の中心部の住所からは、システムが農村部のルート、係争中の国境、極地付近のクエリをどう扱うかについてほとんど何もわかりません。難しいケースを意図的にテストしてください。
座標の誤差には、基になるジオコーディングの良し悪しとはまったく関係がなく、得られた数値がその後どのように保存され、送信され、計算されるかにすべてが左右される種類のものがあります。完全に正確な座標のペアでも、システム内を通過する途中のどこかで精度の足りない数値型で表現されるだけで、無視できない丸め誤差が生じることがあります。この種の誤差は、少し意識して注意を払うだけで完全に避けられます。
一般にfloat32と呼ばれる単精度浮動小数点数は、有効桁数がおよそ10進数で7桁です。緯度や経度の値は、度の整数部分を表すだけで小数点の前に数桁が必要なため、同じ値を一般にfloat64と呼ばれる倍精度浮動小数点数で表す場合に比べて、小数点以下に残る実際の精度の桁数が目に見えて少なくなります。実際には、座標をfloat64ではなくfloat32で保存すると、正確な緯度によっては1メートル以上の丸め誤差が生じることがあり、これは元のジオコーディングの一致そのものにあった精度の限界とはまったく別に、それに加えて発生します。
この種の誤差は、うっかり持ち込みやすく、見落としやすいものです。見た目には明らかな誤りに見えないからです。得られた座標はもっともらしく正しい形式の数値のままで、ただ元の値から気づかないうちにわずかにずれているだけです。よくある原因は、数値の精度が不十分なデータベースの列定義、意図したよりも狭い数値型を既定とするデータのシリアライズ形式、あるいは距離の計算式や座標変換など、パイプラインのほかの部分よりも低い精度の型で実行される中間計算です。
実践的な指針は単純です。座標の保存と計算には、最初に受け取る時点だけでなく、システム全体を端から端まで通して、倍精度浮動小数点、または十分な桁数を持つ同等の固定小数点の10進数型を使ってください。特にデータベーススキーマを確認しましょう。意図したよりも狭い型で定義された列は、まさにこの問題の最もよくある、そして最も見落としやすい原因の1つであり、多くの場合プロジェクトの初期に持ち込まれ、最初のテストを通る程度に動いてしまうと二度と見直されません。システム間のシリアライズ層やAPI層も確認してください。一部の形式やライブラリは明示的に指定しない限り単精度を既定とし、最も確認しようと思わない境界で、気づかないうちに精度を落とすからです。
当社のジオコーディングおよび逆ジオコーディングエンドポイントが返す座標は、完全な倍精度の10進数値を持っています。その精度が自動的にすべての段階を通って保たれると思い込まず、自社の保存と計算のパイプラインを通して維持されているかを直接確認する価値があります。