更新记录
2.0.0(2026-05-17) 下载此版本
初次提交
平台兼容性
uni-app
| Vue2 | Vue3 | Chrome | Chrome插件版本 | Safari | Safari插件版本 | app-vue | app-nvue | app-nvue插件版本 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | √ | 2.0.0 | √ | 2.0.0 | - | √ | 2.0.0 | 10.0 | 12 | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.87)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | 5.0 | 12 | 12 | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
laoqianjunzi-amap
面向 uni-app x 的高德地图运行时插件。插件采用“运行时引导 + 组件画布 + 会话式 API”的组织方式,覆盖地图渲染、定位、检索、路径规划、导航、离线地图、轨迹、围栏、签到、通勤卡片和语音播报等场景。
当前仓库内已包含完整示例中心,适合两类场景:
- 作为业务项目中的高德地图基础设施,直接接入地图、定位与规划能力。
- 作为二次开发底座,沿着现有
utssdk、组件层和示例页继续扩展业务能力。
1. 插件特点
- 运行时统一入口:通过
bootAmapRuntime一次性注入各平台 Key。 - 组件层直连地图画布:提供
amap-map、amap-journey、amap-offline三个组件入口。 - 会话式领域 API:按能力拆分为定位、检索、轨迹、围栏、签到、导航、通勤等多个 Session。
- 多端实现分层清晰:
app-android、app-ios、app-harmony、web、mp-weixin分平台组织。 - 示例页可直接运行:插件内置完整 demo 页面,便于快速验证 Key、权限、交互和地图效果。
2. 能力总览
插件源码当前已覆盖以下能力:
| 能力分类 | 说明 |
|---|---|
| 地图渲染 | 地图画布、标记点、折线、圆、面、多气泡、海量点、聚合点、截图、平滑移动 |
| 定位能力 | 单次定位、连续定位、后台定位、定位跟随、精度圈、权限申请 |
| 检索能力 | 地理编码、逆地理编码、周边检索、关键词检索 |
| 路径规划 | 驾车、步行、骑行、公交换乘、多路径、货车路径、驾车距离测量 |
| 导航能力 | 导航准备、导航启动、巡航、离线面板、前后台状态通知 |
| 业务场景 | 地理围栏、位置签到、通勤卡片、轨迹记录、轨迹平滑、轨迹回放、起终点选点 |
| 辅助能力 | 语音播报、资源路径解析、运行时状态读取、能力快照读取 |
更完整的“高德官方示例与本插件实现状态”对照请查看同目录下的 doc.md。
3. 目录结构
uni_modules/laoqianjunzi-amap/
├─ components/
│ ├─ amap-map/ 地图画布组件
│ ├─ amap-journey/ 导航画布组件
│ ├─ amap-offline/ 离线地图面板组件
│ └─ amap-scenario/ 综合示例场景组件
├─ pages/demo/ 示例页入口
├─ utssdk/
│ ├─ public.uts 对外公开 API
│ ├─ interface.uts 类型定义
│ ├─ runtime.uts 运行时状态与桥接
│ ├─ app-android/ Android 平台实现
│ ├─ app-ios/ iOS 平台实现
│ ├─ app-harmony/ Harmony 平台实现
│ ├─ web/ Web 平台实现
│ └─ mp-weixin/ 微信小程序适配层
├─ demo-keys.uts 示例 Key 存取工具
├─ doc.md 能力对照文档
└─ readme.md 当前说明文档
4. 环境要求
HBuilderX:建议5.07及以上。uni-app x:建议4.87及以上。- Android:
minSdkVersion 21。 - iOS:
deploymentTarget 12。 - Harmony:插件已包含
@amap/amap_lbs_*相关依赖声明。
5. 接入前必读
5.1 隐私合规
地图、定位、导航属于敏感能力,接入前请先处理隐私合规:
- 在向用户展示隐私协议时调用
markAmapPrivacyVisible()。 - 在用户明确同意隐私协议后再调用
markAmapPrivacyAccepted()。 - 在用户同意隐私协议前,不要发起定位、导航、周边检索等依赖敏感权限的调用。
推荐在应用启动阶段完成隐私状态标记,再执行运行时初始化。
5.2 Key 配置
插件支持在运行时传入多平台 Key:
android:Android 原生 SDK Key。ios:iOS 原生 SDK Key。harmony:Harmony 原生 SDK Key。web:高德 Web 服务 Key,公交换乘、多路径、货车路径等 REST 能力建议优先配置该值。
5.3 原生能力说明
本插件包含 Android、iOS、Harmony 原生 SDK 依赖:
- Android 依赖:
com.amap.api:navi-3dmap-location-search:10.0.700_3dmap10.0.700_loc6.4.5_sea9.7.2 - iOS Pods:
AMapNavi 10.1.600、AMapLocation 2.11.0、AMapSearch 9.7.4 - Harmony 依赖:
@amap/amap_lbs_common、@amap/amap_lbs_location、@amap/amap_lbs_navi、@amap/amap_lbs_map3d、@amap/amap_lbs_search
如果你在真机调试 App 端原生能力,请优先使用支持原生插件的调试方式,并确保本地环境已正确集成原生依赖。
6. 运行时初始化
最小可用初始化流程如下:
import {
bootAmapRuntime,
markAmapPrivacyAccepted,
markAmapPrivacyVisible
} from "@/uni_modules/laoqianjunzi-amap"
function setupAmapRuntime() {
markAmapPrivacyVisible()
markAmapPrivacyAccepted()
bootAmapRuntime({
android: "你的 Android Key",
ios: "你的 iOS Key",
harmony: "你的 Harmony Key",
web: "你的 Web 服务 Key"
})
}
建议:
- 在应用启动后尽早调用
bootAmapRuntime。 - 如果你的 Key 需要持久化,可参考插件内
pages/demo/demo.uvue与demo-keys.uts的做法。 - 若只使用 App 原生地图,也建议保留
webKey,便于直接启用公交换乘、多路径和货车路径 REST 能力。
7. 快速开始
7.1 页面中放置地图组件
<template>
<view class="page-shell">
<amap-map ref="mapRef" class="map-stage" @load="onMapReady"></amap-map>
</view>
</template>
<script setup lang="uts">
const mapRef = ref<ComponentPublicInstance | null>(null)
function onMapReady() {
mapRef.value?.$callMethod("patchViewport", JSON.stringify({
lat: 39.917839,
lon: 116.397029,
zoom: 14
}))
mapRef.value?.$callMethod("renderScene", JSON.stringify({
markers: [
{ id: "campus_gate", lat: 39.917839, lon: 116.397029, title: "校门", anchor: "bottomCenter" }
]
}))
}
</script>
<style>
.page-shell {
flex: 1;
}
.map-stage {
width: 100%;
height: 420px;
}
</style>
7.2 调用定位会话
import { createLocateSession } from "@/uni_modules/laoqianjunzi-amap"
const locateSession = createLocateSession()
function locateOnce() {
locateSession.capture({ needAddress: true }, (packet) => {
if ((packet.getNumber("code") ?? -1) != 0) {
console.log("定位失败", packet)
return
}
console.log("定位成功", packet.getNumber("lat"), packet.getNumber("lon"), packet.getString("address"))
})
}
7.3 调用检索与路线规划
import { createSearchSession } from "@/uni_modules/laoqianjunzi-amap"
const searchSession = createSearchSession()
function planDriveDemo() {
searchSession.planDriveAlternatives(39.917839, 116.397029, 39.920210, 116.401480, 10, (packet) => {
if ((packet.getNumber("code") ?? -1) != 0) {
console.log("规划失败", packet)
return
}
let paths = packet.getArray("paths") as UTSJSONObject[] | null
console.log("候选路线数量", paths?.length ?? 0)
})
}
8. 组件说明
8.1 amap-map
地图主组件,适合承载地图、覆盖物、轨迹、聚合、截图等能力。
已暴露的方法如下:
| 方法名 | 说明 |
|---|---|
patchViewport(viewportText) |
更新中心点、缩放级别、地图样式等视口参数 |
patchPanels(panelText) |
更新文字标注、3D 楼块、滚动共存等面板配置 |
renderScene(sceneText) |
渲染 markers、polylines、circles、polygons、denseLayer、heatCloud |
renderClusterScene(sceneText) |
以聚合模式渲染点位 |
refreshClusterScene() |
在缩放变化后刷新聚合结果 |
clearClusterScene() |
清除聚合模式上下文 |
focusScene(focusText) |
聚焦指定 marker 或视野范围 |
trackDevice(trackText) |
控制是否显示用户定位点、是否跟随定位 |
animateMarker(moveText) |
让 marker 按轨迹平滑移动 |
captureSnapshot() |
截图当前地图并通过事件返回结果 |
clearScope(scope) |
清理覆盖物或全部渲染结果 |
readViewport() |
读取当前视口信息 |
常用事件:
loadmapLoadedmapRenderedmarkerClickmarkerDragcameraChangecameraChangeStartdenseTapmapTapmapLongPresssnapshotReady
8.2 amap-journey
导航画布组件,主要用于导航路线预置与导航启动。
已暴露的方法如下:
| 方法名 | 说明 |
|---|---|
stagePlan(planText) |
设置导航路线与导航参数 |
begin(modeText) |
启动导航,典型值为 gps 或 simulate |
halt() |
停止导航 |
组件会通过 journeyEvent 向外转发导航回调。
8.3 amap-offline
离线地图面板组件,适合放入离线地图管理页面。非 App 平台下会退化为空壳视图。
9. Session API 说明
插件把业务能力拆成多个 Session,便于按需创建、按需使用:
| 工厂函数 | 用途 |
|---|---|
createLocateSession() |
定位、前后台权限、通知权限、电池优化、亮屏控制 |
createSearchSession() |
地理编码、逆地理、周边检索、关键词检索、路线规划、距离测量、坐标转换 |
createTrackSession() |
轨迹记录、追加点、平滑、回放、快照 |
createOverlaySession() |
覆盖物选中、取消选中、读取当前选中态 |
createCheckinSession() |
一键签到,整合定位、逆地理编码和距离判断 |
createJourneySession() |
导航准备、导航启动、巡航、离线面板、前后台状态通知 |
createCommuteSession() |
通勤卡片生成,同时组合驾车与公交规划结果 |
createSpeechSession() |
TTS 语音播报 |
createFenceSession() |
圆形围栏监测、进入离开事件 |
9.1 定位 Session 常用方法
| 方法名 | 说明 |
|---|---|
requestForegroundGrant(callback) |
请求前台定位权限 |
requestBackgroundGrant(callback) |
请求后台定位权限 |
requestNoticeGrant(callback) |
请求通知权限 |
readBatteryPolicy(callback) |
检查电池优化策略 |
openBatteryPolicy(callback) |
跳转电池优化设置 |
setScreenWake(active) |
控制常亮 |
capture(options, callback) |
单次定位 |
startStream(options, callback) |
连续定位 |
stopStream(callback) |
停止连续定位 |
options 常见字段:
needAddress:是否需要地址信息。interval:连续定位间隔。background:是否后台定位。noticeTitle:后台定位通知标题。desiredAccuracy:期望精度。
9.2 检索 Session 常用方法
| 方法名 | 说明 |
|---|---|
geocode(addressText, cityText, callback) |
地址转坐标 |
reverseGeocode(lat, lon, callback) |
坐标转地址 |
searchAround(lat, lon, radius, callback) |
周边 POI 检索 |
searchKeyword(keywordText, cityText, lat, lon, callback) |
关键词检索 |
planDrive(...) |
驾车规划 |
planWalk(...) |
步行规划 |
planRide(...) |
骑行规划 |
planDriveAlternatives(...) |
多路径驾车规划 |
planTransit(...) |
公交换乘规划 |
planTransitWithStrategy(...) |
带策略的公交换乘规划 |
planTruckPreview(...) |
货车路径规划 |
measureDrive(...) |
驾车距离测量 |
convertPoint(...) |
坐标转换 |
measureLine(...) |
直线距离 |
measureArea(...) |
区域面积 |
9.3 轨迹 Session 常用方法
| 方法名 | 说明 |
|---|---|
startRecord(name) |
开始记录轨迹 |
appendPoint(lat, lon, extras) |
手动追加轨迹点 |
appendLocationPacket(packet) |
直接把定位结果写入轨迹 |
readRecord() |
读取轨迹快照 |
stopRecord() |
停止记录 |
clearRecord() |
清空记录 |
buildReplay(markerId, options) |
生成轨迹回放参数 |
smoothPath(points, options) |
平滑轨迹点序列 |
10. 全局辅助 API
| API | 说明 |
|---|---|
bootAmapRuntime(keys) |
初始化运行时 |
markAmapPrivacyVisible() |
标记隐私协议已展示 |
markAmapPrivacyAccepted() |
标记隐私协议已同意 |
inspectAmapFeatureSet() |
读取当前平台能力快照 |
readAmapRuntimeState() |
读取运行时状态、Key 注入情况、隐私状态 |
resolveAmapAssetPath(inputPath, success, fail) |
资源路径转换 |
readAmapBundleId() |
读取当前包标识 |
readAmapAppToken() |
读取运行时应用 Token |
reportAmapUnavailable(featureName, callback) |
统一返回未启用能力提示 |
buildAmapReceipt(code, message, extras) |
构造标准回执包 |
11. 示例页入口
插件已内置示例中心,建议先跑通 demo 再接入业务页面。
主入口:
pages/demo/demo.uvue
已提供的独立示例页:
| 页面 | 路径 | 用途 |
|---|---|---|
| 公交换乘 | pages/demo/transit-demo.uvue |
预览首条公交方案 |
| 多路径展示 | pages/demo/multi-route-demo.uvue |
展示多条候选路线 |
| 地理围栏 | pages/demo/fence-demo.uvue |
输出进入、离开、圈内事件 |
| 货车路径 | pages/demo/truck-route-demo.uvue |
货车路线与沿线能力演示 |
| 地图增强 | pages/demo/map-tools-demo.uvue |
截图、聚合、气泡、选中、平滑移动 |
| 位置签到 | pages/demo/checkin-demo.uvue |
一键签到 |
| 通勤卡片 | pages/demo/commute-demo.uvue |
驾车与公交双方案对比 |
| 地图选点 | pages/demo/picker-demo.uvue |
屏幕中心选点与周边检索 |
| 起终点选择 | pages/demo/trip-search-demo.uvue |
出行类选点流程 |
| 定位精度圈 | pages/demo/location-circle-demo.uvue |
定位精度圈扩散效果 |
| 跨端定位 | pages/demo/cross-locate-demo.uvue |
定位能力快照、单次定位、连续定位 |
| 地图服务切换 | pages/demo/switch-map-demo.uvue |
预留地图服务切换场景 |
12. 平台差异说明
- App 端是核心能力载体,地图画布、导航、离线面板等能力优先以 App 侧为准。
amap-journey与amap-offline在非 App 平台下会退化为空壳视图,不应按完整导航能力预期使用。- Web 侧存在运行时实现,适合做部分地图与服务能力接入;但导航、离线等原生能力不建议按 App 同等级能力理解。
- 源码中包含
mp-weixin目录,说明存在小程序适配层;如在小程序中使用,请先针对实际业务能力逐项验证。
13. 权限与配置说明
13.1 Android
插件内已声明以下关键权限与组件:
INTERNETACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIONACCESS_BACKGROUND_LOCATIONPOST_NOTIFICATIONSFOREGROUND_SERVICEREQUEST_IGNORE_BATTERY_OPTIMIZATIONSWAKE_LOCK- 高德定位服务与导航、离线地图相关 Activity
如果你的业务不需要后台定位、通知或电池优化处理,请在最终发版前结合业务合规要求再次核对权限清单。
13.2 iOS
插件内已包含以下关键声明:
NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescriptionNSMotionUsageDescriptionUIBackgroundModes中的location、audio
请根据你的实际业务文案,把权限描述修改为能准确说明用途的正式文本。
14. 常见问题
14.1 返回 code = -9,提示“运行时尚未注册”
说明你在调用 Session 或地图组件之前,没有完成运行时初始化。请先确认:
- 已调用
bootAmapRuntime(...) - 地图组件已触发
load或ready - 页面内通过
ref拿到组件实例后再调用$callMethod
14.2 公交换乘、多路径或货车路径失败
这类能力依赖高德 Web 服务接口,请重点检查:
bootAmapRuntime是否配置了可用的webKey- Key 是否已开通对应服务权限
- 真机网络是否正常
14.3 定位无结果或一直失败
请依次排查:
- 用户是否已同意隐私协议
- 是否已调用
markAmapPrivacyVisible()和markAmapPrivacyAccepted() - 是否已授予前台定位权限
- 是否错误地在非 App 平台期待原生定位或后台定位效果
14.4 导航与离线地图在 Web 不可用
这是预期行为。导航画布和离线面板主要面向 App 原生能力,Web 侧不应按完整原生能力使用。
15. 推荐接入顺序
如果你是第一次集成本插件,推荐按以下顺序推进:
- 先在
pages/demo/demo.uvue中填入各平台 Key,确认示例中心能启动。 - 先打通
createLocateSession()的权限申请和单次定位。 - 再接入
amap-map,完成基础地图与 marker 渲染。 - 最后按业务选择接入检索、路线规划、导航、签到、围栏、轨迹等高级能力。
16. 参考文件
uni_modules/laoqianjunzi-amap/doc.md:官方示例与插件能力对照。uni_modules/laoqianjunzi-amap/pages/demo/demo.uvue:运行时初始化、Key 存储、示例入口。uni_modules/laoqianjunzi-amap/components/amap-scenario/amap-scenario.uvue:综合示例的实际调用方式。uni_modules/laoqianjunzi-amap/utssdk/public.uts:公开 API 与 Session 实现。uni_modules/laoqianjunzi-amap/utssdk/interface.uts:公开类型定义。
如果你准备继续完善插件,建议先从示例页反推 API 使用方式,再回到 utssdk/public.uts 和各平台实现层逐步扩展。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-amap
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1139
赞赏 2
下载 11941764
赞赏 1914
赞赏
京公网安备:11010802035340号