更新记录

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-mapamap-journeyamap-offline 三个组件入口。
  • 会话式领域 API:按能力拆分为定位、检索、轨迹、围栏、签到、导航、通勤等多个 Session。
  • 多端实现分层清晰:app-androidapp-iosapp-harmonywebmp-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.600AMapLocation 2.11.0AMapSearch 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.uvuedemo-keys.uts 的做法。
  • 若只使用 App 原生地图,也建议保留 web Key,便于直接启用公交换乘、多路径和货车路径 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() 读取当前视口信息

常用事件:

  • load
  • mapLoaded
  • mapRendered
  • markerClick
  • markerDrag
  • cameraChange
  • cameraChangeStart
  • denseTap
  • mapTap
  • mapLongPress
  • snapshotReady

8.2 amap-journey

导航画布组件,主要用于导航路线预置与导航启动。

已暴露的方法如下:

方法名 说明
stagePlan(planText) 设置导航路线与导航参数
begin(modeText) 启动导航,典型值为 gpssimulate
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-journeyamap-offline 在非 App 平台下会退化为空壳视图,不应按完整导航能力预期使用。
  • Web 侧存在运行时实现,适合做部分地图与服务能力接入;但导航、离线等原生能力不建议按 App 同等级能力理解。
  • 源码中包含 mp-weixin 目录,说明存在小程序适配层;如在小程序中使用,请先针对实际业务能力逐项验证。

13. 权限与配置说明

13.1 Android

插件内已声明以下关键权限与组件:

  • INTERNET
  • ACCESS_FINE_LOCATION
  • ACCESS_COARSE_LOCATION
  • ACCESS_BACKGROUND_LOCATION
  • POST_NOTIFICATIONS
  • FOREGROUND_SERVICE
  • REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
  • WAKE_LOCK
  • 高德定位服务与导航、离线地图相关 Activity

如果你的业务不需要后台定位、通知或电池优化处理,请在最终发版前结合业务合规要求再次核对权限清单。

13.2 iOS

插件内已包含以下关键声明:

  • NSLocationWhenInUseUsageDescription
  • NSLocationAlwaysUsageDescription
  • NSLocationAlwaysAndWhenInUseUsageDescription
  • NSMotionUsageDescription
  • UIBackgroundModes 中的 locationaudio

请根据你的实际业务文案,把权限描述修改为能准确说明用途的正式文本。

14. 常见问题

14.1 返回 code = -9,提示“运行时尚未注册”

说明你在调用 Session 或地图组件之前,没有完成运行时初始化。请先确认:

  • 已调用 bootAmapRuntime(...)
  • 地图组件已触发 loadready
  • 页面内通过 ref 拿到组件实例后再调用 $callMethod

14.2 公交换乘、多路径或货车路径失败

这类能力依赖高德 Web 服务接口,请重点检查:

  • bootAmapRuntime 是否配置了可用的 web Key
  • Key 是否已开通对应服务权限
  • 真机网络是否正常

14.3 定位无结果或一直失败

请依次排查:

  • 用户是否已同意隐私协议
  • 是否已调用 markAmapPrivacyVisible()markAmapPrivacyAccepted()
  • 是否已授予前台定位权限
  • 是否错误地在非 App 平台期待原生定位或后台定位效果

14.4 导航与离线地图在 Web 不可用

这是预期行为。导航画布和离线面板主要面向 App 原生能力,Web 侧不应按完整原生能力使用。

15. 推荐接入顺序

如果你是第一次集成本插件,推荐按以下顺序推进:

  1. 先在 pages/demo/demo.uvue 中填入各平台 Key,确认示例中心能启动。
  2. 先打通 createLocateSession() 的权限申请和单次定位。
  3. 再接入 amap-map,完成基础地图与 marker 渲染。
  4. 最后按业务选择接入检索、路线规划、导航、签到、围栏、轨迹等高级能力。

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 和各平台实现层逐步扩展。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

请根据地图、定位、检索与导航能力按需声明权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。