更新记录

1.1.1(2026-11-04)

修复安卓端内存泄露,支持蒸汽模式

1.1.0(2026-11-03)

路线规划完成后,往上游回调出三端的完整路线

1.0.10(2026-09-24)

更新 readme

查看更多

平台兼容性

uni-app x(4.87)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
- - 5.0 1.1.0 12 1.1.0 12 1.1.0 -

pow-tmapx 腾讯地图 UTS 插件

插件选型

地图厂商 插件 uni-app uni-app x 鸿蒙 插件市场
百度 pow-bmapx 支持 支持 不支持 查看插件
高德 pow-amapall 支持 支持 支持 查看插件
高德 pow-amapx 不支持 支持 支持 查看插件
腾讯 pow-tencentmap 支持 支持 不支持 查看插件
腾讯 pow-tmapx 不支持 支持 支持 查看插件
谷歌 pow-googlemap 支持 支持 不支持 查看插件

版本说明

  • 老版本项目在接入、升级或新增功能前,请先确认当前工程使用的是哪一套原生 SDK,再选择对应的插件版本。

  • 如果现有功能还不够,或者需要新增能力,可以在插件市场页面点击 进入交流群 联系沟通。

  • 只要原生 SDK 已经提供对应能力,插件内都可以继续支持和扩展实现。

  • 腾讯地图+定位+导航 UTS 插件,支持 Android、iOS、HarmonyOS 三端。

  • 仅支持 uniappx 项目

功能特性

已支持

  • 定位功能

    • 单次定位
    • 持续定位
    • 停止定位
    • 后台定位
    • 定位权限检查
  • 地图功能

    • 地图显示
    • 地图类型切换(普通/卫星/夜间/3D沉浸)
    • 地图控制(中心点、缩放级别)
    • 路况显示
    • 指南针、比例尺控制
    • 手势控制(缩放/拖拽/旋转/倾斜)
    • 自身位置显示
  • 覆盖物功能

    • Marker 标注(支持气泡callout)
    • 折线
    • 纹理折线
    • 圆形
    • 多边形
  • 搜索功能

    • 关键词搜索 POI
    • 周边搜索 POI
    • 地理编码(地址转坐标)
    • 逆地理编码(坐标转地址)
  • 导航功能

    • 驾车导航
    • 步行导航
    • 骑行导航
    • 货车导航
    • GPS实时导航
    • 模拟导航
    • TTS语音播报
  • 工具功能

    • 距离计算
    • 面积计算
    • 坐标转换

使用方式

  1. 在插件市场导入本插件到工程中(试用也可以)
  2. 项目根目录manifest.json 的安卓配置targetSdkVersion填 33 或者以上
  3. 【鸿蒙】把示例工程根目录中的harmony-configs复制到自己工程根目录
  4. 【鸿蒙】鸿蒙不用打自定义基座,直接仿照示例工程中的 index.uvue 中的getHarmonyAppId()方法,在自己项目中调用getHarmonyAppId()获取鸿蒙的 专属appIdentifier
  5. 申请腾讯地图的key
    1. 鸿蒙要把专属appIdentifier粘贴到腾讯地图key的申请页面
    2. 如果要用 poi 搜索功能,需要勾选 webservice 并且把 secretkey 复制下来,传到下一步骤中的 setTencentKey内
  6. 【鸿蒙,安卓,iOS】在App.uvue中的onLaunch方法中,调用插件的setTencentKey方法
  7. 【仅安卓】处理安卓打基座注意事项,在下一小节
  8. 【安卓,iOS】打自定义基座(鸿蒙不需要打)
  9. 【安卓,iOS】运行到自定义基座,【鸿蒙】直接运行
  10. 【鸿蒙,安卓,iOS】参考示例工程的index.uvue中的申请定位权限,单次定位,持续定位方法
  11. 【鸿蒙】鸿蒙平台如果想调用持续后台定位,需要参考示例工程的App.uvue,在自己工程的App.uvue的onShow调用tmapOnAppShow(),在onHide调用tmapOnAppHide()
  12. 导航使用方式可以仿照powtmap/pages/index/tmap-navi-view.uvue创建一个导航页面,然后仿照powtmap/pages/index/navi.uvue来设置导航参数
  13. 【HBuilderX的bug】【鸿蒙】hbx,试用插件鸿蒙端无法运行,不是插件问题,是 hbx 问题,要先这样绕过:把插件中的 项目根目录/uni_modules/pow-tmapx/components 目录剪切,粘贴到 uni_modules 之外,让 components 目录和 uni_modules 目录平级,变成 项目根目录/components,然后就能正常运行了

