1 概述

项目需求需要引入地图,对于目前最新的Vue3.0,无论是百度/高德/腾讯地图目前还没有适配,只有Vue 2.x版本的:

目前只有谷歌地图的Vue3.0适配:

但是没有适配并不代表不能使用,本文的重点就是如何使用这四种地图,不废话了进入正题。

2 谷歌地图

步骤:

  • 获取API Key
  • 安装
  • 使用

2.1 获取API Key

戳这里按提示进行:

首先点击第一个链接创建项目:

输入项目名字:

戳这里查看自己的凭据:

选择创建凭据里面的API密钥:

将已创建后的密钥复制即可。

2.2 安装

npm install --save vue3-google-map
# 或
cnpm install --save vue3-google-map
# 或
yarn add vue3-google-map

2.3 使用

在需要引入的组件中添加如下示例代码:

<template>
<GoogleMap
api-key="YOUR_GOOGLE_MAPS_API_KEY"
style="width: 100%; height: 500px"
:center="center"
:zoom="15"
>
<Marker :options="{ position: center }" />
</GoogleMap>
</template> <script>
import { GoogleMap, Marker } from 'vue3-google-map' export default {
components: { GoogleMap, Marker },
setup() {
const center = { lat: 40.689247, lng: -74.044502 }
return { center }
},
})
</script>

并将KEY修改为自己的KEY

KEY没问题的话,运行后即可看到地图,笔者这里遇到了一下错误:

提示说是地图API还没有激活,点击提示中的链接进行激活:

启用:

但是这里又报了一个错误:

按照控制台提示的链接激活:

激活后即可看到地图。

3 百度地图

步骤:

  • 获取ak
  • 安装
  • 使用

3.1 获取ak

ak类似谷歌地图中的API KEY戳这里注册百度地图开发者账号,然后创建一个应用:

注意应用类型需要选择浏览器端,并且需要配置域名限制,若无限制域名需要输入*

创建后即可看到ak

3.2 安装

使用Vue2.x的可以从npm/cnpm安装:

  • vue-baidu-map-v3
  • vue-baidu-map
  • coalbr-vue-baidu-map

具体查看文档即可。

百度地图目前有4套JS API

  • JavaScript API GL
  • JavaScript API v2.0
  • JavaScript API v3.0
  • JavaScript API Lite

这里以v3.0API进行操作,对于这套API,官方文档只提供了<script>引入的方式,因此在Vue3.0中需要手动引入JS

<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥"></script>

具体流程为,在Vue应用下的index.html直接引入该JS

3.3 使用

在需要的组件中创建一个固定宽高的容器:

<div id="container" style="width: 800px;height: 800px"></div>

mounted()中创建地图:

mounted(){
var map = new BMap.Map('container')
var point = new BMap.Point(116.404, 39.915)
map.centerAndZoom(point, 15)
map.enableScrollWheelZoom(true)
}

运行效果:

更详细的使用请看官方文档

4 高德地图

流程:

  • 注册账号获取KEY
  • 安装
  • 使用

4.1 KEY

戳这里注册高德开放平台账号:

创建:

选择添加:

选择Web端(JS API),同时需要域名限制请按提示进行输入:

创建完成后即可看到KEY

4.2 安装

高德地图JS API目前有两个版本:v1.4/v2.0v1.4的地图只能通过<script>引入,而在v2.0中,高德官方额外提供了JSAPI Loader,可以通过该JSAPI Loader去加载地图,这里以v2.0版本进行操作。

JSAPI Loader使用npm/cnpm安装:

npm i @amap/amap-jsapi-loader --save
# 或
cnpm i @amap/amap-jsapi-loader --save

另一种方式是传统的<script>,但不建议,需要的可以看官方文档

4.3 使用

在需要的组件中定义一个容器,确定高宽:

<div id="container" style="height: 800px;width: 800px;"></div>

下一步就是import

import AMapLoader from '@amap/amap-jsapi-loader';

并在setup()/mounted()中加载:

setup(){
AMapLoader.load({
"key": "", // 申请好的Web端开发者Key,首次调用 load 时必填
"version": "1.4.15", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
"plugins": [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
"AMapUI": { // 是否加载 AMapUI,缺省不加载
"version": '1.1', // AMapUI 缺省 1.1
"plugins":[], // 需要加载的 AMapUI ui插件
},
"Loca":{ // 是否加载 Loca, 缺省不加载
"version": '1.3.2' // Loca 版本,缺省 1.3.2
},
}).then((AMap)=>{
var map = new AMap.Map('container', {
zoom:11, //级别
center: [116.397428, 39.90923], //中心点坐标
viewMode:'3D' //使用3D视图
});
}).catch(e => {
console.log(e);
})
},

修改为自己的KEY,示例效果:

更详细使用请查看官方文档

5 腾讯地图

步骤类似:

  • 注册账号
  • 安装
  • 使用

5.1 注册账号

戳这里注册账号:

创建KEY

5.2 安装

腾讯地图目前同样有两个版本:v1/v2,这里以v2示例。

腾讯地图与百度地图类似,只提供了<script>去引入地图,因此操作方式与百度地图类似,在index.html中引入:

<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=KEY"></script>

修改为自己的KEY

5.3 使用

对应组件创建容器:

<div id="container" style="width: 800px;height: 800px"></div>

mounted()中引入:

mounted(){
var myLatlng = new qq.maps.LatLng(39.90923,116.397428)
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: qq.maps.MapTypeId.ROADMAP
}
var map = new qq.maps.Map(document.getElementById("container"), myOptions);
}

示例效果:

6 附录:坐标系转换

