uni.getlocation(type: 'gcj02')是唯一能对齐高德地图的写法,因高德强制使用gcj-02坐标系,而默认wgs84会导致500米以上偏移;需分平台配key、手动加权限,否则静默失败。
直接用 uni.getlocation 拿坐标,再喂给 <map></map> 组件就能显示,但必须配对坐标系、分平台填 key、手动加权限——漏掉任一环,定位就静默失败或标记点偏移 500 米以上。
uni.getLocation(type: 'gcj02') 是唯一能对齐高德地图的写法
高德地图 SDK 内部强制使用国测局加密坐标系(GCJ-02),而 uni.getLocation 默认返回 WGS84(GPS 原始坐标)。两者混用会导致地图上标记点严重偏移,这不是“不准”,是坐标系错配。
-
type: 'wgs84':仅适用于 H5 端,<map></map>组件在 app-plus 下会无视它,直接按 GCJ-02 渲染,结果就是坐标错位 -
type: 'gcj02':app-plus 环境下有效,拿到的经纬度可直接传给<map></map>的latitude/longitude属性 - H5 端不支持
type: 'gcj02',必须单独走高德 JSAPI 的AMap.Geolocation实现定位 - 运行时可用
uni.getSystemInfoSync().platform判断环境,做分支处理
manifest.json 里 Android 和 iOS 的高德 Key 必须分开配
Android 校验包名 + SHA1,iOS 校验 Bundle ID,两者逻辑完全独立。哪怕你填同一个字符串,任一平台都会定位失败(常见错误:errCode: 10002 或无响应)。
高德地图 API 调用工具,返回原始 JSON 数据。Use when users ask about 天气、地址、坐标、周边、路线、导航、打车、行程 in China. Commands: weather, geo, regeo, search, around, detail, route, distance,...
- Android 配置路径:
"app-plus".distribute.android.maps.AMap,值为你在高德控制台为 Android 平台申请的 Key - iOS 配置路径:
"app-plus".distribute.ios.maps.AMap,值为你为 iOS 平台申请的 Key - 务必确认
packageName(Android)和bundleIdentifier(iOS)与高德控制台填写的完全一致(大小写敏感) - 云打包若用了自定义证书,SHA1 必须用该证书重新生成并填回高德控制台,否则真机调试通、云打包后失效
App 端必须显式声明定位权限,H5 端要动态加载 JSAPI
Android 和 iOS 都需要在 manifest.json 中补全权限声明,否则 uni.getLocation 直接拒绝调用;H5 端则不能靠 manifest 配置,得手动加载高德 JSAPI 脚本。
- Android 权限项(写在
"app-plus".distribute.android.permissions):<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>和<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> - iOS 不需额外配置权限字段,但
bundleIdentifier必须和 Xcode 工程中设置的一致 - H5 端要在页面
onLoad或mounted中动态创建<script></script>标签,src 指向https://webapi.amap.com/maps?v=2.0&key=你的Web服务Key - H5 的 Key 类型必须是「Web服务」,不是「Web端(JS API)」,否则逆地理编码等接口会返回「无效密钥」
map 组件 show-location="true" 不等于自动定位成功
show-location 只是开启地图内置定位按钮和蓝点显示,它依赖底层 uni.getLocation 是否真正拿到坐标。如果权限没开、Key 配错、坐标系不对,蓝点就不会出现,也不会报明显错误——只会静默失败。
- 建议主动调用
uni.getLocation,在success回调里更新<map></map>的latitude/longitude,并设scale控制缩放级别 - 失败时检查
err.errMsg:常见有"permission denied"(权限未授权)、"location not enabled"(系统定位关闭)、"fail system error"(Key 或配置问题) - 部分旧机型(如 MIUI 12 以下)会因系统限制拦截定位请求,需引导用户手动打开「精确位置」开关










