diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2025-12-22 18:18:59 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2025-12-22 18:18:59 +0100 |
| commit | 68f49dec91d68579803d6d579b1f1ecb4fc1dd1f (patch) | |
| tree | a67ec0cc572ae56e85a5dc08b2469bdbcb451135 /src/stop_downloader/vigo | |
| parent | 4b7eaa318f22d7cc768491c421cb7aeac477f95d (diff) | |
Remove systems we won't need anymore
Diffstat (limited to 'src/stop_downloader/vigo')
6 files changed, 0 insertions, 391 deletions
diff --git a/src/stop_downloader/vigo/download-stops.py b/src/stop_downloader/vigo/download-stops.py deleted file mode 100644 index fa08019..0000000 --- a/src/stop_downloader/vigo/download-stops.py +++ /dev/null @@ -1,260 +0,0 @@ -# /// script -# requires-python = ">=3.12" -# dependencies = [ -# "PyYAML>=6.0.2", # For YAML support -# ] -# /// -import csv -import json -import os -import sys -import urllib.request -import yaml # Add YAML support for overrides - -OVERRIDES_DIR = "overrides" -OUTPUT_FILE = "../../frontend/public/stops/vigo.json" - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) - - -def load_stop_overrides(file_path): - """Load stop overrides from a YAML file""" - if not os.path.exists(file_path): - print(f"Warning: Overrides file {file_path} not found") - return {} - - try: - with open(file_path, "r", encoding="utf-8") as f: - overrides = yaml.safe_load(f) - print(f"Loaded {len(overrides) if overrides else 0} stop overrides") - return overrides or {} - except Exception as e: - print(f"Error loading overrides: {e}", file=sys.stderr) - return {} - - -def apply_overrides(stops, overrides): - """Apply overrides to the stop data and add new stops""" - # Track existing stop IDs - existing_stop_ids = {stop.get("stopId") for stop in stops} - - # Apply overrides to existing stops - for stop in stops: - stop_id = stop.get("stopId") - if stop_id in overrides: - override = overrides[stop_id] - - # Override name if provided - if "name" in override: - stop["name"] = override["name"] - - # Apply or add alternate names - if "alternateNames" in override: - for key, value in override["alternateNames"].items(): - stop["name"][key] = value - - # Apply location override - if "location" in override: - if "latitude" in override["location"]: - stop["latitude"] = override["location"]["latitude"] - if "longitude" in override["location"]: - stop["longitude"] = override["location"]["longitude"] - - # Add amenities - if "amenities" in override: - stop["amenities"] = override["amenities"] - - # Mark stop as hidden if needed - if "hide" in override: - stop["hide"] = override["hide"] - - # Mark stop as cancelled - if "cancelled" in override: - stop["cancelled"] = override["cancelled"] - - if "alert" in override: - stop["alert"] = override["alert"] - - if "title" in override: - stop["title"] = override["title"] - - if "message" in override: - stop["message"] = override["message"] - - # Add new stops (those with "new: true" parameter) - new_stops_added = 0 - for stop_id, override in overrides.items(): - # Check if this is a new stop - if override.get("new") and stop_id not in existing_stop_ids: - # Ensure stop_id is an integer for consistency - stop_id_int = int(stop_id) if isinstance(stop_id, str) else stop_id - - # Create the new stop - new_stop = { - "stopId": stop_id_int, - "name": override.get("name", f"Stop {stop_id_int}"), - "latitude": override.get("location", {}).get("latitude"), - "longitude": override.get("location", {}).get("longitude"), - "lines": override.get("lines", []), - } - - # Add optional fields (excluding the 'new' parameter) - if "alternateNames" in override: - for key, value in override["alternateNames"].items(): - new_stop["name"][key] = value - if "amenities" in override: - new_stop["amenities"] = override["amenities"] - if "cancelled" in override: - new_stop["cancelled"] = override["cancelled"] - if "title" in override: - new_stop["title"] = override["title"] - if "message" in override: - new_stop["message"] = override["message"] - if "alternateCodes" in override: - new_stop["alternateCodes"] = override["alternateCodes"] - - stops.append(new_stop) - new_stops_added += 1 - - if new_stops_added > 0: - print(f"Added {new_stops_added} new stops from overrides") - - return stops - - -def download_stops_vitrasa() -> list[dict]: - url = "https://datos.vigo.org/vci_api_app/api2.jsp?tipo=TRANSPORTE_PARADAS" - req = urllib.request.Request(url) - - try: - with urllib.request.urlopen(req) as response: - # Read the response and decode from ISO-8859-1 to UTF-8 - content = response.read().decode("iso-8859-1") - data = json.loads(content) - - print(f"Downloaded {len(data)} stops") - - # Process the data - processed_stops = [] - for stop in data: - name = stop.get("nombre", "").strip() - # Fix double space equals comma-space: "Castrelos 202" -> "Castrelos, 202"; and remove quotes - name = name.replace(" ", ", ").replace('"', "").replace("'", "") - - processed_stop = { - "stopId": "vitrasa:" + str(stop.get("id")), - "name": name, - "latitude": stop.get("lat"), - "longitude": stop.get("lon"), - "lines": [line.strip() for line in stop.get("lineas", "").split(",")] - if stop.get("lineas") - else [], - } - processed_stops.append(processed_stop) - - return processed_stops - except Exception as e: - print(f"Error processing vigo stops data: {e}", file=sys.stderr) - return [] - - -def download_stops_renfe() -> list[dict]: - url = "https://data.renfe.com/dataset/1146f3f1-e06d-477c-8f74-84f8d0668cf9/resource/b22cd560-3a2b-45dd-a25d-2406941f6fcc/download/listado_completo_av_ld_md.csv" - req = urllib.request.Request(url) - - # CÓDIGO;DESCRIPCION;LATITUD;LONGITUD;DIRECCIÓN;C.P.;POBLACION;PROVINCIA;PAIS - - try: - with urllib.request.urlopen(req) as response: - content = response.read() - data = csv.DictReader( - content.decode("utf-8").splitlines(), - delimiter=";", - fieldnames=[ - "CODE", - "NAME", - "LAT", - "LNG", - "ADDRESS", - "ZIP", - "CITY", - "PROVINCE", - "COUNTRY", - ], - ) - - stops = [row for row in data] - - print(f"Downloaded {len(stops)} stops") - - # Process the data - processed_stops = [] - for stop in stops: - if stop.get("PROVINCE") != "Pontevedra": - continue - - name = stop.get("NAME", "").strip() - - processed_stop = { - "stopId": "renfe:" + str(stop.get("CODE", 0)), - "name": name, - "latitude": float(stop.get("LAT", 0).replace(",", ".")), - "longitude": float(stop.get("LNG", 0).replace(",", ".")), - "lines": [], - } - processed_stops.append(processed_stop) - - print(f"Processed {len(processed_stops)} Renfe stops in Pontevedra") - return processed_stops - except Exception as e: - print(f"Error processing Pontevedra stops data: {e}", file=sys.stderr) - return [] - - -def main(): - print("Fetching stop list data...") - - vigo_stops = download_stops_vitrasa() - renfe_stops = download_stops_renfe() - - all_stops = vigo_stops + (renfe_stops if renfe_stops else []) - - try: - # Load and apply overrides - overrides_dir = os.path.join(SCRIPT_DIR, OVERRIDES_DIR) - # For each YML/YAML file in the overrides directory, load and apply the overrides - for filename in os.listdir(overrides_dir): - if not filename.endswith(".yml") and not filename.endswith(".yaml"): - continue - - print(f"Loading overrides from {filename}") - overrides_file = os.path.join(overrides_dir, filename) - overrides = load_stop_overrides(overrides_file) - all_stops = apply_overrides(all_stops, overrides) - - # Filter out hidden stops - visible_stops = [stop for stop in all_stops if not stop.get("hide")] - print(f"Removed {len(all_stops) - len(visible_stops)} hidden stops") - - # Sort stops by ID ascending - visible_stops.sort(key=lambda x: x["stopId"]) - - output_file = os.path.join(SCRIPT_DIR, OUTPUT_FILE) - - with open(output_file, "w", encoding="utf-8") as f: - json.dump(visible_stops, f, ensure_ascii=False, indent=2) - - print(f"Saved processed stops data to {output_file}") - return 0 - - except Exception as e: - print(f"Error processing stops data: {e}", file=sys.stderr) - # Print full exception traceback - import traceback - - traceback.print_exc() - return 1 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/src/stop_downloader/vigo/overrides/amenities.yaml b/src/stop_downloader/vigo/overrides/amenities.yaml deleted file mode 100644 index 014b235..0000000 --- a/src/stop_downloader/vigo/overrides/amenities.yaml +++ /dev/null @@ -1,23 +0,0 @@ -vitrasa:5520: # García Barbón, 7 - amenities: - - shelter - - display -vitrasa:5530: # García Barbón, 18 - amenities: - - shelter - - display -vitrasa:6620: #Policarpo Sanz, 40 - amenities: - - shelter - - display -vitrasa:14264: # Urzáiz - Príncipe - amenities: - - shelter - - display -vitrasa:20193: # Policarpo Sanz, 25 - amenities: - - shelter - - display -vitrasa:20198: # Policarpo Sanz, 26 - amenities: - - shelter diff --git a/src/stop_downloader/vigo/overrides/example-new-stops.yaml b/src/stop_downloader/vigo/overrides/example-new-stops.yaml deleted file mode 100644 index 6937471..0000000 --- a/src/stop_downloader/vigo/overrides/example-new-stops.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Example: Adding a new stop using the 'new' parameter -# New stops are added directly in override files with new: true - -# Example 1: New stop with basic information (commented out to avoid affecting production) -# 99001: -# new: true -# name: "New Development Stop" -# location: -# latitude: 42.229188 -# longitude: -8.722469 -# lines: -# - "5" -# - "12" -# amenities: -# - shelter - -# Example 2: New stop with alert information -# 99002: -# new: true -# name: "Temporary Event Stop" -# location: -# latitude: 42.230000 -# longitude: -8.723000 -# lines: -# - "EVENT" -# title: "Special Event Stop" -# message: "This stop is active during special events only." - -# Note: The 'new: true' parameter tells the system to create a new stop. -# This parameter is automatically removed after the stop is added to the dataset. -# Choose stop IDs in the 90000+ range to avoid conflicts with existing stops. diff --git a/src/stop_downloader/vigo/overrides/fix-gregorio-espino.yaml b/src/stop_downloader/vigo/overrides/fix-gregorio-espino.yaml deleted file mode 100644 index 849eea1..0000000 --- a/src/stop_downloader/vigo/overrides/fix-gregorio-espino.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Fix the position of the stops in Gregorio Espino, which are "opposite" to the actual location of the bus stops. -vitrasa:5720: # Gregorio Espino, 33 - location: - latitude: 42.23004933454558 - longitude: -8.706947409683313 - -vitrasa:5710: # Gregorio Espino, 22 - location: - latitude: 42.23003666347398 - longitude: -8.707266671978003 - -vitrasa:5730: # Gregorio Espino, 44 - location: - latitude: 42.227850036119314 - longitude: -8.708105429626789 - -vitrasa:5740: # Gregorio Espino, 57 - location: - latitude: 42.22783722597372 - longitude: -8.707849091551859 diff --git a/src/stop_downloader/vigo/overrides/hide-virtual-stops.yaml b/src/stop_downloader/vigo/overrides/hide-virtual-stops.yaml deleted file mode 100644 index 5978a35..0000000 --- a/src/stop_downloader/vigo/overrides/hide-virtual-stops.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# The Vitrasa network has several virtual stops created for internal purposes, like -# end of certain lines with a "nice" name. - -vitrasa:20223: # Castrelos (Pavillón) - Final U1 - hide: true -vitrasa:20146: # García Barbón 7 - final líneas A y 18A - hide: true -vitrasa:20220: # (Samil) COIA-SAMIL - Final L15A - hide: true -vitrasa:20001: # (Samil) Samil por Beiramar - Final L15B - hide: true -vitrasa:20002: # (Samil) Samil por Torrecedeira - Final L15C - hide: true -vitrasa:20144: # (Samil) Samil por Coia - Final C3D+C3i - hide: true -vitrasa:20145: # (Samil) Samil por Bouzas - Final C3D+C3i - hide: true diff --git a/src/stop_downloader/vigo/overrides/improve-coordinates-misc.yaml b/src/stop_downloader/vigo/overrides/improve-coordinates-misc.yaml deleted file mode 100644 index a96c84b..0000000 --- a/src/stop_downloader/vigo/overrides/improve-coordinates-misc.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# Improves coordinates for some locations in the dataset to be more accurate, and avoid clustering -vitrasa:6620: # Policarpo Sanz, 40 - location: - latitude: 42.23757846151978 - longitude: -8.721031378896738 - -vitrasa:20193: # Policarpo Sanz, 25 - location: - latitude: 42.23767601188501 - longitude: -8.721582630122455 - -vitrasa:3130: #Avda. de Cesáreo Vázquez 169 - location: - latitude: 42.191024803868736 - longitude: -8.799397387002196 - -vitrasa:3090: # Avda. de Cesáreo Vázquez 182 - location: - latitude: 42.191019711713736 - longitude: -8.799628565094565 - -vitrasa:14294: # Avda. de Ricardo Mella 406 - location: - latitude: 42.190684424876565 - longitude: -8.799308812770041 - -vitrasa:3120: # Cesáreo Vázquez 141 - location: - latitude: 42.187488521491225 - longitude: -8.801226626055183 - -vitrasa:3080: # Cesáreo Vázquez 136 - location: - latitude: 42.1873653089623 - longitude: -8.800886236766305 - -renfe:22308: # Vigo Guixar - location: - latitude: 42.2394426820947 - longitude: -8.712087821668435 |
