mapView, die 3.: Reihenfolge der Overlays

Rund um die LCL und andere Komponenten
Antworten
willie68
Beiträge: 15
Registriert: Di 9. Sep 2025, 11:03

mapView, die 3.: Reihenfolge der Overlays

Beitrag von willie68 »

Ich bin's schon wieder.
Diesmal mit einem Featurerequest.
Ich hätte gerne eine Möglichkeit die Renderreihenfolge der Overlays zu bestimmen.
Derzeit wird die Renderreihenfolge ja einzig durch die Reihenfolge beim Hinzufügen bestimmt.
Bei meinem Projekt wäre es aber wichtig, eine gewisse vorgegebene Reihenfolge einzuhalten, weil sonst bestimmte wichtige Daten verschwinden.
Beispiel:
Ich habe die Grundkarte von OpenStreetMap, da drauf einen Wassertiefenlayer, der bestimmte Bereiche in anderen Farben darstellt, darauf den Seamark Layer, also die Seezeichen, und darauf den eigentlichen Track.
Das wäre die richtige Reihenfolge.
Ich würde aber gerne den Seamark und Tiefenlayer ein/ausblenden machen. Tue ich das, werden die Layer entfernt und neu hinzugefügt.
Wenn der seamark Layer vor dem Tiefenlayer hinzugefügt wird, sind aber einige Seezeichen überdeckt.
Natürlich könnte ich bei jedem Aktivieren die Reihenfolge neu setzen, aber einfacher wäre es, wenn der Renderer z.b. die ID als Sortierung und Reihenfolge benutzt.
Oder hab ich irgendwas übersehen?

wp_xyz
Beiträge: 5276
Registriert: Fr 8. Apr 2011, 09:01

Re: mapView, die 3.: Reihenfolge der Overlays

Beitrag von wp_xyz »

MapLayers sind letztendlich vom Typ TCollectionItem, das heißt, du müsstest mit layer.Index die Reihenfolge verändern können.

Um einen Layer auszublenden, musst du ihn nicht löschen. Es reicht, sein Visible auf false zu setzen.

Wichtig ist auch noch, falls ein Layer selbst einen Alpha-Kanal in den png-Kacheln enthält, den DrawMode des Layers auf idmUseSourceAlpha zu setzen

willie68
Beiträge: 15
Registriert: Di 9. Sep 2025, 11:03

Re: mapView, die 3.: Reihenfolge der Overlays

Beitrag von willie68 »

Dickes Danke. Hab das alles mal geändert und es funktioniert.

1. Die Kacheln auf den Layers und nicht auf die GPSTracks gelegt. Das bringt etwas mehr Geschwindigkeit.
2. werden jetzt alle Layer direkt instantziert und hinzugefügt. Visible aber auf false. -> Funktioniert und ich kann direkt die richtige Reihenfolge festlegen.
3. Aktivieren jetzt über das Visible Flag am Layer. -> Funktioniert
4. für den Depthlayer hab ich allerdings immer noch den TMS-WMS Proxy drin, der wird auch erst beim Aktivieren gestartet und beim Deaktivieren gestoppt. Funktioniert allerdings auch ohne Probleme.


idmUseSourceAlpha verwende ich schon, hilft aber leider nicht.

Antworten