uniapp 打包执行命令npx @dcloudio/uvm@latest后,在ios上map的api--getCenterLocation getRegion等api返回都是{}拿不到经纬度

uniapp 打包执行命令npx @dcloudio/uvm@latest后,在ios上map的api–getCenterLocation getRegion等api返回都是{}拿不到经纬度

开发环境 版本号 项目创建方式
Mac macOS Sonoma 14.4 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:4.24

手机系统:iOS

手机系统版本号:iOS 18

手机厂商:苹果

手机机型:15

页面类型:vue

vue版本:vue3

打包方式:云端

项目创建方式:HBuilderX


操作步骤:

onReady(() => {
	setTimeout(() => {
		mapContext.value = uni.createMapContext('myMap', instance);
		console.log(mapContext.value)  
	
	setTimeout(() => {  
	  mapContext.value.getCenterLocation({  
		success: (locationRes) => {  
		  console.log('中心点')  
		  console.log(locationRes)  
		}  
	  })  
	},1000)  

	setTimeout(() => {  
	  mapContext.value.getRegion({  
		success: (regionRes) => {  
		  console.log('范围regionRes')  
		  console.log(regionRes)  
		}  
	  })  
	},1000)  
}, 500);

预期结果:

onReady(() => {
	setTimeout(() => {
		mapContext.value = uni.createMapContext('myMap', instance);
		console.log(mapContext.value)  
	
	setTimeout(() => {  
	  mapContext.value.getCenterLocation({  
		success: (locationRes) => {  
		  console.log('中心点')  
		  console.log(locationRes)  
		}  
	  })  
	},1000)  

	setTimeout(() => {  
	  mapContext.value.getRegion({  
		success: (regionRes) => {  
		  console.log('范围regionRes')  
		  console.log(regionRes)  
		}  
	  })  
	},1000)  
}, 500);

实际结果:

onReady(() => {
	setTimeout(() => {
		mapContext.value = uni.createMapContext('myMap', instance);
		console.log(mapContext.value)  
	
	setTimeout(() => {  
	  mapContext.value.getCenterLocation({  
		success: (locationRes) => {  
		  console.log('中心点')  
		  console.log(locationRes)  
		}  
	  })  
	},1000)  

	setTimeout(() => {  
	  mapContext.value.getRegion({  
		success: (regionRes) => {  
		  console.log('范围regionRes')  
		  console.log(regionRes)  
		}  
	  })  
	},1000)  
}, 500);

2 回复

我解决了


这个问题通常是由于iOS平台地图组件初始化延迟导致的。建议尝试以下解决方案:

  1. 确保地图组件完全加载后再调用API:
onReady(() => {
    mapContext.value = uni.createMapContext('myMap', instance);
    
    // 增加更长的延迟时间
    setTimeout(() => {
        mapContext.value.getCenterLocation({
            success: (res) => {
                console.log('中心点:', res)
            },
            fail: (err) => {
                console.error('获取中心点失败:', err)
            }
        })
    }, 2000) // 增加到2秒延迟
})
  1. 检查manifest.json中是否配置了地图权限:
"ios": {
    "permissions": {
        "maps": true
    }
}
回到顶部