from qgis._core import QgsFeature, QgsGeometry, QgsPointXY class PoWaterlevel(object): def __init__(self, json): """ Nimmt JSON-Daten eines Pegelonline-Waterlevels entgegen und füllt die entsprechenden Felder :param json: Json-Daten einer Waterlevel :type json: dict """ self.longitude = json['longitude'] if 'longitude' in json else None self.latitude = json['latitude'] if 'latitude' in json else None self.uuid = json['uuid'] self.shortname = json['shortname'] self.number = json['number'] self.agency = json['agency'] self.unit = json['timeseries'][0]['unit'] self.timestamp = json['timeseries'][0]['currentMeasurement']['timestamp'] self.value = json['timeseries'][0]['currentMeasurement']['value'] self.mean = json['timeseries'][0]['currentMeasurement']['stateMnwMhw'] self.absolute = json['timeseries'][0]['currentMeasurement']['stateNswHsw'] self.water = json['water']['longname'] def new_feature(self, fields): """ Erzeugt ein QgsFeature mit Attributen dieses Waterlevels oder None im Fehlerfall :param fields: QgsField-Liste um das Feature zu befüllen :type fields: list[QgsField] :return: None | QgsFeature """ if self.longitude is None or self.latitude is None: # Keine Koordinaten → Abbruch print("PoWaterlevel::new_feature: WARN: Waterlevel hat fehlende Koordinaten: %s" % (self.shortname,)) return None feature = QgsFeature(fields) feature.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(self.longitude, self.latitude))) feature.setAttribute('shortname', self.shortname) feature.setAttribute('number', self.number) feature.setAttribute('agency', self.agency) feature.setAttribute('timestamp', self.timestamp) feature.setAttribute('value', self.value) feature.setAttribute('unit', self.unit) feature.setAttribute('mean', self.mean) feature.setAttribute('absolute', self.absolute) feature.setAttribute('water', self.water) return feature