다중선 인코딩은 경로와 같은 일련의 좌표를 단일 문자열로 저장할 수 있는 손실 압축 알고리즘입니다. 인코딩 프로세스는 base64 인코딩 체계를 사용하여 바이너리 값을 ASCII 문자에 대한 일련의 문자 코드로 변환합니다. 인코딩 프로세스에 관한 자세한 내용은 인코딩된 다중선 알고리즘 형식을 참고하세요.
computeRoutes 메서드 (REST)와 ComputeRoutes 메서드 (gRPC)는 모두 응답의 일부로 다중선으로 표현된 경로를 반환합니다. 이러한 API는 두 가지 유형의 다중선을 반환합니다.
기본 다중선 (기본값): 다중선에 삽입된 교통정보가 없지만 경로를 나타냅니다. 기본 다중선을 반환하는 요청은 경로 기본 요율로 청구됩니다. Routes API의 결제에 대해 자세히 알아보세요.
교통정보 인식 다중선에는 경로 주변의 교통상황 정보가 포함됩니다. 교통정보 조건은 다중선의 지정된 간격에 적용되는 속도 카테고리 (
NORMAL
,SLOW
,TRAFFIC_JAM
)로 표현됩니다. 교통정보 인식 다중선에 대한 요청은 선호하는 경로 요율에 따라 청구됩니다. Routes API의 결제에 대해 자세히 알아보세요.
다중선에 관한 자세한 내용은 다음을 참고하세요.
- 다중선의 품질 구성에 관한 자세한 내용은 품질 대 지연 시간 구성을 참고하세요.
- 인코딩된 다중선 알고리즘 형식에서는 다중선을 인코딩하는 알고리즘을 설명합니다.
대화형 다중선 인코더 유틸리티를 사용하면 UI에 인코딩된 다중선을 만들거나 다중선을 디코딩하여 지도에 표시할 수 있습니다. 예를 들어 이 코드를 사용하여 아래 코드로 만든 다중선을 디코딩할 수 있습니다.
경로, 구간 또는 단계에 대한 기본 다중선 요청
다중선은 다중선 (REST) 또는 다중선 (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_@@_@?" } } ] }
이 요청은 출발지와 목적지만 포함하므로 반환되는 경로에는 하나의 구간만 포함됩니다. 따라서 구간과 경로의 다중선은 동일합니다.
요청에 중간 경유지를 추가하면 반환되는 경로에 두 개의 구간이 포함됩니다.
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" } } ] }
다중선 인코딩 유형 구성
다중선 유형을 제어하려면 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'
교통정보 인식 다중선 요청
위에 나와 있는 예에서는 기본 다중선(교통정보가 없는 다중선)을 반환합니다. 또한 다중선에 경로와 경로의 각 구간에 대한 교통정보가 포함되도록 요청할 수도 있습니다.
교통정보 인식 다중선에는 경로와 함께 교통상황에 대한 정보가 포함됩니다. 교통 상황은 지정된 응답 다중선에 대한 속도 카테고리(NORMAL
, SLOW
, TRAFFIC_JAM
)로 표현됩니다. 간격은 시작 (포함) 및 종료 (제외) 다중선 점의 색인으로 정의됩니다.
예를 들어 다음 응답은 다중선 점 2와 4 사이의 NORMAL
교통정보를 보여줍니다.
{ "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'
교통정보 인식 다중선에 대한 응답 예
응답에서 교통정보 데이터는 다중선에 인코딩되며 RouteLegTravelAdvisory 객체 (각 구간) 및 RouteTravelAdvisory 객체 (경로) 유형의 travelAdvisory
필드에 포함됩니다.
예를 들면 다음과 같습니다.
{ "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
및 해당 속도 카테고리로 설명됩니다.
간격 내에 시작 색인이 없으면 proto3practices에 따라 색인 0에 해당합니다.
startPolylinePointIndex
및 endPolylinePointIndex
값이 항상 연속되는 것은 아닙니다. 예를 들면 다음과 같습니다.
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
이 경우 색인 2에서 색인 4로의 트래픽 조건이 동일했습니다.
Maps SDK로 교통정보 인식 다중선 렌더링
다중선 스트레치와 함께 맞춤 색상, 획, 패턴 등 Google Maps SDK에서 제공하는 다양한 기능을 사용하여 지도에 교통정보 인식 다중선을 표시하는 것이 좋습니다. 다중선 사용에 관한 자세한 내용은 Android용 다중선 지형지물 및 iOS용 다중선 지형지물을 참고하세요.
다중선 렌더링의 예
Maps SDK 사용자는 속도 카테고리와 다중선 렌더링 스키마 간에 맞춤설정된 매핑 로직을 정의할 수 있습니다. 예를 들어 'SRM' 속도는 지도에 굵은 주황색 선으로 표시되는 등 '정상' 속도는 지도에 굵은 파란색 선으로 표시할 수 있습니다.
다음 스니펫은 멜버른에서 퍼스까지의 최단 거리 보간을 파란색의 굵은 다중선으로 추가합니다. 자세한 내용은 모양 맞춤설정(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