Autocomplete (新版) 服務可根據 HTTP 要求傳回地點預測結果和查詢預測結果。在要求中,指定文字搜尋字串和控制搜尋區域的地理邊界。
Autocomplete (新版) 服務可比對完整的字詞和輸入內容的子字串,解析地點名稱、地址和 Plus Codes。因此,應用程式可在使用者輸入內容時傳送查詢,即時提供地點和查詢預測結果。
Autocomplete (新版) API 的回應可包含兩種預測類型:
- 地點預測:根據指定輸入文字字串和搜尋區域顯示的地點,例如商家、地址和搜尋點。根據預設,系統會傳回地點預測結果。
- 查詢預測:與輸入文字字串和搜尋區域相符的查詢字串。根據預設,系統不會傳回查詢預測。使用
includeQueryPredictions
要求參數將查詢預測新增至回應。
舉例來說,您可以使用輸入字串 (包含部分使用者輸入內容) 來呼叫 API,且搜尋區域的範圍僅限加州舊金山。回應隨後會包含與搜尋字串和搜尋區域相符的地點預測清單,例如名為「西西里安披薩店」的餐廳,以及該地點的詳細資料。
傳回的地點預測結果旨在向使用者顯示,協助選取所要的地點。您可以提出 Place Details (新版) 要求,取得任何傳回的地點預測結果的詳細資訊。
回應中也可能包含符合搜尋字串和搜尋區域的查詢預測清單,例如「西西里披薩與義大利麵」。回應中的每項查詢預測都會包含 text
欄位,其中包含建議的文字搜尋字串。將該字串做為文字搜尋 (New) 的輸入內容,執行更詳細的搜尋。
Autocomplete (新) 要求
Autocomplete (新推出) 要求是以下列格式對網址發出 HTTP POST 要求:
https://places.googleapis.com/v1/places:autocomplete
將 JSON 要求內文或標頭中的所有參數,當做 POST 要求的一部分傳遞。例如:
curl -X POST -d '{ "input": "pizza", "locationBias": { "circle": { "center": { "latitude": 37.7937, "longitude": -122.3965 }, "radius": 500.0 } } }' \ -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \ https://places.googleapis.com/v1/places:autocomplete
使用 Autocomplete (新版) 提出要求
Places API 支援現有的 Autocomplete API 和 Query Autocomplete API。如果您熟悉這些 API,Autocomplete 的預先發布版 (新版) 會進行下列變更:- 新的自動完成功能會使用 HTTP POST 要求。將參數傳入要求主體或標頭,做為 HTTP POST 要求的一部分。相較之下,針對現有 API,您可以使用 HTTP GET 要求傳送網址參數。
- 新的自動完成功能同時支援 API 金鑰和 OAuth 權杖做為驗證機制。
- 新版自動完成功能僅支援 JSON 做為回應格式。
下表列出現有 Autocomplete 和 Query Autocomplete API 根據新的 Autocomplete API 已重新命名或修改的參數,以及我們不再支援的參數。
目前的參數 | 新增參數 | 附註 |
---|---|---|
components |
includedRegionCodes |
|
language |
languageCode |
|
location |
locationBias |
|
ipbias |
如果您同時省略 locationBias 和 locationRestriction ,則 API 預設會使用 IP 自訂調整。 |
|
offset |
inputOffset |
|
radius |
locationBias 或 locationRestriction |
|
region |
regionCode |
|
stricbounds |
locationRestriction |
|
sessiontoken |
sessionToken |
|
types |
includedPrimaryTypes |
用量限制
在預先發布版中,每個專案每分鐘最多只能執行 600 次查詢。
預覽版本支援選項
雖然 Google 沒有義務為「服務」的預先發布版、特色或功能提供支援,在這類開發階段仍會依個案考量要求。
- 預先發布版不在 Google 地圖平台服務水準協議的涵蓋範圍內。
- 建議您使用備用機制,特別是在正式環境中使用預先發布版時。以下列舉幾個備用情況的例子:超過配額、非預期的回應代碼和延遲,或與現有自動完成功能相比非預期回應。
您可以透過 Issue Tracker 要求新功能,或建議修改現有功能。請說明您希望新增的特定功能及該功能的重要性,盡可能詳述這項功能的用途及新的應用方式:
如有其他關於地圖項目的問題,請傳送電子郵件至 newplacesapi@google.com。
關於回覆
Autocomplete (新版) 會傳回 JSON 物件做為回應。請在回應中執行下列操作:
suggestions
陣列包含所有預測的地點和查詢,並按照觀察到的關聯性排序。每個地點都以placePrediction
欄位表示,每個查詢則以queryPrediction
欄位表示。placePrediction
欄位包含單一地點預測結果的詳細資訊,包括地點 ID 和文字說明。queryPrediction
欄位包含單一查詢預測的詳細資訊。
完整的 JSON 物件格式如下:
{ "suggestions": [ { "placePrediction": { "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko", "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko", "text": { "text": "Amoeba Music, Haight Street, San Francisco, CA, USA", "matches": [ { "endOffset": 6 }] }, ... }, { "queryPrediction": { "text": { "text": "Amoeba Music", "matches": [ { "endOffset": 6 }] }, ... } ...] }
必要參數
-
輸入
要搜尋的文字字串。指定完整字詞和子字串、地點名稱、地址和 plus code。Autocomplete (新版) 服務會根據這個字串傳回候選相符項目,並會依據觀察到的關聯性排序結果。
自選參數
-
includedPrimaryTypes
地點只能擁有相關聯的表 A 或表格 B 類型的單一主要類型。舉例來說,主要類型可能是
"mexican_restaurant"
或"steak_house"
。根據預設,API 會根據
input
參數傳回所有地點,無論地點的主要類型值為何。您可以傳送includedPrimaryTypes
參數,將結果限制為特定主要類型或主要類型。使用這個參數指定表格 A 或表格 B 的類型值 (最多五個)。地點必須符合其中一個指定的主要類型值,才能包含在回應中。
如有下列情況,要求會遭到拒絕,並顯示
INVALID_REQUEST
錯誤:- 指定的類型超過五個。
- 指定任何無法辨識的類型。
-
includeQueryPredictions
如果設為
true
,則回應中會包含地點和查詢預測結果。預設值為false
,代表回應僅包含地點預測結果。 -
includedRegionCodes
僅包含指定區域清單中的結果,並以最多 15 個 ccTLD (「頂層網域」) 的陣列形式指定為兩位字元值。如省略,回應就不會套用任何限制。舉例來說,您可以將區域範圍限制在德國和法國:
"includedRegionCodes": ["de", "fr"]
如果您同時指定
locationRestriction
和includedRegionCodes
,結果會位於兩個設定交集的十字路口。 -
inputOffset
以零為基礎的 Unicode 字元偏移值,表示
input
中的遊標位置。 遊標位置會影響系統傳回的預測結果。如果留空,預設值為input
。 -
languageCode
傳回結果的偏好語言。如果
input
使用的語言與languageCode
指定的值不同,或是傳回的地點沒有從當地語言翻譯成languageCode
,結果就可能是以混合語言呈現。- 請務必使用 IETF BCP-47 語言代碼指定偏好語言。
-
如未提供
languageCode
,API 會使用Accept-Language
標頭中指定的值。如果兩者皆未指定,則預設值為en
。如果您指定的語言代碼無效,API 就會傳回INVALID_ARGUMENT
錯誤。 - 偏好語言對於 API 選擇傳回的結果組合及傳回順序的影響微乎其微。這也會影響 API 更正拼字錯誤的功能。
-
API 會嘗試提供使用者和當地人口都能讀取的街道地址,同時反映使用者輸入內容。地點預測結果的格式,會因使用者在各項要求中的輸入內容而異。
-
系統會先選擇
input
參數中的比對字詞,並使用與languageCode
參數指定的語言偏好設定一致 (如有) 的名稱,其他名稱則使用最符合使用者輸入內容的名稱。 -
街道地址的格式是採用當地語言,並盡可能以使用者能讀取的指令碼編寫,而且只有在選出相符字詞來與
input
參數中的字詞相符時,使用者才能理解。 -
選好比對字詞後,即可以偏好語言傳回其他地址,與
input
參數中的字詞相符。如果名稱未提供您偏好的語言,API 會使用最接近的值。
-
系統會先選擇
locationBias 或 locationRestriction
您可以指定
locationBias
或locationRestriction
來定義搜尋區域,但不能同時指定兩者。您可以將locationRestriction
視為指定結果所在的區域,而locationBias
是用於指定結果的鄰近區域,但可以不在該區域。locationBias
指定要搜尋的區域。這個位置可以做為自訂調整,這表示系統會傳回指定位置周圍的結果,包括指定區域以外的結果。
locationRestriction
指定要搜尋的區域。系統不會傳回指定區域以外的結果。
請將
locationBias
或locationRestriction
區域指定為矩形可視區域或圓形。圓形是由中心點和半徑 (以公尺為單位) 所定義。半徑必須介於 0.0 到 50000.0 (含) 之間。預設值為 0.0。如果是
locationRestriction
,您必須將半徑設為大於 0.0 的值。否則要求不會傳回任何結果。例如:
"locationBias": { "circle": { "center": { "latitude": 37.7937, "longitude": -122.3965 }, "radius": 500.0 } }
矩形是經緯度可視區域,以
low
對角的對角和高點表示。系統會將可視區域視為封閉區域,也就是涵蓋區域的邊界。緯度邊界必須介於 -90 到 90 度 (含) 之間,且經度邊界必須介於 -180 到 180 度 (含) 之間:- 如果
low
=high
,可視區域是由該單一點組成。 - 如果
low.longitude
>high.longitude
,經度範圍會反轉 (可視區域與 180 度經度線相交)。 - 如果
low.longitude
= -180 度且high.longitude
= 180 度,可視區域會包含所有經度。 - 如果
low.longitude
= 180 度且high.longitude
= -180 度,則經度範圍為空白。
必須填入
low
和high
,表示的方塊不可空白。空白的可視區域會導致錯誤。舉例來說,以下可視區域涵蓋紐約市:
"locationBias": { "rectangle": { "low": { "latitude": 40.477398, "longitude": -74.259087 }, "high": { "latitude": 40.91618, "longitude": -73.70018 } } }
- 如果
-
發跡地
計算距離目的地直線距離的起點 (以
distanceMeters
傳回)。如果省略這個值,系統就不會傳回直線距離。必須以經緯度座標指定:"origin": { "latitude": 40.477398, "longitude": -74.259087 }
-
regionCode
用於設定回應格式的區碼,指定為 ccTLD (「頂層網域」) 的兩位字元值大多數 ccTLD 代碼與 ISO 3166-1 代碼相同,只有少數例外。舉例來說,英國的 ccTLD 是「uk」(.co.uk),而 ISO 3166-1 代碼卻是「gb」(正式的國名是「大不列顛暨北愛爾蘭聯合王國」)。
如果您指定的區碼無效,API 會傳回
INVALID_ARGUMENT
錯誤。根據適用法律,這個參數可能會影響結果。 -
sessionToken
工作階段符記是使用者產生的字串,可將自動完成 (新版) 呼叫視為「工作階段」。Autocomplete (新版) 會使用工作階段符記,將使用者自動完成搜尋的查詢和選取階段歸入不同的工作階段,以便計費。詳情請參閱「工作階段符記」。
自動完成 (新) 範例
使用 locationRestriction 和 locationBias
根據預設,API 會使用 IP 自訂調整控管搜尋區域。透過 IP 自訂調整,API 會使用裝置的 IP 位址來調整結果。您可以選用 locationRestriction
或 locationBias
指定要搜尋的區域,但不能同時使用兩者。
locationRestriction
會指定要搜尋的區域。系統不會傳回指定區域以外的結果。在以下範例中,您使用 locationRestriction
將要求限制為以舊金山為中心半徑範圍 5000 公尺的圓形:
curl -X POST -d '{ "input": "Amoeba", "locationRestriction": { "circle": { "center": { "latitude": 37.7749, "longitude": -122.4194 }, "radius": 5000.0 } } }' \ -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \ https://places.googleapis.com/v1/places:autocomplete
指定區域內的所有結果都會包含在 suggestions
陣列中:
{ "suggestions": [ { "placePrediction": { "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko", "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko", "text": { "text": "Amoeba Music, Haight Street, San Francisco, CA, USA", "matches": [ { "endOffset": 6 } ] }, "structuredFormat": { "mainText": { "text": "Amoeba Music", "matches": [ { "endOffset": 6 } ] }, "secondaryText": { "text": "Haight Street, San Francisco, CA, USA" } }, "types": [ "home_goods_store", "establishment", "store", "point_of_interest", "electronics_store" ] } } ] }
如果使用 locationBias
,位置就會視為偏誤,這表示可以傳回指定位置周圍的結果,包括指定區域以外的結果。在下一個範例中,您將要求變更為使用 locationBias
:
curl -X POST -d '{ "input": "Amoeba", "locationBias": { "circle": { "center": { "latitude": 37.7749, "longitude": -122.4194 }, "radius": 5000.0 } } }' \ -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \ https://places.googleapis.com/v1/places:autocomplete
結果現在包含更多項目,包括半徑 5000 公尺以外的結果:
{ "suggestions": [ { "placePrediction": { "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko", "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko", "text": { "text": "Amoeba Music, Haight Street, San Francisco, CA, USA", "matches": [ { "endOffset": 6 } ] }, "structuredFormat": { "mainText": { "text": "Amoeba Music", "matches": [ { "endOffset": 6 } ] }, "secondaryText": { "text": "Haight Street, San Francisco, CA, USA" } }, "types": [ "electronics_store", "point_of_interest", "store", "establishment", "home_goods_store" ] } }, { "placePrediction": { "place": "places/ChIJr7uwwy58hYARBY-e7-QVwqw", "placeId": "ChIJr7uwwy58hYARBY-e7-QVwqw", "text": { "text": "Amoeba Music, Telegraph Avenue, Berkeley, CA, USA", "matches": [ { "endOffset": 6 } ] }, "structuredFormat": { "mainText": { "text": "Amoeba Music", "matches": [ { "endOffset": 6 } ] }, "secondaryText": { "text": "Telegraph Avenue, Berkeley, CA, USA" } }, "types": [ "electronics_store", "point_of_interest", "establishment", "home_goods_store", "store" ] } }, ... ] }
使用 includePrimaryType
使用 includedPrimaryTypes
參數,將要求中的結果限制為特定類型的結果 (如表 A 和表 B 所示)。您可以指定最多五個值的陣列。如果省略,系統會傳回所有類型。
在以下範例中,您指定了「Soccer」的 input
字串,並使用 includedPrimaryTypes
參數將結果限制為 "sporting_goods_store"
類型的建築:
curl -X POST -d '{ "input": "Soccer", "includedPrimaryTypes": ["sporting_goods_store"], "locationBias": { "circle": { "center": { "latitude": 37.7749, "longitude": -122.4194 }, "radius": 500.0 } } }' \ -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \ https://places.googleapis.com/v1/places:autocomplete
如果省略 includedPrimaryTypes
參數,結果可能會包含您不想要的建築物類型,例如 "athletic_field"
。
要求預測查詢字串
根據預設,系統不會傳回查詢預測。使用 includeQueryPredictions
要求參數將查詢預測新增至回應。例如:
curl -X POST -d '{ "input": "Amoeba", "includeQueryPredictions": true, "locationBias": { "circle": { "center": { "latitude": 37.7749, "longitude": -122.4194 }, "radius": 5000.0 } } }' \ -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \ https://places.googleapis.com/v1/places:autocomplete
suggestions
陣列現在包含地點預測結果和查詢預測,如上方「關於回應」一節所示。每項查詢預測都會包含 text
欄位,其中包含建議的文字搜尋字串。您可以提出 Text Search (New) 要求,取得任何傳回查詢預測的詳細資訊。
使用來源
在這個範例中,請在要求中加入經緯度座標origin
。如果您納入 origin
,API 會在回應中加入 distanceMeters
欄位,其中包含從 origin
到目的地的直線距離。以下範例可將起點設為舊金山的中心:
curl -X POST -d '{ "input": "Amoeba", "origin": { "latitude": 37.7749, "longitude": -122.4194 }, "locationRestriction": { "circle": { "center": { "latitude": 37.7749, "longitude": -122.4194 }, "radius": 5000.0 } } }' \ -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \ https://places.googleapis.com/v1/places:autocomplete
回應現在包含 distanceMeters
:
{ "suggestions": [ { "placePrediction": { "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko", "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko", "text": { "text": "Amoeba Music, Haight Street, San Francisco, CA, USA", "matches": [ { "endOffset": 6 } ] }, "structuredFormat": { "mainText": { "text": "Amoeba Music", "matches": [ { "endOffset": 6 } ] }, "secondaryText": { "text": "Haight Street, San Francisco, CA, USA" } }, "types": [ "home_goods_store", "establishment", "point_of_interest", "store", "electronics_store" ], "distanceMeters": 3012 } } ] }