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 .pomodules.po_history import PoHistory
from .pomodules.po_stations import PoStations
from .pomodules.po_stations_qgs import PoQgsStations
from .pomodules.po_waterlevels_qgs import PoQgsCurrentW
from .pomodules.po_stations_qgs import PoStationsQgs
from .pomodules.po_waterlevels_qgs import PoWaterlevelsQgs
INFIX = ", ' - ', "
@ -16,17 +16,18 @@ INFIX = ", ' - ', "
# noinspection PyMethodMayBeStatic
class PoRunner(object):
def __init__(self, ui: PegelonlineDockWidget, iface):
self.ui: PegelonlineDockWidget = ui
def __init__(self, ui, iface):
self.ui = ui
self.iface = iface
self.local_dir = os.path.dirname(os.path.realpath(__file__))
# Layer Variablen
# Layer
self.stations = None
self.waterlevels = None
self.lines = None
self.areas = None
# ui Signale verbinden
self.connect_basemap_signals()
self.connect_stations_signals()
self.connect_waterlevels_signals()
@ -54,7 +55,7 @@ class PoRunner(object):
# zum LayerTree hinzufügen
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
@ -114,7 +115,7 @@ class PoRunner(object):
print("cbStationsVisibleToggled: %s" % (visible,))
if self.stations is None and visible:
reader = PoQgsStations()
reader = PoStationsQgs()
features = reader.getStationsFeatures()
self.stations = self._layerFromReader(reader.fields, reader.crs, features, "Stationen")
self._layerAdd(self.stations, "styles/label_stations.qml", self.disconnectStations)
@ -192,8 +193,8 @@ class PoRunner(object):
print("cbWaterlevelsVisibleToggled: %s" % (visible,))
if self.waterlevels is None and visible:
reader = PoQgsCurrentW()
features = reader.getCurrentWFeatures()
reader = PoWaterlevelsQgs()
features = reader.getWaterlevelsFeatures()
self.waterlevels = self._layerFromReader(reader.fields, reader.crs, features, "Wasserstandinformationen")
self._layerAdd(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels)
@ -314,7 +315,7 @@ class PoRunner(object):
# zum LayerTree hinzufügen
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):
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))
def download(self):
print("download: Getting data...")
print("download: Lade Bild herunter...")
image_data = self.getDataResponse()
if image_data is None or len(image_data) == 0:
print("download: Fehler: Keine Daten erhalten")
return None
print("download: Complete")
print("download: Vollständig")
return image_data

View File

@ -8,7 +8,7 @@ class PoStations(UrlReader):
super().__init__(poBaseURL + 'stations.json')
def getStations(self):
print("getStations: Getting data...")
print("getStations: Lade Stationen herunter...")
stations_json = self.getJsonResponse()
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

View File

@ -5,7 +5,7 @@ from qgis.core import QgsFields, QgsFeature, QgsField
from .po_stations import PoStations
class PoQgsStations(PoStations):
class PoStationsQgs(PoStations):
def __init__(self):
super().__init__()
@ -28,7 +28,7 @@ class PoQgsStations(PoStations):
stations = self.getStations()
if stations is None or len(stations) == 0:
print("getStations: Fehler: Keine Stationen erhalten")
print("getStationsFeatures: Fehler: Keine Stationen erhalten")
return None
for station in stations:
@ -40,6 +40,7 @@ class PoQgsStations(PoStations):
return features
def _getFeatureForStation(self, station) -> None | QgsFeature:
# 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

View File

@ -2,32 +2,26 @@ from . import poBaseURL
from .urlreader import UrlReader
class PoCurrentW(UrlReader):
class PoWaterlevels(UrlReader):
def __init__(self):
super().__init__(poBaseURL + 'stations.json?timeseries=W&includeTimeseries=true&includeCurrentMeasurement=true')
def getCurrentW(self):
print("getCurrentW: Getting data...")
def getWaterlevels(self):
print("getWaterlevels: Lade Pegelstände herunter...")
stations_json = self.getJsonResponse()
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
print("getCurrentW: %d Stationen erhalten" % (len(stations_json),))
stations = []
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(
{
'geometry': {
'longitude': station_json['longitude'],
'latitude': station_json['latitude'],
'longitude': station_json['longitude'] if 'longitude' in station_json else None,
'latitude': station_json['latitude'] if 'latitude' in station_json else None,
},
'attributes': {
'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

View File

@ -2,18 +2,18 @@ from PyQt5.QtCore import QVariant
from qgis._core import QgsCoordinateReferenceSystem, QgsGeometry, QgsPointXY
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):
super().__init__()
self.fields = None
self.crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
def getCurrentWFeatures(self):
print("getCurrentWFeatures: Erzeuge Features...")
def getWaterlevelsFeatures(self):
print("getWaterlevelsFeatures: Erzeuge Features...")
self.fields = QgsFields()
self.fields.append(QgsField('shortname', QVariant.String))
@ -25,19 +25,25 @@ class PoQgsCurrentW(PoCurrentW):
self.fields.append(QgsField('stateNswHsw', QVariant.String))
features = []
waterlevels = self.getCurrentW()
waterlevels = self.getWaterlevels()
if waterlevels is None or len(waterlevels) > 0:
print("getCurrentW: Fehler: Keine Pegelstände erhalten")
print("getWaterlevelsFeatures: Fehler: Keine Pegelstände erhalten")
return None
for station in waterlevels:
feature = self._getFeatureForStation(station)
if feature is not None:
features.append(feature)
print("getCurrentWFeatures: %d Features erzeugt" % (len(features),))
print("getWaterlevelsFeatures: %d Features erzeugt" % (len(features),))
return features
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)
longitude = station['geometry']['longitude']

View File

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