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的相互转换

附:

高德官网 - 获取精确定位

posted @ 2023-04-13 13:42  ZerlinM  阅读(1157)  评论(0)    收藏  举报