名称: swiss-geo
描述: 瑞士地理数据、兴趣点与旅游信息。查找地点/地址、查询海拔、查找城市兴趣点(通过OpenStreetMap获取餐厅、咖啡馆、景点)、公共交通时刻表、地图链接。适用于瑞士地点、景点、短途旅行或坐标相关问题。
访问瑞士 Swisstopo 地理数据。
curl -s "https://api3.geo.admin.ch/rest/services/api/SearchServer?searchText=搜索文本&type=locations&sr=4326"
type=locations 用于地址/地点搜索,type=layers 用于图层搜索首先通过搜索获取坐标,然后转换为 LV95 坐标系:
# WGS84 → LV95 转换(瑞士地区近似公式):
# easting = 2600000 + (经度 - 7.4) * 73000
# northing = 1200000 + (纬度 - 46.95) * 111000
curl -s "https://api3.geo.admin.ch/rest/services/height?easting=东坐标&northing=北坐标&sr=2056"
返回海拔高度(米)。
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=0&layers=all:图层ID&sr=4326"
重要图层ID:
- ch.swisstopo.swissboundaries3d-gemeinde-flaeche.fill — 市镇边界
- ch.swisstopo.swissboundaries3d-kanton-flaeche.fill — 州边界
- ch.bafu.bundesinventare-flachmoore — 低地沼泽
- ch.bafu.schutzgebiete-paerke_nationaler_bedeutung — 国家公园
https://map.geo.admin.ch/?lang=de&topic=ech&bgLayer=ch.swisstopo.pixelkarte-farbe&E=经度&N=纬度&zoom=缩放级别
zoom: 0-13(13为最大细节)E/N: WGS84 坐标layers: 逗号分隔的图层ID,用于显示叠加图层curl -s "https://api3.geo.admin.ch/rest/services/api/SearchServer?searchText=Matterhorn&type=locations&sr=4326"
→ 纬度=45.9766, 经度=7.6586
# 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.5米
https://map.geo.admin.ch/?lang=de&E=7.6586&N=45.9766&zoom=10
# 在区域内查找徒步路线(bbox = 西,南,东,北)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/find?layer=ch.swisstopo.swisstlm3d-wanderwege&searchText=地点名称&searchField=name"
# 在特定点识别徒步路线
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=50&layers=all:ch.swisstopo.swisstlm3d-wanderwege&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
徒步路线类别:
- wanderweg — 黄色标记(T1级)
- bergwanderweg — 白-红-白标记(T2-T3级)
- alpinwanderweg — 白-蓝-白标记(T4-T6级)
包含徒步路线的地图链接:
https://map.geo.admin.ch/?lang=de&E=经度&N=纬度&zoom=10&layers=ch.swisstopo.swisstlm3d-wanderwege&bgLayer=ch.swisstopo.pixelkarte-farbe
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=5000&layers=all:ch.swisstopo.unterkuenfte-winter&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
包含山间小屋的地图链接:
https://map.geo.admin.ch/?lang=de&E=经度&N=纬度&zoom=11&layers=ch.swisstopo.unterkuenfte-winter&bgLayer=ch.swisstopo.pixelkarte-farbe
# 持有联邦特许的索道
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=2000&layers=all:ch.bav.seilbahnen-bundeskonzession&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
# 所有索道(swissTLM3D)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=2000&layers=all:ch.swisstopo.swisstlm3d-uebrigerverkehr&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
包含登山缆车的地图链接:
https://map.geo.admin.ch/?lang=de&E=经度&N=纬度&zoom=11&layers=ch.bav.seilbahnen-bundeskonzession&bgLayer=ch.swisstopo.pixelkarte-farbe
# 雪崩危险
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=100&layers=all:ch.bafu.silvaprotect-lawinen&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
# 落石危险(岩崩、山体滑坡)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=100&layers=all:ch.bafu.silvaprotect-sturz&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
# 洪水预警地图(当前)
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=500&layers=all:ch.bafu.hydroweb-warnkarte_national&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
危险图层:
| 图层ID | 描述 |
|----------|--------------|
| ch.bafu.silvaprotect-lawinen | 雪崩区域 |
| ch.bafu.silvaprotect-sturz | 落石区域 |
| ch.bafu.hydroweb-warnkarte_national | 当前洪水预警 |
| ch.bafu.gefahren-waldbrand_warnung | 森林火灾危险 |
| ch.vbs.sperr-gefahrenzonenkarte | 军事禁区 |
包含自然灾害的地图链接:
https://map.geo.admin.ch/?lang=de&E=经度&N=纬度&zoom=12&layers=ch.bafu.silvaprotect-lawinen,ch.bafu.silvaprotect-sturz&bgLayer=ch.swisstopo.pixelkarte-farbe
当前天气(通过 wttr.in):
curl -s "wttr.in/苏黎世?format=%l:+%c+%t+%h+%w&lang=de"
# 示例输出:苏黎世: ⛅️ +5°C 78% ↙12km/h
MeteoSwiss 预警(地图):
https://map.geo.admin.ch/?lang=de&layers=ch.meteoschweiz.gefahren-warnungen
SLF 雪崩公报:
- 当前:https://www.slf.ch/de/lawinenbulletin-und-schneesituation.html
- API(实验性):https://www.slf.ch/avalanche/mobile/bulletin_de.json
BAFU 洪水(当前水位):
https://map.geo.admin.ch/?lang=de&layers=ch.bafu.hydroweb-messstationen_gefahren
搜索行程:
curl -s "https://transport.opendata.ch/v1/connections?from=苏黎世&to=伯尔尼&limit=3"
出发时刻表:
curl -s "https://transport.opendata.ch/v1/stationboard?station=苏黎世+HB&limit=5"
搜索车站:
curl -s "https://transport.opendata.ch/v1/locations?query=Paradeplatz"
解析示例输出:
curl -s "https://transport.opendata.ch/v1/stationboard?station=伯尔尼&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', '')}\")"
参数:
| 参数 | 描述 |
|-----------|--------------|
| from / to | 起点/终点(名称或ID) |
| station | 车站(用于出发时刻表) |
| limit | 最大结果数 |
| date | 日期(YYYY-MM-DD) |
| time | 时间(HH:MM) |
| isArrivalTime | 1 = 使用到达时间而非出发时间 |
公共交通站点:
curl -s "https://api3.geo.admin.ch/rest/services/api/MapServer/identify?geometryType=esriGeometryPoint&geometry=经度,纬度&tolerance=500&layers=all:ch.bav.haltestellen-oev&sr=4326&imageDisplay=500,500,96&mapExtent=5.9,45.8,10.5,47.8"
滑雪旅行与雪鞋路线:
https://map.geo.admin.ch/?lang=de&E=经度&N=纬度&zoom=11&layers=ch.swisstopo-karto.skitouren,ch.swisstopo-karto.schneeschuhrouten&bgLayer=ch.swisstopo.pixelkarte-farbe
坡度(用于旅行规划):
https://map.geo.admin.ch/?lang=de&E=经度&N=纬度&zoom=13&layers=ch.swisstopo-karto.hangneigung&bgLayer=ch.swisstopo.pixelkarte-farbe
免费,无需 API 密钥。 适用于在城市中查找餐厅、咖啡馆、冰淇淋店、博物馆、景点等。
# 在区域内搜索兴趣点(南,西,北,东)
# 示例:苏黎世市中心的冰淇淋店
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"
# 苏黎世市的所有冰淇淋店
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;'
| 类别 | OSM 标签 | 示例 |
|---|---|---|
| 🍦 冰淇淋店 | amenity=ice_cream |
Gelateria |
| 🍕 餐厅 | amenity=restaurant |
+ cuisine=* |
| ☕ 咖啡馆 | amenity=cafe |
|
| 🍺 酒吧/酒馆 | amenity=bar / pub |
|
| 🏛️ 博物馆 | tourism=museum |
|
| 🎭 剧院 | amenity=theatre |
|
| ⛪ 教堂 | amenity=place_of_worship |
|
| 🏰 景点 | tourism=attraction |
|
| 👁️ 观景点 | tourism=viewpoint |
|
| 🎡 游乐园 | leisure=amusement_arcade |
|
| 🏊 游泳池 | leisure=swimming_pool |
+ access=yes |
| 🎮 游乐场 | leisure=playground |
|
| 🌳 公园 | leisure=park |
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;'
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;'
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', '未命名')
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()
"
| 城市 | 南 | 西 | 北 | 东 |
|---|---|---|---|---|
| 苏黎世市中心 | 47.36 | 8.52 | 47.39 | 8.56 |
| 苏黎世老城 | 47.366 | 8.538 | 47.378 | 8.548 |
| 伯尔尼市中心 | 46.94 | 7.43 | 46.96 | 7.46 |
| 巴塞尔市中心 |