From b22b9855fab693cff4e2a2746323c5a7e1baa2a0 Mon Sep 17 00:00:00 2001 From: Damian Wessels Date: Fri, 28 Apr 2023 15:33:22 +0200 Subject: [PATCH] XML exporter erweitert --- .../ViewModel/Haltung/HaltungEditViewModel.cs | 2 +- .../Exporter/ExporterFactory.cs | 2 + .../Exporter/XML/XML2006.cs | 68 ++++++++++++++++--- .../Importer/CSVImporter.cs | 29 +++++--- .../Exporter/XML/XML2006Tests.cs | 30 +++++--- 5 files changed, 103 insertions(+), 28 deletions(-) diff --git a/StammGenerator/ViewModel/Haltung/HaltungEditViewModel.cs b/StammGenerator/ViewModel/Haltung/HaltungEditViewModel.cs index f693234..49357d8 100644 --- a/StammGenerator/ViewModel/Haltung/HaltungEditViewModel.cs +++ b/StammGenerator/ViewModel/Haltung/HaltungEditViewModel.cs @@ -168,7 +168,7 @@ namespace StammGenerator.ViewModel double length = Math.Sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2))); - Haltungslaenge = length.ToString(); + Haltungslaenge = string.Format("{0:0.00}", length); OnPropertyChanged(nameof(Haltungslaenge)); } diff --git a/WWTech_KanalSchnittstelle/Exporter/ExporterFactory.cs b/WWTech_KanalSchnittstelle/Exporter/ExporterFactory.cs index f2e04a6..67c61a3 100644 --- a/WWTech_KanalSchnittstelle/Exporter/ExporterFactory.cs +++ b/WWTech_KanalSchnittstelle/Exporter/ExporterFactory.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using WWTech_KanalSchnittstelle.Exporter.Kandis; +using WWTech_KanalSchnittstelle.Exporter.XML; namespace WWTech_KanalSchnittstelle.Exporter { @@ -18,6 +19,7 @@ namespace WWTech_KanalSchnittstelle.Exporter switch(exportType) { case EExportType.KANDIS6: return new KANDIS60(); + case EExportType.XML2006: return new XML2006(); default: throw new NotImplementedException(); } } diff --git a/WWTech_KanalSchnittstelle/Exporter/XML/XML2006.cs b/WWTech_KanalSchnittstelle/Exporter/XML/XML2006.cs index 2354aef..bdbf246 100644 --- a/WWTech_KanalSchnittstelle/Exporter/XML/XML2006.cs +++ b/WWTech_KanalSchnittstelle/Exporter/XML/XML2006.cs @@ -27,7 +27,7 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML XmlElement xmlElement = CreateElementFor("Identifikation", _file); xmlElement.SetAttribute("xmlns", "http://www.ofd-hannover.la/Identifikation"); XmlElement xmlElement2 = CreateElementFor("Version", xmlElement); - xmlElement2.InnerText = "2-3"; + xmlElement2.InnerText = "2006-2"; DoAdmindata(xmlElement); DoCollectives(xmlElement); @@ -58,9 +58,15 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML private void DoCollectives2Base(XmlElement dataCollectiveElement) { XmlElement parentElement = DoRow(dataCollectiveElement, "Stammdatenkollektiv"); - foreach(Schacht schacht in _schaechte) + + foreach (Kanal haltung in _haltungen) { - XmlElement xmlElement = DoSchachtRow(schacht,parentElement, "AbwassertechnischeAnlage"); + XmlElement xmlElement = DoHaltungRow(haltung, parentElement, "AbwassertechnischeAnlage"); + } + + foreach (Schacht schacht in _schaechte) + { + XmlElement xmlElement = DoSchachtRow(schacht, parentElement, "AbwassertechnischeAnlage"); } } @@ -83,14 +89,14 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML XmlElement GeometrieElement = CreateElementFor("Geometrie", xmlElement); XmlElement KnotenElement = CreateElementFor("Knoten", GeometrieElement); XmlElement PunktElement = CreateElementFor("Punkt", KnotenElement); - DoRowValue(PunktElement, "Rechtswert", schacht.SohlRechtsWert.ToString()); - DoRowValue(PunktElement, "Hochwert", schacht.SohlHochWert.ToString()); - DoRowValue(PunktElement, "Punkthoehe", schacht.SohlHoehe.ToString()); + DoRowValue(PunktElement, "Rechtswert", schacht.SohlRechtsWert.ToString().Replace(',', '.')); + DoRowValue(PunktElement, "Hochwert", schacht.SohlHochWert.ToString().Replace(',', '.')); + DoRowValue(PunktElement, "Punkthoehe", schacht.SohlHoehe.ToString().Replace(',', '.')); DoRowValue(PunktElement, "PunktattributAbwasser", "SMP"); PunktElement = CreateElementFor("Punkt", KnotenElement); - DoRowValue(PunktElement, "Rechtswert", schacht.DeckelRechtsWert.ToString()); - DoRowValue(PunktElement, "Hochwert", schacht.DeckelHochWert.ToString()); - DoRowValue(PunktElement, "Punkthoehe", schacht.DeckelHoehe.ToString()); + DoRowValue(PunktElement, "Rechtswert", schacht.DeckelRechtsWert.ToString().Replace(',', '.')); + DoRowValue(PunktElement, "Hochwert", schacht.DeckelHochWert.ToString().Replace(',', '.')); + DoRowValue(PunktElement, "Punkthoehe", schacht.DeckelHoehe.ToString().Replace(',', '.')); DoRowValue(PunktElement, "PunktattributAbwasser", "DMP"); return xmlElement; } @@ -101,6 +107,48 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML xmlElement = _file.CreateElement(orginalTableName); parentElement.AppendChild(xmlElement); + DoRowValue(xmlElement, "Objektbezeichnung", haltung.Objektbezeichnung); + DoRowValue(xmlElement, "Objektart", "1"); + DoRowValue(xmlElement, "Entwaesserungsart", haltung.Entwaesserung == EEntwaeserung.Regenwasser ? "KR" : haltung.Entwaesserung == EEntwaeserung.Schmutzwasser ? "KS" : "KM"); + + XmlElement xmlElement1 = CreateElementFor("Kante", xmlElement); + DoRowValue(xmlElement1, "KantenTyp", "0"); + DoRowValue(xmlElement1, "KnotenZulauf", haltung.StartSchacht.Objektbezeichnung); + DoRowValue(xmlElement1, "KnotenZulaufTyp", "0"); + DoRowValue(xmlElement1, "KnotenAblauf", haltung.EndSchacht.Objektbezeichnung); + DoRowValue(xmlElement1, "KnotenAblaufTyp", "0"); + DoRowValue(xmlElement1, "Material", haltung.Material); + + XmlElement xmlElement2 = CreateElementFor("Profil", xmlElement1); + DoRowValue(xmlElement2, "SonderprofilVorhanden", "0"); + DoRowValue(xmlElement2, "Profilart", "0"); + DoRowValue(xmlElement2, "Profilbreite", haltung.DN.ToString()); + DoRowValue(xmlElement2, "Profilhoehe", haltung.DN.ToString()); + + xmlElement2 = CreateElementFor("Haltung", xmlElement1); + DoRowValue(xmlElement2, "HaltungsFunktion", "1"); + DoRowValue(xmlElement2, "DMPLaenge", haltung.Haltungslaenge.ToString().Replace(',', '.')); + + xmlElement1 = CreateElementFor("Lage", xmlElement); + + xmlElement1 = CreateElementFor("Geometrie", xmlElement); + + DoRowValue(xmlElement1, "GeoObjekttyp", "L"); + xmlElement2 = CreateElementFor("Geometriedaten", xmlElement1); + XmlElement xmlElement3 = CreateElementFor("Kanten", xmlElement2); + XmlElement xmlElement4 = CreateElementFor("Kante", xmlElement3); + + XmlElement xmlElement5 = CreateElementFor("Start", xmlElement4); + DoRowValue(xmlElement5, "Rechtswert", haltung.StartSchacht.SohlRechtsWert.ToString().Replace(',', '.')); + DoRowValue(xmlElement5, "Hochwert", haltung.StartSchacht.SohlHochWert.ToString().Replace(',', '.')); + DoRowValue(xmlElement5, "Punkthoehe", haltung.StartSchacht.SohlHoehe.ToString().Replace(',', '.')); + DoRowValue(xmlElement5, "PunktattributAbwasser", "SMP"); + + xmlElement5 = CreateElementFor("Ende", xmlElement4); + DoRowValue(xmlElement5, "Rechtswert", haltung.EndSchacht.SohlRechtsWert.ToString().Replace(',', '.')); + DoRowValue(xmlElement5, "Hochwert", haltung.EndSchacht.SohlHochWert.ToString().Replace(',', '.')); + DoRowValue(xmlElement5, "Punkthoehe", haltung.EndSchacht.SohlHoehe.ToString().Replace(',', '.')); + DoRowValue(xmlElement5, "PunktattributAbwasser", "SMP"); return xmlElement; @@ -133,7 +181,7 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML private XmlElement DoRowValue(XmlElement rowElement, string originColName, string value) { XmlElement xmlElement = CreateElementFor(originColName, rowElement); - if(value != "") + if (value != "") { xmlElement.InnerText = value; } diff --git a/WWTech_KanalSchnittstelle/Importer/CSVImporter.cs b/WWTech_KanalSchnittstelle/Importer/CSVImporter.cs index eb0c398..3d4665a 100644 --- a/WWTech_KanalSchnittstelle/Importer/CSVImporter.cs +++ b/WWTech_KanalSchnittstelle/Importer/CSVImporter.cs @@ -16,15 +16,26 @@ namespace WWTech_KanalSchnittstelle.Importer } public class CSVImporter : IImport { - private string[] input; + private string[]? input; private readonly Projekt projekt; -#pragma warning disable CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable. + public CSVImporter(int projektID) -#pragma warning restore CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable. { projekt = new Projekt() { Id = projektID }; } + + private decimal parseKoordinate(string input) + { + decimal result = 0m; + input = string.Format("{0:0.000}", input).Replace('.', ','); + if(decimal.TryParse(input, out result)) + { + throw new Exception("Konnte koordinate nicht parsen"); + } + return result; + } + public List LoadSchaechte(string filename, EEntwaeserung entwaeserung) { List result = new List(); @@ -58,15 +69,15 @@ namespace WWTech_KanalSchnittstelle.Importer if(kennung == EKennung.DECKEL) { - schacht.DeckelRechtsWert = decimal.Parse(parsed[1].Replace('.', ',')); - schacht.DeckelHochWert = decimal.Parse(parsed[2].Replace('.', ',')); - schacht.DeckelHoehe = decimal.Parse(parsed[3].Replace('.', ',')); + schacht.DeckelRechtsWert = parseKoordinate(parsed[1]); + schacht.DeckelHochWert = parseKoordinate(parsed[2]); + schacht.DeckelHoehe = parseKoordinate(parsed[3]); } if(kennung == EKennung.SOHLE) { - schacht.SohlRechtsWert = decimal.Parse(parsed[1].Replace('.', ',')); - schacht.SohlHochWert = decimal.Parse(parsed[2].Replace('.', ',')); - schacht.SohlHoehe = decimal.Parse(parsed[3].Replace('.', ',')); + schacht.SohlRechtsWert = parseKoordinate(parsed[1]); + schacht.SohlHochWert = parseKoordinate(parsed[2]); + schacht.SohlHoehe = parseKoordinate(parsed[3]); } diff --git a/WWTech_KanalSchnittstelleTests/Exporter/XML/XML2006Tests.cs b/WWTech_KanalSchnittstelleTests/Exporter/XML/XML2006Tests.cs index c068c52..29ed90f 100644 --- a/WWTech_KanalSchnittstelleTests/Exporter/XML/XML2006Tests.cs +++ b/WWTech_KanalSchnittstelleTests/Exporter/XML/XML2006Tests.cs @@ -20,23 +20,37 @@ namespace WWTech_KanalSchnittstelle.Exporter.XML.Tests { new Schacht() { - Objektbezeichnung = "15456498", - SohlHoehe = 1457, - DeckelHoehe = 1454, - DeckelRechtsWert = 14, + Objektbezeichnung = "SW01", + SohlHoehe = 0112.7m, + DeckelHoehe = 0108.8m, + SohlHochWert = 123.93m, + SohlRechtsWert = 123.92m, DeckelHochWert = 14785, }, new Schacht() { - Objektbezeichnung = "18656498", + Objektbezeichnung = "SW02", SohlHoehe = 145, - DeckelHoehe = 14, - DeckelRechtsWert = 28, + SohlHochWert = 14, + SohlRechtsWert = 28, DeckelHochWert = 14, } }; + List haltungen = new List() + { + new Kanal() + { + StartSchacht = schaechte[0], + EndSchacht = schaechte[1], + DN = 200, + Entwaesserung = EEntwaeserung.Regenwasser, + Haltungslaenge = 53.93m, + Material = "STZ", + Objektbezeichnung = schaechte[0].Objektbezeichnung + } + }; XML2006 xmloutput = new XML2006(); - xmloutput.Export("test.xml", EKodierungssystem.EN13508_2_2011, new List(), schaechte); + xmloutput.Export("test.xml", EKodierungssystem.EN13508_2_2011, haltungen, schaechte); } } } \ No newline at end of file