Vue3集成高德地图:快速上手,实现你的业务需求

news2024/11/24 19:33:37

Vue3集成高德地图

  • 前言
  • 一、准备工作
    • 1.开发文档
    • 2.添加应用
  • 二、使用步骤
    • 命令安装
    • 2.地图容器创建
    • 3.组件引入
    • 4.js api 安全密钥
    • 5.初始化地图
    • 6. 图层
      • 6.1 添加 / 设置 / 获取 / 移除图层
        • 6.1.1 添加图层
        • 6.1.2 设置图层
        • 6.1.3 获取图层
        • 6.1.4 移除图层
    • 7. 点标记
    • 8. 信息窗体
      • 8.1 默认信息窗体
        • 8.1.1 默认信息窗体的创建
        • 8.1.2 信息窗体锚点的设置(anchor)
      • 8.2 自定义信息窗体
        • 8.2.1 自定义窗体的创建
        • 8.2.2 自定义信息窗体的偏移量(offset)
      • 8.3 信息窗体的打开关闭
    • 9.搜索
      • 9.1 引入和创建插件实例
      • 9.2 输入提示插件
      • 9.3 POI搜索

在这里插入图片描述

主页传送门:📀 传送


前言

  总结之前写的内容,优化下细节


一、准备工作

  确保自己有开发者账号并成功生成了API密钥。具体操作如下:

1.开发文档

  百度搜索高德开放平台 -登录/注册 -文档与支持- Web服务 API - JS API

在这里插入图片描述

2.添加应用

  认证 - 控制台 - 应用管理 -我的应用 -创建新应用
在这里插入图片描述
创建完应用点击添加key在弹出的页面根据需求选择对应服务平台即可

web示例:
web网页 选择 web端(js api)key名称随便写 域名白名单根据自己需求选择添加 最后勾选同意
在这里插入图片描述

注意选 web端 才能生成安全密钥 调用api需要用到
在这里插入图片描述

二、使用步骤

安装高德地图SDK

命令安装

npm安装:

代码如下:

npm i @amap/amap-jsapi-loader --save
npm install coordtransform  --涉及到坐标转换不想自己写的可以安装这个 

yarn安装:
代码如下:

yarn add vue-amap

2.地图容器创建

地图组件中创建 < div> 标签作为地图容器

<template>
    <div class="home_div">
        <div id="container" style="height: 50vh; width: 100%"></div>
    </div>
</template>

<style scope>
    .home_div{
        height: 100%;
        width: 100%;
        padding: 0px;
        margin: 0px;
        position: relative;
    }
</style>
	

3.组件引入

import AMapLoader from "@amap/amap-jsapi-loader"
import { reactive, ref, toRefs, onMounted, nextTick, defineProps } from 'vue';
import { shallowRef } from '@vue/reactivity'

4.js api 安全密钥

JS API 安全密钥以明文方式设置,不推荐(不安全)

<script setup>

window._AMapSecurityConfig = {
  securityJsCode: '此处填上面应用生成的秘钥', 
}
</script>

JS API 安全密钥通过代理服务器转发,强烈建议使用(安全)

server {
  listen       80;             #nginx端口设置,可按实际端口修改
  server_name  127.0.0.1;      #nginx server_name 对应进行配置,可按实际添加或修改

  # 自定义地图服务代理
  location /_AMapService/v4/map/styles {
    set $args "$args&jscode=您的安全密钥";
    proxy_pass https://webapi.amap.com/v4/map/styles;
  }
  # 海外地图服务代理
  location /_AMapService/v3/vectormap {
    set $args "$args&jscode=您的安全密钥";
    proxy_pass https://fmap01.amap.com/v3/vectormap;
  }
  # Web服务API 代理
  location /_AMapService/ {
    set $args "$args&jscode=您的安全密钥";
    proxy_pass https://restapi.amap.com/;
  }
}

5.初始化地图

