From 7a5e8e82b1d5762dcae2c04235aaf09314e37300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Sun, 28 Sep 2025 11:30:36 +0200 Subject: [PATCH] map tips --- map_tips.py | 55 ++++++++++++++++++++++++++++++++++ pb_tool.cfg | 2 +- pegelonline_dockwidget_base.ui | 14 +++++++++ po_runner.py | 20 +++++++++---- 4 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 map_tips.py diff --git a/map_tips.py b/map_tips.py new file mode 100644 index 0000000..3a13f8f --- /dev/null +++ b/map_tips.py @@ -0,0 +1,55 @@ +BASEMAP_MAP_TIPS = "[% \"NAM\" %] [% if(\"ZNM\" != '', ' / ' || \"ZNM\", '') %]" + +STATIONS_MAP_TIPS = "\ +

[% \"shortname\" %]

\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
Nummer:#[% \"number\" %]
Behörde:[% \"agency\" %]
Gewässer:[% \"water\" %]
Kilometer:[% \"km\" %] km
" + +WATERLEVELS_MAP_TIPS = "\ +

[% \"shortname\" %]

\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
Nummer:#[% \"number\" %]
Behörde:[% \"agency\" %]
Gewässer:[% \"water\" %]
Zeitstempel:[% \"timestamp\" %]
Aktueller Pegel:[% \"value\" %] [% \"unit\" %]
MNW, MHW:[% \"stateMnwMhw\" %]
NSW, HSW:[% \"stateNswHsw\" %]
" diff --git a/pb_tool.cfg b/pb_tool.cfg index 234e0c1..7cba20f 100644 --- a/pb_tool.cfg +++ b/pb_tool.cfg @@ -48,7 +48,7 @@ plugin_path:/home/patrick/.local/share/QGIS/QGIS3/profiles/default/python/plugin [files] # Python files that should be deployed with the plugin -python_files: __init__.py pegelonline.py pegelonline_dockwidget.py pegelonline_dockwidget_graph.py po_runner.py +python_files: __init__.py pegelonline.py pegelonline_dockwidget.py pegelonline_dockwidget_graph.py po_runner.py map_tips.py # The main dialog file that is loaded (not compiled) main_dialog: pegelonline_dockwidget_base.ui diff --git a/pegelonline_dockwidget_base.ui b/pegelonline_dockwidget_base.ui index f0dd077..25c5c36 100644 --- a/pegelonline_dockwidget_base.ui +++ b/pegelonline_dockwidget_base.ui @@ -393,6 +393,20 @@ + + + + Qt::Vertical + + + + + + + ... + + + diff --git a/po_runner.py b/po_runner.py index 6a67126..3a3d65d 100644 --- a/po_runner.py +++ b/po_runner.py @@ -5,6 +5,7 @@ from PyQt5 import QtGui from PyQt5.QtWidgets import QAction from qgis._core import QgsVectorLayer, QgsProject, QgsLayerTreeLayer, QgsPalLayerSettings, QgsVectorLayerSimpleLabeling +from .map_tips import WATERLEVELS_MAP_TIPS, STATIONS_MAP_TIPS, BASEMAP_MAP_TIPS from .pegelonline_dockwidget import PegelonlineDockWidget from .pegelonline_dockwidget_graph import PegelonlineDockWidgetGraph from .pomodules.po_history import PoHistory @@ -39,6 +40,7 @@ class PoRunner(object): self.ui.btnSelectRectangle.setDefaultAction(iface.actionSelectRectangle()) self.ui.btnUnselectAll.setDefaultAction(iface.mainWindow().findChild(QAction, "mActionDeselectAll")) self.ui.btnUnselectLayer.setDefaultAction(iface.mainWindow().findChild(QAction, "mActionDeselectActiveLayer")) + self.ui.btnMapTips.setDefaultAction(iface.actionMapTips()) # Signale verbinden self._connect_basemap_signals() @@ -48,7 +50,7 @@ class PoRunner(object): # basemap ----------------------------------------------------------------- - def _basemap_create(self, path, name, disconnect: Callable[[], None]) -> None | QgsVectorLayer: + def _basemap_create(self, path, name, disconnect: Callable[[], None], map_tips) -> None | QgsVectorLayer: print("_basemap_create: %s" % (name,)) path = os.path.join(self.local_dir, "basemap", path) basemap = QgsVectorLayer(path, name, "ogr") @@ -61,6 +63,9 @@ class PoRunner(object): # noinspection PyUnresolvedReferences basemap.willBeDeleted.connect(disconnect) + # map-tips setzen + basemap.setMapTipTemplate(map_tips) + # zur Instanz hinzufügen QgsProject.instance().addMapLayer(basemap, False) @@ -82,7 +87,7 @@ class PoRunner(object): print("_cbBasemapLines_toggled: %s" % (checked,)) if self.lines is None and checked: - self.lines = self._basemap_create("waters.gpkg|layername=water_l", "Flüsse", self._basemap_disconnect_lines) + self.lines = self._basemap_create("waters.gpkg|layername=water_l", "Flüsse", self._basemap_disconnect_lines, BASEMAP_MAP_TIPS) if self.lines is not None: self._layer_set_visible(self.lines, checked) @@ -93,7 +98,7 @@ class PoRunner(object): print("_cbBasemapAreas_toggled: %s" % (checked,)) if self.areas is None and checked: - self.areas = self._basemap_create("waters.gpkg|layername=water_f", "Flächen", self._basemap_disconnect_areas) + self.areas = self._basemap_create("waters.gpkg|layername=water_f", "Flächen", self._basemap_disconnect_areas, BASEMAP_MAP_TIPS) if self.areas is not None: self._layer_set_visible(self.areas, checked) @@ -128,7 +133,7 @@ class PoRunner(object): if self.stations is None and visible: reader = PoStationsQgs() features = reader.getStationsFeatures() - self.stations = self._layer_create_from_reader(reader.fields, reader.crs, features, "Stationen") + self.stations = self._layer_create_from_reader(reader.fields, reader.crs, features, "Stationen", STATIONS_MAP_TIPS) self._layer_add_to_instance(self.stations, "styles/label_stations.qml", self._stations_disconnect) if self.stations is not None: @@ -207,7 +212,7 @@ class PoRunner(object): if self.waterlevels is None and visible: reader = PoWaterlevelsQgs() features = reader.getWaterlevelsFeatures() - self.waterlevels = self._layer_create_from_reader(reader.fields, reader.crs, features, "Pegelstände") + self.waterlevels = self._layer_create_from_reader(reader.fields, reader.crs, features, "Pegelstände", WATERLEVELS_MAP_TIPS) self._layer_add_to_instance(self.waterlevels, "styles/label_waterlevels.qml", self.waterlevels_disconnect) if self.waterlevels is not None: @@ -291,7 +296,7 @@ class PoRunner(object): layer_tree = QgsProject.instance().layerTreeRoot().findLayer(basemap.id()) layer_tree.setItemVisibilityChecked(visible) - def _layer_create_from_reader(self, fields, crs, features, title) -> None | QgsVectorLayer: + def _layer_create_from_reader(self, fields, crs, features, title, map_tips) -> None | QgsVectorLayer: print("_layer_create_from_reader") if features is None: return None @@ -302,6 +307,9 @@ class PoRunner(object): layer = QgsVectorLayer(layer_path, title, "memory") provider = layer.dataProvider() + # map-tips setzen + layer.setMapTipTemplate(map_tips) + provider.addAttributes(fields) layer.updateFields()