在透過車輛導航前往地點時,創造最佳使用者體驗的提示

本文是針對舊文進行更新,舊文使用的是舊版 GMP API。這份內容已更新至 2023-24 推出的 Places API 新版,以及 2023 年推出的 Routes API。

一般來說,當使用者開車前往搜尋點 (POI) 時,他們實際上需要導航至附近位置,例如停車場或存取點。想像一下,司機需要前往機場或購物中心。前往機場時,司機會嘗試前往航廈或下車地點,而不是機場建築群的中心。同樣地,如果使用者有車,購物中心旁的停車場可能會是更好的選擇。在這種情況下,開發應用程式或服務來引導駕駛人時,請先找出他們要前往的地點,然後提供駕駛人該地附近的替代目的地。您可以透過這種方法,運用 Google 地圖平台提供的位置資料,以小而精明的開發作業來為客戶提供更優質的服務,並展現您重視客戶的時間。

系統圖

我們將說明如何依序或結合使用新的 Places APIRoutes API,找出最適合在目的地附近停車的位置。這個解決方案旨在消除不確定性和多次互動,以便在行駛至最終目的地時,找到停車位。請參閱以下兩個範例,瞭解如何詳細實作這些案例。

範例 1:沒有停車場的觀光景點

請選擇與路邊無直接連結的地點,以便分別擷取路線。目的地是巴黎的聖母院,而起點則是 Gare de l'Est 火車站 (48.87697775149635, 2.3592247806755564)。

Gare l'Est

司機會從車站出發,大約在離開車站後 16 分鐘抵達巴黎聖母院。聖母院是位於島上的著名觀光景點,可透過橋樑抵達,但附近有部分單行道,且沒有大型停車場,因此這應該是一項有趣的挑戰。

  1. Places API 要求

這個 Places API 要求範例使用文字搜尋功能找出 Notre Dame。詳情請參閱開發人員說明文件。這些範例中的「$APIKEY」是您在 Google Cloud 控制台中啟用的 Google 地圖平台 Places 和 Routes API 的 API 金鑰。如需更詳細的說明,請參閱「開始使用 Google 地圖平台」說明文件。

新的 Places API 要求採用新格式。回應欄位不再固定,開發人員必須在標頭中定義欄位遮罩。如要瞭解如何使用欄位遮罩,請參閱說明文件

curl -X POST --data @notre_dame.json \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: places.id,places.displayName,places.formattedAddress,places.location' \
'https://places.googleapis.com/v1/places:searchText'

使用「notre_date.json」內容做為搜尋參數:

{
   "textQuery": "Notre Dame, Paris",
   "languageCode": "en"
}

上述要求的回應會提供下列緯度和經度座標:

{
  "places": [
    {
      "id": "ChIJATr1n-Fx5kcRjQb6q6cdQDY",
      "formattedAddress": "6 Parvis Notre-Dame - Pl. Jean-Paul II, 75004 Paris, France",
      "location": {
        "latitude": 48.852968200000007,
        "longitude": 2.3499021
      },
      "displayName": {
        "text": "Cathédrale Notre-Dame de Paris",
        "languageCode": "en"
      }
    }
  ]
}

如你所見,座標確實指向聖母院。

聖母院入口相片 聖母大學區域地圖

開發人員或服務供應商不妨自動提示駕駛人「是否要尋找諾特丹姆附近的停車位?」,或者如果駕駛人使用的是電動車,不妨搜尋充電站。使用者體驗會因裝置和螢幕而異,但在這種情況下,不妨考慮使用短時間後就會消失的對話方塊文字。如要尋找 Notre Dame 附近的停車場,請使用 Places API 進行附近搜尋,並指定類型為「parking」和「electric_vehicle_charging_station」,半徑為 500 公尺。以下範例會將結果偏向距離 Notre Dame 500 公尺內的停車區。

curl -X POST -d '{
  "includedTypes": ["parking", "electric_vehicle_charging_station"],
  "maxResultCount": 10,
  "rankPreference": "DISTANCE",
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 48.852968200000007,
        "longitude": 2.3499021},
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H "X-Goog-FieldMask: places.displayName,places.location" \
https://places.googleapis.com/v1/places:searchNearby

第一個結果是位於 48.854981、2.350629 的充電站,不過在您執行這個範例時,結果可能會有所不同。在下一個部分進行 Routes API 要求時,請使用這個位置。

  1. **Routes API 要求 **