国内主要有以下三种坐标系:

  • WGS84:一种大地坐标系,目前广泛使用的GPS系统使用的坐标系
  • GCJ02:又叫火星坐标系/国测局坐标系,中国国家测绘局制订的地理信息系统坐标系统,是WGS84坐标加密后的坐标系
  • BD09:百度坐标系,在GCJ02基础上再次进行加密

而各种地图使用的坐标系如下:

  • 谷歌国内地图、高德地图、腾讯地图:GCJ02
  • 百度地图:BD09
  • 谷歌国外地图、osm地图等:WGS84

当坐标系不一致时,需要进行转换,这里推荐两个坐标系转换开源库(3.1k/1.8k star):

戳这里这里使用。


如果觉得文章好看,欢迎点赞。

同时欢迎关注微信公众号:氷泠之路。

Vue3.0中引入地图(谷歌+高德+腾讯+百度)的更多相关文章

  1. C# 5.0中引入了async 和 await

    C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...

  2. vue3.0中的双向数据绑定方法

    熟悉vue的人都知道在vue2.x之前都是使用object.defineProperty来实现双向数据绑定的 而在vue3.0中这个方法被取代了 1. 为什么要替换Object.definePrope ...

  3. C# 9.0中引入的新特性init和record的使用思考

    写在前面 .NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过 ...

  4. Vue组件篇——Vue3.0中使用高德地图

    VUE-CLI 3.0 中配置高德地图 在项目开发中,地图组件 1.首先,需要注册高德开放平台的账号,并在[应用管理]页面[创建新应用],为应用添加Key值 高德开放平台:https://lbs.am ...

  5. vue2.0中引入UEditor的一些坑。。。。

    开发后台系统的时候,富文本编辑器肯定是必不可少的,然后呢~在天朝当然要属百度编辑器(UEditor)最成熟了,功能全面,文档齐全(相对),ui优美(...,对于程序员来说)等等许多方面(MMP,还不是 ...

  6. vue3.0中如何使用ueditor

    1.在官网下载一个ueditor版本[https://ueditor.baidu.com/website/download.html],解压后放到public文件下的static文件中重命名为Edit ...

  7. 如何在 vue 2.0+ 中引入全局的stylus文件,且能正常

    由于stylus在引用时,不能像一般的css文件直接在main.js中引用,就算引用了也会只能使用转换后的css,不能使用里面的函数,方法等,原因可能是:在这里引入会被直接编译成css,不能在别的模板 ...

  8. vue3.0 + ueditor

    公司有个需求,需要做个发送邮件的模版(富文本对于模版的扩展性更好吧) 关于富文本,也找了一些好看且支持vue的,但是功能都没有百度全面 反正这个系统也是自己人用,颜值无所谓了 关于vue2.0+ued ...

  9. vue3系列:vue3.0自定义弹框组件V3Popup|vue3.x手机端弹框组件

    基于Vue3.0开发的轻量级手机端弹框组件V3Popup. 之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件. V3Popup 基于vue3.x实现的移动端弹出框 ...

随机推荐

  1. [转]c++使用thread类时编译出错,对‘pthread_create’未定义的引用

    转载地址:https://blog.csdn.net/wuhui20091515/article/details/52531202 例子1 #include <iostream> #inc ...

  2. Java 搭建 RabbitMq 消息中间件

    前言 当系统中出现"生产"和"消费"的速度或稳定性等因素不一致的时候,就需要消息队列. 名词 exchange: 交换机 routingkey: 路由key q ...

  3. Python网络编程相关的库与爬虫基础

    PythonWeb编程 ①相关的库:urlib.urlib2.requests python中自带urlib和urlib2,他们主要使用函数如下: urllib: urlib.urlopen() ur ...

  4. ngx_http_image_filter_module使用

    目录 安装 基本使用 示例 参数说明 参考链接:nginx官方文档 安装 ngx_http_image_filter_module一个官方模块,用于转换JPEG.GIF.PNG和WebP格式的图像. ...

  5. 使用Prometheus搞定微服务监控

    最近对服务进行监控,而当前监控最流行的数据库就是 Prometheus,同时 go-zero 默认接入也是这款数据库.今天就对 go-zero 是如何接入 Prometheus ,以及开发者如何自己定 ...

  6. 检查字符串是否包含另一串字符串(c++)

    在c++中检查字符串是否包含另一串字符串,这个本来是我做过的一个算法题,不过最近刚好有个需求让我想到了这个题,就在此记录一下! 使用std::string::findfunction string s ...

  7. 剑指 Offer 10- II. 青蛙跳台阶问题

    剑指 Offer 10- II. 青蛙跳台阶问题 Offer 10- II 题目描述: 动态规划方程: 循环求余: 复杂度分析: package com.walegarrett.offer; impo ...

  8. Python flask-restful框架讲解

    Restful 是 Flask 的扩展,增加了对快速构建 REST api 的支持.它是一个轻量级的概念,与您现有的 ORM/librarie 一起工作.Restful 鼓励最小化设置的最佳实践.如果 ...

  9. springboot注解之@Import @Conditional @ImportResource @ConfigurationProperties @EnableConfigurationProperties

    1.包结构 2.主程序类 1 @SpringBootApplication(scanBasePackages={"com.atguigu"}) 2 public class Mai ...

  10. 【Azure Developer】Python 获取Micrisoft Graph API资源的Access Token, 并调用Microsoft Graph API servicePrincipals接口获取应用ID

    问题描述 在Azure开发中,我们时常面临获取Authorization问题,需要使用代码获取到Access Token后,在调用对应的API,如servicePrincipals接口. 如果是直接调 ...