Example #1
0
 private void RegisterConflict(AchsenReferenz achsRef, AchsenUpdateConflict conflict)
 {
     if (Register(achsRef))
     {
         items[GetAbschnittGISBase(achsRef)].conflicts.Add(conflict);
     }
 }
Example #2
0
        public void AngenommenDieFolgendenZustandsabschnitteGISExistieren(Table table)
        {
            var reader = GetObjectReaderConfigurationFor <ZustandsabschnittGIS>()
                         .PropertyAliasFor(e => e.ErfassungsPeriod, "Jahr")
                         .PropertyAliasFor(e => e.StrassenabschnittGIS, "Strassenname")
                         .ConverterFor(e => e.Mandant, (s, p) => new Mandant())
                         .ConverterFor(e => e.StrassenabschnittGIS, (s, p) => new StrassenabschnittGIS())
                         .ConverterFor(e => e.ErfassungsPeriod, (s, p) => new ErfassungsPeriod());

            var strassenabschnitts = entitesProErfassungsmodus[NetzErfassungsmodus.Gis][typeof(StrassenabschnittGIS)].Cast <StrassenabschnittGIS>().ToArray();

            foreach (var zustandabscnitt in reader.GetObjectReader().GetObjectListWithRow <ZustandsabschnittGIS>(table))
            {
                var sa = strassenabschnitts.Single(s =>
                                                   s.Mandant.MandantName == zustandabscnitt.Item1["Mandant"] &&
                                                   s.ErfassungsPeriod.Erfassungsjahr.Year.ToString() == zustandabscnitt.Item1["Jahr"] &&
                                                   s.Strassenname == zustandabscnitt.Item1["Strassenname"]
                                                   );
                zustandabscnitt.Item2.StrassenabschnittGIS = sa;

                var achsenReferenz = new AchsenReferenz();
                achsenReferenz.AchsenSegment = sa.ReferenzGruppe.AchsenReferenzen[0].AchsenSegment;
                var referenzGruppe = new ReferenzGruppe();
                zustandabscnitt.Item2.ReferenzGruppe = referenzGruppe;
                referenzGruppe.ZustandsabschnittGISList.Add(zustandabscnitt.Item2);
                achsenReferenz.ReferenzGruppe = referenzGruppe;
                referenzGruppe.AchsenReferenzen.Add(achsenReferenz);
                sa.Zustandsabschnitten.Add(zustandabscnitt.Item2);
            }
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        public static void GenerateRealisierteMassnahmeGIS(ISession session, ErfassungsPeriod currentPeriod)
        {
            var achsensegmente = session.Query <AchsenSegment>().ToList();

            achsensegmente = achsensegmente.Where(r => r.ErfassungsPeriod == currentPeriod).Take(RealisierteMassnahmeGISCount).ToList();
            int achsensegmente_count       = achsensegmente.Count;
            var generator                  = new RandomGenerator();
            var massnahmenvorschlagBuilder = Builder <RealisierteMassnahmeGIS> .CreateListOfSize(achsensegmente_count)
                                             .All()
                                             .With(s => s.Mandant      = currentPeriod.Mandant)
                                             .With(s => s.Beschreibung = generator.Phrase(20))
                                             .With(s => s.Projektname  = generator.Phrase(20));

            var realisierteMassnahmenList = massnahmenvorschlagBuilder.Build();
            var index = 0;

            foreach (var realisierteMassnahme in realisierteMassnahmenList)
            {
                realisierteMassnahme.Shape          = achsensegmente[index].Shape;
                realisierteMassnahme.ReferenzGruppe = new ReferenzGruppe();
                realisierteMassnahme.ReferenzGruppe.Erfassungsperiod = currentPeriod;
                realisierteMassnahme.ReferenzGruppe.Mandant          = currentPeriod.Mandant;
                realisierteMassnahme.ReferenzGruppe.RealisierteMassnahmeGISList.Add(realisierteMassnahme);
                var ar = new AchsenReferenz();
                ar.Mandandt       = currentPeriod.Mandant;
                ar.Shape          = achsensegmente[index].Shape;
                ar.AchsenSegment  = achsensegmente[index];
                ar.ReferenzGruppe = realisierteMassnahme.ReferenzGruppe;
                realisierteMassnahme.ReferenzGruppe.AchsenReferenzen.Add(ar);
                realisierteMassnahme.Shape = achsensegmente[index].Shape;
                session.Save(realisierteMassnahme);
                index++;
            }
        }
        public Feature CreateAchsenReferenzFeature(AchsenReferenz achsenreferenz, Guid inspektionsrouteid)
        {
            Feature          arFeature      = new Feature();
            IAttributesTable saArAttributes = new AttributesTable();

            arFeature.Geometry = achsenreferenz.Shape;

            //ID
            saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.AchsenreferenzID), achsenreferenz.Id.ToString());
            //AchsenID
            saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.AchsensegmentID), achsenreferenz.AchsenSegment.Id.ToString());
            //ReferenzgruppeID
            saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.ReferenzgruppeID), achsenreferenz.ReferenzGruppe.Id.ToString());
            //inspektionsRouteID
            saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.InspektionsRouteID), inspektionsrouteid.ToString());

            //ZustandsabschnittID if Achsenreferenz belongs to a Zustandsabschnitt else StrassenabschnittsID (belongs to Strassenabschnitt)
            if (achsenreferenz.ReferenzGruppe.ZustandsabschnittGIS != null)
            {
                saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.ZustandsabschnittID), achsenreferenz.ReferenzGruppe.ZustandsabschnittGIS.Id.ToString());
                saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.StrassenabschnittGISID), achsenreferenz.ReferenzGruppe.ZustandsabschnittGIS.StrassenabschnittGIS.Id.ToString());
            }
            else if (achsenreferenz.ReferenzGruppe.StrassenabschnittGIS != null)
            {
                saArAttributes.AddAttribute(checkStringLengthforDBF(CheckOutGISDefaults.StrassenabschnittGISID), achsenreferenz.ReferenzGruppe.StrassenabschnittGIS.Id.ToString());
            }


            arFeature.Attributes = saArAttributes;
            return(arFeature);
        }
