Basemap-Punktlinien (Basis #90): Ursache und Korrektur dokumentiert #21

Merged
Daniel merged 1 commits from docs/90-basemap-punktlinien into main 2026-10-02 10:37:50 +00:00
6 changed files with 80 additions and 23 deletions
+1
View File
@@ -63,6 +63,7 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi
| `modules/basemap_kacheln.py` | 192 | Kacheln des Basemap-Layers kachelweise über `selectByGeometry` auswerten, Renderer-Styles lesen, Zoomstufen wie der QGIS-Renderer |
| `modules/basemap_legende_layout.py` | 396 | Legendensymbole aus Projektlayer-Styles zusammensetzen, leere Hilfslayer, Legendenelement „Legende Basemap“ schreiben und platzieren |
| `modules/basemap_katalog.py` | 418 | Erzeugt/aktualisiert `data/basemap_legende.json` aus der basemap.de-Style-JSON (nur Standardbibliothek, eigenständig aufrufbar) |
| `modules/basemap_stilkorrektur.py` | 99 | Darstellungsfehler des Basemap-Layers korrigieren: Punktlinien mit Strichlänge 0 sichtbar machen (#90) |
| `modules/basemap_stilvorlagen.py` | 181 | Lokale Stilvorlagen des Basemap-Layers (QML + JSON im QGIS-Profil), Standard in `QSettings` |
### Sonstiges
+3 -1
View File
@@ -256,7 +256,9 @@ Durchgang der Bezeichnungen ist gemacht; **die fachliche Abnahme steht aus.**
**Bekannte Punkte für die Durchsicht:**
- „Platz“ (Verkehr, Siedlung) hat im Basemap-Stil eine weiße Füllung ohne Rand und ist in der Legende kaum zu sehen.
- „Durchlass, Düker“ und „Baumreihe“ zeigen in der Legende kein sichtbares Symbol (Ursache noch nicht geklärt).
- ~~„Durchlass, Düker“ und „Baumreihe“ ohne sichtbares Symbol~~ – Ursache gefunden und behoben in **Basis #90**:
basemap.de zeichnet Punktlinien mit Strichlänge 0, die Qt nicht zeichnet (auch nicht in der Karte). Knopf
„Punktlinien korrigieren“ im Basemap-Bereich (12 Styles betroffen).
- Gewässerbreiten sind zu „Fließgewässer (Linie)“ zusammengefasst; Symbol ist die 6-m-Linie.
**Nicht geprüft:** QGIS 4 (Qt6) – lokal nicht verfügbar. QGIS 3.44.4 (Qt5) offscreen geprüft: Auswertung,
+4 -3
View File
@@ -64,9 +64,10 @@ spätere Phase und beginnt erst, wenn die Test-Baseline grün ist und das Projek
`sql=`-Filtern). Vergleich 6↔7 und Anpassungsliste: `docs/konzept/09_alkis7_umstellung.md`.
Nächster Schritt: Gitea-Issue in `Plugin_SN_Verfahrensgebiet`.
15. **Basemap-Legende im Druck (Basis #88).** Umgesetzt auf `Plugin_SN_Basis:feature/88-basemap-legende`
(Konzept `docs/konzept/10_basemap_legende.md`, ADR 0010), PR steht aus. Offen: **fachliche Abnahme des
Legendenkatalogs** `sn_basis/data/basemap_legende.json` (Bezeichnungen, Gruppen, Zusammenfassungen; drei
Einträge ohne gut sichtbares Symbol, siehe Konzept Abschnitt 10) und Test unter QGIS 4.
(Konzept `docs/konzept/10_basemap_legende.md`, ADR 0010). Offen: **fachliche Abnahme des
Legendenkatalogs** `sn_basis/data/basemap_legende.json` (Bezeichnungen, Gruppen, Zusammenfassungen; „Platz“
als weiße Fläche ohne Rand, siehe Konzept Abschnitt 10) und Test unter QGIS 4. #88 ist gemergt (PR #89);
Punktlinien-Korrektur (#90) auf `Plugin_SN_Basis:bugfix/90-basemap-punktlinien`, PR steht aus.
**Hinweis zum lokalen Stand (04.09.2026):** Die Klone `Plugin_SN_Verfahrensgebiet` (4 Commits: PR #43, PR #45)
und `Repository` (Release 26.8.4-unstable) liegen hinter `origin`. Aktualisieren mit `python scripts/hallo.py`.
File diff suppressed because one or more lines are too long
+27 -7
View File
@@ -9,17 +9,17 @@ selbst (Docstrings) und aus der Testbaseline.
Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
Gesamt: 3 Pakete, 55 Testdateien, 648 Testfälle – 605 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 503 von 648 (78 %).
Gesamt: 3 Pakete, 56 Testdateien, 656 Testfälle – 613 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 511 von 656 (78 %).
## Zusammenfassung
| Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `sn_basis` | 38 | 396 | 396 | 0 | 0 | 396 von 396 (100 %) |
| `sn_basis` | 39 | 404 | 404 | 0 | 0 | 404 von 404 (100 %) |
| `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) |
| `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) |
| **Summe** | **55** | **648** | **605** | **35** | **8** | **503 von 648 (78 %)** |
| **Summe** | **56** | **656** | **613** | **35** | **8** | **511 von 656 (78 %)** |
### Legende
@@ -31,7 +31,7 @@ Mit Beschreibung (Docstring): 503 von 648 (78 %).
## Paket `sn_basis`
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 38 Testdateien mit 396 Testfällen (396 grün, 0 rot, 0 übersprungen).
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 39 Testdateien mit 404 Testfällen (404 grün, 0 rot, 0 übersprungen).
### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
@@ -57,7 +57,7 @@ Testgruppen:
- `TestMehrfachauswahl` (1 Testfälle): — (Docstring fehlt)
- `TestDruckanbindung` (4 Testfälle): — (Docstring fehlt)
- `TestBasemapBereich` (8 Testfälle): — (Docstring fehlt)
- `TestBasemapBereich` (10 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status |
| --- | --- | --- |
@@ -73,6 +73,8 @@ Testgruppen:
| `TestBasemapBereich.test_stil_laden_bricht_bei_fremder_vorlage_ab` | Prüft, dass eine Vorlage mit unbekannten Styles nur nach Bestätigung geladen wird. | grün |
| `TestBasemapBereich.test_vorhandene_vorlage_wird_nur_nach_rueckfrage_ersetzt` | Prüft, dass eine gleichnamige Stilvorlage ohne Bestätigung nicht überschrieben wird. | grün |
| `TestBasemapBereich.test_speichern_mit_aktueller_legendenauswahl` | Prüft, dass eine neue Stilvorlage zusammen mit der aktuellen Legendenauswahl gespeichert wird. | grün |
| `TestBasemapBereich.test_punktlinien_korrigieren_meldet_anzahl` | Prüft, dass „Punktlinien korrigieren“ den Basemap-Layer korrigiert und die Anzahl korrigierter Styles meldet. | grün |
| `TestBasemapBereich.test_punktlinien_ohne_basemap_layer_warnt` | Prüft, dass ohne Basemap-Layer nichts korrigiert, sondern gewarnt wird. | grün |
| `TestBasemapBereich.test_stil_speichern_ohne_basemap_layer_warnt` | Prüft, dass ohne Basemap-Layer keine Stilvorlage gespeichert, sondern gewarnt wird. | grün |
### `Plugin_SN_Basis/tests/test_basemap_kacheln.py`
@@ -174,6 +176,24 @@ Testgruppen:
| `TestPlatzierung.test_mehrspaltig_wenn_hoehe_nicht_reicht` | Prüft, dass die Legende zwei- oder dreispaltig wird, wenn sie einspaltig nicht zwischen Hauptlegende und Quellenangabe passt. | grün |
| `TestPlatzierung.test_nie_breiter_als_der_seitenrand_mit_hinweis` | Prüft, dass keine Spaltenzahl gewählt wird, die über den Seitenrand ragt, und dann ein Hinweis kommt. | grün |
### `Plugin_SN_Basis/tests/test_basemap_stilkorrektur.py`
Worum es in der Datei geht: Tests für modules/basemap_stilkorrektur.py – Punktlinien des Basemap-Layers sichtbar machen (Basis #90).
Testgruppen:
- `TestMusterUndAusdruck` (2 Testfälle): — (Docstring fehlt)
- `TestLayerkorrektur` (4 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status |
| --- | --- | --- |
| `TestMusterUndAusdruck.test_strichlaenge_null_im_festen_muster` | Prüft, dass Strichlängen 0 (gerade Positionen) im Strichmuster ersetzt und Lücken der Länge 0 nicht verändert werden. | grün |
| `TestMusterUndAusdruck.test_strichlaenge_null_im_zoomabhaengigen_ausdruck` | Prüft, dass jede Strichlänge 0 in den array(...)-Mustern des Konverter-Ausdrucks ersetzt wird und der übrige Ausdruck gleich bleibt. | grün |
| `TestLayerkorrektur.test_punktlinien_werden_korrigiert_andere_styles_nicht` | Prüft, dass nur Styles mit Strichlänge 0 korrigiert werden – Muster und Ausdruck – und die Anzahl zurückkommt. | grün |
| `TestLayerkorrektur.test_zweiter_lauf_korrigiert_nichts` | Prüft, dass ein zweiter Lauf keine Styles mehr korrigiert und nicht neu zeichnen lässt. | grün |
| `TestLayerkorrektur.test_nur_ausdruck_ohne_festes_muster` | Prüft, dass auch ein Style korrigiert wird, dessen Strichlänge 0 nur im zoomabhängigen Ausdruck steht. | grün |
| `TestLayerkorrektur.test_layer_ohne_renderer` | Prüft, dass ein Layer ohne Renderer 0 korrigierte Styles liefert. | grün |
### `Plugin_SN_Basis/tests/test_basemap_stilvorlagen.py`
Worum es in der Datei geht: Tests für modules/basemap_stilvorlagen.py – lokale Stilvorlagen des Basemap-Layers (Basis #88).
@@ -1388,7 +1408,7 @@ Arbeitsliste: Diese Testfälle haben keinen Docstring; was sie fachlich prüfen,
aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall,
dann verschwindet er hier von selbst.
### `sn_basis` – 0 von 396 Testfällen ohne Beschreibung
### `sn_basis` – 0 von 404 Testfällen ohne Beschreibung
Keine Lücken.
+6
View File
@@ -53,6 +53,12 @@ Kurz, konkret, mit Datum und Quelle. Neue Einträge oben in der passenden Rubrik
## Daten und Dienste
- **Punktlinien aus Mapbox-Styles sind in QGIS unsichtbar.** basemap.de (wie viele MapLibre-Stile) zeichnet Punktlinien
als `line-dasharray` mit Strichlänge 0 und `line-cap: round`. QGIS übernimmt das beim Import 1:1, Qt zeichnet
Striche der Länge 0 aber gar nicht – auch nicht als Punkt, weder in der Karte noch in der Legende. Betroffen
sind bei basemap.de 12 Styles (Baumreihe, Hecke, Durchlass, Seilbahnen …). Abhilfe: Strichlänge 0 durch 0,01
ersetzen (`sn_basis.modules.basemap_stilkorrektur`). Beim Prüfen solcher Effekte die Beschriftung abschalten –
sonst zählen Labels als „sichtbare Pixel“. (02.10.2026, QGIS 3.44 / PyQt 5.15, Basis #90; QGIS 4 ungeprüft)
- **basemap.de-Vektorkacheln (Basis #88):** QGIS zeigt für Vektorkachel-Layer keine Legende. Objekte im Gebiet
liefert `QgsVectorTileLayer.selectByGeometry()` (lädt die Kacheln selbst; `getRawTile` ist in Python gesperrt).
Kacheln enden bei Zoom 15. Der Renderer prüft Styles mit `scaleToZoomLevel(maßstab, False)` und setzt