public Feature CreateZustandsabschnittFeature(ZustandsabschnittGIS zustandsabschnitt, Guid inspektionsrouteid) { Feature zaFeature = new Feature(); IAttributesTable zaAttributes = new AttributesTable(); zaFeature.Geometry = zustandsabschnitt.Shape; //ID zaAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.ZustandsabschnittID), zustandsabschnitt.Id.ToString()); //StrassenabschnittID zaAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.StrassenabschnittGISID), zustandsabschnitt.StrassenabschnittGIS.Id.ToString()); //inspektionsRouteID zaAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.InspektionsRouteID), inspektionsrouteid.ToString()); //Zustandsindex //zaAttributes.AddAttribute(CheckOutGISDefaults.ZustandsIndex, zustandsabschnitt.Zustandsindex.ToString().Replace('.', ',')); if (zustandsabschnitt.Zustandsindex != null) { zaAttributes.AddAttribute(CheckOutGISDefaults.ZustandsIndex, double.Parse(zustandsabschnitt.Zustandsindex.ToString())); } else { zaAttributes.AddAttribute(CheckOutGISDefaults.ZustandsIndex, double.Parse("-1")); } zaFeature.Attributes = zaAttributes; return(zaFeature); }
private void DeleteAchsenReferenz(AchsenReferenz referenz) { ISession session = transactionScopeProvider.CurrentTransactionScope.Session; referenz.ReferenzGruppe.AchsenReferenzen.Remove(referenz); referenz.AchsenSegment.AchsenReferenzen.Remove(referenz); session.Delete(referenz); IAbschnittGISBase abschnitt = this.GetAbschnittGISBase(referenz); if (abschnitt == null) { Loggers.ApplicationLogger.Warn(String.Format("No Abschnitt found for Referenzgruppe id: {0}", referenz.ReferenzGruppe.Id.ToString())); } else { if (referenz.ReferenzGruppe.AchsenReferenzen.Count < 1) { session.Delete(referenz.ReferenzGruppe); ZustandsabschnittGIS zab = abschnitt as ZustandsabschnittGIS; if (zab != null) { zab.StrassenabschnittGIS.Zustandsabschnitten.Remove(zab); } session.Delete(abschnitt); } else { this.UpdateAbschnitt(abschnitt); } } }
private IAttributesTable writeBaseTroittoir(IAttributesTable attributes, ZustandsabschnittGIS zab) { attributes.AddAttribute(TrottoirShapeFileConstants.StrassenabschnittID, this.guidToOracleRaw(zab.StrassenabschnittGIS.Id)); attributes.AddAttribute(TrottoirShapeFileConstants.Strassenname, zab.StrassenabschnittGIS.Strassenname); attributes.AddAttribute(TrottoirShapeFileConstants.StrassenabschnittBezeichnungvon, zab.StrassenabschnittGIS.BezeichnungVon != null ? zab.StrassenabschnittGIS.BezeichnungVon : string.Empty); attributes.AddAttribute(TrottoirShapeFileConstants.StrassenabschnittBezeichnungbis, zab.StrassenabschnittGIS.BezeichnungBis != null ? zab.StrassenabschnittGIS.BezeichnungBis : string.Empty); attributes.AddAttribute(TrottoirShapeFileConstants.Eigentuemer, StrabShapeFileConstants.getOwner(zab.StrassenabschnittGIS.Strasseneigentuemer)); attributes.AddAttribute(TrottoirShapeFileConstants.Ortsbezeichnung, zab.StrassenabschnittGIS.Ortsbezeichnung != null ? zab.StrassenabschnittGIS.Ortsbezeichnung : string.Empty); attributes.AddAttribute(TrottoirShapeFileConstants.ID, this.guidToOracleRaw(Guid.NewGuid())); attributes.AddAttribute(TrottoirShapeFileConstants.ZustandsAbschnittID, this.guidToOracleRaw(zab.Id)); attributes.AddAttribute(TrottoirShapeFileConstants.Bezeichnungvon, zab.BezeichnungVon != null ? zab.BezeichnungVon : string.Empty); attributes.AddAttribute(TrottoirShapeFileConstants.Bezeichnungbis, zab.BezeichnungBis != null ? zab.BezeichnungBis : string.Empty); attributes.AddAttribute(TrottoirShapeFileConstants.Laenge, (double)zab.Laenge); attributes.AddAttribute(TrottoirShapeFileConstants.Aufnahmedatum, zab.Aufnahmedatum); attributes.AddAttribute(TrottoirShapeFileConstants.Aufnahmeteam, zab.Aufnahmeteam != null ? zab.Aufnahmeteam : string.Empty); return(attributes); }
private IList <Guid> UpdateAchsenReferenzen(AchsenSegment currententity, IGeometry shape, bool persistChanges, AchseModificationAction modificationAction = AchseModificationAction.Change) { Dictionary <AchsenReferenz, GeometryTransformerResult> ret = new Dictionary <AchsenReferenz, GeometryTransformerResult>(); foreach (AchsenReferenz referenz in currententity.AchsenReferenzen.ToList()) { ILineString oldRefGeometry = (ILineString)referenz.Shape; ILineString newSegmentGeometry = (ILineString)shape; GeometryTransformer gt = new GeometryTransformer(oldRefGeometry, newSegmentGeometry); GeometryTransformerResult result = gt.Transform(); if (result.ResultState != GeometryTransformerResultState.Success || !result.NewRefGeometry.EqualsExact(oldRefGeometry)) { ret.Add(referenz, result); } } //check if strabs are overlapping other strabs foreach (var pair in ret.Where(p => p.Key.ReferenzGruppe.StrassenabschnittGIS != null && p.Value.ResultState == GeometryTransformerResultState.Success).ToList()) { IEnumerable <AchsenReferenz> strabsar = pair.Key.AchsenSegment.AchsenReferenzen.Where(ar => ar.Id != pair.Key.Id && ar.ReferenzGruppe.StrassenabschnittGIS != null); foreach (AchsenReferenz strabref in strabsar) { IGeometry currentstrabref = strabref.Shape; bool exists = true; KeyValuePair <AchsenReferenz, GeometryTransformerResult> newZabref = ret.Where(p => p.Key.Id.Equals(strabref.Id)).SingleOrDefault(); if (!newZabref.Equals(default(KeyValuePair <AchsenReferenz, GeometryTransformerResult>))) { currentstrabref = newZabref.Value.NewRefGeometry; exists = newZabref.Value.ResultState == GeometryTransformerResultState.Success; } if (exists) { if (!gisService.CheckOverlapp(new List <IGeometry>() { currentstrabref }, pair.Value.NewRefGeometry)) { ret[pair.Key] = new GeometryTransformerResult(GeometryTransformerResultState.FailedWouldBeOutside, pair.Value.NewRefGeometry); } } } } //check if zabs still within strabs and update results if not, ensure zabs are not overlapping others foreach (var pair in ret.Where(p => p.Key.ReferenzGruppe.ZustandsabschnittGIS != null && p.Value.ResultState == GeometryTransformerResultState.Success).ToList()) { ZustandsabschnittGIS zab = pair.Key.ReferenzGruppe.ZustandsabschnittGIS; if (zab != null && pair.Value.ResultState == GeometryTransformerResultState.Success) { IEnumerable <AchsenReferenz> strabrefs = ret.Where(p => p.Key.ReferenzGruppe.StrassenabschnittGIS != null && p.Key.ReferenzGruppe.StrassenabschnittGIS.Id == zab.StrassenabschnittGIS.Id && p.Value.ResultState == GeometryTransformerResultState.Success).Select(p => p.Key).ToList(); IList <IGeometry> zabrefs = new List <IGeometry>() { pair.Value.NewRefGeometry }; foreach (AchsenReferenz achsref in strabrefs) { bool isWithin = false; if (ret[achsref].ResultState == GeometryTransformerResultState.Success) { isWithin = isWithin || gisService.CheckGeometriesIsInControlGeometry(zabrefs, ret[achsref].NewRefGeometry); } if (!isWithin) { ret[pair.Key] = new GeometryTransformerResult(GeometryTransformerResultState.FailedWouldBeOutside, pair.Value.NewRefGeometry); } } IEnumerable <AchsenReferenz> allzabrefs = zab.StrassenabschnittGIS.Zustandsabschnitten.SelectMany(z => z.ReferenzGruppe.AchsenReferenzen).Where(ar => !ar.Id.Equals(pair.Key.Id)); foreach (AchsenReferenz zabref in allzabrefs) { IGeometry currentzabref = zabref.Shape; bool exists = true; KeyValuePair <AchsenReferenz, GeometryTransformerResult> newZabref = ret.Where(p => p.Key.Id.Equals(zabref.Id)).SingleOrDefault(); if (!newZabref.Equals(default(KeyValuePair <AchsenReferenz, GeometryTransformerResult>))) { currentzabref = newZabref.Value.NewRefGeometry; exists = newZabref.Value.ResultState == GeometryTransformerResultState.Success; } if (exists) { if (!gisService.CheckOverlapp(new List <IGeometry>() { currentzabref }, pair.Value.NewRefGeometry)) { ret[pair.Key] = new GeometryTransformerResult(GeometryTransformerResultState.FailedWouldBeOutside, pair.Value.NewRefGeometry); } } } } } if (persistChanges) { foreach (var pair in ret) { this.UpdateAchsenReferenz(pair.Key, pair.Value, modificationAction == AchseModificationAction.Delete); } } return(ret.Keys.Select(k => k.Id).ToList()); }
public static IList <StrassenabschnittGIS> GenerateStrassenabschnittGIS(ISession session, ErfassungsPeriod currentPeriod, IList <AchsenSegment> achsensegmente) { var belastungskategories = session.Query <Belastungskategorie>().ToList(); var Massnahmen = session.Query <MassnahmenvorschlagKatalog>().Where(mvk => mvk.ErfassungsPeriod.Id == currentPeriod.Id).ToList(); Random rnd = new Random(); int achsensegmente_count = achsensegmente.Count; var generator = new RandomGenerator(); var strassenabschnittBuilder = Builder <StrassenabschnittGIS> .CreateListOfSize(achsensegmente_count) .All() .With(s => s.Belastungskategorie = Pick <Belastungskategorie> .RandomItemFrom(belastungskategories)) .With(s => s.Mandant = currentPeriod.Mandant) .With(s => s.ErfassungsPeriod = currentPeriod) .With(s => s.Strassenname = generator.Phrase(20)) .With(s => s.IsLocked = false) .With(s => s.Trottoir = Pick <TrottoirTyp> .RandomItemFrom(Enum.GetValues(typeof(TrottoirTyp)).Cast <TrottoirTyp>().ToList())); var strassenabschnitte = strassenabschnittBuilder.Build(); var pageSize = 1; var index = 0; foreach (var strassenabschnitt in strassenabschnitte) { strassenabschnitt.Shape = achsensegmente[index].Shape; IGeometry shape = strassenabschnitt.Shape; foreach (Coordinate coord in shape.Coordinates) { coord.Z = double.NaN; } switch (strassenabschnitt.Trottoir) { case TrottoirTyp.Links: strassenabschnitt.BreiteTrottoirLinks = (decimal)rnd.NextDouble() + 1; break; case TrottoirTyp.Rechts: strassenabschnitt.BreiteTrottoirRechts = (decimal)rnd.NextDouble() + 1; break; case TrottoirTyp.BeideSeiten: strassenabschnitt.BreiteTrottoirLinks = (decimal)rnd.NextDouble() + 1; strassenabschnitt.BreiteTrottoirRechts = (decimal)rnd.NextDouble() + 1; break; case TrottoirTyp.NochNichtErfasst: case TrottoirTyp.KeinTrottoir: default: break; } LengthIndexedLine indexedLine = new LengthIndexedLine(shape); strassenabschnitt.Laenge = Convert.ToDecimal(Math.Round(indexedLine.EndIndex, 1)); strassenabschnitt.ReferenzGruppe = new ReferenzGruppe(); strassenabschnitt.ReferenzGruppe.StrassenabschnittGISList.Add(strassenabschnitt); AchsenReferenz achsenreferenz = new AchsenReferenz(); achsenreferenz.ReferenzGruppe = strassenabschnitt.ReferenzGruppe; achsenreferenz.AchsenSegment = achsensegmente[index]; achsenreferenz.Shape = achsensegmente[index].Shape; achsenreferenz.ReferenzGruppe = strassenabschnitt.ReferenzGruppe; strassenabschnitt.ReferenzGruppe.AddAchsenReferenz(achsenreferenz); double linelength = indexedLine.EndIndex; for (int i = 0; i < pageSize; i++) { ZustandsabschnittGIS zustandsabschnitt = new ZustandsabschnittGIS(); zustandsabschnitt.StrassenabschnittGIS = strassenabschnitt; zustandsabschnitt.ReferenzGruppe = new ReferenzGruppe(); zustandsabschnitt.ReferenzGruppe.ZustandsabschnittGISList.Add(zustandsabschnitt); AchsenReferenz achsenreferenzzustandsabschnitt = new AchsenReferenz(); achsenreferenzzustandsabschnitt.ReferenzGruppe = zustandsabschnitt.ReferenzGruppe; achsenreferenzzustandsabschnitt.AchsenSegment = achsensegmente[index]; IGeometry subline = indexedLine.ExtractLine(linelength / pageSize * i, linelength / pageSize * (i + 1)); achsenreferenzzustandsabschnitt.Shape = subline; zustandsabschnitt.Shape = subline; zustandsabschnitt.Laenge = decimal.Parse(new LengthIndexedLine(subline).EndIndex.ToString()); zustandsabschnitt.Zustandsindex = Pick <decimal> .RandomItemFrom(new List <decimal> { 0, 1, 2, 3, 4, 5 }); zustandsabschnitt.Erfassungsmodus = ZustandsErfassungsmodus.Manuel; achsenreferenzzustandsabschnitt.ReferenzGruppe = zustandsabschnitt.ReferenzGruppe; zustandsabschnitt.ReferenzGruppe.AddAchsenReferenz(achsenreferenzzustandsabschnitt); zustandsabschnitt.Aufnahmedatum = DateTime.Now.Date; zustandsabschnitt.Aufnahmeteam = generator.Phrase(20); zustandsabschnitt.Bemerkung = generator.Phrase(40); zustandsabschnitt.BezeichnungVon = strassenabschnitt.BezeichnungVon + generator.Phrase(10); zustandsabschnitt.BezeichnungBis = strassenabschnitt.BezeichnungBis + generator.Phrase(10); strassenabschnitt.Zustandsabschnitten.Add(zustandsabschnitt); zustandsabschnitt.MassnahmenvorschlagFahrbahn = Pick <MassnahmenvorschlagKatalog> .RandomItemFrom(Massnahmen.Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Fahrbahn && mvk.Belastungskategorie.Id == strassenabschnitt.Belastungskategorie.Id).ToList()); zustandsabschnitt.DringlichkeitFahrbahn = Pick <DringlichkeitTyp> .RandomItemFrom(Enum.GetValues(typeof(DringlichkeitTyp)).Cast <DringlichkeitTyp>().ToList()); switch (strassenabschnitt.Trottoir) { case TrottoirTyp.Links: zustandsabschnitt.MassnahmenvorschlagTrottoirLinks = Pick <MassnahmenvorschlagKatalog> .RandomItemFrom(Massnahmen.Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Trottoir && mvk.Belastungskategorie.Id == strassenabschnitt.Belastungskategorie.Id).ToList()); zustandsabschnitt.ZustandsindexTrottoirLinks = Pick <ZustandsindexTyp> .RandomItemFrom(Enum.GetValues(typeof(ZustandsindexTyp)).Cast <ZustandsindexTyp>().ToList()); zustandsabschnitt.DringlichkeitTrottoirLinks = Pick <DringlichkeitTyp> .RandomItemFrom(Enum.GetValues(typeof(DringlichkeitTyp)).Cast <DringlichkeitTyp>().ToList()); break; case TrottoirTyp.Rechts: zustandsabschnitt.MassnahmenvorschlagTrottoirRechts = Pick <MassnahmenvorschlagKatalog> .RandomItemFrom(Massnahmen.Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Trottoir && mvk.Belastungskategorie.Id == strassenabschnitt.Belastungskategorie.Id).ToList()); zustandsabschnitt.ZustandsindexTrottoirRechts = Pick <ZustandsindexTyp> .RandomItemFrom(Enum.GetValues(typeof(ZustandsindexTyp)).Cast <ZustandsindexTyp>().ToList()); zustandsabschnitt.DringlichkeitTrottoirRechts = Pick <DringlichkeitTyp> .RandomItemFrom(Enum.GetValues(typeof(DringlichkeitTyp)).Cast <DringlichkeitTyp>().ToList()); break; case TrottoirTyp.BeideSeiten: zustandsabschnitt.MassnahmenvorschlagTrottoirLinks = Pick <MassnahmenvorschlagKatalog> .RandomItemFrom(Massnahmen.Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Trottoir && mvk.Belastungskategorie.Id == strassenabschnitt.Belastungskategorie.Id).ToList()); zustandsabschnitt.MassnahmenvorschlagTrottoirRechts = Pick <MassnahmenvorschlagKatalog> .RandomItemFrom(Massnahmen.Where(mvk => mvk.KatalogTyp == MassnahmenvorschlagKatalogTyp.Trottoir && mvk.Belastungskategorie.Id == strassenabschnitt.Belastungskategorie.Id).ToList()); zustandsabschnitt.ZustandsindexTrottoirLinks = Pick <ZustandsindexTyp> .RandomItemFrom(Enum.GetValues(typeof(ZustandsindexTyp)).Cast <ZustandsindexTyp>().ToList()); zustandsabschnitt.ZustandsindexTrottoirRechts = Pick <ZustandsindexTyp> .RandomItemFrom(Enum.GetValues(typeof(ZustandsindexTyp)).Cast <ZustandsindexTyp>().ToList()); zustandsabschnitt.DringlichkeitTrottoirLinks = Pick <DringlichkeitTyp> .RandomItemFrom(Enum.GetValues(typeof(DringlichkeitTyp)).Cast <DringlichkeitTyp>().ToList()); zustandsabschnitt.DringlichkeitTrottoirRechts = Pick <DringlichkeitTyp> .RandomItemFrom(Enum.GetValues(typeof(DringlichkeitTyp)).Cast <DringlichkeitTyp>().ToList()); break; case TrottoirTyp.NochNichtErfasst: case TrottoirTyp.KeinTrottoir: default: break; } session.Save(zustandsabschnitt); } session.Save(strassenabschnitt); index++; } var test = strassenabschnitte.Where(s => s.IsLocked == true); return(strassenabschnitte); }