引言

上一篇文章详细讲解了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…