uni-app iOS 调用map地图getUserLocation方法获取point,首次能获取point,之后调用point值不再改变

uni-app iOS 调用map地图getUserLocation方法获取point,首次能获取point,之后调用point值不再改变

操作步骤:

h5+页面,介面使用地图控件, 页面plusReady时执行map = new plus.maps.Map("idMap"); 刷新按钮执行以下地图定位方法获取坐标point

map.getUserLocation(function(state, point) {
if (0 == state) {
mui.alert(JSON.stringify(point));
}
}

Android和iOS 执行一次,然后移动位置再执行以上方法

iOS执行第一次能获取point,之后再调用point的值就不会改变
试过要这样才能正常

map.close();
map = new plus.maps.Map("idMap");
map.getUserLocation(function(state, point) {
}

预期结果:

应该可以正确获取坐标point

实际结果:

Android 每次能正确获取坐标point; iOS执行第一次能获取point,之后再调用point的值就不会改变
测试过要每次刷新前先close重新创建地图对象才能正常获取point值

map.close();
map = new plus.maps.Map("idMap");
map.getUserLocation(function(state, point) {
}

bug描述:

iOS 调用map地图getUserLocation方法获取point,第一次能获取point,之后再调用point的值就不会改变

信息类型 信息内容
产品分类 HTML5+
版本号 3.2.9
手机系统 iOS
系统版本号 IOS 14
手机厂商 苹果
手机机型 12
打包方式 云端

更多关于uni-app iOS 调用map地图getUserLocation方法获取point,首次能获取point,之后调用point值不再改变的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app iOS 调用map地图getUserLocation方法获取point,首次能获取point,之后调用point值不再改变的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个iOS平台上的已知问题,与HTML5+地图组件的缓存机制有关。iOS系统在首次调用getUserLocation()时会获取实时位置,但后续调用可能返回缓存的定位结果,而不是重新获取最新位置。

解决方案:

  1. 强制刷新定位(推荐): 在调用getUserLocation()前,先调用map.setCenter()设置一个无效坐标,触发定位刷新:

    // 先设置一个无效中心点强制刷新
    map.setCenter(new plus.maps.Point(0, 0));
    map.getUserLocation(function(state, point) {
        if (0 == state) {
            mui.alert(JSON.stringify(point));
        }
    });
    
  2. 使用原生定位API: 如果只需要获取位置而不需要地图显示,建议使用plus.geolocation

    plus.geolocation.getCurrentPosition(function(pos) {
        var point = new plus.maps.Point(pos.coords.longitude, pos.coords.latitude);
        mui.alert(JSON.stringify(point));
    }, function(e) {
        console.log("定位失败:" + e.message);
    }, {
        enableHighAccuracy: true,
        timeout: 10000
    });
回到顶部