Example #6
0
 private IAbschnittGISBase GetAbschnittGISBase(AchsenReferenz achsRef)
 {
     if (achsRef.ReferenzGruppe.StrassenabschnittGIS != null)
     {
         return(achsRef.ReferenzGruppe.StrassenabschnittGIS);
     }
     else if (achsRef.ReferenzGruppe.ZustandsabschnittGIS != null)
     {
         return(achsRef.ReferenzGruppe.ZustandsabschnittGIS);
     }
     else if (achsRef.ReferenzGruppe.KoordinierteMassnahmeGIS != null)
     {
         return(achsRef.ReferenzGruppe.KoordinierteMassnahmeGIS);
     }
     else if (achsRef.ReferenzGruppe.MassnahmenvorschlagTeilsystemeGIS != null)
     {
         return(achsRef.ReferenzGruppe.MassnahmenvorschlagTeilsystemeGIS);
     }
     else if (achsRef.ReferenzGruppe.RealisierteMassnahmeGIS != null)
     {
         return(achsRef.ReferenzGruppe.RealisierteMassnahmeGIS);
     }
     else
     {
         return(null);
     }
 }
Example #7
0
        private AchsenReferenz PrepareAchsenreferenz(AchsenReferenz achsenreferenzToCopy)
        {
            AchsenReferenz copiedAchsensreferenz = entityServiceMappingEngine.Translate <AchsenReferenz, AchsenReferenz>(achsenreferenzToCopy);

            copiedAchsensreferenz.Mandandt         = CurrentMandant;
            copiedAchsensreferenz.Erfassungsperiod = CurrentErfassungsPeriod;
            return(copiedAchsensreferenz);
        }
