# YachtMemory Release 1.3.5 – Adaptive Track Resolution

Qualitätsverbesserung des Live-Track-Widgets.

## Problem

Für 1-Jahres- und Kalenderjahresansichten wird der Track absichtlich stark
ausgedünnt (`step = 100`). Das ist für die Gesamtansicht performant und
sinnvoll. Beim starken Hineinzoomen blieb jedoch dieselbe grobe Linie erhalten,
wodurch gerade an Küsten sichtbare Abkürzungen über Land entstehen konnten.

## Lösung

### Overview
Die bestehende Übersicht bleibt vollständig unverändert:

- 24 h: `step = 1`
- 1 Monat: `step = 10`
- 1 Jahr: `step = 100`
- Kalenderjahr: bisherige adaptive Overview-Schrittweite

### Detail
Nur bei:

- `1 Jahr` oder einem ausgewählten Kalenderjahr
- Leaflet-Zoomlevel >= 12

lädt das Widget automatisch eine feinere Spur für den sichtbaren
Kartenausschnitt nach.

Die Detailspur verwendet:

- dieselbe zeitliche Auswahl wie die Übersicht
- die aktuelle Karten-Bounding-Box plus 20 % Rand
- `step = 10`, also dieselbe Punktauflösung wie die bewährte 1-Monats-Ansicht

Beim Herauszoomen wird sofort wieder die Overview-Spur verwendet.

## Laufzeitverhalten

- Nachladen nur auf `zoomend` / `moveend`
- 350 ms Debounce
- laufende alte Requests werden mit `AbortController` abgebrochen
- maximal 8 Detailbereiche werden im Browser gecacht
- liegt ein sichtbarer Ausschnitt bereits in einem Cache-Bereich, erfolgt kein
  neuer Request
- Ankerplatzmarker und Popups werden beim Detail-Nachladen nicht neu geladen

## API-Erweiterung

`api/public/anchorages_track.php` akzeptiert zusätzlich optional:

```text
detail=1
bbox=minLon,minLat,maxLon,maxLat
```

Beispiel:

```text
/api/public/anchorages_track.php
?vessel=silent_sea
&range=1y
&detail=1
&bbox=15.1,37.7,15.4,38.0
```

Die JSON-Struktur bleibt kompatibel.

## Installation

```bash
cd /var/www/app.yachtmemory.net

mkdir -p backup/release-1.3.5-adaptive-track

cp api/public/anchorages_track.php \
  backup/release-1.3.5-adaptive-track/anchorages_track.php

cp public_widgets/anchorages-track/widget.js \
  backup/release-1.3.5-adaptive-track/widget.js

unzip -o yachtmemory_release_1_3_5_adaptive_track_resolution.zip

sudo cp \
  yachtmemory_release_1_3_5_adaptive_track_resolution/api/public/anchorages_track.php \
  api/public/anchorages_track.php

sudo cp \
  yachtmemory_release_1_3_5_adaptive_track_resolution/public_widgets/anchorages-track/widget.js \
  public_widgets/anchorages-track/widget.js
```

Die übrigen Dateien im Paket entsprechen dem eingefrorenen Stand 1.3.4 und
müssen für diesen Fix nicht erneut kopiert werden.

## Syntaxprüfung

```bash
php -l api/public/anchorages_track.php
node --check public_widgets/anchorages-track/widget.js
```

## API-Test Detailmodus

Zunächst einen kleinen bekannten Ausschnitt wählen:

```bash
curl -sS \
'https://app.yachtmemory.net/api/public/anchorages_track.php?vessel=silent_sea&lang=de&range=1y&detail=1&bbox=13.90,37.05,14.00,37.15' \
| jq '{
    success,
    range,
    detail,
    step,
    bbox,
    count,
    first: (.track[0] // null),
    last: (.track[-1] // null)
}'
```

Erwartet:

```text
success = true
range   = "1y"
detail  = true
step    = 10
```

## Browser-Abnahme

1. Live Track auf `1 Jahr` stellen.
2. Übersicht muss weiterhin schnell laden und korrekt zoomen.
3. In einen Küstenbereich mit sichtbarer grober Abkürzung hineinzoomen.
4. Ab Zoomlevel 12 wird nach kurzer Verzögerung die rote Spur feiner.
5. Die Route soll Küstenverläufe deutlich genauer abbilden.
6. Wieder herauszoomen: Overview-Spur erscheint wieder.
7. Dasselbe mit einem Kalenderjahr testen.

Keine Änderung an 24-h- und 1-Monats-Darstellung.
