Maps Skill
無料・オープンデータソースを利用した位置情報インテリジェンス。8 つのコマンド、44 の POI カテゴリ、依存関係ゼロ(Python 標準ライブラリのみ)、API キー不要。
データソース: OpenStreetMap/Nominatim、Overpass API、OSRM、TimeAPI.io。
このスキルは旧 find-nearby スキルを統合しています。find-nearby の全機能は以下の nearby コマンドでカバーされ、同じ --near "<場所>" ショートカットと複数カテゴリ対応を備えています。
使用タイミング
- ユーザーが Telegram の位置情報ピン(メッセージ内の緯度・経度)を送信した場合 →
nearby - ユーザーが地名の座標を知りたい場合 →
search - ユーザーが座標を持っていて住所を知りたい場合 →
reverse - ユーザーが近くのレストラン、病院、薬局、ホテルなどを尋ねた場合 →
nearby - ユーザーが運転/徒歩/自転車での距離や移動時間を知りたい場合 →
distance - ユーザーが 2 地点間のターンバイターン方式の道順を知りたい場合 →
directions - ユーザーが場所のタイムゾーン情報を知りたい場合 →
timezone - ユーザーが地理的な領域内で POI を検索したい場合 →
area+bbox
前提条件
Python 3.8+(標準ライブラリのみ — pip インストール不要)。
スクリプトパス: ~/.hermes/skills/maps/scripts/maps_client.py
コマンド
MAPS=~/.hermes/skills/maps/scripts/maps_client.py
search — 地名のジオコーディング
python3 $MAPS search "Eiffel Tower"
python3 $MAPS search "1600 Pennsylvania Ave, Washington DC"
返り値: 緯度、経度、表示名、種別、バウンディングボックス、重要度スコア。
reverse — 座標から住所へ
python3 $MAPS reverse 48.8584 2.2945
返り値: 完全な住所分解(通り、市区町村、州、国、郵便番号)。
nearby — カテゴリ別に場所を検索
# 座標から(例:Telegram の位置情報ピン)
python3 $MAPS nearby 48.8584 2.2945 restaurant --limit 10
python3 $MAPS nearby 40.7128 -74.0060 hospital --radius 2000
# 住所 / 市区町村 / 郵便番号 / ランドマークから — --near で自動ジオコーディング
python3 $MAPS nearby --near "Times Square, New York" --category cafe
python3 $MAPS nearby --near "90210" --category pharmacy
# 複数カテゴリを1回のクエリでマージ
python3 $MAPS nearby --near "downtown austin" --category restaurant --category bar --limit 10
46 カテゴリ: restaurant、cafe、bar、hospital、pharmacy、hotel、guest_house、camp_site、supermarket、atm、gas_station、parking、museum、park、school、university、bank、police、fire_station、library、airport、train_station、bus_stop、church、mosque、synagogue、dentist、doctor、cinema、theatre、gym、swimming_pool、post_office、convenience_store、bakery、bookshop、laundry、car_wash、car_rental、bicycle_rental、taxi、veterinary、zoo、playground、stadium、nightclub。
各結果には: name、address、lat/lon、distance_m、maps_url(タップ可能な Google Maps リンク)、directions_url(検索地点からの Google Maps 案内)、および利用可能な場合はプロモーションタグ — cuisine、hours(営業時間)、phone、website。
distance — 移動距離と時間
python3 $MAPS distance "Paris" --to "Lyon"
python3 $MAPS distance "New York" --to "Boston" --mode driving
python3 $MAPS distance "Big Ben" --to "Tower Bridge" --mode walking
モード: driving(デフォルト)、walking、cycling。道路距離、所要時間、比較用の直線距離を返します。
directions — ターンバイターンナビゲーション
python3 $MAPS directions "Eiffel Tower" --to "Louvre Museum" --mode walking
python3 $MAPS directions "JFK Airport" --to "Times Square" --mode driving
番号付きのステップを、指示、距離、所要時間、道路名、操作種別(turn、depart、arrive など)とともに返します。
timezone — 座標のタイムゾーン
python3 $MAPS timezone 48.8584 2.2945
python3 $MAPS timezone 35.6762 139.6503
タイムゾーン名、UTC オフセット、現在の現地時間を返します。
area — 場所のバウンディングボックスと面積
python3 $MAPS area "Manhattan, New York"
python3 $MAPS area "London"
バウンディングボックス座標、幅/高さ(km)、おおよその面積を返します。bbox コマンドの入力として便利です。
bbox — バウンディングボックス内を検索
python3 $MAPS bbox 40.75 -74.00 40.77 -73.98 restaurant --limit 20
地理的な矩形内で POI を検索します。まず area を使って名前付き場所のバウンディングボックス座標を取得してください。
Telegram 位置情報ピンの取り扱い
ユーザーが位置情報ピンを送信すると、メッセージには latitude: と longitude: フィールドが含まれます。それらを抽出してそのまま nearby に渡します:
# ユーザーが (36.17, -115.14) にピンを送信し「近くのカフェを探して」と尋ねた場合
python3 $MAPS nearby 36.17 -115.14 cafe --radius 1500
結果は、名前、距離、maps_url フィールドを含む番号付きリストで提示し、ユーザーがタップしてリンクを開けるようにします。「今開いてる?」という質問に対しては、hours フィールドを確認してください。もし不明瞭または欠落している場合は、web_search で確認してください。OSM の営業時間はコミュニティ管理であり、常に最新とは限らないためです。
ワークフロー例
「コロッセオの近くでイタリアンレストランを探して」:
nearby --near "Colosseum Rome" --category restaurant --radius 500— 1 コマンドで、自動ジオコーディング
「相手が送ってきたこの位置情報ピンの近くは?」:
- Telegram メッセージから緯度・経度を抽出
nearby LAT LON cafe --radius 1500
「ホテルからコンベンションセンターまでどう歩く?」:
directions "Hotel Name" --to "Conference Center" --mode walking
「シアトルのダウンタウンにはどんなレストランがある?」:
area "Downtown Seattle"→ バウンディングボックスを取得bbox S W N E restaurant --limit 30
注意点
- Nominatim ToS: 最大 1 req/s(スクリプトが自動処理)
nearbyには緯度・経度 または--near "<住所>"のいずれかが必要 — どちらか一方が必要- OSRM のルーティングカバレッジはヨーロッパと北米で最良
- Overpass API はピーク時に遅くなる可能性があります。スクリプトは自動的にミラー間でフォールバックします(overpass-api.de → overpass.kumi.systems)
distanceとdirectionsは目的地に--toフラグを使用します(位置引数ではありません)- 郵便番号だけで世界的にあいまいな結果になる場合は、国や州を含めてください
検証
python3 ~/.hermes/skills/maps/scripts/maps_client.py search "Statue of Liberty"
# 緯度 ~40.689、経度 ~-74.044 が返るはず
python3 ~/.hermes/skills/maps/scripts/maps_client.py nearby --near "Times Square" --category restaurant --limit 3
# Times Square から約 500m 以内のレストランのリストが返るはず