var map = new AMap.Map('container', {
            viewMode: "3D",  //  是否为3D地图模式
            zoom: 10, //  地图显示的缩放级别
            zooms:[2,22], // 地图缩放范围
            center: arr, //  地图中心点坐标
		    layers: [new AMap.TileLayer.Satellite()],  //设置图层,可设置成包含一个或多个图层的数组
		    mapStyle: 'amap://styles/whitesmoke',  //设置地图的显示样式
            resizeEnable: true  //  是否监控地图容器尺寸变化
});

也可以使用 map.setMapStyle('amap://styles/whitesmoke') 来动态的设置地图样式。

6. 图层

地图在初始化的时候,如果你没有配置layers属性,JS API会默认添加一个标准图层,标准图层的配置为:

const layer = new AMap.createDefaultLayer({ // 提示:参数值并不是API默认使用的值
  zooms:[3,20],    //可见级别
  visible:true,    //是否可见
  opacity:1,       //透明度
  zIndex:0         //叠加层级
})
如果你想更改默认配置,你可以在初始化地图的时候传入你创建的 createDefaultLayer。
const map = new AMap.Map('container',{
  ...otherOptions, // 其他配置
  layers:[layer]   // layer为你通过 new AMap.createDefaultLayer() 创建的默认图层
});

6.1 添加 / 设置 / 获取 / 移除图层

6.1.1 添加图层

地图上可使用add()方法添加各类型的图层,如高德官方的卫星、路网图层,第三方或是自定义图层等。

// 构造官方卫星、路网图层
var layer1 = new AMap.TileLayer.Satellite();
var layer2 =  new AMap.TileLayer.RoadNet();
var layers = [
    layer1,
    layer2
]
// 添加到地图上
map.add(layers);
6.1.2 设置图层

可以使用setLayers()方法设置图层,使用该方法后,地图图层会被重置。

// 构造官方卫星、路网图层
var layers =  [
    new AMap.TileLayer.Satellite(),
    new AMap.TileLayer.RoadNet()
]
// 地图上设置图层
map.setLayers(layers);
6.1.3 获取图层

可以通过getLayers()方法获取地图图层数据

// 获取地图图层数据
map.getLayers();
6.1.4 移除图层

通过remove()方法移除地图图层

// 移除一个图层
map.remove(layer1);

7. 点标记

点标记适用于用户需要在地图上创建一个标记的场景。Marker 类型推荐在数据量为 500 以内时使用。若数据量大于 500 ,推荐使用 LabelMarker,可以获得更好的性能。另外需要地图标注可以避让用户标注时,也推荐使用 LabelMarker。

var marker = new AMap.Marker({
    icon: "",
    position: [经度, 纬度]
});
map.add(marker1);
map.setFitView();
// 删除已有Marker对象使用:
 map.remove(marker)// 可以一次性添加多个Marker实例,只需将每个Marker示例放入一个数组Array中。
// 多个点实例组成的数组
const markerList = [marker1, marker2, marker3];
map.add(markerList);
// 绑定Marker实例的事件
const clickHandler = function(e) {
  alert('您在[ '+e.lnglat.getLng()+','+e.lnglat.getLat()+' ]的位置点击了地图!');
};
// 绑定事件
map.on('click', clickHandler);

8. 信息窗体

8.1 默认信息窗体

8.1.1 默认信息窗体的创建

默认信息窗体封装了关闭按钮,使用 API 默认的信息窗体样式,这个时候只需要对 InfoWindow 设定 content 属性即可,content 可以是 dom 对象,也可以是 html 识别的字符串。

// 信息窗体的内容
var content = [
    "<div><img src="\"" http:="" webapi.amap.com="" images="" autonavi.png="" \"=""> ",
    "<div style="\"padding:0px" 0px="" 4px;\"=""><b>高德软件有限公司</b>",
    "电话 : 010-84107000   邮编 : 100102",
    "地址 : 北京市望京阜通东大街方恒国际中心A座16层</div></div>"
];

// 创建 infoWindow 实例	
var infoWindow = new AMap.InfoWindow({
   content: content.join("<br>")  //传入 dom 对象,或者 html 字符串
});
  
// 打开信息窗体
infoWindow.open(map);
8.1.2 信息窗体锚点的设置(anchor)

