swiss-geo
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