一、首先在百度api注册获得ak密钥

二、新建js文件,我命名为loadBMap.js,里面创建script,代码如下:

/**
* 加载地图
* @param {Function} callback 回调函数名称,回调函数将会挂载到window上,例如:window.initBaiduMapScript,在方法中就能拿到BMap对象
*/
export function loadBMap(callback) {
var script = document.createElement('script')
script.src = 'http://api.map.baidu.com/api?v=2.0&ak=你的AK&callback=' + callback
document.body.appendChild(script)
}

三、在Vue页面中导入js

import { loadBMap } from './loadBMap'

四、在Vue页面中定义一些需要用到的数据

data () {
return {
BMap: null,
geolocation: null, // Geolocation对象实例
positioning: false, // 定位中
positioningInterval: null, // 定位倒计时计时器
countDown: 30, // 倒计时,单位秒
location: null // 位置信息
}
}

四、在mounted中调用创建回调函数,并调用loadMap方法,将回调函数名称传递到loadMap中

mounted() {
const _this = this
window.initBaiduMapScript = () => {
_this.BMap = window.BMap
}
loadBMap('initBaiduMapScript')
}

五、在methods中定义获取地理位置的方法

// 获取地理定位
getLocation() {
const _this = this
_this.geolocation = new _this.BMap.Geolocation()
if (_this.geolocation) {
// 开启SDK辅助定位,仅当使用环境为移动web混合开发,且开启了定位sdk辅助定位功能后生效
_this.geolocation.enableSDKLocation()
// 开始定位
this.positioning = true
// 倒计时
this.positioningInterval = setInterval(() => {
if (this.countDown === 0) {
this.countDown = 30
clearInterval(this.positioningInterval)
} else {
this.countDown--
}
}, 1000)
// 位置选项
const positionOptions = {
enableHighAccuracy: true, // 要求浏览器获取最佳结果
timeout: 30, // 超时时间
maximumAge: 0 // 允许返回指定时间内的缓存结果。如果此值为0,则浏览器将立即获取新定位结果
}
// 获取用户位置信息
_this.geolocation.getCurrentPosition(position => {
_this.resetPositioning()
// 获取定位结果状态码
const statusCode = _this.geolocation.getStatus()
let msg = '由于未知错误而无法检索设备的位置' // 提示消息
let msgType = 'error' // 消息类型
// 判断结果状态码,为0代表获取成功,读取省市、经纬度
switch (statusCode) {
case 0:
msgType = 'success'
msg = '获取地理位置定位请求成功'
if (position) {
// 数据变量定义
let lat = 0.0 // 经度
let lng = 0.0 // 纬度
let province = '未知' // 经度
let city = '未知' // 纬度 // 坐标
if (position.point) {
lat = position.point.lat
lng = position.point.lng
}
// 位置
if (position.address) {
province = position.address.province
city = position.address.city
}
_this.location = {
省份: province,
城市: city,
经度: lat,
纬度: lng
}
} else {
msg = '由于未知错误而无法检索设备的位置'
}
break
case 2:
msg = '由于未知错误而无法检索设备的位置'
break
case 4:
case 5:
msg = '位置服务请求非法'
break
case 6:
msg = '应用程序没有使用位置服务的权限'
break
case 7:
msg = '网络不可用或者无法连接到获取位置信息的卫星'
break
case 8:
msg = '无法在指定的最大超时间隔内检索位置信息'
break
default:
msg = '由于未知错误而无法检索设备的位置'
break
}
_this.$notification[msgType]({
key: NotificationKey,
message: '提示',
description: msg
})
}, positionOptions)
} else {
_this.$notification.error({
key: NotificationKey,
message: '提示',
description: '您的浏览器不支持地理位置服务'
})
}
},
// 重置定位相关数据
resetPositioning() {
this.positioning = false
this.location = null
this.countDown = 30
clearInterval(this.positioningInterval)
}

六、在需要的地方调用getLocation即可,例如:

<a-form-model-item label="地理位置" prop="location">
<span>{{ location }}</span>
<a v-show="!location && !positioning" @click="getLocation">点击获取位置</a>
<a-spin :spinning="positioning" />
<span v-show="positioning">
&nbsp;还需等待
<span class="red">{{ countDown }}</span> 秒
</span>
</a-form-model-item>

效果:

【获取前】

