Example #1
0
        private bool CheckOverlap(ZustandsabschnittGISDTO zustandsabschnittGISDTO, IList <Guid> deletedZustandsabschnitte, IList <ZustandsabschnittGISDTO> zustandsabschnitteToValidate)
        {
            //check for overlaps with other strabs on the same achssegment
            IList <AchsenReferenzDTO> neue_achsenreferenzen = zustandsabschnittGISDTO.ReferenzGruppeDTO.AchsenReferenzenDTO;
            //var test2 = GeoJSONReader.ReadFeatureWithID(new StringReader(geojsonstring)).Attributes;
            //Guid strabsid = zustandsabschnittGISDTO.StrassenabschnittGIS;
            //StrassenabschnittGIS strab = GetEntityById<StrassenabschnittGIS>(zustandsabschnittGISDTO.StrassenabschnittGIS);
            var other_Zustandsabschnitte    = zustandsabschnitteToValidate.Where(za => za.Id != zustandsabschnittGISDTO.Id);
            var other_ZustandsabschnitteIDs = other_Zustandsabschnitte.Select(za => za.Id);
            var other_AchsenreferenzenDTOs  = other_Zustandsabschnitte.Select(za => za.ReferenzGruppeDTO.AchsenReferenzenDTO).SelectMany(ar => ar);
            var other_Achsenreferenzen      = new List <AchsenReferenz>();

            foreach (var dto in other_AchsenreferenzenDTOs)
            {
                other_Achsenreferenzen.Add(dataTransferObjectServiceMappingEngine.Translate <AchsenReferenzDTO, AchsenReferenz>(dto));
            }
            foreach (var neue_achsenreferenz in neue_achsenreferenzen)
            {
                Guid achsensegmentID = neue_achsenreferenz.AchsenSegment;


                var alte_achsenreferenzen = achsenReferenzService.GetCurrentEntities()
                                            .Where(r => r.AchsenSegment.Id == achsensegmentID).ToList();

                alte_achsenreferenzen = alte_achsenreferenzen.Where(r => r.ReferenzGruppe.ZustandsabschnittGIS != null

                                                                    && r.ReferenzGruppe.ZustandsabschnittGIS.ErfassungsPeriod.IsClosed == false
                                                                    //prevent selfcheck
                                                                    && r.ReferenzGruppe.ZustandsabschnittGIS.Id != zustandsabschnittGISDTO.Id
                                                                    //prevent check with zustandsabschnitte that are going to be deleted
                                                                    && !deletedZustandsabschnitte.Contains(r.ReferenzGruppe.ZustandsabschnittGIS.Id)
                                                                    //dont check the old geometries (they are replaced by the Geometries in zustandsabschnittetovalidate)
                                                                    && !other_ZustandsabschnitteIDs.Contains(r.ReferenzGruppe.ZustandsabschnittGIS.Id)
                                                                    ).ToList();
                var allOther_achsenreferenzen = alte_achsenreferenzen.Concat(other_Achsenreferenzen.Where(ar => ar.AchsenSegment.Id == neue_achsenreferenz.AchsenSegment));
                if (!gisService.CheckOverlapp(allOther_achsenreferenzen.ToList(), neue_achsenreferenz.Shape))
                {
                    return(false);
                }
            }
            return(true);
        }