7.2k★by mbjoern
swiss-geo – OpenClaw Skill
swiss-geo is an OpenClaw Skills integration for coding workflows. Schweizer Geodaten, POIs und Tourismus. Orte/Adressen suchen, Höhen abfragen, städtische POIs finden (Restaurants, Cafés, Sehenswürdigkeiten via OpenStreetMap), ÖV-Fahrplan, Kartenlinks. Nutze bei Fragen zu Schweizer Orten, Attraktionen, Ausflügen oder Koordinaten.
Skill Snapshot
| name | swiss-geo |
| description | Schweizer Geodaten, POIs und Tourismus. Orte/Adressen suchen, Höhen abfragen, städtische POIs finden (Restaurants, Cafés, Sehenswürdigkeiten via OpenStreetMap), ÖV-Fahrplan, Kartenlinks. Nutze bei Fragen zu Schweizer Orten, Attraktionen, Ausflügen oder Koordinaten. OpenClaw Skills integration. |
| owner | mbjoern |
| repository | mbjoern/swiss-geo-and-tourism-assistant |
| language | Markdown |
| license | MIT |
| topics | |
| security | L1 |
| install | openclaw add @mbjoern/swiss-geo-and-tourism-assistant |
| last updated | Feb 7, 2026 |
Maintainer

