TransportationDocumentedScanned

swiss-geo

Schweizer Geodaten, POIs und Tourismus.

Share:

Installation

npx clawhub@latest install swiss-geo-and-tourism-assistant

View the full skill documentation and source below.

Documentation

Swiss Geo Skill

Zugriff auf Swisstopo-Geodaten für die Schweiz.

Funktionen

1. Orts-/Adresssuche

curl -s ""
  • 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:
# Umrechnung WGS84 → LV95 (grobe Näherung für Schweiz):
# easting = 2600000 + (lon - 7.4) * 73000
# northing = 1200000 + (lat - 46.95) * 111000

curl -s ""
Gibt Höhe in Metern über Meer zurück.

3. Feature-Identifikation (Gemeinde, Kanton, etc.)

curl -s ""

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



  • 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?"

  • Suchen:

  • curl -s ""

    → 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 ""

    → 4477.5m

  • Kartenlink:

  • 5. Wanderwege abfragen

    # Wanderwege in einem Gebiet finden (bbox = west,south,east,north)
    curl -s ""
    
    # Wanderwege an einem Punkt identifizieren
    curl -s ""

    Wanderweg-Kategorien:

    • wanderweg — Gelb markiert (T1)

    • bergwanderweg — Weiss-rot-weiss (T2-T3)

    • alpinwanderweg — Weiss-blau-weiss (T4-T6)


    Kartenlink mit Wanderwegen:

    6. Berghütten & Unterkünfte

    curl -s ""

    Kartenlink mit Hütten:

    7. Bergbahnen & Seilbahnen

    # Seilbahnen mit Bundeskonzession
    curl -s ""
    
    # Alle Seilbahnen (swissTLM3D)
    curl -s ""

    Kartenlink mit Bergbahnen:

    8. Naturgefahren

    # Lawinengefahr
    curl -s ""
    
    # Sturzgefahr (Steinschlag, Felssturz)
    curl -s ""
    
    # Hochwasser-Warnkarte (aktuell)
    curl -s ""

    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:

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

    Lawinenbulletin SLF:

    • Aktuell:

    • API (experimentell):


    Hochwasser BAFU (aktuelle Pegel):

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

    Verbindung suchen:

    curl -s ""

    Abfahrtstafel:

    curl -s ""

    Haltestelle suchen:

    curl -s ""

    Beispiel-Output parsen:

    curl -s "" | 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:

    curl -s ""

    Skitouren & Schneeschuhrouten:

    Hangneigung (für Touren):

    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 ""

    Query mit Stadt-Area (empfohlen)

    # Alle Eisdielen in der Stadt Zürich
    curl -s "" --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

    curl -s "" --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 "" --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 "" | 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:

    curl -s "" \
      -H "x-api-key: $MYSWITZERLAND_API_KEY"

    Touren suchen:

    curl -s "" \
      -H "x-api-key: $MYSWITZERLAND_API_KEY"

    Geodaten einer Tour (GeoJSON):

    curl -s "" \
      -H "x-api-key: $MYSWITZERLAND_API_KEY"

    Destinationen:

    curl -s "" \
      -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?"

  • 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