邊打邊回
Input 帶的是使用者當下打到一半的字,不是完整的地名。 每多一個字就少一批預測,直到剩下他要的那一個。
這意味著呼叫頻率很高。實務上會在輸入框加入防抖(大約 150–300 毫秒), 並在使用者按下 Enter 或選定之後停止呼叫;同一次搜尋的所有請求帶同一個 SessionToken,計費才會以一次搜尋計算。
回應直接對得上畫面
預測不是只回一個字串。命中的位置、地點名稱與街道地址是分開回的,所以標粗、排兩行這些事不必自己切字串。
畫出來的樣子
屯京拉麵 中山店台北市中山區中山北路一段141號
輸入「京」
回應提供的資訊
matched_substrings[{ offset: 1, length: 1 }]命中的是第 2 個字,不是開頭 —— 所以要回位置,前端才知道該把哪一段標粗。structured_formatting.main_text屯京拉麵 中山店地點名稱,單獨一個欄位。structured_formatting.secondary_text台北市中山區中山北路一段141號街道地址,跟名稱分開回 —— 兩行排版不必自己切字串。place_idQP9MBC使用者選了之後,用它去 Place Details 取完整資料。
選定之後接 Place Details
Autocomplete 的回應較簡潔,因為它要在每一次按鍵之間回完。電話、營業時間、照片與網站要等使用者真的選了,再拿 place_id 打一次 Place Details。
SessionToken
1
Place/Autocomplete
邊打邊回
- 屯京拉麵 中山店
- place_id: QP9MBC
每按一鍵打一次,回得很簡潔
2
使用者點選
選定一筆
- 拿著 place_id
不必把使用者打的字再送一次
3
Place/Details
取完整資料
- 02-25625066
- 台北市中山區中山北路一段141號
- opening_hours ・ website ・ photos
整段流程只打這一次
限定範圍與類型
Location 讓該座標附近的地點優先出現,Radius 再給一個範圍。Types 可以用 | 串接,最多五種。
Types=book_store|cafe|restaurant:比 TextSearch 的Type寬鬆,那邊一次只能指定一種。Location與Radius是優先而不是篩選,範圍外的地點仍可能出現。要硬性限制得自己拿回傳座標再過濾。Language目前只支援zh-TW。
完整類型清單見 Type List。
跟 TextSearch 的差別
兩支都是拿文字換地點,差別在使用者處於哪個時刻:還在打用 Autocomplete,已送出用 TextSearch。
- Autocomplete:每一鍵打一次,回的是預測;要完整資料得再接 Place Details。
- TextSearch:送出後打一次,一次最多 20 筆,每一筆就帶座標、地址與
kw_extra,可以直接畫在地圖上。 - 類型:Autocomplete 的
Types最多五種, TextSearch 的Type只能一種。
一個搜尋框通常兩支都要:打字時 Autocomplete, 使用者不選建議直接送出時才是 Places。
串接 API
REST 端點是 GET /maps/api/Place/Autocomplete/json。Input 與 Key 是必填。
curl -sS -G "https://kwmap.localking.com.tw/maps/api/Place/Autocomplete/json" \
--data-urlencode "Input=京站" \
--data-urlencode "Location=25.0478,121.5170" \
--data-urlencode "Types=shopping_mall|parking" \
--data-urlencode "SessionToken=<uuid-v4>" \
--data-urlencode "Key=<your-key>" \
-H "Ocp-Apim-Subscription-Key: <subscription-key>"完整參數與回應結構見 API 文件。
