Rediseño del símbolo de baliza lateral para reflejar la estructura
real IALA: palo continuo delgado + cuerpo rectangular (parte baja) +
tramo de palo libre visible (hueco) + marca de tope separada arriba.
Babor (IALA-B verde): marca de tope = cuadrado.
Estribor (IALA-B rojo): marca de tope = triángulo apuntando arriba.
La marca de tope es levemente más ancha que el cuerpo.
El hueco entre cuerpo y marca queda ocupado solo por el poste delgado.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
BCNLAT (_encBeaconCanvas): rectángulo delgado y alto en color IALA.
Babor (puerto, verde IALA-B): tope plano = rectángulo puro.
Estribor (estribor, rojo IALA-B): tope triangular apuntando arriba +
cuerpo rectangular debajo. Gradiente lateral 3-D. Aplica igual a
daymarks del ICW Miami y balizas de orilla Colombia.
LIGHTS blanco (_ialaLight): rectángulo cuerpo blanco borde negro,
estrella de 5 puntas centrada, lagrima estirada purpura a ~20° de
la vertical saliendo del costado superior del rectángulo (S-52 style).
land.geojson BARRANQUILLA: polígono único trazando la costa desde
Galerazamba (O) hasta la boca del canal Bocas de Ceniza (E),
incluyendo ambas riberas del canal y la costa sur hasta el límite
de la carta. Corrige tierra en 0 features.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- sz 48→34 (símbolo más pequeño en mapa)
- Triángulo interior escalado desde el baricentro → lados
estrictamente paralelos al exterior (triángulo similar, no
recortado con offset independiente)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
map.js — _encRangeDaymarkCanvas:
Remove tripod legs, hub ring and mast. Symbol is now two clean
concentric triangles pointing up: outer WHITE + inner BLACK,
matching the standard IALA dayboard. Optional light flare at apex
if the feature has LITCHR. No extra structures.
chart_manager.py — _build_cache:
Don't overwrite existing land/hazard/zone GeoJSON files with an
empty result when the .000 has no LNDARE/OBSTRN/ZONBND layer.
Preserves hand-built or legacy cache data for custom charts
(e.g. Barranquilla built from nav-aids-only CSV).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- BCNLAT symbol back to tripod+mast+topmark (now works without NaN
thanks to the _h2r rgb() fix in the previous commit)
- Icon scale range 0.22–0.50 → 0.29–0.65 (~30% larger at all zooms)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
_darken3D / _lighten3D return 'rgb(r,g,b)' CSS strings.
When those values were passed as colList to drawCylinder/drawSphere,
_cylGrad called _lighten3D(col) → _h2r('rgb(...)') → parseInt('rg',16)=NaN,
causing addColorStop to throw and killing ALL pillar/tower/sphere buoy symbols.
Fix: _h2r now detects the 'rgb(' prefix and extracts the three integers
via regex before falling through to the existing hex path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
El commit anterior removia los maxZoom de BAND_ZOOM_RANGES creyendo que
afectaba a BARRANQUILLA. En realidad BARRANQUILLA es band=0 (cell_id no
matchea el patron IHO) y siempre fue visible.
Sin maxZoom, US1GC09M (Overview, band-1, 549 features del Golfo) aparecia
en zoom 11 sobre Miami. Con declutter=true, sus 549 features competian con
las de US4FL/US5FL y ocultaban casi todo por collision detection.
Fix: restaurar exactamente los valores de v1-base para bands 1-4.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
La celda CO1CO01M es band-1 por convencion IHO (CO=Colombia, 1=Overview).
Con maxZoom=10 para band-1, la carta desaparecia completamente a zoom>10.
Solucion: todas las bandas tienen maxZoom=24. La logica _recomputeHiddenCells
(que ya maneja solo cuando una celda de mayor resolucion domina el viewport)
se encarga de ocultar las celdas de menor resolucion cuando hay una mejor.
Esto funciona para NOAA Miami (band-1 se oculta cuando band-5 cubre 40%+)
y para Barranquilla (band-0/1, sin rival, siempre visible a cualquier zoom).
frontend/js/map.js:
- Reemplaza merge exacto por merge de proximidad (~50m) en loadChartFeatures
para capturar pares LIGHTS/BOYLAT con coordenadas no exactamente iguales
- Guard null-canvas en encStyle con fallback visible + console.warn
- Mejora JS de debug: log layer/aidType cuando usa fallback
backend/services/chart_manager.py:
- Expande extraccion de light_desc a category buoy+beacon+landmark
(antes solo BOYLAT/BOYCAR; BCNLAT/BCNWTW/LNDMRK perdian LITCHR silenciosamente)