使用 Azure 地圖服務搜尋服務搜尋位置
搜尋服務是一組 RESTful API,目的在於協助開發人員依名稱、類別和其他地理資訊搜尋地址、地點和公司清單。 除了支援傳統地理編碼之外,服務也可根據經緯度反向搜尋地理編碼地址和交叉路口。 搜尋傳回的緯度與經度值可用來做為其他 Azure 地圖服務的參數,例如路線和氣象。
本文會示範如何:
- 使用搜尋地址要求地址 (地理編碼地址位置) 的緯度和經度座標。
- 使用模糊搜尋搜尋地址或景點 (POI)。
- 使用反向地址搜尋,將座標位置轉譯為街道地址。
- 使用搜尋位址反向交叉街道,將座標位置轉譯為人類可理解的交叉街道,在追蹤從裝置或資產接收 GPS 摘要的應用程式時,最常需要,而且想要知道座標的位置。
必要條件
重要
在本文中的 URL 範例中,您必須將 {Your-Azure-Maps-Subscription-key}
取代為您的 Azure 地圖服務訂用帳戶金鑰。
本文使用 bruno 應用程式,但您可以選擇不同的 API 開發環境。
要求地址 (地理編碼) 的緯度和經度
本節範例使用 Azure 地圖服務取得搜尋地址,將地址轉換成緯度和經度座標。 此流程也稱為地理編碼。 除了傳回座標以外,回應也會傳回詳細的地址屬性,例如街道、郵遞區號、自治區和國家/區域資訊。
提示
如果您有一組要進行地理編碼的地址,可以使用搜尋後地址批次,在單一要求中傳送批次查詢。
開啟 bruno 應用程式,選取 [ 新增要求 ] 以建立要求。 在 [新增要求] 視窗中,將 [類型] 設定為 [HTTP]。 輸入要求的 [ 名稱 ]。
在 [URL] 下拉式清單中選取 [GET HTTP 方法],然後輸入下列 URL:
https://atlas.microsoft.com/search/address/json?&subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&language=en-US&query=400 Broad St, Seattle, WA 98109
選取建立按鈕。
選取 [執行] 按鈕。
此要求會搜尋特定位址:
400 Broad St, Seattle, WA 98109
。 接下來,搜尋具有多個可能位置的位址。在 [ Params] 區段中,將
query
機碼變更為400 Broad, Seattle
,然後選取 [執行] 按鈕。接下來,請嘗試將
query
機碼設定為400 Broa
,然後選取 [執行] 按鈕。回應包含來自多個國家/地區的結果。 若要 將結果對應 至使用者的相關區域,請一律將盡可能多的位置詳細數據新增至要求。
模糊搜尋
模糊搜尋支援標準單行和自由格式搜尋。 若您不知道搜尋查詢的使用者輸入型別,建議您使用 Azure 地圖服務的搜尋模糊 API。 查詢輸入可以是完整或部分地址, 也可以是景點 (POI) 權杖,例如 POI 名稱、POI 類別或品牌名稱。 此外,若要改善搜尋結果的相關性,使用座標位置和半徑或藉由定義周框方塊,加以限制查詢結果。
提示
大部分的搜尋查詢預設為 maxFuzzyLevel=1
以改善效能並減少不尋常的結果。 使用 maxFuzzyLevel
或 minFuzzyLevel
參數來調整模糊等級。 如需 maxFuzzyLevel
和所有選用參數完整清單的詳細資訊,請參閱模糊搜尋 URI 參數。
使用模糊搜尋來搜尋地址
本節中的範例會使用 Fuzzy Search
來搜尋整個世界的披薩,然後搜尋特定國家/地區的範圍。 最後,這會示範如何使用座標位置和半徑設定特定區域的搜尋範圍,並限制傳回的結果數目。
重要
若要為使用者顯示對相關區域的地理偏好結果,請一律盡可能新增最多位置詳細資料。 如需詳細資訊,請參閱最佳搜尋做法。
開啟 bruno 應用程式,選取 [ 新增要求 ] 以建立要求。 在 [新增要求] 視窗中,將 [類型] 設定為 [HTTP]。 輸入要求的 [ 名稱 ]。
在 [URL] 下拉式清單中選取 [GET HTTP 方法],然後輸入下列 URL:
https://atlas.microsoft.com/search/fuzzy/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=pizza
注意
URL 路徑中的 Json 屬性會判斷回應格式。 為了方便使用和可讀性,本文使用 json。 若要尋找其他支援的回應格式,請參閱 URI 參數參考文件中的
format
參數定義。選取 [執行] 按鈕,然後檢閱回應本文。
「披薩」的模棱兩可查詢字串傳回 10 個興趣 點 (POI), 會導致 「披薩」和「餐廳」類別。 每個結果皆包含街道地址、緯度和經度值、檢視連接埠和位置進入點等詳細資料。 現在此查詢中的結果有所不同,且未繫結至任何參考位置。
在下一個步驟中,您會使用
countrySet
參數,僅指定您應用程式需要涵蓋的國家/區域。 如需支持國家/地區的完整清單,請參閱 Azure 地圖服務 地理編碼涵蓋範圍。預設行為會搜尋整個世界,因此可能傳回不必要的結果。 接下來,只會搜尋北美洲的披薩餐廳。 將
countrySet
索引鍵新增至 [Params] 區段,並將其值設定為US
。 把countrySet
索引鍵設定為US
會將結果繫結至北美洲。結果現在會依國家/地區程式碼繫結,此查詢會傳回美國境內的披薩餐廳。
若要取得目標更精確的搜尋,則可透過經緯座標組的範圍。 下列範例使用西雅圖太空針頭的經緯度座標。 由於我們只想傳回半徑 400 公尺內的結果,因此要新增
radius
參數。 此外,我們會新增limit
參數,將結果限制為五個最接近的披薩餐廳地點。在 [Params] 區段中,新增下列索引鍵/值組:
機碼 值 lat 47.620525 lon -122.349274 半徑 400 limit 5 選取執行。 回應包括西雅圖太空針塔附近披薩餐廳的結果。
使用反向地址搜尋來搜尋街道地址
取得搜尋地址反向會將座標轉譯成人類可讀懂的街道地址。 此 API 通常用於取用 GPS 摘要,且想探索特定座標點地址的應用程式。
提示
如果您有一組要進行反向地理編碼的座標位置,可以使用搜尋後地址反向批次,在單一要求呼叫中傳送批次查詢。
此範例會示範用一些可用的選用參數進行反向搜尋。 如需選用參數的完整清單,請參閱反向搜尋參數。
開啟 bruno 應用程式,選取 [ 新增要求 ] 以建立要求。 在 [新增要求] 視窗中,將 [類型] 設定為 [HTTP]。 輸入要求的 [ 名稱 ]。
在 [URL] 下拉式清單中選取 [GET HTTP 方法],然後輸入下列 URL:
https://atlas.microsoft.com/search/address/reverse/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=47.591180,-122.332700
選取 [執行] 按鈕,然後檢閱回應本文。 您應該會看到一個查詢結果。 回應會包含關於薩菲柯球場的重要地址資訊。
接下來,要將下列索引鍵/值組新增至 [Params] 區段:
機碼 值 傳回 數值 1 回應可以包含街道(左/右)的一側,以及數位的位移位置。 returnSpeedLimit true 傳回地址的速度限制。 returnRoadUse true 傳回地址的道路使用型別。 如需所有可能的道路使用型別,請參閱道路使用型別。 returnMatchType true 傳回符合型別。 如需所有可能的值,請參閱反向地址搜尋結果。 選取 [執行] 按鈕,然後檢閱回應本文。
接下來,新增
entityType
索引鍵,並將其值設定為Municipality
。entityType
索引鍵會覆寫上一個步驟中的returnMatchType
索引鍵。 由於您要求自治區相關資訊,因此也需移除returnSpeedLimit
和returnRoadUse
。 如需所有可能的實體類型,請參閱實體類型。選取 [執行] 按鈕。 比較結果與步驟 5 傳回的結果。 由於目前要求的實體類型是
municipality
,因此回應不包含街道地址資訊。 此外,傳回的geometryId
可透過 Azure 地圖服務取得搜尋多邊形 API,用來要求界限多邊形。
提示
如需這些參數和其他參數的詳細資訊,請參閱反向搜尋參數。
使用反向地址交叉路口搜尋來搜尋交叉路口
此範例示範如何根據地址座標搜尋交叉路口。
開啟 bruno 應用程式,選取 [ 新增要求 ] 以建立要求。 在 [新增要求] 視窗中,將 [類型] 設定為 [HTTP]。 輸入要求的 [ 名稱 ]。
在 [URL] 下拉式清單中選取 [GET HTTP 方法],然後輸入下列 URL:
https://atlas.microsoft.com/search/address/reverse/crossstreet/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=47.591180,-122.332700
選取 [執行] 按鈕,然後檢閱回應本文。 發現回應包含
South Atlantic Street
的crossStreet
值。