vue3中實現高德地圖POI搜索(附源碼)

引言

上一篇文章詳細講解了vue3中實現高德地圖地址搜索自動提示(附源碼)🔗,本文將重點介紹POI搜索功能的實現。

1. 功能介紹

POI(Point of Interest) 搜索用于查找特定位置或區域內的興趣點,如餐館、商場、景點等。

2. PlaceSearch參數說明

2.1 參數介紹

參數名類型默認值描述示例值
基礎參數
cityString“全國”興趣點城市,可以是城市名或城市編碼"廈門", "350200"
citylimitBooleanfalse是否強制限制在設置的城市內搜索true, false
mapAMap.Map-地圖實例,設置后搜索結果會自動在地圖上顯示map
分頁參數
pageSizeNumber10單頁顯示結果條數,最大5010, 20, 50
pageIndexNumber1頁碼,從1開始1, 2, 3
搜索范圍參數
typeString-搜索POI類型"餐飲服務", "購物服務"
radiusNumber-搜索半徑,單位米1000, 2000
返回數據參數
extensionsString"base"返回信息詳略,"base"返回基本信息,"all"返回詳細信息"base", "all"
顯示參數
panelString-結果列表將在此容器中進行展示的DOM元素ID"panel_id"
showCoverBooleantrue是否展示周邊搜索的覆蓋范圍true, false
renderStyleString"newpc"渲染風格"newpc"
autoFitViewBooleantrue是否自動調整地圖視野使繪制的Marker點都處于視口的可見范圍true, false

2.2 常用搜索類型(type 參數值)

類型值描述包含內容
"餐飲服務"餐飲相關服務餐廳、小吃店、咖啡廳、酒吧等
"購物服務"購物相關服務商場、超市、便利店、專賣店等
"生活服務"日常生活服務銀行、郵局、理發店、洗衣店等
"體育休閑服務"體育休閑場所公園、健身房、游泳館、KTV等
"醫療保健服務"醫療保健機構醫院、診所、藥店、體檢中心等
"住宿服務"住宿相關服務酒店、賓館、招待所、民宿等
"風景名勝"旅游景點景點、公園、博物館、紀念館等
"商務住宅"商務住宅區域寫字樓、住宅區、商務中心等
"政府機構及社會團體"政府及社會機構政府部門、社會團體、事業單位等
"科教文化服務"科教文化場所學校、圖書館、培訓機構等

2.3 方法介紹

方法名說明參數值描述
search(keyword, callback)根據輸入關鍵字提示匹配信息keyword:關鍵字、callback:搜索結果回調
searchNearBy(keyword, center, radius,callback)根據中心點經緯度、半徑以及關鍵字進行周邊查詢keyword:關鍵字、center:中心點經緯度、radius:半徑,取值范圍:0-50000、callback:搜索結果回調
searchInBounds(keyword, bounds, callback)根據范圍和關鍵詞進行范圍查詢keyword:關鍵字、bounds:范圍、callback:搜索結果回調

3. 使用方法

3.1 根據關鍵字查詢 POI 詳細信息

如果你需要根據關鍵字獲取對應城市里相關的 POI 信息,請使用 POI 搜索插件。假如要在北京搜索北京大學相關的 POI,可以按如下代碼實現:

//異步加載 PlaceSearch 插件
AMap.plugin("AMap.PlaceSearch", function () {const placeSearch = new AMap.PlaceSearch({//city 指定搜索所在城市,支持傳入格式有:城市名、citycode 和 adcodecity: "010",});placeSearch.search("北京大學", function (status, result) {//查詢成功時,result 即對應匹配的 POI 信息console.log(result);});
});

3.2 根據中心點經緯度和半徑進行關鍵詞周邊搜索

如果你需要根據關鍵字獲取周邊相關的 POI 信息,請使用 searchNearBy()方法。假如要在北京以國貿為中心200米范圍內搜索咖啡廳相關的 POI,可以按如下代碼實現:

 AMap.plugin(["AMap.PlaceSearch"], function () {//構造地點查詢類placeSearch = new AMap.PlaceSearch({type: "餐飲服務", // 興趣點類別pageSize: 5, // 單頁顯示結果條數pageIndex: 1, // 頁碼city: "010", // 興趣點城市citylimit: true, //是否強制限制在設置的城市內搜索map: map, // 展現結果的地圖實例panel: "panel", // 結果列表將在此容器中進行展示。autoFitView: true, // 是否自動調整地圖視野使繪制的 Marker點都處于視口的可見范圍});const cpoint = [116.405467, 39.907761]; //中心點坐標placeSearch.searchNearBy("潮州菜",cpoint,200,function (status, result) {//查詢成功時,result 即對應匹配的 POI 信息console.log(result);});});
示例代碼
<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;
let autoComplete = null;
let placeSearch = null;
onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申請的安全密鑰」",};AMapLoader.load({key: "", // 申請好的Web端開發者Key,首次調用 load 時必填version: "2.0", // 指定要加載的 JSAPI 的版本,缺省時默認為 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多個如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {zoom: 10, //地圖級別center: [116.397428, 39.90923], //地圖中心點viewMode: "2D", //設置地圖模式});AMap.plugin(["AMap.PlaceSearch"], function () {//構造地點查詢類placeSearch = new AMap.PlaceSearch({type: "餐飲服務", // 興趣點類別pageSize: 5, // 單頁顯示結果條數pageIndex: 1, // 頁碼city: "010", // 興趣點城市citylimit: true, //是否強制限制在設置的城市內搜索map: map, // 展現結果的地圖實例panel: "panel", // 結果列表將在此容器中進行展示。autoFitView: true, // 是否自動調整地圖視野使繪制的 Marker點都處于視口的可見范圍});const cpoint = [116.405467, 39.907761]; //中心點坐標placeSearch.searchNearBy("潮州菜",cpoint,200,function (status, result) {//查詢成功時,result 即對應匹配的 POI 信息console.log(result);});});}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script><template><div class="map-container"><div id="container"></div></div>
</template><style>
#container {width: 100%;height: 800px;
}.map-container {position: relative;
}
</style>

在這里插入圖片描述

3.3 根據范圍進行關鍵詞搜索

如果你需要根據關鍵字獲取指定范圍內相關的 POI 信息,請使用 searchInBounds()方法。假如要獲取多邊形區域內酒店相關的 POI,可以按如下代碼實現:

AMap.plugin(["AMap.PlaceSearch"], function () {//構造地點查詢類placeSearch = new AMap.PlaceSearch({//構造地點查詢類pageSize: 5, // 單頁顯示結果條數pageIndex: 1, // 頁碼city: "010", // 興趣點城市citylimit: true, //是否強制限制在設置的城市內搜索map: map, // 展現結果的地圖實例panel: "panel", // 結果列表將在此容器中進行展示。autoFitView: true, // 是否自動調整地圖視野使繪制的 Marker點都處于視口的可見范圍});//多邊形查const polygonArr = [//多邊形覆蓋物節點坐標數組[116.403322, 39.920255],[116.410703, 39.897555],[116.402292, 39.892353],[116.389846, 39.891365],];const polygon = new AMap.Polygon({path: polygonArr, //設置多邊形邊界路徑strokeColor: "#FF33FF", //線顏色strokeOpacity: 0.2, //線透明度strokeWeight: 3, //線寬fillColor: "#1791fc", //填充色fillOpacity: 0.35, //填充透明度});placeSearch.searchInBounds("酒店", polygon);});
示例代碼
<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;
let autoComplete = null;
let placeSearch = null;
onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申請的安全密鑰」",};AMapLoader.load({key: "", // 申請好的Web端開發者Key,首次調用 load 時必填version: "2.0", // 指定要加載的 JSAPI 的版本,缺省時默認為 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多個如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {zoom: 10, //地圖級別center: [116.397428, 39.90923], //地圖中心點viewMode: "2D", //設置地圖模式});AMap.plugin(["AMap.PlaceSearch"], function () {//構造地點查詢類placeSearch = new AMap.PlaceSearch({//構造地點查詢類pageSize: 5, // 單頁顯示結果條數pageIndex: 1, // 頁碼city: "010", // 興趣點城市citylimit: true, //是否強制限制在設置的城市內搜索map: map, // 展現結果的地圖實例panel: "panel", // 結果列表將在此容器中進行展示。autoFitView: true, // 是否自動調整地圖視野使繪制的 Marker點都處于視口的可見范圍});//多邊形查const polygonArr = [//多邊形覆蓋物節點坐標數組[116.403322, 39.920255],[116.410703, 39.897555],[116.402292, 39.892353],[116.389846, 39.891365],];const polygon = new AMap.Polygon({path: polygonArr, //設置多邊形邊界路徑strokeColor: "#FF33FF", //線顏色strokeOpacity: 0.2, //線透明度strokeWeight: 3, //線寬fillColor: "#1791fc", //填充色fillOpacity: 0.35, //填充透明度});placeSearch.searchInBounds("酒店", polygon);});}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script><template><div class="map-container"><div id="container"></div><div id="panel"></div></div>
</template><style>
#container {width: 100%;height: 800px;
}.map-container {position: relative;
}
#panel {margin: 0;padding: 0;z-index: 999;position: absolute;background-color: white;max-height: 100%;overflow-y: auto;top: 16px;right: 16px;width: 280px;
}
</style>

在這里插入圖片描述

3.4 根據 POI ID 查詢 POI 詳細信息

如果已知一個 POI ID,要查詢對應 POI 的詳細信息,可以使用 POI 搜索插件的getDetails()方法,相關代碼如下:

AMap.plugin("AMap.PlaceSearch", function () {const placeSearch = new AMap.PlaceSearch();//中國國家博物館對應的 POI IDconst poiid = "B000A83U0P";placeSearch.getDetails(poiid, function (status, result) {//查詢成功時,result 即為對應的 POI 詳情});
});

4. 綜合案例:輸入提示與 POI 結合應用

  1. 新增一個id為“input_id”的輸入框
<template><div class="map-container"><div id="container"></div><div class="search-box"><inputtype="text"id="input_id"placeholder="請輸入關鍵字搜索"class="search-input"/></div></div>
</template>
  1. 初始化地圖
 map = new AMap.Map("container", {zoom: 10, //地圖級別center: [116.397428, 39.90923], //地圖中心點viewMode: "2D", //設置地圖模式});
  1. 加載插件
 AMap.plugin(["AMap.AutoComplete", "AMap.PlaceSearch"], function () {const autoOptions = {//城市,默認全國city: "廈門",//使用聯想輸入的 input 的 idinput: "input_id",};autoComplete = new AMap.AutoComplete(autoOptions);placeSearch = new AMap.PlaceSearch({city: "廈門",map: map,});autoComplete.on("select", function (e) {//針對選中的poi實現自己的功能console.log("選中的位置:", e.poi.name);console.log("經緯度:", e.poi.location);placeSearch.search(e.poi.name);});
});
  1. 完整代碼
<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;
let autoComplete = null;
let placeSearch = null;
onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申請的安全密鑰」",};AMapLoader.load({key: "", // 申請好的Web端開發者Key,首次調用 load 時必填version: "2.0", // 指定要加載的 JSAPI 的版本,缺省時默認為 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多個如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {zoom: 10, //地圖級別center: [116.397428, 39.90923], //地圖中心點viewMode: "2D", //設置地圖模式});AMap.plugin(["AMap.AutoComplete", "AMap.PlaceSearch"], function () {const autoOptions = {//城市,默認全國city: "廈門",//使用聯想輸入的 input 的 idinput: "input_id",};autoComplete = new AMap.AutoComplete(autoOptions);placeSearch = new AMap.PlaceSearch({city: "廈門",map: map,});autoComplete.on("select", function (e) {//針對選中的poi實現自己的功能console.log("選中的位置:", e.poi.name);console.log("經緯度:", e.poi.location);placeSearch.search(e.poi.name);});});}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script><template><div class="map-container"><div id="container"></div><div class="search-box"><inputtype="text"id="input_id"placeholder="請輸入關鍵字搜索"class="search-input"/></div></div>
</template><style>
#container {width: 100%;height: 800px;
}.map-container {position: relative;
}.search-box {position: absolute;top: 20px;right: 20px;z-index: 100;
}.search-input {width: 300px;height: 40px;padding: 0 15px;border: 1px solid #dcdfe6;border-radius: 4px;background-color: white;box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);font-size: 14px;transition: all 0.3s;
}.search-input:hover {border-color: #c0c4cc;
}.search-input:focus {outline: none;border-color: #409eff;box-shadow: 0 0 8px rgba(64, 158, 255, 0.2);
}.search-input::placeholder {color: #909399;
}
</style>
  1. 注意事項
    請填寫您自己的 securityJsCodekey 以確保正常渲染。若不清楚如何申請 key,可參考這篇文章獲取詳細指引。如何在Vue3項目中集成高德地圖🔗

效果圖:
在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912716.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習在計算機視覺中的應用

引言 計算機視覺&#xff08;Computer Vision&#xff09;是人工智能的重要分支&#xff0c;旨在讓計算機像人類一樣“看懂”圖像和視頻。近年來&#xff0c;隨著深度學習&#xff08;Deep Learning&#xff09;的快速發展&#xff0c;計算機視覺在多個領域取得了突破性進展。…

新手向:從零開始Node.js超詳細安裝、配置與使用指南

什么是Node.js&#xff1f; 簡單來說&#xff1a; Node.js 是一個在服務器端運行 JavaScript 的環境。 以前JavaScript只能做網頁特效&#xff0c;現在用它就能開發網站后臺、命令行工具甚至桌面應用&#xff01; 第一步&#xff1a;安裝Node.js&#xff08;多系統詳解&#x…

VR全景平臺的概念和用途

VR全景平臺&#xff1a;沉浸式體驗篇章 在數字化飛速發展的今天&#xff0c;VR全景平臺作為新興的技術應用平臺&#xff0c;逐漸走進我們的日常生活。那么&#xff0c;什么是VR全景平臺&#xff1f;眾趣科技是否有涉足這一領域&#xff1f;眾趣科技VR全景平臺又具備哪些獨特的…

深入解析外觀模式(Facade Pattern):簡化復雜系統的優雅設計

深入解析外觀模式&#xff08;Facade Pattern&#xff09;&#xff1a;簡化復雜系統的優雅設計 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇…

2.2.1 配置Linux審計日志

文章目錄 一、試題及考試說明二、操作步驟1. 啟動 Auditd 服務并設置其開機自啟2. 創建一個規則來監控/etc/test/auditd_test 文件上的所有寫入操作&#xff0c;并給這些審計記錄加上標簽file_access3. 設置審計日志保存在/etc/test/audit/audit.log4. 設置審計日志的滾動機制&…

使用Puppeteer提取頁面內容的技巧

在現代的Web開發和爬蟲開發中&#xff0c;Puppeteer是一個非常強大的工具&#xff0c;它可以幫助我們自動化瀏覽器操作&#xff0c;提取頁面內容。本文將從初階到高階&#xff0c;詳細介紹如何使用Puppeteer提取頁面內容的各種技巧&#xff0c;特別關注多層類關系選擇器的使用。…

SQL server 獲取表中所有行的序號

在SQL Server中&#xff0c;要獲取某個表中的某一行所在的記錄總數&#xff0c;通常有幾種方法可以實現&#xff0c;具體使用哪種方法取決于你的具體需求。以下是幾種常見的方法&#xff1a; 1. 使用COUNT()函數結合子查詢 如果你想要知道某個特定行在表中的位置&#xff08;…

《CSDN 用戶視角:見證 AI 重構企業辦公,在智能協同、數據驅動下實現組織進化》

在數字化轉型的大潮洶涌而至的當下&#xff0c;人工智能&#xff08;AI&#xff09;宛如一場疾風驟雨&#xff0c;以前所未有的速度重塑著企業辦公的格局。從瑣碎流程的自動化&#xff0c;到智能決策的深度賦能&#xff0c;AI 技術正掀起一場對傳統工作模式的徹底顛覆&#xff…

PYQT實戰:天氣助手

應用采用了現代化的界面設計&#xff0c;包括圓角邊框、卡片式布局和響應式建議功能。 這個天氣應用可以作為學習PyQt5開發的實例&#xff0c;展示了GUI設計、定時更新、數據處理和用戶交互的實現方法 #!/usr/bin/env python # -*- coding: GBK -*- import sys import request…

PL-SLAM: Real-Time Monocular Visual SLAM with Points and Lines

PL-SLAM 文章目錄 PL-SLAM摘要系統介紹綜述方法綜述LINE-BASED SLAM一、基于線的SLAM二、基于線和點的BA三、全局重定位使用線條初始化地圖實驗結果說明位姿求解三角化LSD 直線檢測算法?? **一、核心原理**?? **二、實現方法**?? **三、應用場景**?? **四、優缺點與優化…

快速手搓一個MCP服務指南(八):FastMCP 代理服務器:構建靈活的 MCP 服務中介層

在分布式系統和微服務架構日益普及的今天&#xff0c;服務間的通信與集成變得至關重要。FastMCP 從 2.0.0 版本引入的代理服務器功能&#xff0c;為 MCP (Model Context Protocol) 生態提供了強大的服務中介能力。本文將深入解析 FastMCP 代理服務器的核心概念、應用場景與實踐…

Ubuntu20下安裝SAMBA服務

1、安裝Samba: 在 Ubuntu 上&#xff0c;打開終端&#xff0c;并運行以下命令以安裝 Samba sudo apt update sudo apt install samba 2、配置共享目錄 修改共享目錄的權限&#xff0c;我的共享目錄是samba_share sudo chmod -R 777 ./samba_share 創建Samba用戶賬號 sud…

Python 數據分析與機器學習入門 (一):環境搭建與核心庫概覽

Python 數據分析與機器學習入門 (一)&#xff1a;環境搭建與核心庫概覽 本文摘要 本文是 Python 數據分析與機器學習入門系列的第一篇&#xff0c;專為初學者設計。文章首先闡明了 Python在數據科學領域的優勢&#xff0c;然后手把手指導讀者如何使用 Anaconda 搭建一個無痛、專…

編譯UltraleapTrackingWebSocket

最近要在項目中用到 Leap Motion&#xff0c;無意中發現了一個 Go 語言的 Leap Motion 庫&#xff1a; https://gobot.io/documentation/platforms/leapmotion/ 示例代碼看起來很簡單&#xff0c;但是要實際運行起來還需要一些條件。 在示例代碼中&#xff0c;我們看到它連接…

[ linux-系統 ] 磁盤與文件系統

1.認識磁盤結構 機械鍵盤是計算機中唯一的機械設備&#xff0c;磁盤是外設&#xff0c;容量大&#xff0c;速度慢&#xff0c;價格便宜 物理結構&#xff1a; 磁頭是一面一個&#xff0c;左右擺動&#xff0c;兩個整體移動的&#xff0c;有磁頭停靠點磁頭和盤面不接觸&#x…

Spring AI RAG

目錄 Spring AI 介紹 Spring AI 組件介紹 Spring AI 結構化輸出 Srping AI 多模態 Spring AI 本地Ollama Spring AI 源碼 Spring AI Advisor機制 Spring AI Tool Calling Spring AI MCP Spring AI RAG Spring AI Agent 一、技術架構與核心流程? 檢索增強生成 &#xff08;RA…

深入Linux開發核心:掌握Vim編輯器與GCCG++編譯工具鏈

文章目錄 一、Vim&#xff1a;終端環境下的編輯藝術1.1 Vim設計哲學&#xff1a;模態編輯的終極實踐1.2 高效導航&#xff1a;超越方向鍵的移動藝術1.3 定制化開發環境&#xff1a;從基礎到專業IDE1.4 調試集成&#xff1a;Vim作為調試前端 二、GCC/G&#xff1a;Linux編譯基石…

阿里云-spring boot接入arms監控

目標&#xff1a;在ecs中啟動一個java應用&#xff0c;且攜帶arms監控 原理&#xff1a;在java應用啟動時&#xff0c;同時啟動一個agent探針&#xff0c;時刻監控java應用變化&#xff08;如&#xff1a;接口調用、CPU、線程池狀態等&#xff09; 1.arms接入中心添加java應用…

昆泰芯3D霍爾磁傳感器芯片在汽車零部件中的應用

HUD即抬頭顯示系統&#xff08;Head-Up Display)&#xff0c;HUD 是一種將重要的車輛或飛行等相關信息(如速度、導航指示、警告信息等)投射到駕駛員或操作員前方視野范圍內的透明顯示屏或直接投射到風擋玻璃上的技術。 HUD即抬頭顯示系統&#xff08;Head-Up Display)&#xff…

new Vue() 的底層工作原理

當你調用 new Vue() 時&#xff0c;Vue.js 會執行一系列復雜的初始化過程。讓我們深入剖析這個看似簡單的操作背后發生的事情&#xff1a; 1. 初始化階段 (1) 內部初始化 function Vue(options) {if (!(this instanceof Vue)) {warn(Vue is a constructor and should be cal…