Roads API は、特定の道路区間に掲示されている制限速度を返します。可変式速度規制が指定された道路上の区間では、その区間のデフォルトの速度制限が返されます。
Roads API が返す速度制限データの正確性は保証できません。提供される速度制限データはリアルタイムではなく、推定値、不正確な値、不完全な値、古い値が使用されている可能性があります。制限速度データが利用可能な地域については、カバレッジの詳細をご覧ください。
リクエスト
速度制限のリクエストは、HTTPS で送信し、次の形式である必要があります。
https://roads.googleapis.com/v1/speedLimits?parameters&key=YOUR_API_KEY
パラメータの使用
必須パラメータ
path
またはplaceId
パラメータ。path
- 経路を表す最大 100 個の緯度と経度のペアのリスト。緯度と経度の値はカンマで区切る必要があります。緯度と経度のペアはパイプ文字(|)で区切る必要があります。path
パラメータを指定すると、API はまず、(snapToRoads
リクエストの場合と同様に)車両が走行している可能性が高い道路にパスをスナップし、関連する道路区間の速度制限を決定します。API でパスをスナップしない場合は、次に説明するようにplaceId
パラメータを渡す必要があります。次の例は、3 つの緯度/経度ペアを含むpath
パラメータを示しています。path=60.170880,24.942795|60.170879,24.942796|60.170877,24.942796
placeId
- 1 つ以上の道路区間を示すプレイス ID。各プレイス ID が、道路セグメントを参照していることを確認します。1 つのリクエストで渡せるプレイス ID は 100 個までです。API は、指定されたプレイス ID に対して道路スナップを行いません。レスポンスには、リクエスト内の各プレイス ID の制限速度が含まれます。snapToRoads
リクエストまたはnearestRoads
リクエストを送信して関連するプレイス ID を検索し、speedLimits
リクエストへの入力として指定できます。次の例は、2 つのプレイス ID を含むplaceId
パラメータを示しています。placeId=ChIJX12duJAwGQ0Ra0d4Oi4jOGE&placeId=ChIJLQcticc0GQ0RoiNZJVa5GxU
key
- アプリケーションの API キー。アプリケーションは、Roads API にリクエストを送信するたびに API キーをリクエストに含め、送信元を明らかにする必要があります。キーを取得する方法を学ぶ。
オプション パラメータ
units
- 速度制限(時速)を km で返すかマイルで返すかを指定します。KPH
またはMPH
に設定できます。デフォルトはKPH
です。
レスポンス
speedLimits
レスポンスには、次の要素が存在する可能性があります。
speedLimits
- 道路のメタデータの配列。各要素は次のフィールドで構成されます。placeId
- プレイスの一意の識別子。Roads API が返すプレイス ID は、すべて道路上の区間に対応するものです。speedLimit
- 道路上の区間の速度制限です。units
-KPH
またはMPH
を返します。
snappedPoints
- スナップされたポイントの配列。この配列は、リクエストにpath
パラメータが含まれている場合にのみ存在します。各ポイントは次のフィールドで構成されます。location
-latitude
値とlongitude
値が含まれます。originalIndex
- 元のリクエスト内の対応する値を示す整数。リクエスト内のそれぞれの値がレスポンスのスナップされた値にマッピングされます。これらの値は0
から開始されるため、originalIndex
が4
の地点は、path
パラメータで渡された 5 番目の緯度と経度がスナップされた値になります。placeId
- プレイスの一意の識別子。Roads API が返すプレイス ID は、すべて道路上の区間に対応するものです。placeId
を速度制限リクエストに渡すことによって、その道路上の区間における速度制限を求めることができます。
warning_message
- ユーザーに表示される警告を含む文字列。
パスを使用したリクエストの例
このリクエストは、ポルトガルのリスボンにある Vasco da Gama 橋を横切る経路で、指定された緯度/経度ペアに最も近い各道路区間の速度制限を取得します。
リクエスト
https://roads.googleapis.com/v1/speedLimits?path=38.75807927603043,-9.03741754643809|38.6896537,-9.1770515|41.1399289,-8.6094075&key=YOUR_API_KEY
レスポンス
{ speedLimits: [ { placeId: "ChIJX12duJAwGQ0Ra0d4Oi4jOGE", speedLimit: 105, units: "KPH" }, { placeId: "ChIJLQcticc0GQ0RoiNZJVa5GxU", speedLimit: 70, units: "KPH" }, { placeId: "ChIJJ4vQRudkJA0RpednU70A-5M", speedLimit: 55, units: "KPH" } ], snappedPoints: [ { location: { latitude: 38.75807927603043, longitude: -9.037417546438084 }, originalIndex: 0, placeId: "ChIJX12duJAwGQ0Ra0d4Oi4jOGE" }, { location: { latitude: 38.689653701836896, longitude: -9.177051486847693 }, originalIndex: 1, placeId: "ChIJLQcticc0GQ0RoiNZJVa5GxU" }, { location: { latitude: 41.13993011767777, longitude: -8.609400794783655 }, originalIndex: 2, placeId: "ChIJJ4vQRudkJA0RpednU70A-5M" } ], warningMessage: "Input path is too sparse. You should provide a path where consecutive points are closer to each other. Refer to the 'path' parameter in Google Roads API documentation." }
上記のレスポンスに、ポイントのスパース性に関する警告メッセージが表示されています。任意の地点で最も近い道路区間の速度制限をリクエストする場合は、代わりに nearestRoads
エンドポイントから取得したプレイス ID を使用して speedLimits
を呼び出す必要があります。
プレイス ID を使用したリクエストの例
緯度と経度のペアを使用する代わりに、道路セグメントの場所 ID を渡すことができます。道路セグメントのプレイス ID は、snapToRoads
リクエストまたは nearestRoads
リクエストを使用して取得することをおすすめします。プレイス ID を渡すと、API は各プレイス ID で表される道路区間の制限速度を返します。API は、指定されたプレイス ID に道路スナップは適用しません。
次の例では、ポルトガルのリスボンにある Vasco da Gama 橋を横断する一部の道路区間の速度制限をリクエストします。
リクエスト
https://roads.googleapis.com/v1/speedLimits?placeId=ChIJX12duJAwGQ0Ra0d4Oi4jOGE&placeId=ChIJLQcticc0GQ0RoiNZJVa5GxU&placeId=ChIJJ4vQRudkJA0RpednU70A-5M&key=YOUR_API_KEY
レスポンス
{ "speedLimits": [ { placeId: "ChIJX12duJAwGQ0Ra0d4Oi4jOGE", speedLimit: 105, units: "KPH" }, { placeId: "ChIJLQcticc0GQ0RoiNZJVa5GxU", speedLimit: 70, units: "KPH" }, { placeId: "ChIJJ4vQRudkJA0RpednU70A-5M", speedLimit: 55, units: "KPH" } ] }
使用上の推奨事項
Speed Limit サービスの呼び出し回数を最小限に抑えるため、5 ~ 15 分間隔でアセットの場所をサンプリングすることをおすすめします(正確な値はアセットの移動速度によって異なります)。アセットが静止している場合は、1 つの場所をサンプリングするだけで十分です(複数回呼び出す必要はありません)。
全体的なレイテンシを最小限に抑えるため、モバイル アセットの場所を受け取るたびに API を呼び出すのではなく、ある程度データが蓄積されたら制限速度サービスを呼び出すことをおすすめします。
一部またはすべての制限速度が表示されないのはなぜですか?
speedLimits
がない場合の最も一般的な原因は、道路区間ではない場所の制限速度をリクエストしていることです。
上記の例では、ヴァスコ・ダ・ガマ橋を使用してコンセプトを説明しています。この橋は、リオ・テージョ川を渡る E90 道路をサポートしています。橋自体のプレイス ID は ChIJUzt97ZEwGQ0RM1JzQfqoDtU です。上記のレスポンスの最初の道路セグメントは E90 道路の一部であり、プレイス ID は ChIJX12duJAwGQ0Ra0d4Oi4jOGE です。リクエストの例で、道路のプレイス ID を橋のプレイス ID に置き換えると、橋のプレイス ID は個々の道路セグメントを参照しないため、レスポンスの speedLimits
配列には 2 つの制限速度のみが含まれます。さらに、プレイス ID が道路区間に対応していない場合、レスポンスには制限速度は含まれません。
プレイス ID を使用して速度制限のリクエストを行う場合は、各プレイス ID が道路セグメントを指していることを確認してください。個々の道路区間のプレイス ID は、snapToRoads
リクエストまたは nearestRoads
リクエストを使用して取得するのが最適です。どちらのリクエストでも、1 回の呼び出しで複数のプレイス ID を返すことができます。