本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 Amazon Location 搜尋新增至您的應用程式
應用程式的最後一步是在地圖上新增搜尋。在此情況下,您將新增反向地理編碼搜尋,在某個位置找到項目。
注意
Amazon Location Service 也提供依名稱或地址搜尋的功能,以尋找地圖上的位置。
將搜尋功能新增至您的應用程式
-
開啟您在上一節中建立
main.js
的檔案。 -
修改
main
函數,如圖所示。您需要進行的變更會顯示在 中green
。async function main() {
// Create an authentication helper instance using an API key const authHelper = await amazonLocationAuthHelper.withAPIKey(apiKey);
// Initialize map and Amazon Location SDK client: const map = await initializeMap();const client = new amazonLocationClient.LocationClient({ region, ...authHelper.getLocationClientConfig(), // Provides configuration required to make requests to Amazon Location }); // On mouse click, display marker and get results: map.on("click", async function (e) { // Set up parameters for search call let params = { IndexName: placesName, Position: [e.lngLat.lng, e.lngLat.lat], Language: "en", MaxResults: "5", }; // Set up command to search for results around clicked point const searchCommand = new amazonLocationClient.SearchPlaceIndexForPositionCommand(params); try { // Make request to search for results around clicked point const data = await client.send(searchCommand); // Write JSON response data to HTML document.querySelector("#response").textContent = JSON.stringify(data, undefined, 2); // Display place label in an alert box alert(data.Results[0].Place.Label); } catch (error) { // Write JSON response error to HTML document.querySelector("#response").textContent = JSON.stringify(error, undefined, 2); // Display error in an alert box alert("There was an error searching."); } });
}此程式碼從設定 Amazon Location Authentication 協助程式使用您的API金鑰開始。
const authHelper = await amazonLocationAuthHelper.withAPIKey(apiKey);
然後,它會使用該身分驗證協助程式,以及您用來建立新的 Amazon Location 用戶端的區域。
const client = new amazonLocationClient.LocationClient({ region, ...authHelper.getLocationClientConfig(), });
接下來,程式碼會回應在地圖控制項上選擇位置的使用者。方法是擷取 MapLibre 提供的事件
click
。map.on("click", async function(e) { ... });
事件 MapLibre
click
提供參數,其中包含使用者選擇的緯度和經度 (e.lngLat
)。在click
事件中,程式碼會建立searchPlaceIndexForPositionCommand
以尋找指定緯度和經度的實體。// Set up parameters for search call let params = { IndexName: placesName, Position: [e.lngLat.lng, e.lngLat.lat], Language: "en", MaxResults: "5" }; // Set up command to search for results around clicked point const searchCommand = new amazonLocationClient.SearchPlaceIndexForPositionCommand(params); try { // Make request to search for results around clicked point const data = await client.send(searchCommand); ... });
在這裡,
IndexName
是您先前建立的位置索引資源名稱、Position
是要搜尋的緯度和經度、Language
是結果的偏好語言,並MaxResults
指示 Amazon Location 最多只傳回五個結果。剩餘的程式碼會檢查是否有錯誤,然後在名為 的
<pre>
元素中顯示搜尋結果response
,並在警示方塊中顯示最上方結果。 -
(選用) 如果您現在在瀏覽器中儲存和開啟
quickstart.html
檔案,在地圖上選擇位置會顯示您選擇的位置名稱或地址。 -
應用程式中的最後一個步驟是使用 MapLibre 功能,在使用者選取的位置新增標記。修改
main
函數,如下所示。您需要進行的變更會顯示在 中green
。async function main() { // Create an authentication helper instance using an API key const authHelper = await amazonLocationAuthHelper.withAPIKey(apiKey); // Initialize map and Amazon Location SDK client const map = await initializeMap(); const client = new amazonLocationClient.LocationClient({ region, ...authHelper.getLocationClientConfig(), // Provides configuration required to make requests to Amazon Location });
// Variable to hold marker that will be rendered on click let marker;
// On mouse click, display marker and get results: map.on("click", async function (e) {// Remove any existing marker if (marker) { marker.remove(); } // Render a marker on clicked point marker = new maplibregl.Marker().setLngLat([e.lngLat.lng, e.lngLat.lat]).addTo(map);
// Set up parameters for search call let params = { IndexName: placesName, Position: [e.lngLat.lng, e.lngLat.lat], Language: "en", MaxResults: "5", }; // Set up command to search for results around clicked point const searchCommand = new amazonLocationClient.SearchPlaceIndexForPositionCommand(params); ...此程式碼會宣告變數,該
marker
變數會在每次使用者選取位置時填入,顯示他們選取的位置。標記一旦使用 新增至地圖,便會由地圖控制項自動呈現.addTo(map);
。程式碼也會檢查先前的標記,並將其移除,以便一次畫面上只有 1 個標記。 -
儲存
main.js
檔案,然後在瀏覽器中開啟quickstart.html
檔案。您可以像往常一樣在地圖上平移和縮放,但現在如果您選擇位置,您會看到所選位置的詳細資訊。
您的快速啟動應用程式已完成。本教學課程已向您示範如何建立靜態HTML應用程式:
-
建立使用者可以互動的地圖。
-
處理映射事件 (
click
)。 -
呼叫 Amazon Location Service API,特別是使用 搜尋位置的地圖
searchPlaceIndexForPosition
。 -
使用 MapLibre 地圖控制項來新增標記。