如要找出從車站到靠近 Notre Dame 的充電站的路線,您需要提出 Routes API 要求。只要設定來源和目的地參數即可。如需其他選項,請參閱開發人員說明文件

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 48.87697775149635,
        "longitude": 2.3592247806755564
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
       "latitude": 48.854981,
        "longitude": 2.350629
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "departureTime": "2024-05-16T15:01:23.045123456Z",
  "computeAlternativeRoutes": false,
  "routeModifiers": {
    "avoidTolls": false,
    "avoidHighways": false,
    "avoidFerries": false
  },
  "languageCode": "en-US",
  "units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Routes API 回應通常包含多個路線建議。如要在回應中加入路線資料,請在欄位遮罩中定義「routes.legs」。每條路線都包含多個「路段」,而每個路段都包含多個「步驟」,顯示行程距離和座標。如要找出車輛可到達的最終座標,請使用所選路線最後一站的最後一個步驟的「endLocation」欄位。"latitude": 48.854937299999996, "longitude": 2.3505841999999997

這個地點可能不是第一個選擇,但查看地圖或 Google 街景時,你會發現這個地點距離巴黎聖母院只有 6 到 7 分鐘的步行路程,非常近。

前往聖母大學的路線

從充電站停車位到巴黎聖母院的步行路線

範例 1 的摘要

如您所見,尋找汽車停車區只需要幾個 API 呼叫,並向駕駛人顯示建議。這樣一來,使用者就不必在單行道上兜圈子,也不必在人潮擁擠的觀光景點尋找停車位,因此可節省時間。以下是我們執行的 API 要求摘要:

  • 使用 Places API 文字搜尋要求找出 Notre Dame 座標
  • 使用 Places API 附近搜尋功能,尋找位於這些座標 500 公尺範圍內的電動車充電站停車區
  • 傳送 Routes API 要求,以便找出前往充電站的路線

範例 2:引導使用者前往大型機場的航廈

希斯洛機場地圖

再舉另一個例子,假設司機要前往的區域範圍廣大,且有多個地點、興趣點或潛在下車點。駕駛人將從英國溫布利球場 (51.557263604707224, -0.2794575145680608) 出發,並嘗試前往倫敦希斯洛機場第 5 航廈

新版 Places API 自動完成功能的優點在於,您可以將主要類型定義為搜尋條件,並搭配 API 預測的子地點做為潛在的搜尋結果。在這種情況下,搜尋機場也會傳回航站。如需完整的納入或排除類型清單,請參閱說明文件

curl -X POST -d '{
  "input": "Heathrow",
  "includedPrimaryTypes": ["airport"]
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
https://places.googleapis.com/v1/places:autocomplete

上述查詢會列出車站清單,以及這些車站的個別下車點。在結果清單中,我們可以找到「倫敦希斯洛機場第 5 航廈」及其地點 ID:

"place_id" : "ChIJo21hnPxxdkgRksRL0KQRWII",

我們可以使用「placeId」參數,告訴 Routes API 我們要前往某個地點,而非某個任意座標。

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 51.557263604707224,
        "longitude": -0.2794575145680608
      }
    }
  },
  "destination":{
    "placeId": "ChIJo21hnPxxdkgRksRL0KQRWII"
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "departureTime": "2024-05-16T15:01:23.045123456Z",
  "computeAlternativeRoutes": false,
  "languageCode": "en-US",
  "units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

同樣地,如同前一個範例,只要讀取 JSON 回應中的所有步驟,就能找到行程的最後部分,以及終點位置的經緯度座標 (51.4714348, "longitude": -0.48967890000000003)。

5 號航站街景服務

範例 2 的摘要

如同前述範例,開發人員只需付出很少的努力,就能為駕駛人提供更完善的導航服務,而且駕駛人可節省的時間也能量化。我們提出了以下要求:

  • 使用 Places API 自動完成 (新版) 要求找出希斯洛機場 5 號航廈
  • Routes API 要求,用於取得從 Wembley 到 5 號航廈的路線

這個範例只是簡單介紹新版 Places API 的功能。請查看部分新地點類型,例如機場跑道和國際機場。

結語

如您所見,為搭乘汽車的客戶提供優質服務所需的開發工作量相當少,您可以藉此展現您如何考量客戶的需求。

在開發方面,您可以使用許多可用的程式庫和工具,協助您為客戶建構服務。請參閱我們公開提供的 Google 地圖平台 GitHub 存放區

後續行動

開始使用 GMP:https://developers.google.com/maps/get-started

建議的延伸閱讀

Places API 自動完成功能 (新版) 說明文件:https://developers.google.com/maps/documentation/places/web-service/place-autocomplete

Routes API 說明文件:https://developers.google.com/maps/documentation/routes

貢獻者

主要作者:Mikko Toivanen | Google 地圖平台解決方案工程師