Files
PolyWeather/src/data_collection/city_registry.py
T
2569718930@qq.com 6e6d27f323 莫斯科数据源简化:移除 METAR 集群 + NOAA 结算,仅保留 UUWW 单站
- city_registry: settlement_source noaa → metar
- weather_sources: 移除 Moscow METAR cluster 5 站配置
- country_networks: 删除 RussiaStationWebNetworkProvider 类
- 文档: Tier 4 备注更新
2026-05-26 09:20:49 +08:00

895 lines
32 KiB
Python

# PolyWeather City Registry
# A unified "Source of Truth" for all tracked cities, coordinates, ICAO codes, and risk profiles.
CITY_REGISTRY = {
"ankara": {
"name": "Ankara",
"lat": 40.1281,
"lon": 32.9951,
"icao": "LTAC",
"tz_offset": 10800,
"use_fahrenheit": False,
"is_major": False,
"fast_metar_refresh": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Esenboğa 机场",
"distance_km": 24.5,
"warning": "内陆高原城市,昼夜温差大(可达15°C+); 激进取整效应明显。",
},
"istanbul": {
"name": "Istanbul",
"lat": 41.2749,
"lon": 28.7323,
"icao": "LTFM",
"settlement_source": "noaa",
"settlement_station_code": "LTFM",
"settlement_station_label": "Istanbul Airport",
"tz_offset": 10800,
"use_fahrenheit": False,
"is_major": True,
"fast_metar_refresh": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Istanbul Airport",
"distance_km": 34.0,
"warning": "市场现按 NOAA LTFM 整度°C口径结算;以 weather.gov Temp 列当天最终完成质控后的最高整度摄氏值为准。",
},
"moscow": {
"name": "Moscow",
"lat": 55.5915,
"lon": 37.2615,
"icao": "UUWW",
"settlement_source": "metar",
"settlement_station_code": "UUWW",
"settlement_station_label": "Vnukovo International Airport",
"tz_offset": 10800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Vnukovo International Airport",
"distance_km": 29.0,
"warning": "仅 UUWW METAR 单站;无实时国家级站网,看日内趋势时需注意报间相对稳定但更新频率较低。",
},
"london": {
"name": "London",
"lat": 51.5048,
"lon": 0.0522,
"icao": "EGLC",
"tz_offset": 0,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "London City 机场",
"distance_km": 12.7,
"warning": "泰晤士河局部微气候影响。",
},
"paris": {
"name": "Paris",
"lat": 48.9694,
"lon": 2.4414,
"icao": "LFPB",
"settlement_source": "aeroweb",
"settlement_station_code": "LFPB",
"settlement_station_label": "Paris Le Bourget (AEROWEB)",
"settlement_url": "https://www.wunderground.com/history/daily/fr/bonneuil-en-france/LFPB",
"tz_offset": 3600,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Paris-Le Bourget 机场",
"distance_km": 12.0,
"warning": "巴黎市场现按 Le Bourget 机场 METAR / LFPB 历史记录锚定;市区热岛与机场北侧低云可能造成偏差。",
},
"seoul": {
"name": "Seoul",
"lat": 37.4602,
"lon": 126.4407,
"icao": "RKSI",
"tz_offset": 32400,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "仁川国际机场",
"distance_km": 48.8,
"warning": "距离太远,海洋性vs大陆性气候差异大。",
},
"busan": {
"name": "Busan",
"lat": 35.1795,
"lon": 128.9382,
"icao": "RKPK",
"settlement_source": "wunderground",
"settlement_station_code": "RKPK",
"settlement_station_label": "Busan/Gimhae International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/kr/busan/RKPK",
"tz_offset": 32400,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "金海国际机场",
"distance_km": 14.0,
"warning": "市场现按 Wunderground 金海国际机场站整度°C口径结算;海风与沿海云量会影响午后峰值。",
},
"hong kong": {
"name": "Hong Kong",
"lat": 22.3019,
"lon": 114.1742,
"icao": "VHHH",
"settlement_source": "hko",
"settlement_station_code": "HKO",
"settlement_station_label": "HK Observatory",
"settlement_station_candidates": ["HK Observatory", "Hong Kong Observatory"],
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "香港天文台总部",
"distance_km": 2.0,
"warning": "海风与地形共同作用,午后对流触发后温度回落可能偏快。",
},
"shenzhen": {
"name": "Shenzhen",
"lat": 22.4686,
"lon": 113.9970,
"icao": "LFS",
"settlement_source": "hko",
"settlement_station_code": "LFS",
"settlement_station_label": "Shenzhen (HKO)",
"settlement_station_candidates": ["Lau Fau Shan"],
"disable_aviationweather": True,
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "深圳(HKO 天文台站)",
"distance_km": 0.0,
"warning": "深圳温度市场结算按香港天文台(HKO)站口径,通过流浮山分钟级观测。非机场 METAR,不可与宝安机场 ZGSZ/VHHH 报文混用。",
},
"taipei": {
"name": "Taipei",
"lat": 25.0377,
"lon": 121.5149,
"icao": "RCSS",
"settlement_source": "cwa",
"settlement_station_code": "466920",
"settlement_station_label": "中央气象署台北站",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "中央气象署台北站",
"distance_km": 0.0,
"warning": "结算按交通部中央气象署台北站口径,不应混用松山机场 METAR 作为结算主源。",
},
"shanghai": {
"name": "Shanghai",
"lat": 31.1434,
"lon": 121.8052,
"icao": "ZSPD",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "浦东国际机场",
"distance_km": 33.0,
"warning": "沿海平流与城市热岛叠加,午后最高温落点易出现1-2°C偏差。",
},
"singapore": {
"name": "Singapore",
"lat": 1.3644,
"lon": 103.9915,
"icao": "WSSS",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "樟宜机场",
"distance_km": 17.5,
"warning": "全年温度振幅较小,主要受午后阵雨时段影响。",
},
"kuala lumpur": {
"name": "Kuala Lumpur",
"lat": 2.7456,
"lon": 101.7072,
"icao": "WMKK",
"settlement_source": "wunderground",
"settlement_station_code": "WMKK",
"settlement_station_label": "Kuala Lumpur International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/my/sepang-district/WMKK",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "吉隆坡国际机场",
"distance_km": 45.0,
"warning": "市场现按 Wunderground 吉隆坡国际机场站整度°C口径结算;午后对流和热带湿热会让峰值窗口偏短。",
},
"jakarta": {
"name": "Jakarta",
"lat": -6.2666,
"lon": 106.8910,
"icao": "WIHH",
"settlement_source": "wunderground",
"settlement_station_code": "WIHH",
"settlement_station_label": "Jakarta/Halim Perdanakusuma Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/id/jakarta/WIHH",
"tz_offset": 25200,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Halim Perdanakusuma Airport",
"distance_km": 12.0,
"warning": "市场现按 Wunderground Halim 机场站整度°C口径结算;热带午后阵雨常在峰值前后快速压制气温。",
},
"manila": {
"name": "Manila",
"lat": 14.5086,
"lon": 121.0198,
"icao": "RPLL",
"settlement_source": "wunderground",
"settlement_station_code": "RPLL",
"settlement_station_label": "Manila/Ninoy Aquino International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/ph/manila/RPLL",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "尼诺伊·阿基诺国际机场",
"distance_km": 10.0,
"warning": "市场现按 Wunderground 尼诺伊·阿基诺国际机场站整度°C口径结算;海风、湿热与午后对流会压缩日最高温窗口。",
},
"karachi": {
"name": "Karachi",
"lat": 24.9065,
"lon": 67.1608,
"icao": "OPKC",
"settlement_source": "wunderground",
"settlement_station_code": "OPKC",
"settlement_station_label": "Karachi/Jinnah International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/pk/karachi/OPKC",
"tz_offset": 18000,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "真纳国际机场",
"distance_km": 15.0,
"min_plausible_metar_temp_c": 5.0,
"warning": "市场现按 Wunderground 真纳国际机场站整度°C口径结算;海风锋、干热输送与尘霾会影响峰值兑现时间。",
},
"tokyo": {
"name": "Tokyo",
"lat": 35.5523,
"lon": 139.7798,
"icao": "RJTT",
"tz_offset": 32400,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "羽田机场",
"distance_km": 15.0,
"warning": "湾风与热岛效应并存,日最高温时点有时会后移。",
},
"tel aviv": {
"name": "Tel Aviv",
"lat": 32.0114,
"lon": 34.8867,
"icao": "LLBG",
"tz_offset": 7200,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Ben Gurion 机场",
"distance_km": 14.8,
"warning": "海陆风转换明显,午后海风可压制升温,最高温时点可能后移。",
"settlement_source": "ims",
"settlement_station_code": "225",
"settlement_station_label": "Lod Airport",
},
"toronto": {
"name": "Toronto",
"lat": 43.6777,
"lon": -79.6248,
"icao": "CYYZ",
"tz_offset": -18000,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "Pearson 国际机场",
"distance_km": 19.6,
"warning": "冬季湖效应偶尔导致局部强降温。",
},
"buenos aires": {
"name": "Buenos Aires",
"lat": -34.8222,
"lon": -58.5358,
"icao": "SAEZ",
"tz_offset": -10800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Ezeiza 国际机场",
"distance_km": 28.1,
"warning": "夏天城区可比郊区高2-3°C。",
},
"wellington": {
"name": "Wellington",
"lat": -41.3272,
"lon": 174.8053,
"icao": "NZWN",
"tz_offset": 46800,
"use_fahrenheit": False,
"is_major": False,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "惠灵顿国际机场",
"distance_km": 5.5,
"warning": "风大影响体感,但温度测量偏差小。",
},
"new york": {
"name": "New York",
"lat": 40.7769,
"lon": -73.8740,
"icao": "KLGA",
"tz_offset": -18000,
"use_fahrenheit": True,
"is_major": True,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "LaGuardia 机场",
"distance_km": 14.5,
"warning": "东河水汽可能在春季产生温差。",
},
"los angeles": {
"name": "Los Angeles",
"lat": 33.9416,
"lon": -118.4085,
"icao": "KLAX",
"tz_offset": -28800,
"use_fahrenheit": True,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Los Angeles International Airport",
"distance_km": 29.0,
"warning": "海风与沿海层云对午后升温影响明显,LAX 口径常明显低于内陆城区。",
},
"san francisco": {
"name": "San Francisco",
"lat": 37.6213,
"lon": -122.3790,
"icao": "KSFO",
"tz_offset": -28800,
"use_fahrenheit": True,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "San Francisco International Airport",
"distance_km": 20.0,
"warning": "海湾冷空气和平流雾常压制机场升温,SFO 与市区体感差异可快速放大。",
},
"denver": {
"name": "Denver",
"display_name": "Denver",
"lat": 39.7017,
"lon": -104.7518,
"icao": "KBKF",
"tz_offset": -25200,
"use_fahrenheit": True,
"is_major": False,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Buckley Space Force Base",
"distance_km": 3.5,
"warning": "丹佛高原地形下日照与下沉增温切换快,Buckley 与 Denver 核心区午后峰值常有明显错位。",
},
"austin": {
"name": "Austin",
"lat": 30.1945,
"lon": -97.6699,
"icao": "KAUS",
"tz_offset": -21600,
"use_fahrenheit": True,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Austin-Bergstrom International Airport",
"distance_km": 12.0,
"warning": "德州中部午后混合层增强快,干热与局地对流会让峰值窗口前后偏差放大。",
},
"houston": {
"name": "Houston",
"lat": 29.6454,
"lon": -95.2789,
"icao": "KHOU",
"tz_offset": -21600,
"use_fahrenheit": True,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "William P. Hobby Airport",
"distance_km": 12.0,
"warning": "墨西哥湾水汽与海风回流显著,湿热条件下机场白天升温节奏容易偏慢。",
},
"mexico city": {
"name": "Mexico City",
"lat": 19.4363,
"lon": -99.0721,
"icao": "MMMX",
"tz_offset": -21600,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "Benito Juárez International Airport",
"distance_km": 6.5,
"warning": "高海拔盆地城市,辐射增温与午后对流并存,峰值前后 1-2°C 偏差较常见。",
},
"chicago": {
"name": "Chicago",
"lat": 41.9742,
"lon": -87.9073,
"icao": "KORD",
"tz_offset": -21600,
"use_fahrenheit": True,
"is_major": False,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "O'Hare 国际机场",
"distance_km": 25.3,
"warning": "密歇根湖效应:湖边vs内陆可差10°F+。",
},
"dallas": {
"name": "Dallas",
"lat": 32.8471,
"lon": -96.8518,
"icao": "KDAL",
"tz_offset": -21600,
"use_fahrenheit": True,
"is_major": False,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Dallas Love Field 机场",
"distance_km": 11.2,
"warning": "城市热岛效应在夏季午后会使温度略高于郊区。",
},
"miami": {
"name": "Miami",
"lat": 25.7959,
"lon": -80.2870,
"icao": "KMIA",
"tz_offset": -18000,
"use_fahrenheit": True,
"is_major": False,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "Miami 国际机场",
"distance_km": 10.3,
"warning": "温差较小,数据稳定。",
},
"atlanta": {
"name": "Atlanta",
"lat": 33.6407,
"lon": -84.4277,
"icao": "KATL",
"tz_offset": -18000,
"use_fahrenheit": True,
"is_major": False,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "Hartsfield-Jackson 机场",
"distance_km": 12.6,
"warning": "数据较准。",
},
"seattle": {
"name": "Seattle",
"lat": 47.4502,
"lon": -122.3088,
"icao": "KSEA",
"tz_offset": -28800,
"use_fahrenheit": True,
"is_major": False,
"risk_level": "low",
"risk_emoji": "🟢",
"airport_name": "Sea-Tac 国际机场",
"distance_km": 17.4,
"warning": "微气候差异存在但较小。",
},
"lucknow": {
"name": "Lucknow",
"lat": 26.7606,
"lon": 80.8893,
"icao": "VILK",
"tz_offset": 19800,
"use_fahrenheit": False,
"is_major": False,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Chaudhary Charan Singh 国际机场",
"distance_km": 14.0,
"warning": "印度北方热岛效应,夏季午后机场反馈略低于市区。",
},
"sao paulo": {
"name": "São Paulo",
"lat": -23.4356,
"lon": -46.4731,
"icao": "SBGR",
"tz_offset": -10800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "São Paulo/Guarulhos 机场",
"distance_km": 25.0,
"warning": "距离远且海拔有差异,局部降雨温差极大。",
},
"munich": {
"name": "Munich",
"lat": 48.3538,
"lon": 11.7861,
"icao": "EDDM",
"tz_offset": 3600,
"use_fahrenheit": False,
"is_major": False,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "Munich 机场",
"distance_km": 28.5,
"warning": "距离非常远,空旷机场夜间降温快,冬季易生大雾压制气温。",
},
"milan": {
"name": "Milan",
"lat": 45.6306,
"lon": 8.7281,
"icao": "LIMC",
"settlement_source": "metar",
"tz_offset": 3600,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "马尔彭萨机场",
"distance_km": 49.0,
"warning": "机场距市区较远,午后峰值与夜间降温节奏需优先看机场站。",
},
"warsaw": {
"name": "Warsaw",
"lat": 52.1657,
"lon": 20.9671,
"icao": "EPWA",
"settlement_source": "metar",
"tz_offset": 3600,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "肖邦机场",
"distance_km": 10.0,
"warning": "平原地形下辐射冷却显著,清晨与夜间温度回落可能偏快。",
},
"helsinki": {
"name": "Helsinki",
"lat": 60.3172,
"lon": 24.9633,
"icao": "EFHK",
"settlement_source": "wunderground",
"settlement_station_code": "EFHK",
"settlement_station_label": "Helsinki Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/fi/vantaa/EFHK",
"tz_offset": 7200,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "赫尔辛基机场",
"distance_km": 17.0,
"warning": "市场现按 Wunderground 赫尔辛基机场站整度°C口径结算;高纬度日照变化快,冷平流会明显影响日峰值。",
},
"amsterdam": {
"name": "Amsterdam",
"lat": 52.3086,
"lon": 4.7639,
"icao": "EHAM",
"settlement_source": "wunderground",
"settlement_station_code": "EHAM",
"settlement_station_label": "Amsterdam Airport Schiphol Station",
"settlement_url": "https://www.wunderground.com/history/daily/nl/schiphol/EHAM",
"tz_offset": 3600,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "阿姆斯特丹史基浦机场",
"distance_km": 17.0,
"warning": "市场现按 Wunderground 史基浦机场站整度°C口径结算;北海海风和平流层云容易限制午后升温。",
},
"madrid": {
"name": "Madrid",
"lat": 40.4722,
"lon": -3.5608,
"icao": "LEMD",
"settlement_source": "metar",
"tz_offset": 3600,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "阿道弗·苏亚雷斯马德里-巴拉哈斯机场",
"distance_km": 13.0,
"warning": "机场位于东北侧开阔区,午后混合层增强时与核心城区体感温度可能出现偏差。",
},
"chengdu": {
"name": "Chengdu",
"lat": 30.5785,
"lon": 103.9471,
"icao": "ZUUU",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "成都双流国际机场",
"distance_km": 16.0,
"warning": "盆地地形,夜间降温较慢,多云雾影响日照升温。",
},
"chongqing": {
"name": "Chongqing",
"lat": 29.7196,
"lon": 106.6416,
"icao": "ZUCK",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "重庆江北国际机场",
"distance_km": 19.0,
"warning": "四大火炉之一,夏季持续高温,夜间温度偏高,湿度大。",
},
"guangzhou": {
"name": "Guangzhou",
"lat": 23.3924,
"lon": 113.2988,
"icao": "ZGGG",
"settlement_source": "wunderground",
"settlement_station_code": "ZGGG",
"settlement_station_label": "Guangzhou Baiyun International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/cn/guangzhou/ZGGG",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "广州白云国际机场",
"distance_km": 28.0,
"warning": "市场现按 Wunderground 广州白云国际机场站整度°C口径结算;珠三角海陆风与午后对流会让峰值兑现时间出现摇摆。",
},
"qingdao": {
"name": "Qingdao",
"lat": 36.3620,
"lon": 120.0882,
"icao": "ZSQD",
"settlement_source": "wunderground",
"settlement_station_code": "ZSQD",
"settlement_station_label": "Qingdao Jiaodong International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/cn/qingdao/ZSQD",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "青岛胶东国际机场",
"distance_km": 39.0,
"warning": "市场现按 Wunderground 青岛胶东国际机场站整度°C口径结算;沿海海风、低云和海雾会影响日内升温效率。",
},
"beijing": {
"name": "Beijing",
"lat": 40.0801,
"lon": 116.5846,
"icao": "ZBAA",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "北京首都国际机场",
"distance_km": 25.0,
"warning": "北方内陆,夏季干热,冬季寒冷,春秋易受风沙影响。",
},
"wuhan": {
"name": "Wuhan",
"lat": 30.7838,
"lon": 114.2081,
"icao": "ZHHH",
"tz_offset": 28800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "high",
"risk_emoji": "🔴",
"airport_name": "武汉天河国际机场",
"distance_km": 26.0,
"warning": "江汉平原,水汽充足,夏季常现长时闷热高温。",
},
"panama city": {
"name": "Panama City",
"lat": 8.9733,
"lon": -79.5556,
"icao": "MPMG",
"settlement_source": "wunderground",
"settlement_station_code": "MPMG",
"settlement_station_label": "Panama City/Marcos A. Gelabert Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/pa/panama-city/MPMG",
"tz_offset": -18000,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "Marcos A. Gelabert Airport",
"distance_km": 6.0,
"warning": "市场现按 Wunderground Marcos A. Gelabert 机场站整度°C口径结算;热带对流常让峰值在午后被快速截断。",
},
"cape town": {
"name": "Cape Town",
"lat": -33.9696,
"lon": 18.5972,
"icao": "FACT",
"settlement_source": "wunderground",
"settlement_station_code": "FACT",
"settlement_station_label": "Cape Town International Airport Station",
"settlement_url": "https://www.wunderground.com/history/daily/za/matroosfontein/FACT",
"tz_offset": 7200,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "开普敦国际机场",
"distance_km": 20.0,
"warning": "市场现按 Wunderground 开普敦国际机场站整度°C口径结算;海风和平流云会显著影响午后升温节奏。",
},
"jeddah": {
"name": "Jeddah",
"lat": 21.6702,
"lon": 39.1525,
"icao": "OEJN",
"settlement_source": "ncm",
"settlement_station_code": "OEJN",
"settlement_station_label": "Jeddah King Abdulaziz Intl (NCM)",
"settlement_url": "https://www.wunderground.com/history/daily/sa/jeddah/OEJN",
"tz_offset": 10800,
"use_fahrenheit": False,
"is_major": True,
"risk_level": "medium",
"risk_emoji": "🟡",
"airport_name": "阿卜杜勒阿齐兹国王国际机场",
"distance_km": 18.0,
"warning": "市场现按 Wunderground 吉达阿卜杜勒阿齐兹国王国际机场站整度°C口径结算;干热背景下海风与沙尘输送会改变峰值兑现时点。",
},
}
ALIASES = {
# English shortcuts
"ank": "ankara", "ist": "istanbul", "ltfm": "istanbul", "mos": "moscow", "mow": "moscow", "uuww": "moscow", "vnukovo": "moscow", "lon": "london", "par": "paris",
"nyc": "new york", "ny": "new york", "chi": "chicago",
"la": "los angeles", "lax": "los angeles", "losangeles": "los angeles",
"sf": "san francisco", "sfo": "san francisco", "sanfrancisco": "san francisco",
"aur": "denver", "denver": "denver", "buckley": "denver", "kbkf": "denver", "aurora": "denver",
"aus": "austin", "kaus": "austin",
"hou": "houston", "khou": "houston", "hobby": "houston",
"cdmx": "mexico city", "mexicocity": "mexico city", "mmmx": "mexico city",
"dal": "dallas", "mia": "miami", "atl": "atlanta",
"sea": "seattle", "tor": "toronto", "sel": "seoul",
"seo": "seoul", "hkg": "hong kong", "hk": "hong kong",
"lfs": "shenzhen", "laufaushan": "shenzhen", "lau fau shan": "shenzhen",
"tpe": "taipei", "tp": "taipei", "taipei": "taipei",
"pus": "busan", "bus": "busan", "rkpk": "busan",
"sha": "shanghai", "sh": "shanghai", "sin": "singapore",
"sg": "singapore", "tok": "tokyo", "tyo": "tokyo",
"kul": "kuala lumpur", "wmkk": "kuala lumpur", "sepang": "kuala lumpur",
"jkt": "jakarta", "wihh": "jakarta", "halim": "jakarta",
"mnl": "manila", "manila": "manila", "rpll": "manila",
"khi": "karachi", "karachi": "karachi", "opkc": "karachi", "jinnah": "karachi",
"hel": "helsinki", "efhk": "helsinki", "vantaa": "helsinki",
"ams": "amsterdam", "eham": "amsterdam", "schiphol": "amsterdam",
"pty": "panama city", "mpmg": "panama city", "panamacity": "panama city",
"cpt": "cape town", "fact": "cape town", "capetown": "cape town", "matroosfontein": "cape town",
"jed": "jeddah", "oejn": "jeddah",
"tlv": "tel aviv", "telaviv": "tel aviv",
"ba": "buenos aires", "wel": "wellington",
"luc": "lucknow", "sp": "sao paulo", "mun": "munich",
"mil": "milan", "mxp": "milan", "waw": "warsaw", "war": "warsaw",
"mad": "madrid", "madrid": "madrid", "lemd": "madrid",
# Chinese names
"安卡拉": "ankara",
"伊斯坦布尔": "istanbul",
"莫斯科": "moscow",
"伦敦": "london",
"巴黎": "paris",
"纽约": "new york",
"洛杉矶": "los angeles",
"旧金山": "san francisco",
"奥罗拉": "denver",
"丹佛": "denver",
"奥斯汀": "austin",
"休斯顿": "houston",
"墨西哥城": "mexico city",
"芝加哥": "chicago",
"达拉斯": "dallas",
"迈阿密": "miami",
"亚特兰大": "atlanta",
"西雅图": "seattle",
"多伦多": "toronto",
"首尔": "seoul",
"香港": "hong kong",
"流浮山": "shenzhen",
"台北": "taipei",
"臺北": "taipei",
"釜山": "busan",
"上海": "shanghai",
"新加坡": "singapore",
"吉隆坡": "kuala lumpur",
"雅加达": "jakarta",
"雅加達": "jakarta",
"马尼拉": "manila",
"馬尼拉": "manila",
"卡拉奇": "karachi",
"东京": "tokyo",
"東京": "tokyo",
"特拉维夫": "tel aviv",
"布宜诺斯艾利斯": "buenos aires",
"惠灵顿": "wellington",
"勒克瑙": "lucknow",
"圣保罗": "sao paulo",
"慕尼黑": "munich",
"米兰": "milan",
"米蘭": "milan",
"华沙": "warsaw",
"華沙": "warsaw",
"赫尔辛基": "helsinki",
"赫爾辛基": "helsinki",
"阿姆斯特丹": "amsterdam",
"巴拿马城": "panama city",
"开普敦": "cape town",
"開普敦": "cape town",
"吉达": "jeddah",
"吉達": "jeddah",
"马德里": "madrid",
"馬德里": "madrid",
"ctu": "chengdu", "cd": "chengdu",
"ckg": "chongqing", "cq": "chongqing",
"szx": "shenzhen", "sz": "shenzhen",
"can": "guangzhou", "gz": "guangzhou", "zggg": "guangzhou",
"tao": "qingdao", "qdo": "qingdao", "qingdao": "qingdao", "zsqd": "qingdao",
"pek": "beijing", "bjs": "beijing", "bj": "beijing",
"wuh": "wuhan", "wh": "wuhan",
"成都": "chengdu",
"重庆": "chongqing",
"深圳": "shenzhen",
"广州": "guangzhou",
"青岛": "qingdao",
"青島": "qingdao",
"青岛胶东": "qingdao",
"青島膠東": "qingdao",
"北京": "beijing",
"武汉": "wuhan",
}