無料ツール

RoughRoute — ウェイポイントを入力、実際の道路ルートを出力

OpenStreetMap データに基づいて構築されたオフライン ミニルーター。順序付けられたウェイポイントを与えると、実行時にネットワーク呼び出しを行わずに、実際の道路に沿ったポリラインが 1 桁ミリ秒で返されます。

無料のオープンソース · Rust · MIT License

問題

🧭 直線は道ではない

mock-GPS 再生ツール、デモ、地図アニメーションなど、動きをシミュレートするものには、建物の中を通る直線ではなく、実際に走行したようなパスが必要です。完全なルーティング エンジンはこれを解決しますが、重く、ほとんどのルーティング エンジンはネットワーク呼び出しの相手側にサーバーがあることを前提としています。

アイデア

📦 埋め込み可能なほど小さい

RoughRoute が行うことは 1 つです。ウェイポイントを入力し、妥当な道路沿いのラインを出力します。マップは、アプリに同梱されるコンパクトなマップ ファイルに事前にコンパイルされるため、実行時にはサーバーも API キーも、レート制限を行うものもありません。

特徴

何をするのか

📴 実行時にネットワークがありません

クエリは、デバイス上に事前に構築されたマップ ファイルに対して実行されます。飛行機、トンネル、またはネットワークがオフになっている CI で動作します。

🧩 1 つのコア、3 つのシェル

同じ Rust コアは、ブラウザ用の WebAssembly、UniFFI 経由のネイティブ Android ライブラリ、およびコマンドライン バイナリにコンパイルされます。

⚡ 1 桁のミリ秒のクエリ

A* 圧縮された道路ネットワーク上。開始時に 1 回だけでなく、再生のすべてのフレームでルーティングするのに十分な速度です。

🗜 メガバイト単位で測定されるマップ ファイル

次数 2 コラプスとデルタ圧縮ジオメトリにより、使用可能な領域がバンドルまたは CDN からの提供に十分な大きさに保たれます。

🚗 車の運転と散歩

1 つのマップ ファイルにはアクセス ビットマスクを介して両方のプロファイルが含まれるため、リージョンを 2 回構築して配布する必要はありません。

🔁 同じ入力、同じバイト

ルーティングは決定的です。同じウェイポイントと同じマップ ファイルからは常に同じラインが生成されます。出力を比較するテストにとって朗報です。

仕組み

⚙️ 3つのステップ

  1. 事前に、.osm.pbf 領域をコンパクトな .graph ファイルにコンパイルしてください。
  2. そのファイルを発送する — アプリにバンドルするか、CDN の後ろに置きます。
  3. デバイス上でそのファイルをロードし、ローカルでクエリを実行します。座標と距離が返されます。
試してみてください

⌨️ コマンドラインから

roughroute build region.osm.pbf -o region.graph

roughroute route region.graph \
  --profile car \
  --via 40.7128,-74.0060 \
  --via 40.7580,-73.9855 \
  --format geojson

または、ブラウザから WebAssembly 経由で:

const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");

⚖️ 意図的にやらないこと

RoughRoute は、サイズと速度よりも精度を優先します。一方通行の道路、右折制限、速度に基づくコスト計算は無視され、経路が見つからない場合は拒否せずに直線セグメントを返します。これは、再生、デモ、オフライン フォールバックにとっては正しい取引ですが、完全なルーティング エンジンが必要なターンバイターン ナビゲーションにとっては間違った取引です。

MIT の下でライセンスを取得しています。地図データは OpenStreetMap の寄稿者から提供され、ODbL に基づいてライセンスが付与されています。