必须用@dcloudio/uni-plugin-baidu-map,它是唯一支持H5、微信小程序、App三端稳定运行的百度地图插件,由DCloud官方维护,HBuilderX 3.9+内置支持,manifest.json配置后自动注入全局BMapGL对象;vue-baidu-map因依赖DOM和window,在小程序及nvue中报错,社区版uni-baidu-map普遍存在iOS权限或小程序polyfill缺失问题。

必须用 @dcloudio/uni-plugin-baidu-map,别碰 vue-baidu-map
uni-app 里集成百度地图原生能力,@dcloudio/uni-plugin-baidu-map 是唯一能跨三端(H5、微信小程序、App)稳定工作的插件。它由 DCloud 官方维护,HBuilderX 3.9+ 已内置支持,manifest.json 配置后自动注入全局 BMapGL 对象。而 vue-baidu-map 依赖 DOM 和 window 对象,在小程序和 nvue 页面中直接报 document is not defined 或 undefined is not a function;社区版 uni-baidu-map 多数未处理 iOS 权限声明或小程序 polyfill,上线后容易白屏。
manifest.json 三端 AK 必须分开填,格式不能错
百度地图对各端密钥管理严格,AK 不通用,填错就初始化失败:
- H5 端:在
"h5"节点下加"baidu_map": {"ak": "你的H5_AK"},且页面必须 HTTPS,否则 JS API 静默 403(network 面板可见,控制台无提示) - 微信小程序:在
"mp-weixin"下加"appid"字段,值为百度平台申请时填写的小程序 AppID(如wx1234567890abcdef),同时该 AppID 必须已在百度地图开放平台「小程序」类型应用中白名单备案 - App 端(Android/iOS):在
"app-plus"→"distribute"→"android"和"ios"分别配置"metaData": {"com.baidu.lbsapi.API_KEY": "你的Android_AK"}和同理 iOS AK;Android 还需手动补全权限声明:<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
初始化 BMapGL.Map 前,得先确保坐标系对齐
直接 new BMapGL.Map("container") 很可能黑屏或中心偏移——因为百度 SDK 默认使用 BD-09 坐标系,而 uni.getLocation() 返回值因平台而异:
百度地图 RTOS SDK(mapsdk-rtos)应用层集成规范与代码生成。帮助应用开发者对接 mapsdk-rtos,开发类似 rtos-mac-simulator(mapAPP)的应用层,包含初始化鉴权、地图组件控制、覆盖物(Marker/Polyline)、检索路线、离线地图、导航、Canvas 适配层等能力。当用户提到:对接 RTOS 地图 SDK、集成 mapsdk-rtos、RTOS 地图初始化、MapComponentApi、AuthLicenseApi、SearchApi、NaviApi
- 微信小程序:默认返回 gcj02,可传
{type: 'gcj02'}显式指定 - App(Android/iOS):默认 wgs84,必须加
{type: 'gcj02'}才能与百度匹配(iOS 需确认 info.plist 已声明NSLocationWhenInUseUsageDescription,否则uni.getLocation直接 fail) - H5:只返回 wgs84,必须调用百度官方转换接口:
BMapGL.Convertor.translate([lng, lat], 1, 5, callback)(1 表示 WGS84 输入,5 表示转 BD-09LL 输出)
没做这步,地图 centerAndZoom 可能落在几百公里外,搜索结果也严重漂移。
map 组件不渲染 BMapGL.Marker/Polyline,得手动桥接
你调用了 new BMapGL.Marker(point) 并 addOverlay,但 uni-app 的 <map></map> 组件根本不认这个对象——它只接受自己的 markers 和 polyline 属性格式。
-
markers要求数组项为{id: 1, latitude: xxx, longitude: xxx, iconPath: '/static/marker.png'} -
polyline要求[{points: [{latitude: xxx, longitude: xxx}], color: '#007AFF', width: 6}] - 百度路径规划返回的
drivingRoute.search()结果里,每段 polyline 是{point: {lng: xxx, lat: xxx}}结构,必须 map 转成{latitude: xxx, longitude: xxx}再塞进polyline[0].points
这是最常被忽略的一环:你以为路线数据拿到了,其实只是“拿到了”,还没“画出来”。


