通过 anchor 可以方便的设置锚点方位。anchor 可选值有 ‘top-left’、‘top-center’、‘top-right’、‘middle-left’、‘center’、‘middle-right’、‘bottom-left’、‘bottom-center’、‘bottom-right’ , 分别代表了信息窗体锚点的不同方位。

var infoWindow = new AMap.InfoWindow({
        anchor: 'top-left',
        content: '这是信息窗体!',
});

infoWindow.open(map,[116.401337,39.907886]);

8.2 自定义信息窗体

如果要自定义信息窗体内容,只需把 InfoWindow 的 isCustom 属性设置为 true ,信息窗体就会变成自定义信息窗体。与默认信息窗体的不同在于,自定义信息窗体需要自己通过 content 来实现关闭按钮以及全部外观样式,同时需要通过 offset 指定锚点位置,offset 为相对于 content 下边缘中间点的位移:

8.2.1 自定义窗体的创建
// 折线的节点坐标数组,每个元素为 AMap.LngLat 对象
var content = [
    "<div><img src="\"" http:="" webapi.amap.com="" images="" autonavi.png="" \"=""> ",
    "<div style="\"padding:0px" 0px="" 4px;\"=""><b>高德软件有限公司</b>",
    "电话 : 010-84107000   邮编 : 100102",
    "地址 : 北京市望京阜通东大街方恒国际中心A座16层</div></div>"
];

// 实现自定义窗体内容,返回拼接后的字符串
function createInfoWindow (title, content){
    // 内容拼接 ...
    return content;
}

// 创建 infoWindow 实例 
var infoWindow = new AMap.InfoWindow({
   isCustom: true,  //使用自定义窗体
   content: createInfoWindow(title,content.join("<br>")),  //传入 dom 对象,或者 html 字符串
   offset: new AMap.Pixel(16, -50)
});
8.2.2 自定义信息窗体的偏移量(offset)

如果用户自定义信息窗体内容,可以为定义的内容添加偏移量(offset)。当偏移量为 (0, 0) 时,自定义内容默认以底部中部为基准点(若设置了 anchor,基准点位置则为 anchor 设置的位置)与经纬度坐标对齐;设置 offset 为其他值则对齐位置相应改变。具体偏移规则如下:
在这里插入图片描述

8.3 信息窗体的打开关闭

// 在指定位置打开已创建的信息窗体
var position = new AMap.LngLat(116.39, 39.9);
infoWindow.open(map, position);

// 关闭信息窗体
infoWindow.close();

9.搜索

9.1 引入和创建插件实例

const placeSearch = new AMap.PlaceSearch({
  pageSize: 5, // 单页显示结果条数
  pageIndex: 1, // 页码
  city: "010", // 兴趣点城市
  citylimit: true,  //是否强制限制在设置的城市内搜索
  map: map, // 展现结果的地图实例
  panel: "panel", // 结果列表将在此容器中进行展示。
  autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
});
// 使用插件搜索关键字并查看结果
placeSearch.search('北京大学');
// 自定义搜索结果 (如果你不想使用JS API的结果面板,panel可以缺省或者赋值false,然后可以在search()的回调中处理自己的逻辑。)
placeSearch.search('北京大学', function (status, result) {
   // 查询成功时,result即对应匹配的POI信息
});

9.2 输入提示插件

想实现类似在高德地图的输入框里输入文本片段即显示相关的匹配信息,使用输入提示插件AMap.AutoComplete就对了

AMap.plugin('AMap.AutoComplete', function(){
  var autoOptions = {
    //city 限定城市,默认全国
    city: '全国'
  };
  // 实例化AutoComplete
  var autoComplete= new AMap.AutoComplete(autoOptions);
  // 根据关键字进行搜索
  autoComplete.search(keyword, function(status, result) {
    // 搜索成功时,result即是对应的匹配数据
    console.log(result);
  })
})

9.3 POI搜索

使用 AMap.PlaceSearch 获取搜索信息。

