code clean: pomodules

This commit is contained in:
Patrick Haßel 2025-09-27 15:43:06 +02:00
parent f3c5e73df1
commit 127f9dca7d
7 changed files with 45 additions and 37 deletions

View File

@ -7,8 +7,8 @@ from qgis._core import QgsVectorLayer, QgsProject, QgsLayerTreeLayer, QgsPalLaye
from .pegelonline_dockwidget import PegelonlineDockWidget from .pegelonline_dockwidget import PegelonlineDockWidget
from .pomodules.po_history import PoHistory from .pomodules.po_history import PoHistory
from .pomodules.po_stations import PoStations from .pomodules.po_stations import PoStations
from .pomodules.po_stations_qgs import PoQgsStations from .pomodules.po_stations_qgs import PoStationsQgs
from .pomodules.po_waterlevels_qgs import PoQgsCurrentW from .pomodules.po_waterlevels_qgs import PoWaterlevelsQgs
INFIX = ", ' - ', " INFIX = ", ' - ', "
@ -16,17 +16,18 @@ INFIX = ", ' - ', "
# noinspection PyMethodMayBeStatic # noinspection PyMethodMayBeStatic
class PoRunner(object): class PoRunner(object):
def __init__(self, ui: PegelonlineDockWidget, iface): def __init__(self, ui, iface):
self.ui: PegelonlineDockWidget = ui self.ui = ui
self.iface = iface self.iface = iface
self.local_dir = os.path.dirname(os.path.realpath(__file__)) self.local_dir = os.path.dirname(os.path.realpath(__file__))
# Layer Variablen # Layer
self.stations = None self.stations = None
self.waterlevels = None self.waterlevels = None
self.lines = None self.lines = None
self.areas = None self.areas = None
# ui Signale verbinden
self.connect_basemap_signals() self.connect_basemap_signals()
self.connect_stations_signals() self.connect_stations_signals()
self.connect_waterlevels_signals() self.connect_waterlevels_signals()
@ -54,7 +55,7 @@ class PoRunner(object):
# zum LayerTree hinzufügen # zum LayerTree hinzufügen
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup() layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
layer_tree.insertChildNode(-1, QgsLayerTreeLayer(basemap)) layer_tree.insertChildNode(-1, QgsLayerTreeLayer(basemap)) # am unteren Ende anhängen → liegt somit unter stations/waterlevels
return basemap return basemap
@ -114,7 +115,7 @@ class PoRunner(object):
print("cbStationsVisibleToggled: %s" % (visible,)) print("cbStationsVisibleToggled: %s" % (visible,))
if self.stations is None and visible: if self.stations is None and visible:
reader = PoQgsStations() reader = PoStationsQgs()
features = reader.getStationsFeatures() features = reader.getStationsFeatures()
self.stations = self._layerFromReader(reader.fields, reader.crs, features, "Stationen") self.stations = self._layerFromReader(reader.fields, reader.crs, features, "Stationen")
self._layerAdd(self.stations, "styles/label_stations.qml", self.disconnectStations) self._layerAdd(self.stations, "styles/label_stations.qml", self.disconnectStations)
@ -192,8 +193,8 @@ class PoRunner(object):
print("cbWaterlevelsVisibleToggled: %s" % (visible,)) print("cbWaterlevelsVisibleToggled: %s" % (visible,))
if self.waterlevels is None and visible: if self.waterlevels is None and visible:
reader = PoQgsCurrentW() reader = PoWaterlevelsQgs()
features = reader.getCurrentWFeatures() features = reader.getWaterlevelsFeatures()
self.waterlevels = self._layerFromReader(reader.fields, reader.crs, features, "Wasserstandinformationen") self.waterlevels = self._layerFromReader(reader.fields, reader.crs, features, "Wasserstandinformationen")
self._layerAdd(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels) self._layerAdd(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels)
@ -314,7 +315,7 @@ class PoRunner(object):
# zum LayerTree hinzufügen # zum LayerTree hinzufügen
layer_tree = self.iface.layerTreeCanvasBridge().rootGroup() layer_tree = self.iface.layerTreeCanvasBridge().rootGroup()
layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) # am oberen Ende anhängen → liegt somit über basemap
def _layerUpdateLabeling(self, layer, fields): def _layerUpdateLabeling(self, layer, fields):
labeling = QgsVectorLayerSimpleLabeling(QgsPalLayerSettings()) labeling = QgsVectorLayerSimpleLabeling(QgsPalLayerSettings())

