//check for overlaps with other strabs or zabs on the same achssegment returns false if overlaps
        public bool ValidateOverlap(IAbschnittGISModelBase abschnitt)
        {
            IList <AchsenReferenzModel> neue_achsenreferenzen = abschnitt.ReferenzGruppeModel.AchsenReferenzenModel;

            foreach (var neue_achsenreferenz in neue_achsenreferenzen)
            {
                Guid achsensegmentID = neue_achsenreferenz.AchsenSegmentModel.Id;

                IList <AchsenReferenz> alteAchsenreferenzen = achsenReferenzService.GetCurrentEntities()
                                                              .Where(r => r.AchsenSegment.Id == achsensegmentID).ToList();

                if (abschnitt.GetType() == typeof(ZustandsabschnittGISModel))
                {
                    alteAchsenreferenzen = alteAchsenreferenzen.Where(r => r.ReferenzGruppe.ZustandsabschnittGIS != null &&
                                                                      r.ReferenzGruppe.ZustandsabschnittGIS.ErfassungsPeriod.IsClosed == false &&
                                                                      r.ReferenzGruppe.ZustandsabschnittGIS.Id != abschnitt.Id).ToList();
                }
                if (abschnitt.GetType() == typeof(StrassenabschnittGISModel))
                {
                    alteAchsenreferenzen = alteAchsenreferenzen.Where(r => r.ReferenzGruppe.StrassenabschnittGIS != null &&
                                                                      r.ReferenzGruppe.StrassenabschnittGIS.ErfassungsPeriod.IsClosed == false &&
                                                                      r.ReferenzGruppe.StrassenabschnittGIS.Id != abschnitt.Id).ToList();
                }



                if (!gisService.CheckOverlapp(alteAchsenreferenzen.ToList(), neue_achsenreferenz.Shape))
                {
                    return(false);
                }
            }
            return(true);
        }
Beispiel #2
0
        public bool isAbschnittGISModelBaseValid(IAbschnittGISModelBase model, string geoJsonString)
        {
            IAbschnittGISModelBase parsedModel = this.GenerateModelFromGeoJsonString(model);
            IGeometry modelShape = parsedModel.Shape;

            var referenzGruppeModel = parsedModel.ReferenzGruppeModel;

            double achsRefLength = 0;

            foreach (var achsRef in referenzGruppeModel.AchsenReferenzenModel)
            {
                achsRefLength += achsRef.Shape.Length;
            }

            return(Math.Abs(modelShape.Length - achsRefLength) <= 0.5 && modelShape.Length != 0);
        }
Beispiel #3
0
        public IAbschnittGISModelBase GenerateModelFromGeoJsonString(IAbschnittGISModelBase model)
        {
            string geoJSONString        = model.FeatureGeoJSONString;
            List <FeatureWithID> childs = GeoJSONReader.ReadFeatureWithID(new StringReader(model.FeatureGeoJSONString)).Attributes[geoJSONAttribute_childs] as List <FeatureWithID>;
            ReferenzGruppeModel  referenzGruppeModel = new ReferenzGruppeModel();

            foreach (FeatureWithID child in childs)
            {
                AchsenReferenzModel newAchsenref = new AchsenReferenzModel();
                newAchsenref.AchsenSegmentModel = achsenSegmentService.GetById(Guid.Parse(child.Attributes[geoJSONAttribute_AchsenSegmentId].ToString()));
                newAchsenref.Shape      = child.Geometry;
                newAchsenref.Shape.SRID = GisConstants.SRID;

                referenzGruppeModel.AddAchsenReferenz(newAchsenref);
            }


            model.Shape               = GeoJSONReader.ReadFeatureWithID(new StringReader(model.FeatureGeoJSONString)).Geometry;
            model.Shape.SRID          = GisConstants.SRID;
            model.ReferenzGruppeModel = referenzGruppeModel;
            return(model);
        }