#131 EGON exporter

* enhances EGON exporter code structure
pull/135/head
mpeltriaux 3 years ago
parent 18c2513863
commit 0269dfb392

@ -5,13 +5,13 @@ Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 07.03.22
"""
import base64
import xmltodict
from django.contrib.gis.gdal import OGRGeometry
from django.db.models import Sum
from django.utils import formats
from intervention.models import Intervention
from xml.etree import ElementTree as etree
from konova.sub_settings.lanis_settings import DEFAULT_SRID_RLP
@ -45,49 +45,83 @@ class EgonGmlBuilder:
self.intervention = intervention
self.gml = self.build_gml()
def build_gml(self):
def _gen_flurstuecksKennzeichen(self, parcel):
""" Generates oneo:flurstuecksKennzeichen to provide backwards compatibility
Args:
parcel (Parcel): The requested parcel
Returns:
str
"""
gmrkng_code = "000000"
flr_code = "{0:03d}".format(int(parcel.flr or 0))
flrstckzhlr_code = "{0:05d}".format(int(parcel.flrstck_zhlr or 0))
flrstcknnr_code = "{0:06d}".format(int(parcel.flrstck_nnr or 0))
return gmrkng_code + flr_code + flrstckzhlr_code + flrstcknnr_code
def _sum_all_payments(self):
all_payments = self.intervention.payments.aggregate(
summed=Sum("amount")
)["summed"]
return all_payments
def _gen_kompensationsArt(self):
comp_type = "Ersatzzahlung"
if self.intervention.compensations.exists():
comp_type += " und Kompensation"
return comp_type
def _gen_geometry_list(self):
geom = self.intervention.geometry.geom
geom.transform(DEFAULT_SRID_RLP)
geoms_list = [
{
"gml:polygonMember": {
"gml:Polygon": {
"gml:exterior": {
"gml:LinearRing": {
"gml:posList": " ".join([f"{str(coord[0])},{str(coord[1])}" for coord in coords[0]])
}
"gml:Polygon": {
"gml:exterior": {
"gml:LinearRing": {
"gml:posList": " ".join([f"{str(coord[0])},{str(coord[1])}" for coord in coords[0]])
}
}
}
} for coords in geom.coords
]
return geoms_list
def _gen_raumreferenz(self):
parcels = self.intervention.get_underlying_parcels()
spatial_reference_list = [
{
"oneo:Raumreferenz": {
"oneo:datumAbgleich": None,
"oneo:ortsangabe": {
"oneo:Ortsangaben": {
"oneo:kreisSchluessel": parcel.district.krs,
"oneo:gemeindeSchluessel": parcel.district.gmnd,
"oneo:verbandsgemeindeSchluessel": parcel.gmrkng,
"oneo:flurstuecksKennzeichen": None,
}
},
}
"oneo:datumAbgleich": None,
"oneo:ortsangabe": {
"oneo:Ortsangaben": {
"oneo:kreisSchluessel": parcel.district.krs,
"oneo:gemeindeSchluessel": parcel.district.gmnd,
"oneo:verbandsgemeindeSchluessel": parcel.gmrkng,
"oneo:flurstuecksKennzeichen": self._gen_flurstuecksKennzeichen(parcel),
}
},
} for parcel in parcels
]
return spatial_reference_list
def _gen_foto(self):
revoc_docs, regular_docs = self.intervention.get_documents()
docs_list = [
{
"oneo:Foto": {
"oneo:aufnahmezeitpunkt": formats.localize(doc.date_of_creation),
"oneo:bemerkung": doc.comment,
"oneo:fotoverweis": base64.b64encode(doc.file.read()).decode("utf-8"),
"oneo:dateiname": doc.title,
"oneo:hauptfoto": False,
}
} for doc in regular_docs
]
return docs_list
t = {
def build_gml(self):
xml_dict = {
"wfs:FeatureCollection": {
"oneo:Eingriffsverfahren": {
"@gml:id": self.intervention.identifier,
@ -96,8 +130,8 @@ class EgonGmlBuilder:
"oneo:bemerkungZulassungsstelle": None,
"oneo:eintragungsstelle": self.intervention.responsible.conservation_office.long_name,
"oneo:zulassungsstelle": self.intervention.responsible.registration_office.long_name,
"oneo:ersatzzahlung": all_payments,
"oneo:kompensationsart": comp_type,
"oneo:ersatzzahlung": self._sum_all_payments(),
"oneo:kompensationsart": self._gen_kompensationsArt(),
"oneo:verfahrensrecht": self.intervention.legal.laws.first().short_name,
"oneo:verfahrenstyp": self.intervention.legal.process_type.long_name,
"oneo:eingreifer": {
@ -123,7 +157,7 @@ class EgonGmlBuilder:
"gml:multiSurfaceProperty": {
"gml:MultiPolygon": {
"@srsName": f"http://www.opengis.net/gml/srs/epsg.xml#{DEFAULT_SRID_RLP}",
"#text": geoms_list,
"gml:polygonMember": self._gen_geometry_list(),
}
},
},
@ -132,19 +166,12 @@ class EgonGmlBuilder:
"oneo:bemerkung": self.intervention.comment,
"oneo:verantwortlicheStelle": None,
"oneo:veroffentlichtAm": None,
"oneo:raumreferenz": spatial_reference_list,
"oneo:foto": {
"oneo:Foto": {
"oneo:aufnahmezeitpunkt": None,
"oneo:bemerkung": None,
"oneo:fotoverweis": None,
"oneo:dateiname": None,
"oneo:hauptfoto": False,
}
"oneo:raumreferenz": {
"oneo:Raumreferenz": self._gen_raumreferenz(),
},
"oneo:foto": self._gen_foto(),
}
},
}
gml = xmltodict.unparse(t, pretty=True)
print(gml)
return gml
gml = xmltodict.unparse(xml_dict)
return gml

Loading…
Cancel
Save