View File

@ -10,12 +10,12 @@ class PoHistory(UrlReader):
super().__init__(poBaseURL + 'stations/%s/W/measurements.png?start=P%dD' % (quote(station), days)) super().__init__(poBaseURL + 'stations/%s/W/measurements.png?start=P%dD' % (quote(station), days))
def download(self): def download(self):
print("download: Getting data...") print("download: Lade Bild herunter...")
image_data = self.getDataResponse() image_data = self.getDataResponse()
if image_data is None or len(image_data) == 0: if image_data is None or len(image_data) == 0:
print("download: Fehler: Keine Daten erhalten") print("download: Fehler: Keine Daten erhalten")
return None return None
print("download: Complete") print("download: Vollständig")
return image_data return image_data

View File

@ -8,7 +8,7 @@ class PoStations(UrlReader):
super().__init__(poBaseURL + 'stations.json') super().__init__(poBaseURL + 'stations.json')
def getStations(self): def getStations(self):
print("getStations: Getting data...") print("getStations: Lade Stationen herunter...")
stations_json = self.getJsonResponse() stations_json = self.getJsonResponse()
if stations_json is None or len(stations_json) == 0: if stations_json is None or len(stations_json) == 0:
@ -37,5 +37,6 @@ class PoStations(UrlReader):
} }
) )
print("getStations: %d / %d Stationen überführt" % (len(stations), len(stations_json))) print("getStations: %d Stationen erhalten" % (len(stations),))
return stations return stations

View File

@ -5,7 +5,7 @@ from qgis.core import QgsFields, QgsFeature, QgsField
from .po_stations import PoStations from .po_stations import PoStations
class PoQgsStations(PoStations): class PoStationsQgs(PoStations):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -28,7 +28,7 @@ class PoQgsStations(PoStations):
stations = self.getStations() stations = self.getStations()
if stations is None or len(stations) == 0: if stations is None or len(stations) == 0:
print("getStations: Fehler: Keine Stationen erhalten") print("getStationsFeatures: Fehler: Keine Stationen erhalten")
return None return None
for station in stations: for station in stations:
@ -40,6 +40,7 @@ class PoQgsStations(PoStations):
return features return features
def _getFeatureForStation(self, station) -> None | QgsFeature: def _getFeatureForStation(self, station) -> None | QgsFeature:
# noinspection DuplicatedCode
if station['geometry']['longitude'] is None or station['geometry']['latitude'] is None: if station['geometry']['longitude'] is None or station['geometry']['latitude'] is None:
print("_getFeatureForStation: WARN: Station hat fehlende Koordinaten: %s" % (station['attributes']['shortname'],)) print("_getFeatureForStation: WARN: Station hat fehlende Koordinaten: %s" % (station['attributes']['shortname'],))
return None return None

View File

