diff --git a/docs/CITY_DATA_SOURCES.md b/docs/CITY_DATA_SOURCES.md index 0db71788..c227e6a6 100644 --- a/docs/CITY_DATA_SOURCES.md +++ b/docs/CITY_DATA_SOURCES.md @@ -57,7 +57,7 @@ |------|------|------| | london | EGLC | Met Office 仅 1 小时更新 | | jeddah | OEJN | NCM 数据源目前不可用 | -| moscow | UUWW | 俄罗斯 METAR 集群 + NOAA WRH 结算 | +| moscow | UUWW | 仅 UUWW METAR 单站 | | shenzhen | ZGSZ | 已接入 HKO 流浮山 10 分钟数据,见 Tier 3 | | munich | EDDM | DWD 延迟约 1 小时 | | milan | LIMC | 无已知实时源 | diff --git a/src/data_collection/city_registry.py b/src/data_collection/city_registry.py index a18c40f5..8e87de68 100644 --- a/src/data_collection/city_registry.py +++ b/src/data_collection/city_registry.py @@ -40,7 +40,7 @@ CITY_REGISTRY = { "lat": 55.5915, "lon": 37.2615, "icao": "UUWW", - "settlement_source": "noaa", + "settlement_source": "metar", "settlement_station_code": "UUWW", "settlement_station_label": "Vnukovo International Airport", "tz_offset": 10800, @@ -50,7 +50,7 @@ CITY_REGISTRY = { "risk_emoji": "🟡", "airport_name": "Vnukovo International Airport", "distance_km": 29.0, - "warning": "市场现按 NOAA UUWW 整度°C口径结算;以 weather.gov Temp 列在当日全部小时最终完成后的最高整度摄氏值为准。", + "warning": "仅 UUWW METAR 单站;无实时国家级站网,看日内趋势时需注意报间相对稳定但更新频率较低。", }, "london": { "name": "London", diff --git a/src/data_collection/country_networks.py b/src/data_collection/country_networks.py index fe072731..92ce682f 100644 --- a/src/data_collection/country_networks.py +++ b/src/data_collection/country_networks.py @@ -191,8 +191,6 @@ def _provider_code_for_city(city: str) -> str: return "saudi_ncm" if normalized == "paris": return "fr_aeroweb" - if normalized == "moscow": - return "russia_metar_cluster" if settlement_source == "hko": return "hongkong_hko" if settlement_source == "cwa": @@ -984,24 +982,6 @@ class KoreaKmaNetworkProvider(CountryNetworkProvider): } -class RussiaStationWebNetworkProvider(CountryNetworkProvider): - def __init__(self) -> None: - super().__init__("russia_metar_cluster", "Moscow METAR network") - - def official_nearby_current(self, city: str, raw: Dict[str, Any]) -> List[Dict[str, Any]]: - return _metar_cluster_rows(raw) - - def official_network_status(self, city: str, raw: Dict[str, Any]) -> Dict[str, Any]: - rows = self.official_nearby_current(city, raw) - return { - "provider_code": self.provider_code, - "provider_label": self.provider_label, - "available": bool(rows), - "mode": "realtime_metar_cluster" if rows else "reference_only", - "row_count": len(rows), - } - - class IsraelImsNetworkProvider(CountryNetworkProvider): def __init__(self) -> None: super().__init__("israel_ims", "IMS Lod Airport") @@ -1161,8 +1141,6 @@ def get_country_network_provider(city: str) -> CountryNetworkProvider: return TurkeyMgmNetworkProvider() if provider_code == "korea_kma": return KoreaKmaNetworkProvider() - if provider_code == "russia_metar_cluster": - return RussiaStationWebNetworkProvider() if provider_code == "japan_jma": return JapanJmaNetworkProvider() if provider_code == "china_cma": diff --git a/src/data_collection/weather_sources.py b/src/data_collection/weather_sources.py index 111fc1cf..c013408e 100644 --- a/src/data_collection/weather_sources.py +++ b/src/data_collection/weather_sources.py @@ -55,7 +55,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour CITY_METAR_CLUSTERS = { "buenos aires": ["SAEZ", "SABE", "SADP", "SADF", "SADL", "SADJ"], "istanbul": ["LTFM", "LTBA", "LTFJ"], - "moscow": ["UUWW", "UUEE", "UUDD", "UUBW", "UUMO"], "london": ["EGLL", "EGLC", "EGKK", "EGSS", "EGGW"], "new york": ["KLGA", "KJFK", "KEWR", "KTEB", "KHPN"], "los angeles": ["KLAX", "KBUR", "KLGB", "KSNA", "KVNY"],