uni.getlocation 的 type 参数在百度地图场景下不能设为 'gcj02',因 uni-app 底层对百度 ak 的识别逻辑会切断坐标系转换链路;h5 端强制返回 wgs84,需调用 bmapgl.convertor.translate 转 bd09;小程序和 app 端需配合对应插件,且所有百度地图 api(如 localsearch、drivingroute)仅支持 bd09 坐标系,wgs84 或 gcj-02 直接传入会导致定位偏移或搜索失败。

uni.getLocation 的 type 参数在百度地图场景下不能乱设
直接传 type: 'gcj02' 给 uni.getLocation 在百度地图集成中大概率会报错或偏移,不是参数写错了,而是 uni-app 底层对百度 AK 的识别逻辑会切断坐标系转换链路。这不是 bug,是设计限制——uni-app 的 gcj02 转换模块只适配高德/腾讯,遇到百度 AK 就静默失效。
常见错误现象:getLocation:fail translate coordinate system failed(仅 H5 和部分 App 环境)、HBuilderX 调试时无响应、打包后某些安卓机型定位漂移。
- 微信小程序:支持
type: 'gcj02',且返回的就是 GCJ-02 坐标,可直接用于百度地图初始化(但注意后续仍需转 BD09 才能搜地点或画路线) - App 端(Android/iOS):
type: 'gcj02'可用,但必须搭配@dcloudio/uni-plugin-baidu-map插件,否则返回仍是 WGS84 - H5 端:不支持
type: 'gcj02',uni.getLocation强制返回 WGS84,必须手动调用百度BMapGL.Convertor.translate转成 BD09
WGS84 → BD09 转换必须在搜索/规划前完成
百度地图所有核心能力(LocalSearch、DrivingRoute、WalkingRoute)只认 BD09 坐标系。哪怕你用 uni.getLocation({type: 'gcj02'}) 拿到的是 GCJ-02,也不能直接喂给百度 API——GCJ-02 到 BD09 是二次加密,偏差可达 100–300 米。
实操建议:
- H5 端必须走百度官方转换接口:
BMapGL.Convertor.translate([lng, lat], 1, 5, callback),其中1表示输入为 WGS84,5表示输出为 BD09LL - 小程序和 App 端推荐封装一个
wgs84ToBd09函数(别用网上通用算法),精度差一点,路线就飘出街道 - 转换必须同步完成:不能把
drivingRoute.search()写在translate回调里再调,否则异步时序导致坐标未就位,polyline 就是空数组
三端 LocalSearch 构造时 bounds 不设等于白搜
new BMapGL.LocalSearch(map, { bounds: ... }) 的 bounds 参数不是可选的。不传,百度默认全国范围搜索,结果只会返回“北京市”“上海市”这种一级行政区,根本找不到“国贸地铁站”这类 POI。
百度热榜监控 | Baidu Hot Topics Monitor. 获取百度热搜榜、搜索趋势、关键词热度 | Get Baidu trending searches, trends, keyword popularity. 触发词:百度、热搜、baidu.
正确做法是基于当前定位点构造一个合理范围的矩形边界:
- 先拿到 BD09 坐标(经转换后)
- 用
new BMapGL.Point(lng, lat)创建中心点 - 手动计算西南角(SW)和东北角(NE):比如经纬度 ±0.02°(约 2km 半径),再 new BMapGL.Bounds(swPoint, nePoint)
- 把这个
Bounds实例传进LocalSearch配置项
map 组件 provider 和插件初始化必须严格匹配平台
同一个 map 标签,在不同平台背后加载的是完全不同的 SDK 实例,provider 值和插件初始化方式不能混用。
关键差异点:
- H5 端:
provider不生效,必须动态加载https://api.map.baidu.com/api?v=3.0&ak=xxx,再 new BMapGL.Map('#container') - 微信小程序:必须用插件市场
uni-baidu-map,map标签加provider="baidu",且search()只接受字符串地址(如 "北京南站"),不接受坐标 - App 端:依赖
@dcloudio/uni-plugin-baidu-map,manifest.json里要填com.baidu.lbsapi.API_KEY,search()必须传{latitude, longitude}对象
最容易被忽略的是:H5 加载百度 API 必须用 HTTPS,HTTP 协议下脚本会被浏览器拦截;而小程序插件若没在 manifest.json 正确配置 AK,undefined is not a function 这类错误不会告诉你缺了啥,只报构造失败。