@ -2,32 +2,26 @@ from . import poBaseURL
from .urlreader import UrlReader from .urlreader import UrlReader
class PoCurrentW(UrlReader): class PoWaterlevels(UrlReader):
def __init__(self): def __init__(self):
super().__init__(poBaseURL + 'stations.json?timeseries=W&includeTimeseries=true&includeCurrentMeasurement=true') super().__init__(poBaseURL + 'stations.json?timeseries=W&includeTimeseries=true&includeCurrentMeasurement=true')
def getCurrentW(self): def getWaterlevels(self):
print("getCurrentW: Getting data...") print("getWaterlevels: Lade Pegelstände herunter...")
stations_json = self.getJsonResponse() stations_json = self.getJsonResponse()
if stations_json is None or len(stations_json) == 0: if stations_json is None or len(stations_json) == 0:
print("getCurrentW: FEHLER: Keine Stationen erhalten") print("getWaterlevels: FEHLER: Keine Pegelstände erhalten")
return None return None
print("getCurrentW: %d Stationen erhalten" % (len(stations_json),))
stations = [] stations = []
for station_json in stations_json: for station_json in stations_json:
if 'longitude' not in station_json or 'latitude' not in station_json:
print("getCurrentW: WARN: Station hat fehlende Koordinaten: %s" % (station_json['longname'],))
continue
stations.append( stations.append(
{ {
'geometry': { 'geometry': {
'longitude': station_json['longitude'], 'longitude': station_json['longitude'] if 'longitude' in station_json else None,
'latitude': station_json['latitude'], 'latitude': station_json['latitude'] if 'latitude' in station_json else None,
}, },
'attributes': { 'attributes': {
'uuid': station_json['uuid'], 'uuid': station_json['uuid'],
@ -42,5 +36,6 @@ class PoCurrentW(UrlReader):
} }
) )
print("getCurrentW: %d / %d Stationen überführt" % (len(stations), len(stations_json))) print("getWaterlevels: %d Pegelstände erhalten" % (len(stations),))
return stations return stations

View File

@ -2,18 +2,18 @@ from PyQt5.QtCore import QVariant
from qgis._core import QgsCoordinateReferenceSystem, QgsGeometry, QgsPointXY from qgis._core import QgsCoordinateReferenceSystem, QgsGeometry, QgsPointXY
from qgis.core import QgsFields, QgsFeature, QgsField from qgis.core import QgsFields, QgsFeature, QgsField
from .po_waterlevels import PoCurrentW from .po_waterlevels import PoWaterlevels
class PoQgsCurrentW(PoCurrentW): class PoWaterlevelsQgs(PoWaterlevels):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.fields = None self.fields = None
self.crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId) self.crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
def getCurrentWFeatures(self): def getWaterlevelsFeatures(self):
print("getCurrentWFeatures: Erzeuge Features...") print("getWaterlevelsFeatures: Erzeuge Features...")
self.fields = QgsFields() self.fields = QgsFields()
self.fields.append(QgsField('shortname', QVariant.String)) self.fields.append(QgsField('shortname', QVariant.String))
@ -25,19 +25,25 @@ class PoQgsCurrentW(PoCurrentW):
self.fields.append(QgsField('stateNswHsw', QVariant.String)) self.fields.append(QgsField('stateNswHsw', QVariant.String))
features = [] features = []
waterlevels = self.getCurrentW() waterlevels = self.getWaterlevels()
if waterlevels is None or len(waterlevels) > 0: if waterlevels is None or len(waterlevels) > 0:
print("getCurrentW: Fehler: Keine Pegelstände erhalten") print("getWaterlevelsFeatures: Fehler: Keine Pegelstände erhalten")
return None return None
for station in waterlevels: for station in waterlevels:
feature = self._getFeatureForStation(station) feature = self._getFeatureForStation(station)
features.append(feature) if feature is not None:
features.append(feature)
print("getCurrentWFeatures: %d Features erzeugt" % (len(features),)) print("getWaterlevelsFeatures: %d Features erzeugt" % (len(features),))
return features return features
def _getFeatureForStation(self, station): def _getFeatureForStation(self, station):
# noinspection DuplicatedCode
if station['geometry']['longitude'] is None or station['geometry']['latitude'] is None:
print("_getFeatureForStation: WARN: Station hat fehlende Koordinaten: %s" % (station['attributes']['shortname'],))
return None
feature = QgsFeature(self.fields) feature = QgsFeature(self.fields)
longitude = station['geometry']['longitude'] longitude = station['geometry']['longitude']

View File

@ -9,6 +9,10 @@ from urllib.request import Request, urlopen
class UrlReader(object): class UrlReader(object):
def __init__(self, _url): def __init__(self, _url):
"""
Erzeugt einen neuen UrlReader für gegebene url
:param _url: zu öffnende URL
"""
self.url = _url self.url = _url
def openUrl(self): def openUrl(self):