Android 云打包注意事项

1. 请在项目根目录的 manifest.json 中,为 app-android.distribute 增加下面的配置:

"app-android": {
  "distribute": {
    "targetSdkVersion": "33",
    "packagingOptions": [
      "exclude 'google/protobuf/*.proto'"
    ]
  }
}

如果你的 manifest.json 里已经有 app-android.distribute 配置,只需要把 packagingOptions 合并进去即可。

2. 在项目/uni_modules/pow-tmapx/utssdk/app-android/AndroidManifest.xml内把TencentMapSDK的value 改成自己的腾讯后台申请的key值

3. 定位功能

import { 
    getTencentLocation,
    startTencentLocation,
    stopTencentLocation,
    checkAndRequestLocationPermission
} from '@/uni_modules/pow-tmapx'

// 检查定位权限
checkAndRequestLocationPermission(res => {
    console.log('权限状态:', res)
})

// 单次定位
getTencentLocation({
    needAddress: true
}, res => {
    console.log('定位结果:', res)
    console.log('定位POI列表:', res.poiList)
})

// 持续定位
startTencentLocation({
    interval: 2000,
    needAddress: true,
}, res => {
    console.log('持续定位:', res)
    console.log('持续定位POI列表:', res.poiList)
})

// 停止定位
stopTencentLocation({}, res => {
    console.log('已停止定位')
})

4. 地图组件

<template>
    <pow-tmapx
        ref="mapRef"
        class="map"
        :center="'116.398111,39.91054'"
        :zoomLevel="12"
        @load="onMapLoad"
        @mapLoaded="onMapLoaded"
        @markerClick="onMarkerClick"
    ></pow-tmapx>
</template>

<script>
export default {
    methods: {
        onMapLoad() {
            console.log('地图加载完成')
        },
        onMapLoaded(e) {
            console.log('地图已加载')
        },
        onMarkerClick(e) {
            console.log('Marker点击:', e.detail)
        },

        // 调用地图方法
        addMarker() {
            const mapRef = this.$refs['mapRef']
            mapRef.$callMethod('addMarkers', JSON.stringify([{
                id: 'marker1',
                lat: 39.909187,
                lng: 116.397455,
                title: '天安门'
            }]))
        },

        removeSomeMarkers() {
            const mapRef = this.$refs['mapRef']
            mapRef.$callMethod('removeSomeMarkers', JSON.stringify({
                ids: ['marker1', 'marker2']
            }))
        }
    }
}
</script>

5. 工具函数

import {
    tencentLineDistance,
    tencentCalculateArea
} from '@/uni_modules/pow-tmapx'

// 计算距离
const distance = tencentLineDistance(lat1, lng1, lat2, lng2)

// 计算面积
const area = tencentCalculateArea(lat1, lng1, lat2, lng2)

6. 搜索功能

import {
    searchTencentPoisWithKeywords,
    searchTencentPoisNearby,
    searchTencentGeocode,
    searchTencentRegeocode
} from '@/uni_modules/pow-tmapx'

// 关键词搜索 POI
// 代码示例待添加

// 周边搜索 POI
// 代码示例待添加

// 地理编码
// 代码示例待添加

// 逆地理编码
// 代码示例待添加

搜索参数说明

关键词搜索参数
参数名 类型 必填 说明
keyword string 是 搜索关键词
city string 否 城市名称
pageSize number 否 每页数量,默认10
pageIndex number 否 页码,从1开始
周边搜索参数
参数名 类型 必填 说明
keyword string 是 搜索关键词
lat number 是 中心点纬度
lng number 是 中心点经度
radius number 否 搜索半径,单位米,默认1000
pageSize number 否 每页数量,默认10
pageIndex number 否 页码,从1开始
地理编码参数
参数名 类型 必填 说明
address string 是 地址文本
city string 否 城市名称(提高精度)
逆地理编码参数
参数名 类型 必填 说明
lat number 是 纬度
lng number 是 经度
getPoi boolean 否 是否返回周边POI,默认false
poiRadius number 否 POI搜索半径,单位米

7. 导航功能

导航功能分为两个页面:导航配置页面和导航视图页面。

导航配置页面 (navi.uvue)

用于设置导航参数,选择导航类型和模式。

代码示例待添加

导航视图页面 (tmap-navi-view.uvue)

实际显示导航界面的页面,使用 pow-tmap-navi 组件。

代码示例待添加

导航组件方法说明

