code clean: pomodules
This commit is contained in:
parent
f3c5e73df1
commit
127f9dca7d
21
po_runner.py
21
po_runner.py
@ -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())
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
if feature is not None:
|
||||||
features.append(feature)
|
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']
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user