feat: AR-ECDIS initial commit
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
# PROMPT DE IMPLEMENTACIÓN COMPLETA – ECDIS OFFLINE DISTRIBUIBLE
|
||||
|
||||
## OBJETIVO GENERAL
|
||||
Desarrollar una aplicación de escritorio **totalmente offline** que implemente un sistema de visualización de cartas electrónicas (ECDIS) conforme a los estándares IMO (MSC.232(82), MSC.302(87)) con funciones avanzadas de navegación astronómica, AIS/Radar, meteorología, planificación de rutas, anotaciones del usuario y auditoría. La aplicación debe ser distribuible como un único ejecutable (Windows/Linux) sin dependencia de internet durante su operación normal, con internet usado únicamente para actualizaciones voluntarias de cartas, avisos a los navegantes y del propio software.
|
||||
|
||||
## ARQUITECTURA TÉCNICA
|
||||
- **Lenguaje**: Python 3.10+
|
||||
- **GUI**: PyQt5 con QWebEngineView que carga una interfaz web local (HTML+MapLibre GL JS) empaquetada junto a la aplicación.
|
||||
- **Base de datos local**: SQLite con extensión Spatialite para consultas geoespaciales y auditoría.
|
||||
- **Librerías principales**: PyQt5, PyQtWebEngine, gdal (osgeo), pynmea2, pyserial, skyfield, numpy, shapely, matplotlib (para gráficos astronómicos), reportlab (para exportar PDFs).
|
||||
- **Empaquetado**: PyInstaller genera un solo ejecutable con todos los recursos incrustados.
|
||||
- **Idioma**: Bilingüe español/inglés, conmutable en ajustes.
|
||||
- **Roles de usuario**: Superadmin (desarrollador), Admin (dueño del equipo), Usuario (privilegios limitados por Admin).
|
||||
|
||||
## FUNCIONAMIENTO OFFLINE
|
||||
La aplicación debe arrancar y operar plenamente sin internet, cargando cartas preprocesadas GeoJSON locales, catálogos estelares, y todos los recursos desde la carpeta de instalación. Internet solo se usará para:
|
||||
- Descargar actualizaciones de cartas (S-57, S-63) desde fuentes oficiales (NOAA, UKHO, NGA).
|
||||
- Descargar avisos a los navegantes (NtM).
|
||||
- Actualizar el software (incremental o completa a decisión del superadmin).
|
||||
- Descargar archivos GRIB meteorológicos opcionales.
|
||||
|
||||
La actualización por USB es posible: insertar una memoria pre-verificada con archivos NtM/cartas y el sistema los importa.
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 1: CARTOGRAFÍA Y VISUALIZACIÓN DE CARTAS
|
||||
|
||||
## Cartas soportadas
|
||||
- S-57 (sin cifrar) y S-63 (cifradas, con desencriptado mediante permiso).
|
||||
- CM93 (modo no certificado únicamente).
|
||||
- Modo certificado/ no certificado: Un botón/switch en menú de superadmin bloquea o habilita cartas no oficiales y funciones reducidas.
|
||||
|
||||
## Preprocesado de cartas
|
||||
Las cartas se convierten a GeoJSON una sola vez mediante GDAL/OGR y se almacenan en `data/charts/`.
|
||||
La carga es instantánea y no requiere parseo bajo demanda.
|
||||
|
||||
## Capas S-57
|
||||
Se mostrará un panel de checkboxes con todas las capas S-57 disponibles (incluyendo profundidades, boyas, zonas de peligro, contornos de seguridad, batimetrías, etc.).
|
||||
Las capas obligatorias por IMO no pueden desactivarse en modo certificado (aparecen bloqueadas con un candado).
|
||||
Las capas batimétricas (DEPARE, DEPCNT, SOUNDG) están incluidas y son tratadas como capas independientes.
|
||||
|
||||
## Carga automática por área geográfica
|
||||
Un gestor de catálogo de cartas mantiene los bounding boxes de cada carta instalada. Según la posición del barco, se cargan y descargan automáticamente las cartas necesarias. Si no hay cobertura, se muestra un aviso.
|
||||
|
||||
## Herramientas sobre la carta (integradas en este módulo)
|
||||
- **Creación de rutas**: gráfica (clic en mapa) y numérica (ingreso coordenadas).
|
||||
- **Medición de distancias y rumbos** (regla electrónica).
|
||||
- **Chequeo automático de seguridad** al planificar/modificar ruta contra:
|
||||
- Contornos de profundidad y sondas (batimetría)
|
||||
- Áreas prohibidas/restringidas
|
||||
- Zonas militares (cargadas vía NtM o manuales)
|
||||
- Peligros aislados
|
||||
Si hay conflicto, **alarma visual y sonora** en el punto exacto.
|
||||
- **Correcciones Notice to Mariners semiautomáticas**:
|
||||
- El texto del NtM se pega en un campo, el sistema extrae coordenadas, objeto y corrección mediante NLP básico (spaCy offline). Muestra formulario prellenado, el oficial valida antes de aplicar.
|
||||
- Las correcciones validadas se almacenan en DB local con geometría, y al planificar rutas se consultan espacialmente para advertir.
|
||||
- Se añaden como capa temporal sobre la carta (no modifican el archivo oficial).
|
||||
- **Anotaciones del usuario** (ver Módulo 4).
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 2: AIS Y RADAR
|
||||
|
||||
## Fuentes de datos
|
||||
- Soportar NMEA 0183 y NMEA 2000 vía puerto serie/CAN. Selección en menú de superadmin.
|
||||
- Datos simulados para pruebas sin hardware.
|
||||
|
||||
## Visualización de blancos AIS
|
||||
- Capa AIS con targets. Al hacer clic en un blanco:
|
||||
- Popup/panel con dos pestañas:
|
||||
1. **Información básica reglamentaria IMO**: MMSI, nombre, rumbo (HDG), velocidad (SOG), CPA, TCPA, distancia, demora, tipo de buque.
|
||||
2. **Más información**: eslora, manga, calado, destino, etc.
|
||||
- **CPA/TCPA**: calculados en Python. Alarma visual+sonora si se cruzan límites configurados por el usuario (silencio con acknowledge, registrado en auditoría).
|
||||
|
||||
## Radar overlay
|
||||
- Soporte dual: **imagen radar real** (captura de video de escáner) o **blancos radar simulados desde AIS**.
|
||||
- Selector: "Radar", "AIS", "Ambos". Si no hay señal radar, la opción se deshabilita automáticamente.
|
||||
|
||||
## Herramientas de plotting radar/carta
|
||||
- **EBL** (Electronic Bearing Line): línea ajustable desde centro desplazable; muestra demora numérica.
|
||||
- **VRM1 y VRM2** (Variable Range Marker): anillos de radio ajustable, centro desplazable, indicando distancia.
|
||||
- **Anillos de distancia fijos**: círculos concéntricos configurables. El usuario define manualmente cada distancia, pudiendo ser irregulares (ej: 1MN, 3MN, 7MN).
|
||||
- **Líneas paralelas (Parallel Index Lines)**: líneas rectas paralelas separables, orientables.
|
||||
- **Centro desplazable**: absolutamente todas las herramientas (EBL, VRM, anillos, paralelas) permiten anclarse en cualquier punto de la carta (ej: una boya) y **botón de reset** que devuelve el centro a la posición del barco.
|
||||
|
||||
## Orientación del mapa
|
||||
- Botón para alternar: Norte Arriba (por defecto), Rumbo Arriba, Curso Arriba.
|
||||
|
||||
## Safety Area / Guard Zone
|
||||
- Herramienta de dibujo manual de polígonos sobre la carta para definir zonas de guarda.
|
||||
- Si un contacto AIS/radar entra en una de estas zonas, alarma sonora.
|
||||
- Aplicables también en modo solo carta (sin radar).
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 3: PLANIFICACIÓN DE RUTAS
|
||||
|
||||
## Creación y edición
|
||||
- Waypoints gráficos (clic en mapa) y numéricos (tabla con coordenadas, nombre, radio de giro, velocidad planificada).
|
||||
- **Importación CSV**: desde Google Earth Pro u otros, con columnas: nombre ruta, nombre WPT, lat, lon. Los cálculos de distancia/rumbo los hace el ECDIS.
|
||||
- Al mover un waypoint gráfico, pregunta "¿Guardar cambio?".
|
||||
- Múltiples rutas alternativas. Ruta activa visualmente distinta (color/grosor/estilo).
|
||||
- Panel de gestión de rutas: alternar, guardar, cargar.
|
||||
|
||||
## Chequeo automático de seguridad de ruta
|
||||
- Contra cartas (contornos de profundidad, obstáculos), NtM, zonas de guarda.
|
||||
- Si hay conflicto: alarma visual+sonora, y el sistema **sugiere una ruta alternativa segura**.
|
||||
- Si el usuario acepta la sugerencia, se puede modificar antes de activar.
|
||||
|
||||
## XTD (Cross-Track Distance)
|
||||
- Configurable por tramo.
|
||||
- Alarma de fuera de derrota con acknowledge y registro de quién reconoció.
|
||||
|
||||
## Formatos de archivo
|
||||
- **Guardar/cargar**: tanto GPX (intercambio) como formato propio (que preserva XTD, metadatos, historial).
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 4: ANOTACIONES DEL USUARIO (MARINER'S OBJECTS)
|
||||
|
||||
## Tipos y contenido
|
||||
- Puntos, líneas, áreas (polígonos, rectángulos, círculos) con sombreado tenue.
|
||||
- Texto suelto.
|
||||
- Cada anotación: texto descriptivo + símbolo seleccionable de biblioteca.
|
||||
- Opción de borrar con confirmación y registro en auditoría.
|
||||
|
||||
## Organización
|
||||
- Capas separadas (ej: "Avisos NtM", "Notas del patrón"), activables/desactivables.
|
||||
- Crear nuevas capas con nombre personalizado.
|
||||
- Persistencia en SQLite y JSON entre sesiones.
|
||||
|
||||
## Exportación
|
||||
- Botón **Convertir a PDF** la vista actual de la carta con sus anotaciones visibles.
|
||||
|
||||
## Guardado
|
||||
- Antes de realizar otra acción, se pregunta si desea guardar cambios pendientes.
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 5: NAVEGACIÓN ASTRONÓMICA
|
||||
|
||||
## Entrada de datos
|
||||
- Formulario manual: hora UTC, astro, altura instrumental sextante, presión, temperatura.
|
||||
- Cuatro alturas del ojo predefinidas y seleccionables (alerón, puente, cubierta magistral, principal).
|
||||
- Preparado para captura automática futura de estación meteorológica (presión/temperatura automáticas).
|
||||
|
||||
## Cálculos
|
||||
- **Sight reduction** con explicación paso a paso del triángulo esférico (reporte pedagógico para cadetes) incluyendo errores.
|
||||
- **Recta de altura** (sol, estrellas, planetas, luna).
|
||||
- **Latitud por Polaris**.
|
||||
- **Desvío de compás** por azimut de astro.
|
||||
- Correcciones completas (dip, refracción, paralaje, semidiámetro).
|
||||
|
||||
## Star Finder / Plato de estrellas
|
||||
- Calcula hora estimada de sunrise/sunset según posición.
|
||||
- Planisferio interactivo con círculos de elevación equidistantes.
|
||||
- Silueta del barco orientada al rumbo recomendado para el crepúsculo.
|
||||
- Muestra astros visibles (nombre, azimut, elevación estimada) de catálogo amplio (no solo 57 estrellas, todas las utilizables en cualquier hemisferio).
|
||||
- Permite seleccionar estrellas para observación planificada y pasarlas a un formulario.
|
||||
- Exportable a PDF.
|
||||
|
||||
## Fijación de posición
|
||||
- Mínimo 3 estrellas (mínimos cuadrados con elipse de error), pero acepta 2 si se nubló (intersección simple, avisando menor precisión).
|
||||
- **Sun-Run-Sun**, **Sol+Luna**, **Sol+Venus** totalmente implementados.
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 6: METEOROLOGÍA Y RUTAS DE ESCAPE DE HURACANES
|
||||
|
||||
## Datos meteorológicos
|
||||
- Botón dual: descarga automática (si hay internet) o carga manual de archivo GRIB.
|
||||
- Capas independientes para: viento, presión, olas, corrientes, precipitación.
|
||||
- Leyenda con escala de colores.
|
||||
|
||||
## Ruta de escape de huracán
|
||||
- Doble método:
|
||||
1. **Cálculo automático**: trayectoria del huracán extraída del GRIB+algoritmo pathfinding A* que genera ruta segura.
|
||||
2. **Herramienta manual**: el oficial traza su propia ruta sobre la capa meteorológica.
|
||||
- La ruta automática es editable antes de aceptarse.
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 7: INTERFAZ DE USUARIO Y DISTRIBUCIÓN
|
||||
|
||||
## Layout
|
||||
- Menú izquierdo (herramientas / capas).
|
||||
- Mapa central (MapLibre GL en QWebEngineView).
|
||||
- Panel derecho configurable con módulos apilables verticalmente (arrastrables, redimensionables).
|
||||
- Módulos disponibles: ecosonda/fishfinder (configurable), compás electrónico, GPS, AIS, radar, astronomía, meteorología, etc.
|
||||
- Cada módulo puede mostrar adicionalmente: CMG, COG, speed log (si disponible), SOG, XTD, desvío del rumbo, corriente calculada, viento real, deriva.
|
||||
|
||||
## Idioma
|
||||
Bilingüe español/inglés, conmutable.
|
||||
|
||||
## Sistema operativo
|
||||
Windows y Linux.
|
||||
|
||||
## Actualizaciones
|
||||
- Al iniciar (si hay internet) avisa de nueva versión. La descarga e instalación las decide el usuario.
|
||||
- Incremental por defecto, completa si el superadmin lo determina.
|
||||
- No afecta configuraciones ni datos de usuario.
|
||||
|
||||
## Credenciales y acceso
|
||||
- **Superadmin**: acceso total, configuración de fuentes de datos, modo certificado, menús bloqueados.
|
||||
- **Admin** (dueño del equipo): acceso avanzado según determine superadmin.
|
||||
- **Usuario**: acceso limitado según admin.
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 8: AUDITORÍA
|
||||
|
||||
## Registro automático e inmutable
|
||||
- Tabla `audit_log` en SQLite con campos: timestamp UTC, event_type, object_type, object_id, description, operator, previous_value, new_value, checksum.
|
||||
- Eventos: creación/modificación/borrado de rutas, waypoints, anotaciones, correcciones NtM, cambios de configuración, alarmas y acknowledges.
|
||||
- No se puede editar ni borrar desde la interfaz.
|
||||
- Exportación a PDF para cuaderno de bitácora.
|
||||
|
||||
---
|
||||
|
||||
# MÓDULO 9 (EXTRA PAGO): MODO SURVEY
|
||||
- Al activarse, la profundidad de la carta oficial se opaca.
|
||||
- Datos de ecosonda superpuestos en tiempo real sobre la carta.
|
||||
- Se genera un archivo batimétrico exportable (CSV/GeoJSON) con: lat, lon, profundidad, HDOP, error medio del GPS.
|
||||
- Compatible con QGIS para creación de cartas personalizadas.
|
||||
|
||||
---
|
||||
|
||||
# DESARROLLO INICIAL (SIN INSTALADOR)
|
||||
1. Crear entorno virtual Python e instalar dependencias.
|
||||
2. Estructura de carpetas:
|
||||
webecdis/
|
||||
├── main.py
|
||||
├── ui/ (index.html, js, css)
|
||||
├── data/ (charts/, stars.json, etc.)
|
||||
├── logs/
|
||||
├── modules/ (nmea_reader.py, celestial.py, updater.py, audit.py)
|
||||
└── tests/
|
||||
3. main.py lanza PyQt5 con QWebEngineView cargando ui/index.html local.
|
||||
4. Probar sin conexión.
|
||||
|
||||
# EMPAQUETADO FINAL
|
||||
pyinstaller --onefile --add-data "ui/*;ui" --add-data "data/*;data" main.py
|
||||
Reference in New Issue
Block a user