Folium-Karten: die Blockade war eine falsche Alternative
Der einzige Punkt, der in diesem Projekt je als "blockiert" gefuehrt wurde,
ist erledigt. Die Begruendung lautete: Die VRP-Instanz sei ein synthetisches
100 x 100-km-Raster ohne Geokoordinaten, eine echte Karte verlange also
ENTWEDER eine neue Instanz (und damit zwei Dutzend neue abgedruckte Zahlen)
ODER eine willkuerliche Verankerung.
Es gibt einen dritten Weg, und er ist exakt. Eine azimutal-aequidistante
Projektion um den Schwerpunkt des Rasters bildet die 17 Punkte so auf Laenge
und Breite ab, dass die Grosskreisdistanzen mit den Rasterdistanzen
uebereinstimmen:
festes cos(Breite) Median 0,360 % Maximum 2,003 %
cos der eigenen Breite Median 0,351 % Maximum 0,908 %
azimutal-aequidistant Median 0,000 % Maximum 0,001 %
Ein Meter auf hundert Kilometer. Kein abgedruckter Wert aendert sich, die
Gesamtstrecke bleibt bei 619 km, das SVG ist byte-identisch geblieben.
Zwei Befunde stuetzten die Entscheidung: "100 x 100 km Raster" steht nur in
zwei Codekommentaren, nirgends im Fliesstext; und der didaktische Punkt der
Bildunterschrift - die sich kreuzenden Touren, die KEIN Fehler sind - wird auf
einer Karte deutlicher.
erzeuge_vrp_touren.py schreibt jetzt SVG UND Karte aus einem Lauf. Ein zweites
Skript haette erneut geloest, und die Routing-Bibliothek arbeitet heuristisch.
pruefe_projektion() bricht ab, wenn die Verzerrung 0,01 % ueberschreitet - die
Zahl im Buch wird bei jedem Lauf bewiesen.
Neu im Build: die Marke {karte:name}, aufgeloest zu einem <iframe> (Leaflets
Stylesheet soll nicht in die Buchseite greifen), im PDF zum Verweissatz - wie
bei {plotly:}. --check bewacht jetzt beide Markenarten auf Existenz der Datei;
gegengeprueft mit einer absichtlich falschen Marke.
Zwei Vorkehrungen, die ohne Messung nicht aufgefallen waeren:
* Folium vergibt jedem Element eine uuid4 - jeder Lauf erzeugte eine andere
Datei. normalisiere() ersetzt sie durch fortlaufende Nummern; zwei Laeufe
liefern jetzt dieselbe Pruefsumme.
* Folium bindet ZEHN CDN-Ressourcen ein (jQuery, Bootstrap, Glyphicons,
FontAwesome, awesome-markers ...). Gebraucht werden ZWEI. leaflet.js und
leaflet.css liegen jetzt in web_04/assets/, die uebrigen acht entfallen.
Nachgeprueft: Die Karte benutzt ausschliesslich L.*-Aufrufe. Ohne Netz
fehlen nur die Kacheln, Marker und Touren bleiben sichtbar.
Gegenrechnung an vier Strecken: Depot -> K1 misst auf der Karte 27,20 km, die
Distanzmatrix sagt 27 - die Differenz stammt aus deren int(), nicht aus der
Geographie.
Veroeffentlicht: 8 Dateien uebertragen, alle dreizehn HTTP-Proben richtig, die
Karte auf dem Server unter 200 erreichbar.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
d37834ccb5
commit
5d5bdb6508
19 changed files with 2521 additions and 5 deletions
55
PROGRESS.md
55
PROGRESS.md
|
|
@ -1376,11 +1376,11 @@ Teilhistorie, die vollständig aussieht und es nicht ist. Volle Historie ginge n
|
|||
7.1 leisten dasselbe gezielter, ohne Eingriff in jeden Abschnitt.
|
||||
* **`joblib`/`ray`** (V02/2) — `num_workers` und `ProcessPoolExecutor` decken den Bedarf;
|
||||
ein Cluster-Framework wäre eine Abhängigkeit ohne Beispiel, das sie braucht.
|
||||
* **Folium-Karten** (V03/3) — **blockiert durch eine offene Entscheidung**: Die VRP-Instanz
|
||||
ist ein synthetisches 100 × 100-km-Raster ohne Geokoordinaten. Eine echte Karte verlangt
|
||||
entweder eine neue Instanz (und damit neue abgedruckte Zahlen) oder eine willkürliche
|
||||
Verankerung an einem realen Ort.
|
||||
* **Executive-PDF-Report** (V03/6) — ohne Streamlit-Apps fehlt der Ort, an dem er entstünde.
|
||||
* **Executive-PDF-Report** (V03/6) — ohne Streamlit-Apps fehlt der Ort, an dem er
|
||||
entstünde.
|
||||
|
||||
**Folium-Karten** (V03/3) standen hier lange als **blockiert** — sie sind es nicht mehr,
|
||||
siehe den Eintrag im nächsten Abschnitt.
|
||||
|
||||
### Offen, rein redaktionell
|
||||
|
||||
|
|
@ -2258,6 +2258,51 @@ hat ihren Zweck erfüllt — aber einen Rückschritt könnte sie gar nicht mehr
|
|||
Datei ist gelöscht, die Probe bliebe auch dann grün, wenn jemand `--delete` aus dem
|
||||
`rsync`-Aufruf nähme. Von den ursprünglich vierzehn Adressen bleiben dreizehn.
|
||||
|
||||
### ✅ Folium-Karten — die Blockade war eine falsche Alternative
|
||||
|
||||
Der einzige Punkt, der in diesem Projekt je als *blockiert* geführt wurde, ist erledigt. Die
|
||||
Begründung lautete: Die VRP-Instanz sei ein synthetisches 100 × 100-km-Raster ohne
|
||||
Geokoordinaten, eine echte Karte verlange also **entweder** eine neue Instanz (und damit
|
||||
zwei Dutzend neue abgedruckte Zahlen) **oder** eine willkürliche Verankerung.
|
||||
|
||||
**Es gibt einen dritten Weg, und er ist exakt.** Eine azimutal-äquidistante Projektion um den
|
||||
Schwerpunkt des Rasters bildet die 17 Punkte so auf Länge und Breite ab, dass die
|
||||
Großkreisdistanzen mit den Rasterdistanzen übereinstimmen:
|
||||
|
||||
| Verfahren | Median | Maximum |
|
||||
| --- | --- | --- |
|
||||
| festes `cos(Breite)` | 0,360 % | 2,003 % |
|
||||
| `cos` der eigenen Breite | 0,351 % | 0,908 % |
|
||||
| **azimutal-äquidistant** | **0,000 %** | **0,001 %** |
|
||||
|
||||
Ein Meter auf hundert Kilometer. Damit ist die Karte keine Näherung, für die man sich
|
||||
entschuldigt, sondern eine zweite Darstellung derselben Instanz — **kein abgedruckter Wert
|
||||
ändert sich**, die Gesamtstrecke bleibt bei 619 km, das SVG byte-identisch.
|
||||
|
||||
Zwei Befunde stützten die Entscheidung: „100 × 100 km Raster" steht **nur in zwei
|
||||
Codekommentaren**, nirgends im Fließtext; und der didaktische Punkt der Bildunterschrift —
|
||||
die sich kreuzenden Touren, die *kein* Fehler sind — wird auf einer Karte deutlicher.
|
||||
|
||||
**Umgesetzt** in `erzeuge_vrp_touren.py`, das jetzt SVG **und** Karte aus einem Lauf schreibt.
|
||||
Ein zweites Skript hätte erneut gelöst, und die Routing-Bibliothek arbeitet heuristisch.
|
||||
Neu im Build: die Marke `{karte:name}`, aufgelöst zu einem `<iframe>` (Leaflets Stylesheet
|
||||
soll nicht in die Buchseite greifen), im PDF zum Verweissatz — wie bei `{plotly:}`. `--check`
|
||||
bewacht jetzt **beide** Markenarten auf Existenz der Datei.
|
||||
|
||||
**Zwei Vorkehrungen, die ohne Messung nicht aufgefallen wären:**
|
||||
|
||||
* Folium vergibt jedem Element eine `uuid4` — **jeder Lauf erzeugte eine andere Datei**.
|
||||
`normalisiere()` ersetzt sie durch fortlaufende Nummern; drei Läufe liefern jetzt dieselbe
|
||||
Prüfsumme.
|
||||
* Folium bindet **zehn** CDN-Ressourcen ein (jQuery, Bootstrap, Glyphicons, FontAwesome,
|
||||
awesome-markers …). Gebraucht werden **zwei**. Sie liegen jetzt in `web_04/assets/`, die
|
||||
übrigen acht entfallen. Nachgeprüft: Die Karte benutzt ausschließlich `L.*`-Aufrufe —
|
||||
17 × `circleMarker`, 4 × `polyline`, je einmal `map`, `tileLayer`, `control`, `CRS`. Ohne
|
||||
Netz fehlen nur die Kacheln.
|
||||
|
||||
Gegenrechnung an vier Strecken: `Depot → K1` misst auf der Karte 27,20 km, die Distanzmatrix
|
||||
sagt 27 — die Differenz stammt aus deren `int()`, nicht aus der Geographie.
|
||||
|
||||
---
|
||||
|
||||
## 8. Commit-Historie des V04-Strangs
|
||||
|
|
|
|||
Loading…
Reference in a new issue