【获取中】

【获取后】

Vue 通过调用百度API获取地理位置-经度纬度省份城市的更多相关文章

  1. 【转】百度API获取城市名地名(附源码)

    在做一个软件时,用到了定位功能.网上有很多关于google 的GPS定位,但网上关于google定位都没有用, 搜索下原因:(这里建议大家在中国就尽量不使用系统自带的定位) 因为Google的服务器不 ...

  2. java工具类(一)之服务端java实现根据地址从百度API获取经纬度

    服务端java实现根据地址从百度API获取经纬度 代码: package com.pb.baiduapi; import java.io.BufferedReader; import java.io. ...

  3. 调用百度API返回经纬度

    后台调用百度API接口生成: import java.io.BufferedReader; import java.io.IOException;import java.io.InputStreamR ...

  4. 用百度SDK获取地理位置和天气信息

    以下实现通过百度SDK获取地理位置和天气信息,请參考title=android-locsdk/guide/v5-0">百度开发文档 1. 在相关下载最新的库文件.将so文件的压缩文件解 ...

  5. 调用百度API进行文本纠错

    毕设做的是文本纠错方面,然后今天进组见研究生导师 .老师对我做的东西蛮感兴趣.然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能. 要求1:有多人同时在线编辑文档,然后文档功能有类似Wo ...

  6. html5获取经纬度,百度api获取街区名,并使用JS保存进cookie

    引用js<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak= ...

  7. 调用ZoomEye API获取信息

    最近在提高自己编程能力,拿一些实用的小工具练下.该脚本为python语言,主要涉及模块urllib,json,os模块. 功能:调用ZoomEye API获取信息 import urllib.requ ...

  8. 【前端】html5获取经纬度,百度api获取街区名,并使用JS保存进cookie

    引用js<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak= ...

  9. PhoneGap Geolocation结合百度地图api获取地理位置api

    一.使用百度地图API 1.地址:http://developer.baidu.com/map/ 2.在js DEMO中获取反地址解析的DEMO 3.修改这个DEMO的密钥,去创建应用就能创建密钥,然 ...

随机推荐

  1. Numpy修改数组中的元素值

    import numpy as np x = np.arange(8) # [0 1 2 3 4 5 6 7] # 在数组尾部追加一个元素 np.append(x,10) # array([ 0, 1 ...

  2. js 读取word和txt(react版) + 正则分割段落

    show the code 前提:需要mammoth包~ import React, { useState, useReducer } from 'react'; import { Button, A ...

  3. hibernate数据库连接池,常用配置

    <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> &l ...

  4. TestFlight无法访问怎么办?TF如何链接AppStoreConnect解决教程

    最近苹果商店半天下架近3万款应用的新闻闹的沸沸扬扬,很多被下架应用的运营商转将APP上架了TestFlight内测商店(TF签名上架),但是从7月31日起很多用户就开始反映TestFlight内测应用 ...

  5. odoo13之给模块添加自定义配置项

    配置项效果图 odoo中给系统添加配置项有两种方式, 一种是使用odoo自带的设置,在设置中添加配置项:效果如下图, 第二种是在模块中自定义一个配置项管理菜单,在菜单form视图下添加配置项:效果如下 ...

  6. python7.1处理异常

    a=[21,32,43,0,32,"a"]for i in a:#取出元素 try:#写可能会报错的代码 print(3/i) except Exception as e:#捕获t ...

  7. 微信小程序--家庭记账小账本(三)

    家庭记账小账本打算先通过微信小程序来实现,昨天就去注册了解了一下微信小程序,感觉比较复杂而且困难.如何将ecplise源代码与小程序连接,如何建立数据库等等都困扰了我.查阅网上的资料也没有很大的进展. ...

  8. Vue中diff算法的理解

    Vue中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结 ...

  9. SpringCloud Sidecar 整合.Net WebApi

    在整合.Net的过程中遇到不少问题,一般网上的例子只是调用一个简单的NodeJS示例,并未有详细的介绍及采坑过程. 首先,我的项目结构是:Vue前端 + SpringCloud后端 + .Net的We ...

  10. Spring Boot 2.x基础教程:使用集中式缓存Redis

    之前我们介绍了两种进程内缓存的用法,包括Spring Boot默认使用的ConcurrentMap缓存以及缓存框架EhCache.虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进 ...