name: swiss-geo description: Schweizer Geodaten, POIs und Tourismus. Orte/Adressen suchen, Höhen abfragen, städtische POIs finden (Restaurants, Cafés, Sehenswürdigkeiten via OpenStreetMap), ÖV-Fahrplan, Kartenlinks. Nutze bei Fragen zu Schweizer Orten, Attraktionen, Ausflügen oder Koordinaten.
Swiss Geo Skill
Zugriff auf Swisstopo-Geodaten für die Schweiz.
Funktionen
1. Orts-/Adresssuche
curl -s "https://api3.geo.admin.ch/rest/services/api/SearchServer?searchText=SUCHTEXT&type=locations&sr=4326"
- Gibt lat/lon (WGS84), Label, Gemeinde zurück
type=locationsfür Adressen/Orte,type=layersfür Layer-Suche
2. Höhenabfrage
Zuerst Koordinaten via Suche holen, dann in LV95 umrechnen:
# Umrechnung WGS84 → LV95 (grobe Näherung für Schweiz):
# easting = 2600000 + (lon - 7.4) * 73000
# northing = 1200000 + (lat - 46.95) * 111000
curl -s "https://api3.geo.admin.ch/rest/services/height?easting=EASTING&northing=NORTHING&sr=2056"
Gibt Höhe in Metern über Meer zurück.
3. Feature-Identifikation (Gemeinde, Kanton, etc.)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=0&layers=all:LAYER_ID&sr=4326"
Wichtige Layer-IDs:
ch.swisstopo.swissboundaries3d-gemeinde-flaeche.fill— Gemeindegrenzench.swisstopo.swissboundaries3d-kanton-flaeche.fill— Kantonsgrenzench.bafu.bundesinventare-flachmoore— Flachmoorech.bafu.schutzgebiete-paerke_nationaler_bedeutung— Naturpärke
4. Kartenlink generieren
https://map.geo.admin.ch/?lang=de&topic=ech&bgLayer=ch.swisstopo.pixelkarte-farbe&E=LON&N=LAT&zoom=ZOOM
zoom: 0-13 (13 = max Detail)E/N: WGS84 Koordinatenlayers: Komma-getrennte Layer-IDs zum Einblenden
Beispiel-Workflow: "Wo liegt Matterhorn und wie hoch ist es?"
- Suchen:
curl -s "https://api3.geo.admin.ch/rest/services/api/SearchServer?searchText=Matterhorn&type=locations&sr=4326"
→ lat=45.9766, lon=7.6586
- Höhe abfragen (LV95):
# easting ≈ 2600000 + (7.6586-7.4)*73000 = 2618878
# northing ≈ 1200000 + (45.9766-46.95)*111000 = 1091893
curl -s "https://api3.geo.admin.ch/rest/services/height?easting=2618878&northing=1091893&sr=2056"
→ 4477.5m
- Kartenlink:
https://map.geo.admin.ch/?lang=de&E=7.6586&N=45.9766&zoom=10
5. Wanderwege abfragen
# Wanderwege in einem Gebiet finden (bbox = west,south,east,north)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/find?layer=ch.swisstopo.swisstlm3d-wanderwege&searchText=ORTSNAME&searchField=name"
# Wanderwege an einem Punkt identifizieren
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=50&layers=all:ch.swisstopo.swisstlm3d-wanderwege&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
Wanderweg-Kategorien:
wanderweg— Gelb markiert (T1)bergwanderweg— Weiss-rot-weiss (T2-T3)alpinwanderweg— Weiss-blau-weiss (T4-T6)
Kartenlink mit Wanderwegen:
https://map.geo.admin.ch/?lang=de&E=LON&N=LAT&zoom=10&layers=ch.swisstopo.swisstlm3d-wanderwege&bgLayer=ch.swisstopo.pixelkarte-farbe
6. Berghütten & Unterkünfte
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=5000&layers=all:ch.swisstopo.unterkuenfte-winter&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
Kartenlink mit Hütten:
https://map.geo.admin.ch/?lang=de&E=LON&N=LAT&zoom=11&layers=ch.swisstopo.unterkuenfte-winter&bgLayer=ch.swisstopo.pixelkarte-farbe
7. Bergbahnen & Seilbahnen
# Seilbahnen mit Bundeskonzession
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=2000&layers=all:ch.bav.seilbahnen-bundeskonzession&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
# Alle Seilbahnen (swissTLM3D)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=2000&layers=all:ch.swisstopo.swisstlm3d-uebrigerverkehr&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
Kartenlink mit Bergbahnen:
https://map.geo.admin.ch/?lang=de&E=LON&N=LAT&zoom=11&layers=ch.bav.seilbahnen-bundeskonzession&bgLayer=ch.swisstopo.pixelkarte-farbe
8. Naturgefahren
# Lawinengefahr
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=100&layers=all:ch.bafu.silvaprotect-lawinen&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
# Sturzgefahr (Steinschlag, Felssturz)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=100&layers=all:ch.bafu.silvaprotect-sturz&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
# Hochwasser-Warnkarte (aktuell)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=500&layers=all:ch.bafu.hydroweb-warnkarte_national&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
Gefahren-Layer:
| Layer-ID | Beschreibung |
|---|---|
ch.bafu.silvaprotect-lawinen | Lawinengebiete |
ch.bafu.silvaprotect-sturz | Sturzgebiete |
ch.bafu.hydroweb-warnkarte_national | Hochwasser aktuell |
ch.bafu.gefahren-waldbrand_warnung | Waldbrandgefahr |
ch.vbs.sperr-gefahrenzonenkarte | Militärische Sperrzonen |
Kartenlink mit Naturgefahren:
https://map.geo.admin.ch/?lang=de&E=LON&N=LAT&zoom=12&layers=ch.bafu.silvaprotect-lawinen,ch.bafu.silvaprotect-sturz&bgLayer=ch.swisstopo.pixelkarte-farbe
9. Wetter (Schweiz)
Aktuelles Wetter (via wttr.in):
curl -s "wttr.in/Zürich?format=%l:+%c+%t+%h+%w&lang=de"
# Zürich: ⛅️ +5°C 78% ↙12km/h
MeteoSwiss Warnungen (Karte):
https://map.geo.admin.ch/?lang=de&layers=ch.meteoschweiz.gefahren-warnungen
Lawinenbulletin SLF:
- Aktuell: https://www.slf.ch/de/lawinenbulletin-und-schneesituation.html
- API (experimentell): https://www.slf.ch/avalanche/mobile/bulletin_de.json
Hochwasser BAFU (aktuelle Pegel):
https://map.geo.admin.ch/?lang=de&layers=ch.bafu.hydroweb-messstationen_gefahren
10. ÖV-Fahrplan (transport.opendata.ch)
Verbindung suchen:
curl -s "https://transport.opendata.ch/v1/connections?from=Zürich&to=Bern&limit=3"
Abfahrtstafel:
curl -s "https://transport.opendata.ch/v1/stationboard?station=Zürich+HB&limit=5"
Haltestelle suchen:
curl -s "https://transport.opendata.ch/v1/locations?query=Paradeplatz"
Beispiel-Output parsen:
curl -s "https://transport.opendata.ch/v1/stationboard?station=Bern&limit=3" | python3 -c "
import sys,json
data = json.load(sys.stdin)
for s in data.get('stationboard', []):
time = s.get('stop', {}).get('departure', '')[11:16]
cat = s.get('category', '') + s.get('number', '')
print(f\"{time} {cat} → {s.get('to', '')}\")"
Parameter:
| Parameter | Beschreibung |
|---|---|
from / to | Start/Ziel (Name oder ID) |
station | Haltestelle für Abfahrtstafel |
limit | Max. Ergebnisse |
date | Datum (YYYY-MM-DD) |
time | Zeit (HH:MM) |
isArrivalTime | 1 = Ankunftszeit statt Abfahrt |
11. Weitere nützliche Daten
ÖV-Haltestellen:
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=LON,LAT&tolerance=500&layers=all:ch.bav.haltestellen-oev&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
Skitouren & Schneeschuhrouten:
https://map.geo.admin.ch/?lang=de&E=LON&N=LAT&zoom=11&layers=ch.swisstopo-karto.skitouren,ch.swisstopo-karto.schneeschuhrouten&bgLayer=ch.swisstopo.pixelkarte-farbe
Hangneigung (für Touren):
https://map.geo.admin.ch/?lang=de&E=LON&N=LAT&zoom=13&layers=ch.swisstopo-karto.hangneigung&bgLayer=ch.swisstopo.pixelkarte-farbe
12. Städtische POIs via OpenStreetMap (Overpass API)
Kostenlos, kein API-Key nötig. Ideal für Restaurants, Cafés, Eisdielen, Museen, Sehenswürdigkeiten in Städten.
Basis-Query (Bounding Box)
# POIs in einem Gebiet suchen (south,west,north,east)
# Beispiel: Eisdielen in Zürich-Zentrum
curl -s "https://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%5Btimeout%3A10%5D%3Bnode%5B%22amenity%22%3D%22ice_cream%22%5D%2847.36%2C8.52%2C47.39%2C8.56%29%3Bout%3B"
Query mit Stadt-Area (empfohlen)
# Alle Eisdielen in der Stadt Zürich
curl -s "https://overpass-api.de/api/interpreter" --data-urlencode 'data=[out:json][timeout:15];
area["name"="Zürich"]["admin_level"="8"]->.city;
(
node["amenity"="ice_cream"](area.city);
node["shop"="ice_cream"](area.city);
);
out body;'
Wichtige POI-Tags
| Kategorie | OSM-Tag | Beispiel |
|---|---|---|
| 🍦 Eisdiele | amenity=ice_cream | Gelateria |
| 🍕 Restaurant | amenity=restaurant | + cuisine=* |
| ☕ Café | amenity=cafe | |
| 🍺 Bar/Pub | amenity=bar / pub | |
| 🏛️ Museum | tourism=museum | |
| 🎭 Theater | amenity=theatre | |
| ⛪ Kirche | amenity=place_of_worship | |
| 🏰 Sehenswürdigkeit | tourism=attraction | |
| 👁️ Aussichtspunkt | tourism=viewpoint | |
| 🎡 Freizeitpark | leisure=amusement_arcade | |
| 🏊 Schwimmbad | leisure=swimming_pool | + access=yes |
| 🎮 Spielplatz | leisure=playground | |
| 🌳 Park | leisure=park |
Beispiel: Museen & Sehenswürdigkeiten in Zürich Altstadt
curl -s "https://overpass-api.de/api/interpreter" --data-urlencode 'data=[out:json][timeout:15];
(
node["tourism"="museum"](47.366,8.538,47.378,8.548);
node["tourism"="attraction"](47.366,8.538,47.378,8.548);
node["historic"](47.366,8.538,47.378,8.548);
);
out body;'
Beispiel: Familienfreundliche Orte (Spielplätze, Parks)
curl -s "https://overpass-api.de/api/interpreter" --data-urlencode 'data=[out:json][timeout:15];
area["name"="Zürich"]["admin_level"="8"]->.city;
(
node["leisure"="playground"](area.city);
way["leisure"="playground"](area.city);
);
out center body;'
Response parsen (Python)
curl -s "https://overpass-api.de/api/interpreter?data=..." | python3 -c "
import sys, json
data = json.load(sys.stdin)
for el in data.get('elements', []):
tags = el.get('tags', {})
name = tags.get('name', 'Unbenannt')
lat, lon = el.get('lat', el.get('center', {}).get('lat', '')), el.get('lon', el.get('center', {}).get('lon', ''))
addr = tags.get('addr:street', '')
website = tags.get('website', '')
opening = tags.get('opening_hours', '')
print(f'{name}')
if addr: print(f' 📍 {addr} {tags.get(\"addr:housenumber\", \"\")}')
if opening: print(f' 🕐 {opening}')
if website: print(f' 🔗 {website}')
print()
"
Koordinaten für Schweizer Städte (Bbox)
| Stadt | South | West | North | East |
|---|---|---|---|---|
| Zürich Zentrum | 47.36 | 8.52 | 47.39 | 8.56 |
| Zürich Altstadt | 47.366 | 8.538 | 47.378 | 8.548 |
| Bern Zentrum | 46.94 | 7.43 | 46.96 | 7.46 |
| Basel Zentrum | 47.55 | 7.58 | 47.57 | 7.61 |
| Luzern Zentrum | 47.04 | 8.29 | 47.06 | 8.32 |
| Genf Zentrum | 46.19 | 6.13 | 46.21 | 6.16 |
13. Schweiz Tourismus API (MySwitzerland)
⚠️ Benötigt API-Key (Header: x-api-key)
Hinweis: Diese API ist primär für Outdoor-Tourismus (Wandern, Bergtouren, Regionen) geeignet. Für städtische POIs (Restaurants, Cafés, Museen) ist die Overpass API (Abschnitt 12) besser.
Sehenswürdigkeiten suchen:
curl -s "https://opendata.myswitzerland.io/v1/attractions/?lang=de&limit=5" \
-H "x-api-key: $MYSWITZERLAND_API_KEY"
Touren suchen:
curl -s "https://opendata.myswitzerland.io/v1/tours/?lang=de&limit=5" \
-H "x-api-key: $MYSWITZERLAND_API_KEY"
Geodaten einer Tour (GeoJSON):
curl -s "https://opendata.myswitzerland.io/v1/tours/TOUR_ID/geodata" \
-H "x-api-key: $MYSWITZERLAND_API_KEY"
Destinationen:
curl -s "https://opendata.myswitzerland.io/v1/destinations/?lang=de" \
-H "x-api-key: $MYSWITZERLAND_API_KEY"
Response-Felder:
name— Name der Attraktion/Tourabstract— Kurzbeschreibunggeo.latitude,geo.longitude— Koordinatenclassification— Kategorien (Saison, Typ, etc.)
Beispiel-Workflows
"Wo kann ich mit Kindern in Zürich Eis essen und was gibt's in der Nähe?"
- Eisdielen via Overpass API suchen (Abschnitt 12)
- Sehenswürdigkeiten/Spielplätze in der Nähe finden
- ÖV-Verbindung dorthin (Abschnitt 10)
- Kartenlink generieren (Abschnitt 4)
"Wanderung mit Bergbahn und Hütte im Engadin?"
- Bergbahnen suchen (Abschnitt 7)
- Wanderwege finden (Abschnitt 5)
- Berghütten identifizieren (Abschnitt 6)
- MySwitzerland Touren abfragen (Abschnitt 13)
Tipps
- Städtische POIs → Overpass API (kostenlos, detailliert)
- Outdoor-Tourismus → MySwitzerland API (braucht Key)
- Karten & Geodaten → Swisstopo (kostenlos)
- ÖV-Fahrplan → transport.opendata.ch (kostenlos)
- Suchergebnisse enthalten
origin(address, sn25, gg25, etc.) zur Kategorisierung - Für genaue LV95-Koordinaten siehe references/api.md
- Kombiniere Swisstopo-Layer mit Komma:
layers=layer1,layer2,layer3
No README available.
Permissions & Security
Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.
Requirements
- OpenClaw CLI installed and configured.
- Language: Markdown
- License: MIT
- Topics:
FAQ
How do I install swiss-geo?
Run openclaw add @mbjoern/swiss-geo-and-tourism-assistant in your terminal. This installs swiss-geo into your OpenClaw Skills catalog.
Does this skill run locally or in the cloud?
OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.
Where can I verify the source code?
The source repository is available at https://github.com/openclaw/skills/tree/main/skills/mbjoern/swiss-geo-and-tourism-assistant. Review commits and README documentation before installing.
