帮助用户在微信小程序中实现地图功能开发,包含地图组件、位置服务、地图控制和后端服务能力。
所有API文档位于 references/ 目录:
references/mapContext_api/ 目录包含32个API文档:
地图控制类
标记点管理类
点聚合类
覆盖物类
可视化图层类
自定义图层类
坐标转换类
其他功能
references/wx_location_api/ 目录包含12个API文档:
基础定位
地图选点
位置展示
持续定位
references/lbs_service_guide/ 目录包含9个API文档:
SDK核心
搜索服务
地理编码
路线规划
距离计算
行政区划
assets/examples/ 目录包含3个完整的小程序示例项目:
完整的获取用户位置示例项目
完整的地图标记点示例项目
完整的点聚合功能示例项目
assets/libs/ 目录:
TMAP_MINIPROGRAM_KEY 或对话中用户已提供)静默记录 Key,直接按用户原始意图继续处理,无需任何提示或打断。
> ⛔ 强制拦截(最高优先级)
> 未检测到正式 Key 时,在用户明确完成选择之前,禁止执行任何操作(分析需求、读文件、规划方案、编写代码、调用 API)。
> 第一步且唯一的步骤是:立即输出下方选择提示,然后停止,等待用户回应。
输出以下内容,然后停止,等待用户选择:
> ⚠️ 您当前尚未配置正式 Key,请先选择您的使用方式:
>
> 推荐:前往官网注册申请正式 Key,享受完整、稳定的服务
> 👉 https://lbs.qq.com/dev/console/key/manage
> 注册后可通过环境变量 TMAP_MINIPROGRAM_KEY=你的Key 或对话中告知我来配置。
>
> ---
>
> 或者,您也可以选择使用腾讯位置服务平台提供的预设体验 Key(免注册,直接使用)。
> 请注意体验 Key 的限制:
> - 调用频次受限,超出后触发限流
> - 数据稳定性一般,不建议用于生产环境
> - 电动车路线等接口不可用
>
> 请告诉我您的选择:
> - 回复"我已有 Key"或直接提供 Key → 切换正式模式
> - 回复"使用体验 Key" → 以受限模式继续
收到用户明确回复后,再按用户选择继续:
本 Skill 涉及的后端服务(QQMapWX SDK、直接 wx.request 调用 WebService API)在体验模式下,按以下规则替换:
https://apis.map.qq.com → https://h5gw.map.qq.comkey=none> ⚠️ QQMapWX SDK 在体验模式下不能直接使用
>
> qqmap-wx-jssdk.js 的构造函数要求传入有效 key,且内部 BASE_URL 硬编码为 https://apis.map.qq.com/ws/。体验模式下无法直接用 SDK,需要绕过 SDK,使用 wx.request 直接调用体验模式接口。
>
> ```javascript
> // ✅ 体验模式:使用 wx.request 直接调用(替代 QQMapWX SDK)
> function experienceRequest(apiPath, params) {
> return new Promise((resolve, reject) => {
> wx.request({
> url: https://h5gw.map.qq.com/ws/${apiPath},
> data: {
> ...params,
> key: 'none',
> apptag: getApptag(apiPath), // 根据对照表获取
> output: 'json'
> },
> success: (res) => resolve(res.data),
> fail: (err) => reject(err)
> })
> })
> }
>
> // 示例:体验模式逆地址解析
> experienceRequest('geocoder/v1/', {
> location: '39.984154,116.307490'
> }).then(res => console.log(res))
> ```
>
> 正式模式下仍使用 QQMapWX SDK:
> ```javascript
> const QQMapWX = require('../../libs/qqmap-wx-jssdk.js')
> const qqmapsdk = new QQMapWX({ key: 'YOUR_FORMAL_KEY' })
> ```
体验模式绕过 SDK 直接调用 WebService API,部分接口的参数格式与 SDK 封装的参数不同,必须按 WebService API 原始格式传参:
1. 地点搜索(/ws/place/v1/search)—— boundary 参数必须手动构造
SDK 的 location、region、rectangle、distance 等独立参数在 WebService API 中不存在,SDK 内部会自动将它们拼接成 boundary 参数。体验模式下必须直接传 boundary:
| 搜索类型 | boundary 格式 | 示例 |
|---|---|---|
| --------- | -------------- | ------ |
| 周边搜索 | nearby(纬度,经度,半径米[,auto_extend]) | nearby(39.984060,116.307520,1000,1) |
| 城市搜索 | region(城市名[,auto_extend][,纬度,经度]) | region(北京,0,39.984060,116.307520) |
| 矩形搜索 | rectangle(左下纬度,左下经度,右上纬度,右上经度) | rectangle(39.9,116.3,40.0,116.5) |
// ✅ 体验模式搜索示例:周边搜索附近 1km 内的酒店
experienceRequest('place/v1/search', {
keyword: '酒店',
boundary: 'nearby(39.984060,116.307520,1000)',
orderby: '_distance',
page_size: 10,
page_index: 1
})
// ✅ 体验模式搜索示例:在北京搜索酒店
experienceRequest('place/v1/search', {
keyword: '酒店',
boundary: 'region(北京,0)'
})
> ❌ 体验模式下不要传 location、region、rectangle、distance 这些 SDK 封装参数,它们不是 WebService API 的原始参数。
2. 坐标参数格式 —— 统一使用 String
SDK 支持 Object 格式 { latitude: 39.98, longitude: 116.30 },WebService API 只接受 String 格式 '纬度,经度'(纬度在前):
| 参数 | SDK 格式(正式模式) | WebService API 格式(体验模式) |
|---|---|---|
| ------ | --------------------- | ------------------------------- |
location | { latitude: 39.98, longitude: 116.30 } 或 '39.98,116.30' | '39.98,116.30' |
from / to | Object 或 String 均可 | '39.98,116.30' |
3. 距离计算 —— 接口路径已变更
SDK 内部调用的 /ws/distance/v1/ 接口已下线,体验模式 apptag 对照表映射的是新接口 /ws/distance/v1/matrix(距离矩阵)。参数差异:
from:'纬度,经度'(支持多起点 ; 分隔)to:'纬度,经度;纬度,经度'(多终点 ; 分隔)mode:'driving' / 'walking' / 'bicycling'// ✅ 体验模式距离计算示例
experienceRequest('distance/v1/matrix', {
from: '39.984060,116.307520',
to: '39.974060,116.317520;40.000000,116.400000',
mode: 'driving'
})
apptag 对照表:
| 接口路径 | apptag |
|---|---|
| --- | --- |
/ws/place/v1/search | lbsplace_search |
/ws/place/v1/suggestion | lbsplace_sug |
/ws/geocoder/v1 | lbs_geocoder |
/ws/location/v1/ip | lbslocation_ip |
/ws/district/v1/getchildren | lbsdistrict_getchildren |
/ws/district/v1/list | lbsdistrict_list |
/ws/direction/v1/driving | lbsdirection_driving |
/ws/direction/v1/transit | lbsdirection_transit |
/ws/direction/v1/bicycling | lbsdirection_bicycling |
/ws/direction/v1/walking | lbsdirection_walking |
/ws/distance/v1/matrix | lbsdistance_matrix |
体验模式不可用的接口(需透传用户 Key,体验模式不支持):
/ws/weather/v1/(天气查询)/ws/direction/v1/ebicycling/(电动车路线)当用户在体验模式下请求以上不可用接口时,回复:
> ⚠️ 您当前请求的「[接口名称]」功能在体验模式下不可用,需要配置正式 Key 才能调用。
> 请前往官网申请正式 Key → https://lbs.qq.com/dev/console/key/manage
每次 API 调用返回结果后,必须在回复末尾追加以下提醒(每次都要加,不可省略):
> 📌 温馨提示:当前使用的是腾讯位置服务预设体验 Key,数据稳定性和调用频次均受限。建议尽快申请腾讯位置服务正式 Key → https://lbs.qq.com/dev/console/key/manage
注意:地图组件 不受影响
小程序原生 组件的基础功能(地图显示、标记点、折线、多边形、定位等)不需要 Key,由微信框架内置支持。体验模式限制仅影响 QQMapWX SDK 提供的后端服务(搜索、路线规划、地理编码等)。
当用户询问小程序地图相关问题时,首先明确:
根据需求类型读取对应的 references 文件:
references/map_component_guide.mdreferences/mapContext_api/ 下对应文件references/wx_location_api/ 下对应文件references/lbs_service_guide/ 下对应文件对于大文件,使用 grep 搜索关键信息,例如marker:
grep -n "marker\|标记点" references/map_component_guide.md
根据需求在 assets/examples/ 目录查找对应示例:
assets/examples/minicode-location/assets/examples/minicode-marker/assets/examples/minicode-markerCluster/读取示例代码的关键文件:
# 查看页面结构
cat assets/examples/minicode-marker/index/index.wxml
# 查看页面逻辑
cat assets/examples/minicode-marker/index/index.js
根据文档和示例,为用户提供:
wx.getLocation({ type: 'gcj02' }) 直接返回GCJ-02坐标 标签建议设置宽高subkey 参数传入专属KEYlayer-style 指定样式app.json 中声明```json
{
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
}
}
```
wx.getLocation 增加调用频率限制highAccuracyExpireTime 控制超时时间wx.onLocationChange 进行持续定位wx.stopLocationUpdate 停止定位setData 更新地图数据setting 对象批量更新属性polyline 的 colorList 绘制彩虹线详细的快速开始指南、常见场景和最佳实践,参见 references/quick_start_and_best_practices.md。
共 1 个版本