yarn add weixin-js-sdk AMap
import wx from 'weixin-js-sdk'
import AMap from 'AMap'
/**
* @description 获取定位信息
* @author ricky
* @param
* @return
*/
const isWechat = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
export const getPosition = () => {
return new Promise((resolve, reject) => {
if (isWechat) {
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function(res) {
// 通过jssdk获取经纬度,再使用百度地图websericeApi进行逆地址解析
let location = `${res.latitude},${res.longitude}`
let url = `http://api.map.baidu.com/reverse_geocoding/v3/?ak=${BMAP_KEY}&output=json&coordtype=wgs84ll&location=${location}`
resolve(res)
vm.jsonp(url).then((data) => {
setPosition(data.result.addressComponent)
})
},
fail: (err) => {
console.log(err)
reject()
}
})
} else {
// 高德地图获取定位
const map = new AMap.Map('container')
map.plugin('AMap.Geolocation', function() {
var geolocation = new AMap.Geolocation({ timeout: 8000 })
geolocation.getCurrentPosition()
AMap.event.addListener(
geolocation,
'complete',
(data) => {
setPosition(data.addressComponent, data.position.lng, data.position.lat)
resolve({
latitude: data.position.lat,
longitude: data.position.lng
})
}
// setPosition(data.addressComponent, null, null)
)
AMap.event.addListener(geolocation, 'error', (err) => {
console.log(err)
reject()
})
})
}
})
}
/**
* @description 保存地理位置信息
* @author ricky
* @param
* @return
*/
const setPosition = (position, longitude, latitude) => {
store.dispatch('setPosition', {
longitude: longitude,
latitude: latitude,
provinceCode: parseInt(Number(position.adcode) / 100) * 100,
cityCode: parseInt(Number(position.adcode) / 10000) * 10000,
areaCode: position.adcode,
province: position.province,
city: position.city,
area: position.district
})
}
腾讯地图api
http://apis.map.qq.com/ws/location/v1/ip?ip=59.58.96.18&key=youkey
3YJBZ-KMCEX-ISX45-ZMY7Z-HQPUO-RTFTJ