# 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, "risk_level": "medium", "risk_emoji": "🟡", "airport_name": "Esenboğa 机场", "distance_km": 24.5, "warning": "内陆高原城市,昼夜温差大(可达15°C+); 激进取整效应明显。", }, "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": 49.0097, "lon": 2.5480, "icao": "LFPG", "tz_offset": 3600, "use_fahrenheit": False, "is_major": True, "risk_level": "medium", "risk_emoji": "🟡", "airport_name": "Charles de Gaulle 机场", "distance_km": 25.2, "warning": "城市热岛效应:市区比机场偏暖1-2°C。", }, "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大陆性气候差异大。", }, "hong kong": { "name": "Hong Kong", "lat": 22.3019, "lon": 114.1742, "icao": "VHHH", "settlement_source": "hko", "tz_offset": 28800, "use_fahrenheit": False, "is_major": True, "risk_level": "medium", "risk_emoji": "🟡", "airport_name": "香港天文台总部", "distance_km": 2.0, "warning": "海风与地形共同作用,午后对流触发后温度回落可能偏快。", }, "taipei": { "name": "Taipei", "lat": 25.0377, "lon": 121.5149, "icao": "RCSS", "settlement_source": "cwa", "tz_offset": 28800, "use_fahrenheit": False, "is_major": True, "risk_level": "low", "risk_emoji": "🟢", "airport_name": "中央气象署台北站", "distance_km": 1.5, "warning": "盆地地形叠加都市热岛,夏季午后对流前后温度波动较快。", }, "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": "全年温度振幅较小,主要受午后阵雨时段影响。", }, "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": "海陆风转换明显,午后海风可压制升温,最高温时点可能后移。", }, "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": "东河水汽可能在春季产生温差。", }, "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": "平原地形下辐射冷却显著,清晨与夜间温度回落可能偏快。", }, "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": "四大火炉之一,夏季持续高温,夜间温度偏高,湿度大。", }, "shenzhen": { "name": "Shenzhen", "lat": 22.6393, "lon": 113.8107, "icao": "ZGSZ", "tz_offset": 28800, "use_fahrenheit": False, "is_major": True, "risk_level": "medium", "risk_emoji": "🟡", "airport_name": "深圳宝安国际机场", "distance_km": 32.0, "warning": "近海受海洋调节,热岛效应强,日夜温差较小。", }, "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": "江汉平原,水汽充足,夏季常现长时闷热高温。", }, } ALIASES = { # English shortcuts "ank": "ankara", "lon": "london", "par": "paris", "nyc": "new york", "ny": "new york", "chi": "chicago", "dal": "dallas", "mia": "miami", "atl": "atlanta", "sea": "seattle", "tor": "toronto", "sel": "seoul", "seo": "seoul", "hkg": "hong kong", "hk": "hong kong", "tpe": "taipei", "tp": "taipei", "taipei": "taipei", "sha": "shanghai", "sh": "shanghai", "sin": "singapore", "sg": "singapore", "tok": "tokyo", "tyo": "tokyo", "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", "伦敦": "london", "巴黎": "paris", "纽约": "new york", "芝加哥": "chicago", "达拉斯": "dallas", "迈阿密": "miami", "亚特兰大": "atlanta", "西雅图": "seattle", "多伦多": "toronto", "首尔": "seoul", "香港": "hong kong", "台北": "taipei", "臺北": "taipei", "上海": "shanghai", "新加坡": "singapore", "东京": "tokyo", "東京": "tokyo", "特拉维夫": "tel aviv", "布宜诺斯艾利斯": "buenos aires", "惠灵顿": "wellington", "勒克瑙": "lucknow", "圣保罗": "sao paulo", "慕尼黑": "munich", "米兰": "milan", "米蘭": "milan", "华沙": "warsaw", "華沙": "warsaw", "马德里": "madrid", "馬德里": "madrid", "ctu": "chengdu", "cd": "chengdu", "ckg": "chongqing", "cq": "chongqing", "szx": "shenzhen", "sz": "shenzhen", "pek": "beijing", "bjs": "beijing", "bj": "beijing", "wuh": "wuhan", "wh": "wuhan", "成都": "chengdu", "重庆": "chongqing", "深圳": "shenzhen", "北京": "beijing", "武汉": "wuhan", }