Example #8
0
        public void SplitStrassenabschnittGISAtXY(Guid strassenabschnittId, string x, string y)
        {
            StrassenabschnittGIS strassenabschnittToSplit = GetEntityById(strassenabschnittId);

            //check whether the strassenabschnitt (inspektionsroute) is checked out (=locked)
            if (strassenabschnittToSplit.IsLocked)
            {
                return;
            }

            //1. find achsenref. to split
            IGeometry      splitPoint             = GISService.CreateGeometryFactory().CreatePoint(new Coordinate(double.Parse(x, System.Globalization.NumberFormatInfo.InvariantInfo), double.Parse(y, System.Globalization.NumberFormatInfo.InvariantInfo), 0));
            AchsenReferenz achsenreferenceToSplit = gisService.GetNearestGeometry(splitPoint, strassenabschnittToSplit.ReferenzGruppe.AchsenReferenzen);

            //2. split achsenref
            LengthIndexedLine line   = new LengthIndexedLine(achsenreferenceToSplit.Shape);
            IGeometry         split1 = line.ExtractLine(0, line.IndexOf(splitPoint.Coordinate));
            IGeometry         split2 = line.ExtractLine(line.IndexOf(splitPoint.Coordinate), line.EndIndex);

            //create new strassenabschnitte
            StrassenabschnittGIS copiedStrassenabschnittGIS1 = PrepareNewStrassenabschnitt(strassenabschnittToSplit, achsenreferenceToSplit, split1);
            StrassenabschnittGIS copiedStrassenabschnittGIS2 = PrepareNewStrassenabschnitt(strassenabschnittToSplit, achsenreferenceToSplit, split2);

            //3. relate other achsenrefs to the new two references
            foreach (AchsenReferenz achsref in strassenabschnittToSplit.ReferenzGruppe.AchsenReferenzen.Where(ac => !ac.Equals(achsenreferenceToSplit)))
            {
                if (achsref.Shape.Distance(split1) <= achsref.Shape.Distance(split2))
                {
                    copiedStrassenabschnittGIS1.ReferenzGruppe.AddAchsenReferenz(PrepareAchsenreferenz(achsref));
                    copiedStrassenabschnittGIS1.Shape = copiedStrassenabschnittGIS1.Shape.Union(achsref.Shape);
                }
                else
                {
                    copiedStrassenabschnittGIS2.ReferenzGruppe.AddAchsenReferenz(PrepareAchsenreferenz(achsref));
                    copiedStrassenabschnittGIS2.Shape = copiedStrassenabschnittGIS2.Shape.Union(achsref.Shape);
                }
            }

            copiedStrassenabschnittGIS1.Laenge = getLength(copiedStrassenabschnittGIS1);
            copiedStrassenabschnittGIS2.Laenge = getLength(copiedStrassenabschnittGIS2);


            //update inspektionsroute
            strassenabschnittToSplit.InspektionsRtStrAbschnitte.ForEach(s => s.InspektionsRouteGIS.AddStrassenabschnittGIS(copiedStrassenabschnittGIS1));
            strassenabschnittToSplit.InspektionsRtStrAbschnitte.ForEach(s => s.InspektionsRouteGIS.AddStrassenabschnittGIS(copiedStrassenabschnittGIS2));
            strassenabschnittToSplit.InspektionsRtStrAbschnitte.ForEach(s => s.InspektionsRouteGIS.RemoveStrassenabschnittGIS(strassenabschnittToSplit));


            //5. save/delete splitted strassenabschnitte
            Delete(strassenabschnittToSplit);

            CreateEntity(copiedStrassenabschnittGIS1);
            CreateEntity(copiedStrassenabschnittGIS2);
        }
Example #9
0
        private void UpdateAchsenReferenz(AchsenReferenz referenz, ILineString iLineString)
        {
            referenz.Shape = iLineString;
            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
            {
                this.UpdateAbschnitt(abschnitt);
            }
        }
