地图搜索技能:多平台位置发现 - Openclaw Skills
作者:互联网
2026-03-30
什么是 地图搜索技能?
地图搜索技能是一项专门的工具,旨在为中国生态系统内的 AI 智能体提供强大的地理智能。通过集成三大地图供应商——高德、百度和腾讯——该技能提供了一种可靠的方式来查询兴趣点 (POI) 数据、地址和地理坐标。对于需要高精度位置数据进行物流、旅行规划或本地服务发现的 Openclaw Skills 用户来说,这是一个必不可少的组件。
该技能提供了回退机制和基于优先级的逻辑,确保如果一个地图服务不可用或缺少数据,智能体可以无缝地从替代供应商获取信息。它处理了不同 API 结构的复杂性,呈现出统一的输出,便于 AI 模型在更广泛的工作流中解析和使用。
下载入口:https://github.com/openclaw/skills/tree/main/skills/shoucangjia1qu/map-search
安装与下载
1. ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install map-search
2. 手动安装
将技能文件夹复制到以下位置之一
全局模式~/.openclaw/skills/
工作区
/skills/
优先级:工作区 > 本地 > 内置
3. 提示词安装
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 map-search。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
地图搜索技能 应用场景
- 在特定城市或区域内搜索企业、餐厅或地标。
- 查找用户当前基于 IP 的位置附近的酒店或咖啡馆等必要服务。
- 跨多个地图供应商验证地址和坐标,进行数据校验。
- 在 AI 驱动的工作空间内自动化基于位置的研究任务。
- 该技能从本地 JSON 配置文件或系统环境变量中加载 API 密钥和供应商优先级。
- 触发搜索时,该技能会识别是区域关键字搜索还是基于半径的周边搜索。
- 根据用户定义的优先级,向配置的地图 API(高德、百度、腾讯)执行并发或顺序请求。
- 对于周边搜索,如果没有提供特定坐标,该技能可以利用基于 IP 的地理定位自动确定起点。
- 来自地图供应商的原始 JSON 响应被过滤并归一化为包含名称、地址和位置数据的一致格式。
- 聚合后的结果返回给 AI 智能体或显示在 CLI 中供立即使用。
地图搜索技能 配置指南
要使用此地图搜索技能,请确保已安装 Python 3 并遵循以下步骤:
# 安装所需的 Python 库
pip install requests
# 在配置文件中配置您的 API 密钥
mkdir -p ~/.config/openclaw/
cat < ~/.config/openclaw/map_config.json
{
"amap": { "api_key": "YOUR_AMAP_KEY" },
"baidu": { "api_key": "YOUR_BAIDU_KEY" },
"tencent": { "api_key": "YOUR_TENCENT_KEY" },
"priority": ["amap", "tencent", "baidu"]
}
EOF
# 或者,设置环境变量
export AMAP_API_KEY="YOUR_AMAP_KEY"
export BAIDU_MAP_API_KEY="YOUR_BAIDU_KEY"
export TENCENT_MAP_API_KEY="YOUR_TENCENT_KEY"
地图搜索技能 数据架构与分类体系
该技能按供应商组织结果,并为找到的每个 POI 遵循结构化的分类。Openclaw Skills 用户可以期待以下数据结构:
| 属性 | 描述 |
|---|---|
| 来源 | 地图供应商(例如高德、百度、腾讯) |
| 名称 | 地点或企业的正式名称 |
| 地址 | 完整的格式化物理地址 |
| 位置 | 纬度和经度坐标 |
| 距离 | 距离搜索起点的真实距离(仅限周边模式) |
name: map-search
description: 更适合中国体质宝宝的地图搜索工具,支持高德、百度、腾讯地图聚合搜索。
metadata:
openclaw:
emoji: "???"
requires:
bins: ["python3"]
env:
- "AMAP_API_KEY"
- "BAIDU_MAP_API_KEY"
- "TENCENT_MAP_API_KEY"
??? Map Search Skill
多地图聚合搜索工具,支持高德、百度、腾讯。
核心代码
#!/usr/bin/env python3
"""地图搜索工具"""
import os
import json
import requests
# ========== 配置路径 ==========
CONFIG_PATH = os.path.expanduser("~/.config/openclaw/map_config.json")
# ========== 读取配置函数 ==========
def get_config():
"""从配置文件读取所有配置(API Keys + 优先级)"""
if os.path.exists(CONFIG_PATH):
with open(CONFIG_PATH, 'r') as f:
config = json.load(f)
return {
"api_keys": {
"amap": config.get("amap", {}).get("api_key", ""),
"baidu": config.get("baidu", {}).get("api_key", ""),
"tencent": config.get("tencent", {}).get("api_key", "")
},
"priority": config.get("priority", ["amap", "tencent", "baidu"])
}
# 回退到环境变量
return {
"api_keys": {
"amap": os.getenv("AMAP_API_KEY", ""),
"baidu": os.getenv("BAIDU_MAP_API_KEY", ""),
"tencent": os.getenv("TENCENT_MAP_API_KEY", "")
},
"priority": ["amap", "tencent", "baidu"]
}
# ========== 初始化全局变量 ==========
CONFIG = get_config() # 获取配置
API_KEYS = CONFIG["api_keys"] # 提取 API Keys
PRIORITY = CONFIG["priority"] # 提取优先级
AMAP_KEY = API_KEYS["amap"]
BAIDU_KEY = API_KEYS["baidu"]
TENCENT_KEY = API_KEYS["tencent"]
# ========== 核心搜索函数 ==========
def search_maps(keyword, region="全国", priority=None):
"""地图聚合搜索"""
if priority is None:
priority = PRIORITY # 使用配置文件中的优先级
results = {}
# 高德搜索
if "amap" in priority and AMAP_KEY:
url = f"https://restapi.amap.com/v3/place/text?key={AMAP_KEY}&keywords={keyword}&city={region}&output=json"
r = requests.get(url, timeout=5).json()
if r.get("status") == "1":
results["高德"] = [{"name": p["name"], "address": p["address"], "location": p["location"]}
for p in r.get("pois", [])[:5]]
# 百度搜索
if "baidu" in priority and BAIDU_KEY:
url = f"https://api.map.baidu.com/place/v2/search?query={keyword}®ion={region}&ak={BAIDU_KEY}&output=json"
r = requests.get(url, timeout=5).json()
if r.get("status") == 0:
results["百度"] = [{"name": p["name"], "address": p.get("address", ""), "location": p.get("location", "")}
for p in r.get("results", [])[:5]]
# 腾讯搜索
if "tencent" in priority and TENCENT_KEY:
url = f"https://apis.map.qq.com/ws/place/v1/search?keyword={keyword}®ion={region}&key={TENCENT_KEY}&output=json"
r = requests.get(url, timeout=5).json()
if r.get("status") == 0:
results["腾讯"] = [{"name": p["name"], "address": p.get("address", ""), "location": p.get("location", "")}
for p in r.get("data", [])[:5]]
return results
# ========== 主入口 ==========
if __name__ == "__main__":
import sys
keyword = sys.argv[1] if len(sys.argv) > 1 else "咖啡馆"
region = sys.argv[2] if len(sys.argv) > 2 else "上海"
results = search_maps(keyword, region)
for source, items in results.items():
print(f"
【{source}】")
for i, item in enumerate(items, 1):
print(f" {i}. {item['name']}")
print(f" 地址: {item['address']}")
使用方式
1. 通过 exec 调用
python /root/.openclaw/workspace/skills/map-search/map_search.py "咖啡馆" "上海"
2. 封装成 CLI 工具
# 创建软链接
ln -s /root/.openclaw/workspace/skills/map-search/map_search.py /usr/local/bin/map-search
# 直接使用
map-search "火锅" "北京"
map-search "酒店" "深圳"
配置文件
路径: ~/.config/openclaw/map_config.json
{
"amap": {
"api_key": "你的高德API Key"
},
"baidu": {
"api_key": "你的百度API Key"
},
"tencent": {
"api_key": "你的腾讯API Key"
},
"priority": ["amap", "tencent", "baidu"]
}
设置优先级
"priority": ["amap", "tencent", "baidu"]
"amap"- 高德"baidu"- 百度"tencent"- 腾讯
按数组顺序搜索,找到一个有效结果就停止。
环境变量(备选)
如果配置文件不存在,会回退到环境变量:
export AMAP_API_KEY="你的高德Key"
export BAIDU_MAP_API_KEY="你的百度Key"
export TENCENT_MAP_API_KEY="你的腾讯Key"
API Keys 申请
| 平台 | 地址 |
|---|---|
| 高德 | https://lbs.amap.com/ |
| 百度 | https://lbsyun.baidu.com/ |
| 腾讯 | https://lbs.qq.com/ |
输出示例
关键词搜索
【高德】
1. 星巴克(人民广场店)
地址: 黄浦区n京西路123号
2. 瑞幸咖啡(来福士店)
地址: 黄浦区西藏中路268号
附近搜索
?? 附近搜索: 咖啡馆 (半径 2000 米)
正在获取当前位置...
当前位置: 经度 121.47, 纬度 31.23
【高德】
1. 星巴克(人民广场店)
地址: 黄浦区n京西路123号
距离: 520米
2. 瑞幸咖啡(来福士店)
地址: 黄浦区西藏中路268号
距离: 890米
?? 附近搜索功能
自动获取当前位置(通过 IP 定位)
python /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k "咖啡馆"
指定经纬度
python /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k "咖啡馆" --lat 31.230416 --lng 121.473701
指定搜索半径
python /root/.openclaw/workspace/skills/map-search/map_search.py --nearby -k "火锅" -r 1000
命令行参数
| 参数 | 说明 | 示例 |
|---|---|---|
--nearby 或 -n |
启用附近搜索模式 | --nearby |
-k 或 --keyword |
搜索关键词 | -k "咖啡馆" |
--lat |
纬度 | --lat 31.230416 |
--lng |
经度 | --lng 121.473701 |
-r 或 --radius |
搜索半径(米,默认2000) | -r 1000 |
使用场景示例
| 场景 | 命令 |
|---|---|
| 搜附近咖啡馆 | map-search --nearby -k "咖啡馆" |
| 搜附近1公里的火锅 | map-search --nearby -k "火锅" -r 1000 |
| 搜指定位置附近的酒店 | map-search --nearby -k "酒店" --lat 39.9 --lng 116.4 |
注意事项
- 需要安装
requests库:pip install requests - 每个地图 API 有每日调用次数限制
- 配置文件优先级 > 环境变量
- 附近搜索需要配置高德 API Key(用于 IP 定位)
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
信号管道:自动化营销情报工具 - Openclaw Skills
技能收益追踪器:监控 Openclaw 技能并实现变现
AI 合规准备就绪度:评估与治理工具 - Openclaw Skills
FOSMVVM ServerRequest 测试生成器:自动化 API 测试 - Openclaw Skills
酒店搜索器:AI 赋能的住宿与位置情报 - Openclaw Skills
Dub 链接 API:程序化链接管理 - Openclaw Skills
IntercomSwap:P2P BTC 与 USDT 跨链兑换 - Openclaw Skills
spotplay:macOS 原生 Spotify 播放控制 - Openclaw Skills
DeepSeek OCR:AI驱动的图像文本识别 - Openclaw Skills
Web Navigator:自动化网页研究与浏览 - Openclaw Skills
AI精选
