距離マトリクスとは、複数の出発地と複数の目的地間の所要時間と距離を表すグリッドです。「最寄り店舗」のランキング、配送配車の判断、ルート最適化ソルバーすべての裏にあるデータ構造です。アプリケーションがドライブ時間で多数の候補から最良のものを選ぶ必要があるとき、その下で動いているのが距離マトリクスです。
このガイドでは、距離マトリクスとは実際に何か、所要時間と直線距離の違い、本番システムでの登場箇所、そして候補が数点を超えるとチームを苦しめる落とし穴について解説します。
距離マトリクスの本質
最もシンプルな形では、距離マトリクスは2次元の表です。行が出発地、列が目的地で、各セルには2つの数値(距離と所要時間)が入ります。N個の出発地とM個の目的地がある場合、マトリクスにはN×Mのセルがあります。25人のドライバーと25件のジョブのリクエストは、1回の呼び出しで625セルを生成します。
それらのセルの値は、実際の道路ネットワークグラフをたどるルーティングエンジンから得られます。各出発地から各目的地への最速経路を選び、区間コストを合計し、合計を返します。これは2点間に直線を引き、建物・河川・一方通行の存在を無視するハーバーサイン計算とは根本的に異なります。
座標ペアは2点がどこにあるかを教えてくれます。距離マトリクスは、その間を実際に移動するのに何がかかるかを教えてくれます。
距離 vs 所要時間
「距離」と呼ばれることが多い3つの異なる数値があり、これを混同するのがルーティングコードで最も多いバグです。
ハーバーサイン距離は、緯度経度ペア間の大圏距離です。計算が高速でネットワーク呼び出し不要ですが、運転を伴うあらゆるタスクには間違っています。2kmのハーバーサイン距離は、渡れない川を考慮すると7kmのドライブになりえます。
道路ネットワーク距離は、実際に走行可能な経路の長さです。一方通行、右左折規制、道路グラフのトポロジを反映します。これが距離マトリクスAPIがdistanceフィールドで返すものです。
交通状況込みの所要時間は、現在または予測される交通状況を踏まえた移動所要時間です。12kmの高速道路区間は02:00では6分、17:30では25分です。ETAを重視する本番システムは、交通対応の所要時間を要求し、ルーティングエンジンが渋滞を正しくモデル化できるよう出発時刻を渡します。
ランキングと配車では、ほぼ常に所要時間が距離より優先されます。近いジョブが800m遠回りでも、ドライブ時間が4分短縮されればドライバーは気にしません。
距離マトリクスの活用シーン
距離マトリクスは、多くのロジスティクスや位置情報機能の裏で静かに動いています。
- 配送ドライバーの割当: 各保留中の注文を各利用可能なドライバーと照合します。配車係は、車両容量とシフト制約を満たす最低所要時間のセルを選びます
- フリート配車とリバランス: ライドヘイリングとラストマイルプラットフォームは、車両と需要ゾーン間のマトリクスを数秒ごとに計算し、車両を利用者の近くに保ちます
- 店舗・施設ロケーター: ハーバーサインで最寄り5店舗を返す代わりに、ロケーターはユーザー位置から候補までの小さなマトリクスを計算し、ドライブ時間でランク付けします
- 大規模ETA計算: 同時注文の多いマーケットプレイスは、数千の単一ルートリクエストを発行する代わりに、ETAをマトリクス呼び出しにバッチ化します
- VRPソルバー: 車両ルーティング問題ソルバー(OR-Tools、jsprit、商用オプティマイザ)はフルコストマトリクスを入力として要求します。ルーティング解の品質はマトリクスの品質に制約されます
- 立地選定とテリトリー計画: アナリストは候補拠点と顧客クラスタ間のマトリクスを計算し、総ドライブ時間を最小化する倉庫を選びます
これらすべてで、マトリクスは一括計算のプリミティブです。N×Mの個別ルーティング呼び出しのコストを払わずに、システムが「多数の中から最良のもの」を判断できるようにします。
本番環境での落とし穴
距離マトリクスは初日には簡単で、すぐ難しくなります。
非対称性がデフォルト。実際の道路ネットワークには一方通行、分離車線、非対称な右左折コストがあります。(A, B)のセルが(B, A)のセルと等しいことは稀です。マトリクスを対称扱いしてメモリを節約するのは、配車システムにおける逆走ルーティングの古典的な原因です。
N×Mのコスト。100×100マトリクスは10,000セル。500×500マトリクスは250,000セルです。コストとレイテンシは2次関数的に増加します。ほとんどの本番システムはマトリクスをチャンク(50×50や100×100)にバッチ化し、リクエストを並列化し、固定倉庫と固定店舗間のマトリクスのように頻繁に変化しない結果をキャッシュします。
時間帯による変動。03:00に計算したマトリクスは17:00には有効ではありません。配車ロジックが交通に依存する場合、判断時に交通対応マトリクスをリクエストするか、時間帯ごとの小さなマトリクス群(朝ピーク、オフピーク、夕方ピーク)を事前計算し適切なものを選んでください。
バッチ処理とレート制限。距離マトリクスAPIはリクエストごとではなく要素ごとに課金され、ほとんどのプロバイダーは1回の呼び出しサイズに上限を設けています。スケール時に発見するのではなく、初日からチャンキングとバックプレッシャーを計画してください。
入力座標の品質。マトリクスは入力座標の質以上にはなりません。中央分離帯で反対側に着地したジオコードは、大きく間違った所要時間を生成します。マトリクスリクエストに入る前に入力座標を検証してください。
MapAtlasの距離マトリクス
MapAtlas Distance Matrix APIは、実際のヨーロッパおよびグローバル道路ネットワーク上で所要時間と距離のフルN×Mマトリクスを計算します。自動車、トラック、自転車、歩行者プロファイルをサポートし、出発時刻付きの交通対応リクエストを受け付け、実際の配車・最適化ワークロードに必要なバッチサイズに対応しています。
ランキングを超えるワークロードでは、Distance Matrix APIはOptimize Route API(マトリクスとストップ群を受け取り、総ドライブ時間を最小化する順序付きルートを返す)と、Isochrone API(マトリクス呼び出しの前に「X分以内に到達可能なすべて」のフィルタで候補集合を事前縮小する)と自然に組み合わさります。
距離マトリクスは華やかではありません。ただの数値のグリッドです。しかし、「多数から最良を見つける」をN×Mのルーティングの悪夢から1回の一括リクエストに変えるグリッドであり、この1つのデータを正しく取得することが、本物のロジスティクス製品と地図上に5本のピンがあるだけのデモを分けるのです。
よくある質問
距離マトリクスとは何ですか?
距離マトリクスとは、出発地と目的地のペアごとの所要時間と距離をN×Mのグリッドで表したものです。各セルは1つの問いに答えます。出発地iから目的地jまでどれくらい時間がかかり、距離はどれくらいか。最新の距離マトリクスAPIは、直線距離ではなく実際の道路ネットワーク上で値を計算するため、結果は一方通行、右左折規制、ルーティング可能なジオメトリを反映します。
距離(distance)と所要時間(duration)の違いは何ですか?
距離(distance)は道路ネットワーク上を移動する長さで、メートルまたはキロメートル単位です。所要時間(duration)は移動にかかる時間で秒単位、制限速度・交通状況・道路種別を反映します。両者は互換ではありません。同じ距離で所要時間が大きく異なる経路もあり、本番環境のユースケース(ETA、配車、ランキング)のほとんどは所要時間を重視します。優れた距離マトリクスAPIはすべてのセルで両方を返します。
単一ルートではなく距離マトリクスを使うべきなのはいつですか?
多数の候補を比較する必要があるときは常に距離マトリクスを使ってください。50店舗から最寄りの5店舗をランク付けする、20人の利用可能なドライバーから1配送を最寄りに割り当てる、車両ルーティング問題ソルバーに入力するなどです。単一ルーティングエンドポイントをN×M回呼び出すのは遅くて高コストです。マトリクスエンドポイントは一括計算に最適化されており、同じデータを1リクエストで返します。
距離マトリクスは対称ですか?
実際の道路ネットワークではほぼ対称になりません。AからBへのドライブとBからAへのドライブが等しいことは稀です。一方通行、中央分離帯のある道路、右左折規制、非対称な交通状況があるためです。本番用の距離マトリクスAPIは三角形の半分ではなく、N×Mのフルグリッドを返します。メモリ節約のためにマトリクスを潰すと、ドライバーを反対車線にルーティングすることになります。

