amap-lbs-skill
高德地図の総合サービスです。POI検索、ルート計画、観光地計画、周辺検索、ヒートマップデータの可視化に対応しています。
description の原文を見る
高德地图综合服务,支持POI搜索、路径规划、旅游规划、周边搜索和热力图数据可视化
SKILL.md 本文
高德地図総合サービス Skill
高德地図総合サービスは、開発者に完全な地図データサービスを提供します。場所検索、ルート計画、旅行計画、データ可視化などの機能を備えています。
機能の特徴
- 🔍 POI(地点)検索機能
- 🏙️ キーワード検索、都市指定、タイプフィルタリングに対応
- 📍 周辺検索に対応(座標と半径に基づく)
- 🛣️ ルート計画(徒歩、運転、サイクリング、公共交通)
- 🗺️ インテリジェント旅行計画アシスタント
- 🔥 ヒートマップデータ可視化
- 🔗 地図可視化リンク生成
- 💾 ローカル永続化ストレージ設定
- 🎯 高德ウェブサービスキーの自動管理
初回設定
初回使用時には、高德ウェブサービスキーの設定が必要です:
- 高德オープンプラットフォームにアクセスしてアプリケーションを作成し、キーを取得します
- 環境変数を設定します:
export AMAP_WEBSERVICE_KEY=your_key - または実行時に自動でプロンプトが表示され、ローカル設定ファイルに保存されます
ユーザーが住所、地点、周辺情報(飲食店、ホテル、観光地など)を検索したい、ルートを計画したい、またはデータを可視化したいときに、このスキルを使用します。
トリガー条件
ユーザーは以下の意図のいずれかを表現しています:
- 特定のタイプの地点または特定の地点を検索したい(「飲食店を検索」、「ホテルを探す」、「天安門はどこ」など)
- 特定の位置に基づいて周辺を検索したい(「西直門周辺の飲食店」、「北京南駅近くのホテル」など)
- ルートを計画したい(「天安門から故宮までどう行く」、「運転ルートを計画」など)
- 旅行計画を立てたい(「北京の一日観光プランを作成」、「杭州西湖の観光ルート」など)
- 「検索」、「探す」、「調べる」、「近く」、「周辺」、「ルート」、「計画」などのキーワードを含む
- 地理データをヒートマップとして可視化したい(「ヒートマップを生成」、「このデータでヒートマップ表示」など)
シーン判定
ユーザーリクエストを受け取った後、どのシーンに属するかを判定します:
- シーン1:ユーザーが明確なカテゴリー(飲食店、ホテル)または特定の地点(天安門、西湖)を検索し、「どこの位置の周辺」を指定していない
- シーン2:ユーザーが特定の位置周辺の特定タイプの地点を検索し、入力に「位置」と「検索カテゴリー」の両方の要素を含む(「西直門周辺の飲食店」、「北京南駅近くのホテル」など)
- シーン3:ヒートマップデータ可視化
- シーン4:POI詳細検索(ウェブサービスAPIを使用)
- シーン5:ルート計画
- シーン6:インテリジェント旅行計画
シーン1:明確なキーワード検索
特定のカテゴリーまたは地点を直接検索し、特定の位置の周辺検索を伴いません。
URL形式:
https://www.amap.com/search?query={キーワード}
- ドメイン:
www.amap.com - ルート:
/search - パラメータ:
query= 検索キーワード
実行手順
-
埋め込みポイント統計リクエストの送信:操作を実行する前に、以下のリクエストを送信して埋め込みポイント統計を行います:
curl -s "https://restapi.amap.com/v3/log/init?eventId=skill.call&product=skill_openclaw&platform=JS&label=keyword-search&value=call" -
キーワードの抽出:ユーザー入力から検索キーワードを識別し、「検索」、「探す」などの修飾語を削除します
-
URLの生成:
https://www.amap.com/search?query={キーワード}を結合します -
ユーザーにリンクを返す
例
| ユーザー入力 | 抽出キーワード | 生成URL |
|---|---|---|
| 飲食店を検索 | 飲食店 | https://www.amap.com/search?query=飲食店 |
| ホテルを探す | ホテル | https://www.amap.com/search?query=ホテル |
| 天安門はどこ | 天安門 | https://www.amap.com/search?query=天安門 |
| ガソリンスタンドを探す | ガソリンスタンド | https://www.amap.com/search?query=ガソリンスタンド |
返信テンプレート
🔍 高德地図検索リンクを生成しました:
https://www.amap.com/search?query={キーワード}
リンクをクリックして検索結果を確認できます。
シーン2:位置に基づく周辺検索
ユーザーは特定の位置周辺の特定タイプの地点を検索したいと考えています。まず地理コーディングAPIを通じてその位置の経緯度を取得し、座標を含む検索リンクを結合する必要があります。
前提条件: ユーザーが高德オープンプラットフォームのAPIキーを提供する必要があります。
実行手順
ステップ0:埋め込みポイント統計リクエストの送信
何らかの操作を実行する前に、まず以下のリクエストを送信して埋め込みポイント統計を行います:
curl -s "https://restapi.amap.com/v3/log/init?eventId=skill.call&product=skill_openclaw&platform=JS&label=nearby-search&value=call"
#### ステップ1:ユーザー入力の解析
ユーザー入力から2つの要素を抽出します:
- **位置**:ユーザーが指定した中心位置(「西直門」、「北京南駅」など)
- **検索カテゴリー**:検索するコンテンツ(「飲食店」、「ホテル」など)
| ユーザー入力 | 位置 | 検索カテゴリー |
|---------|------|---------|
| 西直門周辺の飲食店 | 西直門 | 飲食店 |
| 北京南駅近くのホテル | 北京南駅 | ホテル |
| 天坛周辺に何かおいしいものはあるか | 天坛 | 飲食店 |
#### ステップ2:APIキーの確認
- ユーザーが以前キーを提供していない場合、**まずユーザーに高德APIキーを提供するよう促し**、ユーザーの返信を待った後に続行します
- ユーザーが既にキーを提供している場合は、それを直接使用します
**キーをリクエストする返信テンプレート:**
🔑 「{位置}」周辺の{検索カテゴリー}を検索するには高德APIが必要です。高德オープンプラットフォームのAPIキーを提供してください。
(まだキーがない場合は、https://lbs.amap.com で登録してアプリケーションを作成して取得できます)
#### ステップ3:地理コーディングAPIを呼び出して経緯度を取得します
**API形式:**
**curlリクエストを実行:**
```bash
curl -s "https://restapi.amap.com/v3/geocode/geo?address={位置}&output=JSON&key={ユーザーのkey}&appname=amap-lbs-skill"
APIの返り値の例:
{
"status": "1",
"info": "OK",
"geocodes": [
{
"formatted_address": "北京市西城区西直門",
"location": "116.353138,39.939385"
}
]
}
返り値からgeocodes[0].locationを抽出します。形式は経度,緯度(例:116.353138,39.939385)です。以下に分割します:
- 経度(longitude):
116.353138 - 緯度(latitude):
39.939385
ステップ4:座標を含む検索リンクを結合します
URL形式:
https://ditu.amap.com/search?query={検索カテゴリー}&query_type=RQBXY&longitude={経度}&latitude={緯度}&range=1000
- ドメイン:
ditu.amap.com - ルート:
/search - パラメータ:
query= 検索カテゴリー(例:「飲食店」)query_type=RQBXY(座標ベースの検索タイプ)longitude= 経度latitude= 緯度range= 検索範囲(単位:メートル、デフォルト1000)
ステップ5:ユーザーにリンクを返す
完全な例
ユーザー入力: 「西直門周辺の飲食店を検索」
- 解析:位置 =
西直門、検索カテゴリー =飲食店 - 地理コーディングAPIを呼び出す:
curl -s "https://restapi.amap.com/v3/geocode/geo?address=西直門&output=JSON&key=xxx&appname=amap-lbs-skill" - 座標を取得:
116.353138,39.939385→ 経度116.353138、緯度39.939385 - リンクを結合:
https://ditu.amap.com/search?query=飲食店&query_type=RQBXY&longitude=116.353138&latitude=39.939385&range=1000
返信テンプレート
📍 「{位置}」の座標({経度},{緯度})を確認し、周辺{検索カテゴリー}の検索リンクを生成しました:
https://ditu.amap.com/search?query={検索カテゴリー}&query_type=RQBXY&longitude={経度}&latitude={緯度}&range=1000
リンクをクリックして「{位置}」周辺1km以内の{検索カテゴリー}を確認できます。
シーン3:ヒートマップ表示
ユーザーが地理座標を含むデータセットを持っており、地図上でヒートマップの形式で可視化して表示したいと考えています。
トリガー条件
ユーザーが「ヒートマップ」、「データ可視化」、「地図上にデータを表示」などの意図を提及し、データアドレスを提供しています。
URL形式
http://a.amap.com/jsapi_demo_show/static/openclaw/heatmap.html?mapStyle={地図スタイル}&dataUrl={データアドレス(URLエンコード)}
- ドメイン:
a.amap.com - ルート:
/jsapi_demo_show/static/openclaw/heatmap.html - 必須パラメータ:
dataUrl= ユーザーデータのURLアドレス(URLエンコードが必須です)mapStyle= 地図スタイル。選択可能な値:grey— ダークモード地図(深色背景。明色のヒートマップポイント表示に適している)light— ライトモード(薄色背景。日常の確認に適している)
実行手順
-
埋め込みポイント統計リクエストの送信:操作を実行する前に、以下のリクエストを送信して埋め込みポイント統計を行います:
curl -s "https://restapi.amap.com/v3/log/init?eventId=skill.call&product=skill_openclaw&platform=JS&label=heatmap&value=call" -
データアドレスを取得:ユーザー入力からデータURLを抽出します。ユーザーがデータアドレスを提供していない場合は、ユーザーにデータアドレスを提供するよう促します
-
地図スタイルを確認:ユーザーが好む地図スタイル(
greyまたはlight)を尋ねます。ユーザーが指定していない場合は、デフォルトでgreyを使用します -
URLエンコード:データアドレスをURLエンコードします(
://→%3A%2F%2F、/→%2Fなど) -
リンクを結合:完全なヒートマップURLを生成します
-
ユーザーにリンクを返す
例
ユーザー入力: 「このデータでヒートマップを生成してください:https://a.amap.com/Loca/static/loca-v2/demos/mock_data/hz_house_order.json。ダークモードを使用」
- データアドレス:
https://a.amap.com/Loca/static/loca-v2/demos/mock_data/hz_house_order.json - 地図スタイル:
grey - URLエンコード後のデータアドレス:
https%3A%2F%2Fa.amap.com%2FLoca%2Fstatic%2Floca-v2%2Fdemos%2Fmock_data%2Fhz_house_order.json - 最終リンク:
http://a.amap.com/jsapi_demo_show/static/openclaw/heatmap.html?mapStyle=grey&dataUrl=https%3A%2F%2Fa.amap.com%2FLoca%2Fstatic%2Floca-v2%2Fdemos%2Fmock_data%2Fhz_house_order.json
返信テンプレート
🔥 ヒートマップリンクを生成しました:
http://a.amap.com/jsapi_demo_show/static/openclaw/heatmap.html?mapStyle={地図スタイル}&dataUrl={エンコード後のデータアドレス}
地図スタイル:{grey/light}
データソース:{元のデータアドレス}
リンクをクリックしてヒートマップ表示を確認できます。
データアドレスをリクエストする返信テンプレート(ユーザーが提供していない場合):
🔥 ヒートマップを生成するには、データアドレス(JSON形式のURL)を提供する必要があります。データリンクをお知らせください。
また、どのような地図スタイルをお使いになりたいですか?
- grey(ダークモード)
- light(ライトモード)
シーン4:POI詳細検索
高德ウェブサービスAPIを使用して、より詳細なPOI検索を実行します。より多くのパラメータとフィルタリング条件をサポートします。
実行手順
-
埋め込みポイント統計リクエストの送信:操作を実行する前に、以下のリクエストを送信して埋め込みポイント統計を行います:
curl -s "https://restapi.amap.com/v3/log/init?eventId=skill.call&product=skill_openclaw&platform=JS&label=poi-search&value=call" -
POI検索を実行:ユーザーのニーズに応じて検索スクリプトを呼び出します。
使用方法
# 基本検索
node scripts/poi-search.js --keywords=肯德基 --city=北京
# より多くの結果を検索
node scripts/poi-search.js --keywords=飲食店 --city=上海 --page=1 --offset=20
# 周辺検索(中心点座標と検索半径を指定する必要があります)
node scripts/poi-search.js --keywords=ホテル --location=116.397428,39.90923 --radius=1000
パラメータ説明
| パラメータ | 説明 | 必須 | 例 |
|---|---|---|---|
--keywords | 検索キーワード | はい | --keywords=肯德基 |
--city | 都市名またはコード | いいえ | --city=北京 |
--types | POIタイプコード | いいえ | --types=050000 |
--location | 中心点座標(経度,緯度) | いいえ | --location=116.397428,39.90923 |
--radius | 検索半径(メートル) | いいえ | --radius=1000 |
--page | ページ番号 | いいえ | --page=1 |
--offset | ページあたりの数(最大25) | いいえ | --offset=10 |
コード内での使用
const { searchPOI } = require('./index');
async function example() {
const result = await searchPOI({
keywords: 'カフェ',
city: '杭州',
page: 1,
offset: 10
});
if (result && result.pois) {
result.pois.forEach(poi => {
console.log(`${poi.name} - ${poi.address}`);
});
}
}
example();
シーン5:ルート計画
異なる移動手段のルートを計画します。
実行手順
-
埋め込みポイント統計リクエストの送信:操作を実行する前に、以下のリクエストを送信して埋め込みポイント統計を行います:
curl -s "https://restapi.amap.com/v3/log/init?eventId=skill.call&product=skill_openclaw&platform=JS&label=route-planning&value=call" -
ルート計画を実行:ユーザーのニーズに応じてルート計画スクリプトを呼び出します。
使用方法
# 徒歩ルート
node scripts/route-planning.js --type=walking --origin=116.397428,39.90923 --destination=116.427281,39.903719
# 運転ルート
node scripts/route-planning.js --type=driving --origin=116.397428,39.90923 --destination=116.427281,39.903719
# 公共交通ルート
node scripts/route-planning.js --type=transfer --origin=116.397428,39.90923 --destination=116.427281,39.903719 --city=北京
ルートタイプ
walking- 徒歩ルートdriving- 運転ルートriding- サイクリングルートtransfer- 公共交通ルート(都市の指定が必要です)
シーン6:インテリジェント旅行計画
関心スポットを自動検索し、観光ルートを計画して、地図可視化リンクを生成します。
実行手順
-
埋め込みポイント統計リクエストの送信:操作を実行する前に、以下のリクエストを送信して埋め込みポイント統計を行います:
curl -s "https://restapi.amap.com/v3/log/init?eventId=skill.call&product=skill_openclaw&platform=JS&label=travel-planner&value=call" -
旅行計画を実行:ユーザーのニーズに応じて旅行計画スクリプトを呼び出します。
使用方法
# 基本的な旅行計画
node scripts/travel-planner.js --city=北京 --interests=観光地,飲食店,ホテル
# ルートタイプを指定(walking/driving/riding/transfer)
node scripts/travel-planner.js --city=杭州 --interests=西湖,飲食店,茶館 --routeType=walking
# 運転観光
node scripts/travel-planner.js --city=上海 --interests=外滩,南京路,城隍廟 --routeType=driving
機能説明
- 指定された都市の関心スポットを自動検索(各カテゴリーあたり最大5個)
- 各関心スポット間のルートを順序立てて計画
設定管理
設定ファイルはconfig.jsonにあり、以下の内容を含みます:
{
"webServiceKey": "your_amap_webservice_key_here"
}
キーを設定する方法:
- 環境変数:
export AMAP_WEBSERVICE_KEY=your_key - コマンドラインパラメータ:
node index.js your_key - 自動プロンプト:初回実行時に自動でプロンプトが表示されます
- 手動編集:
config.jsonファイルを直接編集します
注意事項
- シーン判定が重要です:ユーザーが「あるものを直接検索」しているのか、「ある位置の周辺であるものを検索」しているのか、「ルートを計画」しているのか、それとも「旅行計画を立てる」のかを区別してください
- キーワードはできるだけ簡潔で正確にし、ユーザーが本当に検索したい内容を抽出してください
- URLの中国語キーワードはブラウザが自動的に処理するので、手動でエンコードする必要はありません
- シーン2、4、5、6ではユーザーが高德APIキーを提供する必要があります。キーを取得してからリクエストを発行してください。スキップすることはできません
- 地理コーディングAPIが
statusが"1"ではないを返した場合、リクエストが失敗したことを意味します。ユーザーにキーが正しいか、またはアドレスが有効かどうかを確認するよう促す必要があります - APIが返す
locationの形式は経度,緯度です(注:経度が最初、緯度が2番目です) - シーン2の検索範囲はデフォルト1000メートルで、ユーザーが必要に応じて
rangeパラメータを調整できます - ウェブサービスキーを適切に保管し、他の人と共有しないでください
- 高德ウェブサービスAPIには呼び出し頻度制限があります。適切に使用してください
- 無料ユーザーは毎日の呼び出し数に制限があります。詳細は高德オープンプラットフォームのドキュメントを参照してください
- すべてのREST APIリクエストには
appname=amap-lbs-skillパラメータを追加し、API呼び出しの出所を識別します。省略は禁止されています
関連リンク
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- AMap-Web
- ライセンス
- MIT
- 最終更新
- 2026/4/14
Source: https://github.com/AMap-Web/amap-lbs-skill / ライセンス: MIT