
Amap Traffic
- 94 installs
- 47 repo stars
- Updated February 12, 2026
- agentbay-ai/agentbay-skills
amap-traffic is a Claude Code skill that queries real-time road conditions and plans fastest driving routes using the AMap (高德) traffic-status and direction APIs.
About
amap-traffic is a Claude Code skill that queries real-time road conditions and plans optimal driving routes using AMap (高德地图) traffic-status and direction APIs. A developer invokes it to check congestion on a road or area and to compute the fastest self-driving route with strategy=2 real-time-traffic weighting. It reads the AMAP_KEY dynamically from openclaw.json on every call so an updated key takes effect immediately. It targets webchat, DingTalk, and QQ channels.
- Queries real-time road traffic via the AMap (高德) traffic-status API
- Plans fastest driving routes with strategy=2 real-time-traffic weighting
- Reads the AMAP_KEY dynamically from openclaw.json on each call
Amap Traffic by the numbers
- 94 all-time installs (skills.sh)
- Ranked #834 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
amap-traffic capabilities & compatibility
Requires an AMAP_KEY from console.amap.com; free tier available on the AMap open platform.
- Capabilities
- traffic status · route planning · maps api
- Use cases
- research
- Pricing
- Bring your own API key
What amap-traffic says it does
高德地图实时路况查询与最优自驾路线规划技能。基于高德交通态势API和路径规划API,提供实时拥堵信息和最快路线建议。
`strategy=2`:优先考虑实时路况的最快路线
npx skills add https://github.com/agentbay-ai/agentbay-skills --skill amap-trafficAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 94 |
|---|---|
| repo stars | ★ 47 |
| Last updated | February 12, 2026 |
| Repository | agentbay-ai/agentbay-skills ↗ |
What it does
A user asks for live traffic or the fastest driving route and the skill calls AMap traffic and direction APIs.
Who is it for?
Checking live road congestion and computing the fastest self-driving route with real-time traffic in China.
Skip if: Regions outside AMap coverage or use without an AMap API key.
When should I use this skill?
A user asks for real-time traffic on a road or area, or the fastest driving route between two points.
What you get
A real-time congestion status and a fastest driving route with time, distance, and cost comparison.
- real-time congestion status
- fastest driving route with time/distance/cost comparison
By the numbers
- 4 congestion levels (畅通/缓行/拥堵/严重拥堵)
Files
高德实时路况与路线规划
概述
本技能通过高德地图API实现: 1. 实时路况查询:获取指定道路/区域的拥堵状态 2. 智能路线规划:基于实时路况计算最快自驾路线 3. 多方案对比:提供时间、距离、费用等维度的路线比较
🔑 API Key 配置
1. 访问 高德开放平台 创建 Key 2. 在 OpenClaw Web 配置页面设置: 地址: http://127.0.0.1:18789/skills 配置文件字段: skills.entries.amap-traffic.AMAP_KEY in openclaw.json 值: 你的高德API Key
注意: 本技能每次调用时都会重新读取openclaw.json中的最新AMAP_KEY,支持前端动态更新密钥后立即生效。
API 使用说明
1. 实时路况查询
curl "https://restapi.amap.com/v3/traffic/status/road?roadid={道路ID}&key={动态读取的AMAP_KEY}"2. 智能路线规划(含实时路况)
curl "https://restapi.amap.com/v3/direction/driving?origin={起点坐标}&destination={终点坐标}&strategy=2&key={动态读取的AMAP_KEY}"strategy=2:优先考虑实时路况的最快路线
路况状态说明
- 畅通:🟢 绿色(速度 > 40km/h)
- 缓行:🟡 黄色(20-40km/h)
- 拥堵:🔴 红色(< 20km/h)
- 严重拥堵:🟣 紫红色(< 10km/h)
资源
scripts/
包含高德实时路况查询和路线规划的核心脚本。
scripts/amap_traffic.py
Python 脚本,实现完整的实时路况查询和最优路线规划功能。 每次执行时都会从 `/home/admin/.openclaw/openclaw.json` 读取最新的 AMAP_KEY, 确保前端动态更新密钥后立即生效。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
高德地图实时路况与路线规划工具
功能:查询实时路况 + 规划最优自驾路线
每次运行时从 openclaw.json 配置文件中读取最新的 AMAP_KEY
"""
import sys
import os
import json
import urllib.parse
import urllib.request
def get_amap_key_from_config():
"""从 openclaw.json 配置文件中读取最新的 AMAP_KEY"""
config_paths = [
"/home/admin/.openclaw/openclaw.json",
os.path.expanduser("~/.openclaw/openclaw.json")
]
for config_path in config_paths:
if os.path.exists(config_path):
try:
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
# 优先读取技能配置中的 apiKey 字段(OpenClaw 标准字段名)
if 'skills' in config and 'entries' in config['skills'] and 'amap-traffic' in config['skills']['entries']:
skill_config = config['skills']['entries']['amap-traffic']
amap_key = skill_config.get('apiKey')
if amap_key:
return amap_key
# 其他兼容性字段(向后兼容)
amap_key = config.get('amapKey') or config.get('AMAP_KEY')
if amap_key:
return amap_key
except (json.JSONDecodeError, IOError) as e:
continue
# 如果配置文件中没有找到,再尝试环境变量(向后兼容)
return os.environ.get("AMAP_KEY")
def geocode(address, city="", amap_key=None):
"""地理编码:将地址转为经纬度"""
if amap_key is None:
amap_key = get_amap_key_from_config()
if not amap_key:
print("错误: 未找到 AMAP_KEY,请在 OpenClaw Web 配置页面设置", file=sys.stderr)
return None
url = "https://restapi.amap.com/v3/geocode/geo"
params = {
"address": address,
"key": amap_key
}
if city:
params["city"] = city
query_string = urllib.parse.urlencode(params)
full_url = f"{url}?{query_string}"
try:
with urllib.request.urlopen(full_url) as response:
data = json.loads(response.read().decode('utf-8'))
if data["status"] == "1" and data["geocodes"]:
location = data["geocodes"][0]["location"]
return location # 格式: "经度,纬度"
else:
print(f"地理编码失败: {data.get('info', '未知错误')}", file=sys.stderr)
return None
except Exception as e:
print(f"请求失败: {e}", file=sys.stderr)
return None
def get_driving_route_with_traffic(origin, destination, amap_key=None):
"""获取含实时路况的驾车路线(最快路线)"""
if amap_key is None:
amap_key = get_amap_key_from_config()
if not amap_key:
print("错误: 未找到 AMAP_KEY,请在 OpenClaw Web 配置页面设置", file=sys.stderr)
return None
url = "https://restapi.amap.com/v3/direction/driving"
params = {
"origin": origin,
"destination": destination,
"strategy": "2", # 2=优先考虑实时路况的最快路线
"key": amap_key
}
query_string = urllib.parse.urlencode(params)
full_url = f"{url}?{query_string}"
try:
with urllib.request.urlopen(full_url) as response:
data = json.loads(response.read().decode('utf-8'))
if data["status"] == "1" and data["route"]["paths"]:
path = data["route"]["paths"][0]
duration = int(path["duration"])
distance = int(path["distance"])
# 解析路况详情
traffic_info = []
for step in path["steps"]:
road = step.get("road", "未知道路")
traffic_status = step.get("traffic_condition", [])
if traffic_status:
status = traffic_status[0].get("status", "0")
speed = traffic_status[0].get("speed", "0")
traffic_info.append({
"road": road,
"status": status,
"speed": speed
})
# 费用估算(仅过路费,打车费用需额外计算)
cost = round(distance / 1000 * 0.6, 1)
return {
"type": "自驾",
"duration_sec": duration,
"distance": distance,
"cost": cost,
"traffic_details": traffic_info
}
else:
print(f"路线规划失败: {data.get('info', '无可用路线')}", file=sys.stderr)
return None
except Exception as e:
print(f"请求失败: {e}", file=sys.stderr)
return None
def format_time(seconds):
"""将秒转换为易读格式"""
if seconds < 3600:
return f"{seconds//60}分钟"
else:
hours = seconds // 3600
minutes = (seconds % 3600) // 60
return f"{hours}小时{minutes}分钟"
def format_traffic_status(status_code):
"""将路况状态码转为中文描述"""
status_map = {
"0": "未知",
"1": "畅通 🟢",
"2": "缓行 🟡",
"3": "拥堵 🔴",
"4": "严重拥堵 🟣"
}
return status_map.get(status_code, "未知")
def main():
if len(sys.argv) < 3:
print("用法: python3 amap_traffic.py <起点地址> <终点地址> [城市]")
print("注意: 需在 OpenClaw Web 配置页面设置 AMAP_KEY")
sys.exit(1)
origin_addr = sys.argv[1]
dest_addr = sys.argv[2]
city = sys.argv[3] if len(sys.argv) > 3 else ""
# 获取最新的 AMAP_KEY
amap_key = get_amap_key_from_config()
if not amap_key:
print("错误: 未找到 AMAP_KEY,请在 OpenClaw Web 配置页面设置")
sys.exit(1)
# 1. 地理编码
origin_loc = geocode(origin_addr, city, amap_key)
if not origin_loc:
print("起点地址解析失败")
sys.exit(1)
dest_loc = geocode(dest_addr, city, amap_key)
if not dest_loc:
print("终点地址解析失败")
sys.exit(1)
# 2. 获取含实时路况的路线
route = get_driving_route_with_traffic(origin_loc, dest_loc, amap_key)
if not route:
print("未找到任何路线方案")
sys.exit(1)
# 3. 输出结果
print("🚗 实时路况最优路线:")
print("-" * 50)
time_str = format_time(route["duration_sec"])
dist_str = f"{route['distance']/1000:.1f}公里"
cost_str = f"¥{route['cost']:.1f}"
print(f"预计时间: {time_str}")
print(f"行驶距离: {dist_str}")
print(f"预估费用: {cost_str}")
print("\n🚦 详细路况:")
for segment in route["traffic_details"]:
status = format_traffic_status(segment["status"])
speed = segment["speed"] if segment["speed"] != "0" else "N/A"
print(f" - {segment['road']}: {status} (速度: {speed}km/h)")
if __name__ == "__main__":
main()Related skills
FAQ
What does strategy=2 do?
In the driving direction API, strategy=2 returns the fastest route that prioritizes real-time traffic conditions.
Where does it read the API key?
It re-reads the latest AMAP_KEY from openclaw.json on every call, so a front-end key update takes effect immediately.