경로 다중선 요청

computeRoutes 메서드 (REST) 및 ComputeRoutes 메서드 (gRPC)는 둘 다 다중선으로 표시된 경로를 있습니다. 이러한 API는 두 가지 유형의 다중선을 반환합니다.

  • 기본 다중선 (기본값): 교통체증이 없는 경로를 나타냅니다. 정보를 표시합니다. 기본 폴리라인을 반환하는 요청 Routes Basic 요금으로 청구됩니다. 자세히 알아보기: 결제에 대해 자세히 알아보세요.

  • 교통정보 인식 다중선: 교통상황에 대한 정보를 포함합니다. 살펴봤습니다 교통상황은 속도 단위로 표현됩니다. 지정된 간격으로 적용할 카테고리 (NORMAL, SLOW, TRAFFIC_JAM) 표시됩니다. 교통 인식 다중선에 대한 요청은 경로 기본 요금입니다. 결제 자세히 알아보기 Routes API로 이동합니다. 자세한 내용은 다중선 품질 구성

다중선에 대한 자세한 내용은 다음을 참조하세요.

경로, 구간 또는 계단의 기본 다중선 요청

다중선은 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_@@_@?"
      }
    }
  ]
}

이 요청에는 출발지와 목적지만 포함되므로 반환된 경로에는 구간이 하나만 포함됩니다. 따라서 구간과 경로는 동일합니다.

요청에 중간 경유지를 추가하면 경로에는 구간이 두 개 있습니다.

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_LINESTRINGGeoJSON 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를 사용하면 다중선이 작은 최대 25%의 포인트 수를 포함하며 요청 지연 시간이 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로 설정합니다. 트래픽 계산에 사용됩니다.

  • travelModeDRIVE 또는 TWO_WHEELER로 설정합니다. 기타 오류가 반환됩니다.

  • TRAFFIC_AWARE 또는 TRAFFIC_AWARE_OPTIMAL 라우팅을 지정합니다. 환경설정을 지정할 수 있습니다. 자세한 내용은 품질 구성 vs. 품질 구성 지연 시간

  • 응답 속성을 반환하도록 지정하는 응답 필드 마스크를 설정합니다.

    • 경로 수준에서 다음과 같이 응답에 모든 여행 정보를 반환합니다. 응답 필드 마스크에 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"
          }
        ] 
      }
    }
  ]
}

RouteTravelAdvisoryRouteLegTravelAdvisory 모두 배열 필드를 포함합니다. 교통량 정보가 포함된 speedReadingIntervals라는 이름의 클래스입니다. 각 배열의 객체는 SpeedReadingInterval (REST) 또는 SpeedReadingInterval (gRPC) 객체를 사용합니다.

SpeedReadingInterval 객체에는 경로 간격에 대한 속도 판독이 포함되어 있습니다. (예: NORMAL, SLOW, TRAFFIC_JAM) 객체의 전체 배열은 경로의 전체 폴리라인을 겹치지 않게 합니다. 지정된 간격은 이전 간격의 끝점과 동일합니다.

모든 간격은 startPolylinePointIndex로 설명됩니다. endPolylinePointIndex, 해당하는 속도 카테고리 간격 내에 시작 색인이 없으면 색인 0에 해당합니다. proto3 권장사항

startPolylinePointIndexendPolylinePointIndex 값은 항상 연속입니다. 예를 들면 다음과 같습니다.

{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}

이 경우 교통 상황은 색인 2와 색인 4가 동일했습니다.

Maps SDK를 사용하여 교통정보 인식 다중선 렌더링

다양한 맞춤 색상, 획 및 기능 등 Google Maps SDK에서 제공하는 몇 가지 패턴을 보여 줍니다. 다중선 사용에 대한 자세한 내용은 보기 Android용 다중선 기능iOS용 다중선 기능에 대해 자세히 알아보세요.

다중선 렌더링 예

Maps SDK 사용자는 맞춤설정된 매핑을 정의할 수 있습니다. 다중선 렌더링 스키마 사이의 논리를 나타냅니다. 예를 들어 'NORMAL' 또는 'NORMAL'을 굵은 파란색 선과 같은 속도로 지도가 'SLOW'인 동안 표시 예를 들어 속도는 굵은 주황색 선으로 표시될 수 있습니다.

다음 스니펫은 멜버른에서 퍼스까지 왔습니다. 자세한 내용은 모양 맞춤설정 (Android의 경우) 및 다중선 맞춤설정 (iOS의 경우)

Android

자바

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