computeRoutes メソッド(REST)と ComputeRoutes メソッド(gRPC)も、ポリラインで表されたルートを レスポンスが返されます。これらの API は、次の 2 種類のポリラインを返します。
基本ポリライン(デフォルト): 交通情報のないルートを表します。 ポリラインに埋め込まれた情報。基本的なポリラインを返すリクエスト Routes Basic の料金が適用されます詳細: Routes API の料金の課金が必要です。
交通状況に対応するポリライン: 交通状況に関する情報が含まれます 表示されます。交通状況を速度で表現 特定の間隔に適用されるカテゴリ(
NORMAL
、SLOW
、TRAFFIC_JAM
) ポリラインが作成されます。交通対応ポリラインのリクエストは、 Routes Preferred のレート。お支払いとご請求の詳細: Routes API。詳しくは、 ポリラインの品質を設定する
ポリラインの詳細については、以下をご覧ください。
インタラクティブ ポリライン エンコーダ ユーティリティ を使用すると、UI でエンコードされたポリラインを作成したり、表示するポリラインをデコードしたりできます。 作成します。たとえば、このユーティリティを使用して、 追加します。
ルート、区間、またはステップの基本ポリラインをリクエストする
ポリラインは、 Polyline(REST)または Polyline(gRPC)オブジェクト。 ルート、区間、ステップの各レベルでレスポンスでポリラインを返すことができます。
経路レベルで、 レスポンス フィールド マスクの
routes.polyline
。区間レベルでは、 「
routes.legs.polyline
」を含めてルートを作成できます。ステップ レベルでは、各ステップのレスポンスでポリラインを返します。
routes.legs.steps.polyline
を追加して区間を追加します。
たとえば、ルート全体、各区間、および 各ステップの各ステップ:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE" }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.legs.steps.polyline' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
このリクエストにより、次のレスポンスが返されます。これには、 区間ごとに、および区間ごとに次のように計算されます:
{ "routes": [ { "legs": [ { "polyline": { "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?" } }, "steps": [ { "polyline": { "encodedPolyline": "kclcF...@sC@YIOKI" } }, { "polyline": { "encodedPolyline": "wblcF~...SZSF_@?" } }, ... ], "distanceMeters": 56901, "duration": "2420s", "polyline": { "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?" } } ] }
このリクエストには出発地と目的地のみが含まれているため、 Route には 1 つの区間しか含まれていません。そのため、脚部のポリラインと 同じです
リクエストに中間地点を追加すると、 ルートには 2 つの区間が含まれています:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "intermediates": [ { "address": "450 Serra Mall, Stanford, CA 94305, USA"}, ], "travelMode": "DRIVE", }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
このリクエストは、それぞれ固有のポリラインと、 ルート全体:
{ "routes": [ { "legs": [ { "polyline": { "encodedPolyline": "kclcFfqchV?A...?I@G?GAECCCEKICBAFG" } "steps": [ { "polyline": { "encodedPolyline": "kclcFfqch...YIOKI" } }, ... }, { "polyline": { "encodedPolyline": "ojmcFtethV?K...QOYQOGA?_@MUG[Ga@G" } "steps": [ { "polyline": { "encodedPolyline": "uypeFbo`jVgJq...PoBiC" } }, ... } ], "distanceMeters": 68403, "duration": "3759s", "polyline": { "encodedPolyline": "kclcFfqchV?A?CBKF[Ha...?GAECCCEKICBAFGJEBE" } } ] }
ポリラインの品質
ポリラインの質は、以下の用語で表すことができます。
小数点の浮動小数点精度
ポイントは、緯度と経度の値として指定され、 出力します。値が小さい場合はこれで問題ありません。 (正確に表現できますが)値が渡ると精度は低下します 小数点の丸め誤差によって増大します
イン computeRoutes メソッド(REST)や ComputeRoutes これは
polylineEncoding
によって制御されます。ポリラインを構成するポイントの数
ポイント数が多いほど、ポリラインは滑らかになります(特に です。
イン computeRoutes メソッド(REST)や ComputeRoutes これは
polylineQuality
によって制御されます。
ポリラインのエンコード タイプを設定する
ポリラインのタイプを制御するには、polylineEncoding
リクエスト オプションを使用します。
polylineEncoding
プロパティは、ポリラインをエンコードするかどうかを制御します。
ENCODED_POLYLINE
(デフォルト)。つまり、
エンコード ポリライン アルゴリズム形式
または GEO_JSON_LINESTRING
が使用されます。つまり、
GeoJSON LineString 形式
使用されます。
たとえば、リクエスト本文で次のようにします。
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE", "polylineEncoding": "ENCODED_POLYLINE" }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
ポリラインの品質を設定する
polylineQuality
は、ポリラインの品質を HIGH_QUALITY
または
OVERVIEW
(デフォルト)。OVERVIEW
では、ポリラインは小さな
リクエストのレイテンシは HIGH_QUALITY
よりも低くなります。
たとえば、リクエスト本文で次のようにします。
{ "origin":{ "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0827784 } } }, "destination":{ "location":{ "latLng":{ "latitude": 37.417670, "longitude": -122.079595 } } }, "travelMode": "DRIVE", "routingPreference": "TRAFFIC_AWARE", "polylineQuality": "HIGH_QUALITY", "polylineEncoding": "ENCODED_POLYLINE", "departureTime": "2023-10-15T15:01:23.045123456Z", ... }
交通対応ポリラインをリクエストする
上記の例はすべて、基本のポリラインを返します。つまり、 交通情報を表示します。さらに、ポリラインが次のものを含むようにリクエストすることもできます。 各区間の交通情報を記録します。
交通認識ポリラインには、道路の交通状況に関する情報が含まれています
表示されます。交通状況を速度のカテゴリで表します
特定のレスポンス間隔の(NORMAL
、SLOW
、TRAFFIC_JAM
)
ポリライン。間隔は、その開始のインデックスによって定義されます(両端を含む)。
および終了点(排他的)のポリライン ポイントを配置できます。
たとえば、次のレスポンスは、ポリライン間の NORMAL
交通量を示しています。
ポイント 2 と 4:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
交通対応ポリラインの計算をリクエストするには、次のように設定します。 次のプロパティを指定します。
有効にするには、
extraComputations
配列フィールドをTRAFFIC_ON_POLYLINE
に設定します。 計算を行います。travelMode
をDRIVE
またはTWO_WHEELER
に設定します。その他のサービス 移動手段からエラーが返されます。TRAFFIC_AWARE
またはTRAFFIC_AWARE_OPTIMAL
ルーティングを指定する 設定されます。詳しくは、動画の画質と画質の レイテンシをご覧ください。レスポンスのプロパティを返すように指定するレスポンス フィールド マスクを設定します。
経路レベルの場合、レスポンスですべての移動情報を返します。 レスポンス フィールド マスクに
routes.travelAdvisory
が含まれている。返却 交通情報のみを取得したい場合は、routes.travelAdvisory.speedReadingIntervals
区間レベルでは、 各区間に
routes.legs.travelAdvisory
を含めることもできます。返却 交通情報のみを取得したい場合は、routes.legs.travelAdvisory.speedReadingIntervals
。
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE", "extraComputations": ["TRAFFIC_ON_POLYLINE"], "routingPreference": "TRAFFIC_AWARE_OPTIMAL" }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.travelAdvisory,routes.legs.travelAdvisory' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
交通対応ポリラインのレスポンス例
レスポンスでは、交通データがポリラインでエンコードされ、
travelAdvisory
フィールド(型)
RouteLegTravelAdvisory
オブジェクト(各脚)と
RouteTravelAdvisory オブジェクト(ルート)。
例:
{ "routes": [ { "legs": { "polyline": { "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD" }, // Traffic data for the leg. "travelAdvisory": { "speedReadingIntervals": [ { "endPolylinePointIndex": 1, "speed": "NORMAL" }, { "startPolylinePointIndex": 1, "endPolylinePointIndex": 2, "speed": "SLOW" }, { "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" } ] } }, "polyline": { "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD" }, // Traffic data for the route. "travelAdvisory": { "speedReadingIntervals": [ { "endPolylinePointIndex": 1, "speed": "NORMAL" }, { "startPolylinePointIndex": 1, "endPolylinePointIndex": 2, "speed": "SLOW" }, { "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" } ] } } ] }
RouteTravelAdvisory
と RouteLegTravelAdvisory
の両方に配列フィールドが含まれます。
トラフィック速度の情報を含む speedReadingIntervals
。各
配列内のオブジェクトは、配列内の
SpeedReadingInterval(REST)または
SpeedReadingInterval
(gRPC)オブジェクトが作成されます。
SpeedReadingInterval
オブジェクトには、ルート区間の速度の読み取りが含まれます。
NORMAL
、SLOW
、TRAFFIC_JAM
など。オブジェクトの配列全体が
重なり合わないように、ルートのポリライン全体。指定された地点の
前の区間の終点と同じです。
すべての間隔は startPolylinePointIndex
で記述します。
endPolylinePointIndex
、および対応する速度カテゴリ。
間隔内に開始インデックスがないことは、インデックス 0 に対応します。
の
proto3 プラクティス。
startPolylinePointIndex
と endPolylinePointIndex
の値は
常に連続しています。例:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
この場合、交通状況はインデックス 2 からインデックス 4 まで同じでした。
Maps SDK で交通対応ポリラインをレンダリングする
交通情報対応ポリラインは、 カスタム配色、ストローク、カスタム グラフなどの機能を備えており、 ポリラインに沿ったパターンを描画します。ポリラインの使用方法について詳しくは、 Android 向けポリラインの機能 iOS のポリライン機能をご覧ください。
ポリラインのレンダリング例
Maps SDK のユーザーは、カスタマイズされたマッピングを定義できます。 速度カテゴリとポリライン レンダリング スキーマ間のロジックを共有しています。として 「NORMAL」と表示するなどして、青い太い線として表示される 「SLOW」の地図たとえば、速度はオレンジ色の太い線で表示されます。
次のスニペットでは、測地線セグメントを持つ濃い青色のポリラインが メルボルンからパースまで。詳細については、次をご覧ください: 外観のカスタマイズ (Android の場合)と ポリラインをカスタマイズする (iOS の場合)。
Android
Java
Polyline line = map.addPolyline(new PolylineOptions() .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734)) .width(25) .color(Color.BLUE) .geodesic(true));
Kotlin
val line: Polyline = map.addPolyline( PolylineOptions() .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734)) .width(25f) .color(Color.BLUE) .geodesic(true) )
iOS
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 10.f; polyline.strokeColor = .blue; polyline.geodesic = YES; polyline.map = mapView;
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 10.0 polyline.geodesic = true polyline.map = mapView