Example #10
0
        public void AngenommenDieFolgendenStrassenabschnitteGUSExistieren(Table table)
        {
            using (var scope = new NHibernateSpecflowScope())
            {
                foreach (var currentErfassungsperiod in scope.Session.Query <ErfassungsPeriod>())
                {
                    var achse = new Achse
                    {
                        VersionValidFrom = DateTime.Now,
                        ErfassungsPeriod = currentErfassungsperiod
                    };
                    var segment = new AchsenSegment();
                    segment.Achse            = achse;
                    segment.ErfassungsPeriod = currentErfassungsperiod;
                    achse.AchsenSegmente.Add(segment);
                    scope.Session.Save(segment);
                    scope.Session.Save(achse);
                }
            }

            var reader = GetObjectReaderConfigurationFor <StrassenabschnittGIS>()
                         .PropertyAliasFor(e => e.ErfassungsPeriod, "Jahr")
                         .ConverterFor(e => e.Belastungskategorie, (s, p) => ScenarioContextWrapper.CurrentScope.Session.Query <Belastungskategorie>().ToArray().Single(i => i.Typ == s))
                         .ConverterFor(e => e.Mandant, (s, p) => new Mandant {
                MandantName = s
            })
                         .ConverterFor(e => e.ErfassungsPeriod, (s, p) => new ErfassungsPeriod {
                Erfassungsjahr = new DateTime(int.Parse(s), 1, 1)
            });

            using (var nhScope = new NHibernateSpecflowScope())
            {
                entitesProErfassungsmodus[NetzErfassungsmodus.Gis][typeof(StrassenabschnittGIS)] = reader.GetObjectReader().GetObjectList <StrassenabschnittGIS>(table);
                foreach (StrassenabschnittGIS strassenabschnitt in entitesProErfassungsmodus[NetzErfassungsmodus.Gis][typeof(StrassenabschnittGIS)])
                {
                    var segment =
                        nhScope.Session.Query <AchsenSegment>().First(a => !a.ErfassungsPeriod.IsClosed &&
                                                                      a.ErfassungsPeriod.Mandant.MandantName == strassenabschnitt.Mandant.MandantName);
                    var achsenReferenz = new AchsenReferenz();
                    achsenReferenz.AchsenSegment = segment;
                    var referenzGruppe = new ReferenzGruppe();
                    strassenabschnitt.ReferenzGruppe = referenzGruppe;
                    referenzGruppe.StrassenabschnittGISList.Add(strassenabschnitt);
                    achsenReferenz.ReferenzGruppe = referenzGruppe;
                    referenzGruppe.AchsenReferenzen.Add(achsenReferenz);
                }
            }
        }
Example #11
0
        protected override void UpdateEntityFieldsInternal(ReferenzGruppeModel model, ReferenzGruppe entity)
        {
            List <AchsenReferenzModel> new_AchsenReferenzen = new List <AchsenReferenzModel>();

            foreach (AchsenReferenzModel achsenReferenzModel in model.AchsenReferenzenModel)
            {
                AchsenReferenz ar = new AchsenReferenz();
                ar.ReferenzGruppe = entity;
                ar.Shape          = achsenReferenzModel.Shape;
                ar.AchsenSegment  = GetEntityById <AchsenSegment>(achsenReferenzModel.AchsenSegment);
                entity.AddAchsenReferenz(ar);
            }


            model.AchsenReferenzenModel = new_AchsenReferenzen;
            base.UpdateEntityFieldsInternal(model, entity);
        }
Example #12
0
        protected override void UpdateEntityFieldsInternal(ReferenzGruppeDTO DataTransferObject, ReferenzGruppe entity)
        {
            List <AchsenReferenzDTO> new_AchsenReferenzen = new List <AchsenReferenzDTO>();

            foreach (AchsenReferenzDTO achsenReferenzDTO in DataTransferObject.AchsenReferenzenDTO)
            {
                AchsenReferenz ar = new AchsenReferenz();
                ar.ReferenzGruppe = entity;
                ar.Shape          = achsenReferenzDTO.Shape;
                ar.AchsenSegment  = GetEntityById <AchsenSegment>(achsenReferenzDTO.AchsenSegment);
                entity.AddAchsenReferenz(ar);
            }


            DataTransferObject.AchsenReferenzenDTO = new_AchsenReferenzen;
            base.UpdateEntityFieldsInternal(DataTransferObject, entity);
        }
