h5使用高德获取用户当前位置信息
在index.html文件中引入高德js文件:
key 需要从高德获取 获取key
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=xxxxf77da01xxxx"></script>
js文件
我将方法写入了单独的js文件:
locationService.js
import AMap from 'AMap'
export const locationService = {
getUserPosition: () => {
return new Promise((resolve, reject) => {
const options = {
enableHighAccuracy: true,//是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:5s
buttonPosition: 'RB', //定位按钮的停靠位置
// maximumAge: 0, // 定位结果缓存0毫秒,默认:0
// convert: true, // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true
showButton: true, // 显示定位按钮,默认:true
buttonOffset: new AMap.Pixel(10, 20), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
// showMarker: true, // 定位成功后在定位到的位置显示点标记,默认:true
// showCircle: true, // 定位成功后用圆圈表示定位精度范围,默认:true
// panToLocation: true, // 定位成功后将定位到的位置作为地图中心点,默认:true
zoomToAccuracy: true, // 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
}
AMap.plugin(['AMap.Geolocation'], () => {
var geolocation = new AMap.Geolocation(options);
geolocation.getCurrentPosition()
AMap.event.addListener(geolocation, 'complete', (result) => locationService.onComplete(result, resolve, reject))
AMap.event.addListener(geolocation, 'error', (err) => locationService.onError(err, resolve, reject))
});
});
},
onComplete: (result, resolve, reject) => {
const { lng, lat } = result.position;
window.latitude = lat;
window.longitude = lng;
resolve({
lat,
lng
})
},
onError: (err, resolve, reject) => {
reject(err)
}
};
使用:
import { locationService } from '@/services/locationService';
locationService.getUserPosition().then(result => {
console.log('result---location', result)
const { lat, lng } = result;
setTimeout(function () {
// 执行后续操作
// 此处获取到的经纬度坐标为WGS84坐标
}, 1000)
}).catch(err => {
console.log('location err:', err)
message.error('获取定位失败')
})
注意
获取到定位信息之后,在地图上展示Point时,发现定位总有偏差,查阅资料后发现用geolocation.getCurrentPosition取到的经纬度属于WGS84坐标,并不能直接用在高德地图上使用,需要转换为GCJ02火星坐标。
转换方法参考:地图坐标转换 WGS84、BD09与GCJ02的相互转换

浙公网安备 33010602011771号