map.plugin('AMap.PlaceSearch', () => {
      let placeSearch = new AMap.PlaceSearch({
        city: '010', // city 指定搜索所在城市,支持传入格式有:城市名、citycode和adcode
        map: map // 展现结果的地图实例
      })
      // 关键字搜索
      placeSearch.search(value, function (status, result) {
	   // 监听标记点击事件
        AMap.Event.addListener(placeSearch, 'markerClick', function (data) {
          let result = data
        })        
      })
})

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论
  你的评价就是我✍️创作的动力!					  💞💞💞

参考文档:
高德开放平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 为Android app添加系统签名

Qt 为Android app添加系统签名 flyfish 一 环境 lsb_release -aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 23.04 Release: 23.04 Codename: lunarQt Creator 10.0.2 构建套件 Qt 6.5.1 Clang arm64-v8a 二 运行Qt 如果没有Qt图标 在终端…

【Springboot】Filter 过滤器的使用

一、基本介绍 过滤器 Filter 作为 Java 三大器之一&#xff0c;在 Java Web 的使用中有很高的地位。所谓过滤器&#xff0c;就是实现了 javax.servlet.Filter 接口的服务器端程序&#xff0c;就是对事物进行过滤的。在 Web 中的过滤器&#xff0c;当然就是对请求进行过滤&#…

2023常见自动化测试工具集合

1、Appium -------> AppUI自动化测试 官网&#xff1a;http://appium.io Appium 是一个移动端自动化测试开源工具&#xff0c;支持iOS 和Android 平台&#xff0c;支持Python、Java 等语言&#xff0c;即同一套Java 或Python 脚本可以同时运行在iOS 和Android平台&#x…

关于图像分割SDK的一些基础认识

随着科技的不断发展&#xff0c;图像分割SDK已经成为了一个备受关注的话题。而在众多图像分割SDK中&#xff0c;美摄图像分割SDK以其独特的功能和优势脱颖而出。本文将从美摄图像分割SDK的企业价值和互联网娱乐方面&#xff0c;介绍其宣传文章的具体写作规范。 在企业价值方面&…

如何用IP地址解决广告精准投放问题

IP地址可以在广告精准投放中发挥关键作用&#xff0c;因为它提供了有关用户的地理位置信息。通过结合IP地址和其他数据&#xff0c;广告公司和平台可以更精准地定位广告受众&#xff0c;从而提高广告投放的效果。以下是一些方式&#xff0c;说明了如何使用IP地址来解决广告精准…

BCT(block change tracking)引起的异机恢复问题

前提说明 exadata 12.1.0.2的环境&#xff0c;做异机恢复&#xff0c;恢复到单机环境。 现象及报错 Rman异机恢复hang住不动&#xff08;已做set newname&#xff09;&#xff0c;db的alert日志中出现以下报错 --个人印象中还有asmb的trc报错&#xff0c;这次没有找到 原因及解…

限流与下载接口请求数控制

收银台系统相对于互联网应用流量要平稳很多&#xff0c;高峰流量也就平时的三倍&#xff0c;完全是可控的&#xff0c;我们这里用限流主要是控制后台同时下载XLS表格的请求数&#xff0c;因为后台系统要提供大量的导出XLS表格功能&#xff0c;收银员与管理人员需要用我们导出的…

标准化格式输出:DateTimeFormatter