Example #13
0
        public void AngenommenFurMandantExistierenFolgendeNetzinformationen(string mandant, Table table)
        {
            using (NHibernateSpecflowScope scope = new NHibernateSpecflowScope())
            {
                var strassenabschnittReader = GetStrassenabschnittGISReader();
                var strassenabschnitten     = strassenabschnittReader.GetObjectList <StrassenabschnittGIS>(table);
                ErfassungsPeriod currentErfassungsperiod = scope.GetCurrentErfassungsperiod(mandant);
                var achse = new Achse
                {
                    VersionValidFrom = DateTime.Now,
                    ErfassungsPeriod = currentErfassungsperiod
                };
                var segment = new AchsenSegment();
                segment.Achse            = achse;
                segment.ErfassungsPeriod = currentErfassungsperiod;
                achse.AchsenSegmente.Add(segment);
                scope.Session.Save(segment);
                scope.Session.Save(achse);

                foreach (var strassenabschnitt in strassenabschnitten)
                {
                    strassenabschnitt.Mandant = scope.GetMandant(mandant);

                    strassenabschnitt.ErfassungsPeriod = currentErfassungsperiod;
                    var achsenReferenz = new AchsenReferenz();
                    achsenReferenz.AchsenSegment = segment;
                    segment.AchsenReferenzen.Add(achsenReferenz);
                    scope.Session.Save(achsenReferenz);
                    var referenzGruppe = new ReferenzGruppe();
                    strassenabschnitt.ReferenzGruppe = referenzGruppe;
                    referenzGruppe.StrassenabschnittGISList.Add(strassenabschnitt);
                    achsenReferenz.ReferenzGruppe = referenzGruppe;
                    referenzGruppe.AchsenReferenzen.Add(achsenReferenz);
                    scope.Session.Save(referenzGruppe);
                    scope.Session.Save(strassenabschnitt);
                }
            }
        }
Example #14
0
        public static void GenerateMassnahmenTeilsystemeGIS(ISession session, ErfassungsPeriod currentPeriod)
        {
            var achsensegmente = session.Query <AchsenSegment>();

            var achsensegmentelist         = achsensegmente.Where(r => r.ErfassungsPeriod == currentPeriod).Take(MassnahmenTeilsystemeGISCount).ToList();
            int achsensegmente_count       = achsensegmentelist.Count;
            var generator                  = new RandomGenerator();
            var massnahmenvorschlagBuilder = Builder <MassnahmenvorschlagTeilsystemeGIS> .CreateListOfSize(achsensegmente_count)
                                             .All()
                                             .With(s => s.Mandant      = currentPeriod.Mandant)
                                             .With(s => s.Beschreibung = generator.Phrase(20))
                                             .With(s => s.Projektname  = generator.Phrase(20))
                                             .With(s => s.Teilsystem   = Pick <TeilsystemTyp> .RandomItemFrom(Enum.GetValues(typeof(TeilsystemTyp)).Cast <TeilsystemTyp>().ToList()))
                                             .With(s => s.Status       = Pick <StatusTyp> .RandomItemFrom(Enum.GetValues(typeof(StatusTyp)).Cast <StatusTyp>().ToList()));

            var massnahmenTeilsysteme = massnahmenvorschlagBuilder.Build();
            var index = 0;

            foreach (var massnahmenTeilsystem in massnahmenTeilsysteme)
            {
                massnahmenTeilsystem.Shape          = achsensegmentelist[index].Shape;
                massnahmenTeilsystem.ReferenzGruppe = new ReferenzGruppe();
                massnahmenTeilsystem.ReferenzGruppe.Erfassungsperiod = currentPeriod;
                massnahmenTeilsystem.ReferenzGruppe.Mandant          = currentPeriod.Mandant;
                massnahmenTeilsystem.ReferenzGruppe.MassnahmenvorschlagTeilsystemeGISList.Add(massnahmenTeilsystem);
                var ar = new AchsenReferenz();
                ar.Mandandt      = currentPeriod.Mandant;
                ar.Shape         = achsensegmentelist[index].Shape;
                ar.AchsenSegment = achsensegmentelist[index];
                massnahmenTeilsystem.ReferenzGruppe.AchsenReferenzen.Add(ar);

                session.Save(ar);
                session.Save(massnahmenTeilsystem.ReferenzGruppe);
                session.Save(massnahmenTeilsystem);
                index++;
            }
        }
