Was macht Maps Skill?
Standorternächtigung mittels freier, offener Datenquellen. 8 Befehle, 49 POI-Kategorien, keine Abhängigkeiten (nur Python-Standardbibliothek), kein API-Key erforderlich.
Datenquellen: OpenStreetMap/Nominatim, Overpass API, OSRM, TimeAPI.io.
Dieser Skill ersetzt den alten find-nearby-Skill – alle Funktionen von find-nearby sind unten im nearby-Befehl enthalten, mit dem gleichen --near "<Ort>"-Kürzel und Multi-Kategorie-Unterstützung.
Verwendungszwecke
- Der Benutzer sendet einen Telegram-Standortpin (Breitengrad/Längengrad in der Nachricht) →
nearby - Der Benutzer möchte Koordinaten für einen Ortsnamen →
search - Der Benutzer hat Koordinaten und möchte die Adresse →
reverse - Der Benutzer fragt nach Restaurants, Krankenhäusern, Apotheken, Hotels usw. in der Nähe →
nearby - Der Benutzer möchte Fahr-/Weg-/Radfahrstrecke oder Reisezeit →
distance - Der Benutzer möchte eine Schritt-für-Schritt-Wegebschreibung zwischen zwei Orten →
directions - Der Benutzer möchte Zeitzoneninformationen für einen Standort →
timezone - Der Benutzer möchte POIs innerhalb eines geografischen Gebiets suchen →
area+bbox
Voraussetzungen
Python 3.8+ (nur Standardbibliothek – keine pip-Installation erforderlich).
Skriptpfad: ~/.hermes/skills/maps/scripts/maps_client.py
Befehle
MAPS=~/.hermes/skills/maps/scripts/maps_client.py
search – Ortsnamen geokodieren
python3 $MAPS search "Eiffelturm"
python3 $MAPS search "1600 Pennsylvania Ave, Washington DC"
Rückgabe: lat, lon, Anzeigename, Typ, Bounding-Box, Bedeutungsgrad.
reverse – Koordinaten in Adresse umwandeln
python3 $MAPS reverse 48.8584 2.2945
Rückgabe: vollständige Adressaufschlüsselung (Straße, Stadt, Bundesland, Land, Postleitzahl).
nearby – Orte nach Kategorie suchen
# Nach Koordinaten (z.B. von einem Telegram-Standortpin)
python3 $MAPS nearby 48.8584 2.2945 restaurant --limit 10
python3 $MAPS nearby 40.7128 -74.0060 hospital --radius 2000
# Nach Adresse / Stadt / PLZ / Wahrzeichen – --near geokodiert automatisch
python3 $MAPS nearby --near "Times Square, New York" --category cafe
python3 $MAPS nearby --near "90210" --category pharmacy
# Mehrere Kategorien in einer Abfrage zusammengefasst
python3 $MAPS nearby --near "downtown austin" --category restaurant --category bar --limit 10
49 Kategorien: 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, fast_food, food_court.
Jedes Ergebnis enthält: name, address, lat/lon, distance_m, maps_url (anklickbarer Google-Maps-Link), directions_url (Google-Maps-Route ab Suchpunkt) sowie bei vorhanden hervorgehobene Tags – cuisine, hours (öffnungszeiten), phone, website.
distance – Fahrstrecke und -zeit
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
Modi: driving (Standard), walking, cycling. Rückgabe: Straßenentfernung, Dauer und Luftlinie zum Vergleich.
directions – Schritt-für-Schritt-Navigation
python3 $MAPS directions "Eiffelturm" --to "Louvre Museum" --mode walking
python3 $MAPS directions "JFK Flughafen" --to "Times Square" --mode driving
Rückgabe: nummerierte Schritte mit Anweisung, Entfernung, Dauer, Straßenname und Manövertyp (abbiegen, abfahren, ankommen usw.).
timezone – Zeitzone für Koordinaten
python3 $MAPS timezone 48.8584 2.2945
python3 $MAPS timezone 35.6762 139.6503
Rückgabe: Zeitzonenname, UTC-Offset und aktuelle Ortszeit.
area – Bounding-Box und Fläche für einen Ort
python3 $MAPS area "Manhattan, New York"
python3 $MAPS area "London"
Rückgabe: Bounding-Box-Koordinaten, Breite/Höhe in km und ungefähre Fläche. Nützlich als Eingabe für den bbox-Befehl.
bbox – Suche innerhalb einer Bounding-Box
python3 $MAPS bbox 40.75 -74.00 40.77 -73.98 restaurant --limit 20
Findet POIs innerhalb eines geografischen Rechtecks. Verwenden Sie zuerst area, um die Bounding-Box-Koordinaten für einen benannten Ort zu erhalten.
Umgang mit Telegram-Standortpins
Wenn ein Benutzer einen Standortpin sendet, enthält die Nachricht Felder latitude: und longitude:. Extrahieren Sie diese und übergeben Sie sie direkt an nearby:
# Benutzer hat einen Pin bei 36.17, -115.14 gesendet und fragt "finde Cafés in der Nähe"
python3 $MAPS nearby 36.17 -115.14 cafe --radius 1500
Präsentieren Sie die Ergebnisse als nummerierte Liste mit Namen, Entfernungen und dem maps_url-Feld, damit der Benutzer im Chat einen anklickbaren Link erhält. Bei Fragen nach "ist jetzt geöffnet?" prüfen Sie das hours-Feld; wenn es fehlt oder unklar ist, verifizieren Sie mit web_search, da OSRM-Öffnungszeiten von der Community gepflegt werden und nicht immer aktuell sind.
Workflow-Beispiele
"Finde italienische Restaurants in der Nähe des Kolosseums":
nearby --near "Colosseum Rome" --category restaurant --radius 500— ein Befehl, automatisch geokodiert
"Was gibt es in der Nähe dieses Standortpins, den er gesendet hat?":
- Extrahiere lat/lon aus der Telegram-Nachricht
nearby LAT LON cafe --radius 1500
"Wie gehe ich vom Hotel zum Kongresszentrum?":
directions "Hotel Name" --to "Conference Center" --mode walking
"Welche Restaurants gibt es in der Innenstadt von Seattle?":
area "Downtown Seattle"→ Bounding-Box ermittelnbbox S W N E restaurant --limit 30
Fallstricke
- Nominatim ToS: max. 1 Anfrage/s (wird automatisch vom Skript behandelt)
nearbybenötigt lat/lon ODER--near "<Adresse>"– eines von beiden ist erforderlich- OSRM-Routenabdeckung ist am besten für Europa und Nordamerika
- Overpass API kann zu Stoßzeiten langsam sein; das Skript fällt automatisch zwischen Spiegelservern zurück (overpass-api.de → overpass.kumi.systems)
distanceunddirectionsverwenden das--to-Flag für das Ziel (nicht positional)- Wenn eine Postleitzahl allein weltweit mehrdeutige Ergebnisse liefert, Land/Bundesland angeben
Verifikation
python3 ~/.hermes/skills/maps/scripts/maps_client.py search "Freiheitsstatue"
# Sollte lat ~40.689, lon ~-74.044 zurückgeben
python3 ~/.hermes/skills/maps/scripts/maps_client.py nearby --near "Times Square" --category restaurant --limit 3
# Sollte eine Liste von Restaurants innerhalb von ca. 500 m um den Times Square zurückgeben