方法名 参数 说明
calculateDriveRoute JSON字符串 规划驾车路线
calculateWalkRoute JSON字符串 规划步行路线
calculateRideRoute JSON字符串 规划骑行路线
calculateTruckRoute JSON字符串 规划货车路线
startGPSNavi 无 开始GPS实时导航
startEmulatorNavi 无 开始模拟导航
stopNavi 无 停止导航
destroy 无 销毁导航组件
onPause 无 暂停地图渲染(页面隐藏时调用)
onResume 无 恢复地图渲染(页面显示时调用)

路线规划参数说明

{
  "startLat": 39.909187,    // 起点纬度
  "startLng": 116.397455,   // 起点经度
  "endLat": 39.917839,      // 终点纬度
  "endLng": 116.397029,     // 终点经度
  "naviType": "drive",      // 导航类型: drive/walk/ride/truck
  "naviMode": "gps",        // 导航模式: gps/simulate
  "enableTTS": true,        // 是否开启语音播报
  "simulateSpeed": 60,      // 模拟导航速度(米/秒),仅模拟模式有效
  // 货车专用参数(仅 naviType 为 truck 时有效)
  "truckOptions": {
    "height": 4.2,          // 车高(米)
    "width": 2.5,           // 车宽(米)
    "length": 12,           // 车长(米)
    "weight": 20,           // 车重(吨)
    "axisCount": 4          // 轴数
  }
}

导航回调事件说明

事件名 说明 返回数据
initNavi 导航初始化 { success: boolean }
calculateRoute 路线规划结果 { success: boolean, type: string, routeId: string, points: string[], coords: Array<{lat,lon}>, path: object, paths: object[] }
startNavi 导航开始 { type: 'GPS'/'EMULATOR' }
stopNavi 导航停止 { status: string }
endNavi 导航结束 { status: string }
arriveDestination 到达目的地 { status: 'arrived' }
naviInfoUpdate 导航信息更新 { curRoadName, nextRoadName, remainDistance, remainTime, curSpeed }
locationChange 位置变化 { lat, lng, speed, bearing }
recalculateRoute 重新规划路线 { success: boolean, reason: string, routeId: string, points: string[], coords: Array<{lat,lon}>, path: object, paths: object[] }
goBack 用户点击退出按钮 { status: string }
error 错误信息 { message: string }
warning 警告信息 { message: string }

路线坐标说明

calculateRoute 和 recalculateRoute 成功时会返回路线几何数据,可用于把导航路线实时同步给其他端:

  • points: 字符串数组,每个元素格式为 "lng,lat"(经度在前,纬度在后)
  • coords: 对象数组,每个元素格式为 { lat: number, lon: number }
  • paths: 全部规划路线,每项包含 routeId、pathId、tag、allLength、allTime、trafficLightCount、tollCost、distance、points、coords
  • path: 当前选中的第一条路线,与 paths[0] 相同
  • routeId / selectedRouteId: 当前选中的路线 ID

地图组件方法

方法名 参数 说明
setCenter lat, lng, animated 设置中心点
setZoomLevel level, animated 设置缩放级别
getCenter - 获取中心点
getZoomLevel - 获取缩放级别
setMapType type 设置地图类型(1普通/2卫星/3夜间/4 3D沉浸)
showTraffic show 显示/隐藏路况
setCompassEnabled enabled 显示/隐藏指南针
setScaleControlsEnabled enabled 显示/隐藏比例尺
setZoomGesturesEnabled enabled 允许/禁止缩放手势
setScrollGesturesEnabled enabled 允许/禁止拖拽手势
setRotateGesturesEnabled enabled 允许/禁止旋转手势
setTiltGesturesEnabled enabled 允许/禁止倾斜手势
showMyLocation params 显示自身位置
addMarkers params 添加标注点
removeMarker params 移除标注点
removeSomeMarkers params 移除指定的多个标注点
removeAllMarkers - 移除所有标注点
drawPolyline params 绘制折线
removePolyline params 移除折线
removeAllPolylines - 移除所有折线
drawTexturedPolyline params 绘制纹理折线
removeTexturedPolyline params 移除纹理折线
removeAllTexturedPolylines - 移除所有纹理折线
drawCircle params 绘制圆形
removeCircle params 移除圆形
removeAllCircles - 移除所有圆形
drawPolygon params 绘制多边形
removePolygon params 移除多边形
removeAllPolygons - 移除所有多边形
setVisibleIncludeMarkers params 缩放以包含所有标注

地图组件事件

事件名 说明
load 组件加载完成
mapLoaded 地图加载完成
mapRendered 地图渲染完成
markerClick 标注点击
markerDrag 标注拖拽
cameraChange 视角改变完成
cameraChangeStart 视角开始改变

隐私、权限声明

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

需要定位权限

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

插件不采集任何数据

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

无