Example #15
0
        /// <summary>
        /// Update a Achsenreferenz using a <code>GeometryTransformerResult</code>
        /// </summary>
        /// <param name="referenz">Achsenreferenz to update</param>
        /// <param name="result">Result of <seealso cref='GeometryTransformer.Transform()' />GeometryTransformer.Transform()</param>
        /// <param name="doDelete">Always delete Achsenreferenz even on <code>GeometryTransformerResultState.Success</code></param>
        private void UpdateAchsenReferenz(AchsenReferenz referenz, GeometryTransformerResult result, bool doDelete)
        {
            switch (result.ResultState)
            {
            case GeometryTransformerResultState.Success:
                if (doDelete)
                {
                    this.DeleteAchsenReferenz(referenz);
                }
                else
                {
                    this.UpdateAchsenReferenz(referenz, result.NewRefGeometry);
                }
                break;

            case GeometryTransformerResultState.FailedWouldBeTooShort:
            case GeometryTransformerResultState.FailedWouldBeOutside:
                this.DeleteAchsenReferenz(referenz);
                break;

            default:
                break;
            }
        }
Example #16
0
        private bool Register(AchsenReferenz achsRef)
        {
            IAbschnittGISBase abschnittGISBase = GetAbschnittGISBase(achsRef);

            if (abschnittGISBase == null)
            {
                return(false);
            }

            CheckIfLocked(abschnittGISBase);

            if (items.ContainsKey(abschnittGISBase))
            {
                return(true);
            }


            RegisteredItem rItem = new RegisteredItem();

            rItem.abschnittGISBase = abschnittGISBase;
            rItem.originalGeometry = abschnittGISBase.Shape;
            items.Add(abschnittGISBase, rItem);
            return(true);
        }
Example #17
0
 private void RemoveReference(AchsenReferenz reference)
 {
     reference.AchsenSegment.AchsenReferenzen.Remove(reference);
     reference.ReferenzGruppe.AchsenReferenzen.Remove(reference);
     session.Delete(reference);
 }
Example #18
0
        private StrassenabschnittGIS PrepareNewStrassenabschnitt(StrassenabschnittGIS strassenabschnittToCopy, AchsenReferenz achsenreferenzPart, IGeometry newGeometry)
        {
            StrassenabschnittGIS copiedStrassenabschnittGIS = entityServiceMappingEngine.Translate <StrassenabschnittGIS, StrassenabschnittGIS>(strassenabschnittToCopy);

            copiedStrassenabschnittGIS.ErfassungsPeriod = CurrentErfassungsPeriod;
            copiedStrassenabschnittGIS.Mandant          = CurrentMandant;
            copiedStrassenabschnittGIS.Shape            = newGeometry;

            //LineString line = newGeometry as LineString;
            //copiedStrassenabschnittGIS.Laenge = (decimal)Math.Round(line.Length,1);

            copiedStrassenabschnittGIS.ReferenzGruppe = new ReferenzGruppe {
                Mandant          = CurrentMandant,
                Erfassungsperiod = CurrentErfassungsPeriod,
            };

            achsenreferenzPart.Shape = newGeometry;
            copiedStrassenabschnittGIS.ReferenzGruppe.AchsenReferenzen.Add(PrepareAchsenreferenz(achsenreferenzPart));
            return(copiedStrassenabschnittGIS);
        }
Example #19
0
        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);
        }