AgentSkillsCN

swiss-geo

瑞士地理数据、兴趣点和旅游信息。搜索地点/地址,查询海拔高度,查找城市兴趣点(餐厅、咖啡馆、景点,通过OpenStreetMap),公共交通时刻表、地图链接。当询问瑞士地点、景点、旅行或坐标时使用。

SKILL.md
--- frontmatter
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

bash
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=locations für Adressen/Orte, type=layers für Layer-Suche

2. Höhenabfrage

Zuerst Koordinaten via Suche holen, dann in LV95 umrechnen:

bash
# 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.)

bash
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 — Gemeindegrenzen
  • ch.swisstopo.swissboundaries3d-kanton-flaeche.fill — Kantonsgrenzen
  • ch.bafu.bundesinventare-flachmoore — Flachmoore
  • ch.bafu.schutzgebiete-paerke_nationaler_bedeutung — Naturpärke

4. Kartenlink generieren

code
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 Koordinaten
  • layers: Komma-getrennte Layer-IDs zum Einblenden

Beispiel-Workflow: "Wo liegt Matterhorn und wie hoch ist es?"

  1. Suchen:
bash
curl -s "https://api3.geo.admin.ch/rest/services/api/SearchServer?searchText=Matterhorn&type=locations&sr=4326"

→ lat=45.9766, lon=7.6586

  1. Höhe abfragen (LV95):
bash
# 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

  1. Kartenlink:
code
https://map.geo.admin.ch/?lang=de&E=7.6586&N=45.9766&zoom=10

5. Wanderwege abfragen

bash
# 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:

code
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

bash
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:

code
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

bash
# 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:

code
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

bash
# 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-IDBeschreibung
ch.bafu.silvaprotect-lawinenLawinengebiete
ch.bafu.silvaprotect-sturzSturzgebiete
ch.bafu.hydroweb-warnkarte_nationalHochwasser aktuell
ch.bafu.gefahren-waldbrand_warnungWaldbrandgefahr
ch.vbs.sperr-gefahrenzonenkarteMilitärische Sperrzonen

Kartenlink mit Naturgefahren:

code
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):

bash
curl -s "wttr.in/Zürich?format=%l:+%c+%t+%h+%w&lang=de"
# Zürich: ⛅️ +5°C 78% ↙12km/h

MeteoSwiss Warnungen (Karte):

code
https://map.geo.admin.ch/?lang=de&layers=ch.meteoschweiz.gefahren-warnungen

Lawinenbulletin SLF:

Hochwasser BAFU (aktuelle Pegel):

code
https://map.geo.admin.ch/?lang=de&layers=ch.bafu.hydroweb-messstationen_gefahren

10. ÖV-Fahrplan (transport.opendata.ch)

Verbindung suchen:

bash
curl -s "https://transport.opendata.ch/v1/connections?from=Zürich&to=Bern&limit=3"

Abfahrtstafel:

bash
curl -s "https://transport.opendata.ch/v1/stationboard?station=Zürich+HB&limit=5"

Haltestelle suchen:

bash
curl -s "https://transport.opendata.ch/v1/locations?query=Paradeplatz"

Beispiel-Output parsen:

bash
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:

ParameterBeschreibung
from / toStart/Ziel (Name oder ID)
stationHaltestelle für Abfahrtstafel
limitMax. Ergebnisse
dateDatum (YYYY-MM-DD)
timeZeit (HH:MM)
isArrivalTime1 = Ankunftszeit statt Abfahrt

11. Weitere nützliche Daten

ÖV-Haltestellen:

bash
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:

code
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):

code
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)

bash
# 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)

bash
# 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

KategorieOSM-TagBeispiel
🍦 Eisdieleamenity=ice_creamGelateria
🍕 Restaurantamenity=restaurant+ cuisine=*
☕ Caféamenity=cafe
🍺 Bar/Pubamenity=bar / pub
🏛️ Museumtourism=museum
🎭 Theateramenity=theatre
⛪ Kircheamenity=place_of_worship
🏰 Sehenswürdigkeittourism=attraction
👁️ Aussichtspunkttourism=viewpoint
🎡 Freizeitparkleisure=amusement_arcade
🏊 Schwimmbadleisure=swimming_pool+ access=yes
🎮 Spielplatzleisure=playground
🌳 Parkleisure=park

Beispiel: Museen & Sehenswürdigkeiten in Zürich Altstadt

bash
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)

bash
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)

bash
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)

StadtSouthWestNorthEast
Zürich Zentrum47.368.5247.398.56
Zürich Altstadt47.3668.53847.3788.548
Bern Zentrum46.947.4346.967.46
Basel Zentrum47.557.5847.577.61
Luzern Zentrum47.048.2947.068.32
Genf Zentrum46.196.1346.216.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:

bash
curl -s "https://opendata.myswitzerland.io/v1/attractions/?lang=de&limit=5" \
  -H "x-api-key: $MYSWITZERLAND_API_KEY"

Touren suchen:

bash
curl -s "https://opendata.myswitzerland.io/v1/tours/?lang=de&limit=5" \
  -H "x-api-key: $MYSWITZERLAND_API_KEY"

Geodaten einer Tour (GeoJSON):

bash
curl -s "https://opendata.myswitzerland.io/v1/tours/TOUR_ID/geodata" \
  -H "x-api-key: $MYSWITZERLAND_API_KEY"

Destinationen:

bash
curl -s "https://opendata.myswitzerland.io/v1/destinations/?lang=de" \
  -H "x-api-key: $MYSWITZERLAND_API_KEY"

Response-Felder:

  • name — Name der Attraktion/Tour
  • abstract — Kurzbeschreibung
  • geo.latitude, geo.longitude — Koordinaten
  • classification — Kategorien (Saison, Typ, etc.)

Beispiel-Workflows

"Wo kann ich mit Kindern in Zürich Eis essen und was gibt's in der Nähe?"

  1. Eisdielen via Overpass API suchen (Abschnitt 12)
  2. Sehenswürdigkeiten/Spielplätze in der Nähe finden
  3. ÖV-Verbindung dorthin (Abschnitt 10)
  4. Kartenlink generieren (Abschnitt 4)

"Wanderung mit Bergbahn und Hütte im Engadin?"

  1. Bergbahnen suchen (Abschnitt 7)
  2. Wanderwege finden (Abschnitt 5)
  3. Berghütten identifizieren (Abschnitt 6)
  4. 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