public static void main(String[] args) {LocalDateTime ldt LocalDateTime.now();System.out.println(ldt);//格式化输出时间//创建DateTimeFormatter对象来进行格式化DateTimeFormatter dateTimeFormatter DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒&…

聊天室即时通讯系统源码 类似微信的H5聊天系统APP源码 ThinkPHP内核

前端&#xff1a; 用Dcloud 的 uni-app全系,基于vue.js和微信小程序开发模式。 目前支持APP&#xff08;android、ios&#xff09;、H5、微信小程序、支付宝小程序5端。 在特定场景可以用weex进行原生渲染。 APP用的是Dcloud 公司的H5进行原生接口调用。 后端&#xff1a;…

图像语义分割 pytorch复现U2Net图像分割网络详解

图像语义分割 pytorch复现U2Net图像分割网络详解 1、U2Net网络模型结构2、block模块结构解析RSU-7模块RSU-4Fsaliency map fusion module U2Net网络结构详细参数配置RSU模块代码实现RSU4F模块代码实现u2net_full与u2net_lite模型配置函数U2Net网络整体定义类损失函数计算评价指…

LXC、Docker、 Kubernetes 容器以及Hypervisor的区别

LXC、Docker、 Kubernetes 容器以及Hypervisor的区别 SaaS: Software-as-a-Service&#xff08;软件即服务&#xff09; PaaS: Platform-as-a-Service&#xff08;平台即服务&#xff09; IaaS: Infrastructure-as-a-Service&#xff08;基础设施即服务&#xff09; 1、Docke…

划重点!3DEXPERIENCE SOLIDWORKS 2024 十大增强功能

SOLIDWORKS 2024 以更加强大的姿态亮相&#xff0c;帮助您重塑设计。为了助力您简化和加快由概念到成品的产品开发流程&#xff0c;SOLIDWORKS 2024 涵盖全新以用户为中心的增强功能&#xff0c;致力帮您实现更智能、更快速地与您的团队和外部合作伙伴协同工作。本篇为大家介绍…

微信公众号怎么从个人转为企业?

公众号账号迁移的作用是什么&#xff1f;只能变更主体吗&#xff1f;1.可合并多个公众号的粉丝、文章&#xff0c;打造超级大V2.可变更公众号主体&#xff0c;更改公众号名称&#xff0c;变更公众号类型——订阅号、服务号随意切换3.可以增加留言功能4.个人订阅号可迁移到企业名…

封箱机不打盖是什么原因?

折盖封箱机是封箱机中自动化程度比较高的一款设备&#xff0c;该机既可以单机使用&#xff0c;也可以配自动化流水线一起使用&#xff0c;实现无人化操作&#xff0c;但这款设备在使用的过程中有时会出现一些小问题&#xff0c;今天就其中的一个常见故障-----不打盖的问题和您做…

单片机TDL的功能、应用与技术特点 | 百能云芯

在现代电子领域中&#xff0c;单片机&#xff08;Microcontroller&#xff09;是一种至关重要的电子元件&#xff0c;广泛应用于各种应用中。TDL&#xff08;Time Division Multiplexing&#xff0c;时分多路复用&#xff09;是一种数据传输技术&#xff0c;结合单片机的应用&a…

MySQL InnoDB引擎深入学习的一天(InnoDB架构 + 事务底层原理 + MVCC)

目录 逻辑存储引擎 架构 概述 内存架构 Buffer Pool Change Buffe Adaptive Hash Index Log Buffer 磁盘结构 System Tablespace File-Per-Table Tablespaces General Tablespaces Undo Tablespaces Temporary Tablespaces Doublewrite Buffer Files Redo Log 后台线程 事务原…

关于脑部的基础知识

脑部的基础知识 1 解剖学基本术语&#xff1a;1.1 解剖学方向1.2 解剖学平面1.3 神经元集合体1.4 神经元轴突集合体 2 中枢神经系统CNS2.1 脑 Brain2.1.1 **大脑** 大脑皮层 皮层下结构2.1.2 **间脑** **丘脑 下丘脑 垂体**2.1.3 **中脑 ** **顶盖 ** **大脑脚**2.1.4 脑桥…

【算法|前缀和系列No.2】牛客网 DP35 【模板】二维前缀和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【牛客网刷题】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希…

功能测试-本地缓存修改时间戳:操作支付中心页面触发二次挽留弹窗

需求&#xff1a;在活动期间&#xff0c;指定的用户在关闭支付中心个人会员页时&#xff0c;增加二次挽留弹窗机制 涉及端口&#xff1a;PC官网支付中心、移动端官网支付中心、插件端支付中心 触发频率&#xff1a;用户每天触发一次&#xff08;需求写的其实这是错误的&#…

实赣!赣州与开源网安联手打造软件供应链安全检测中心

10月16日&#xff0c;开源网安与赣州市行政审批局、赣州市网信办三方先后签署战略协议及投资协议&#xff0c;签约后将在赣州打造软件供应链安全检测中心&#xff0c;为数字政府、数字经济等领域提供全面安全检测和软件安全运营监测等服务&#xff0c;提升软件的安全与质量&…