示例#1
0
        public bool ZustandsabschnittWithinStrassenabschnitt(StrassenabschnittGISModel strassenabschnittgismodel)
        {
            //check if all zabs associated with the strabs still fit on it

            //dont check new strabs
            Guid strassenabschnittsid = strassenabschnittgismodel.Id;

            if (strassenabschnittsid != Guid.Empty)
            {
                //get the shape of the strabs
                IGeometry neu_strabsShape = strassenabschnittgismodel.Shape;
                neu_strabsShape.SRID = GisConstants.SRID;

                //get all zabs on the strabs
                IQueryable <ZustandsabschnittGIS> zustandsabschnitte = zustandsabschnittGISService.GetCurrentEntities();
                zustandsabschnitte = zustandsabschnitte.Where(zabs => zabs.StrassenabschnittGIS.Id == strassenabschnittsid);

                foreach (ZustandsabschnittGIS zabs in zustandsabschnitte)
                {
                    if (!gisService.CheckGeometriesIsInControlGeometry(zabs.ReferenzGruppe.AchsenReferenzen, neu_strabsShape))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#2
0
 public bool IsRealisierteMassnahmeOnAchsensegment(RealisierteMassnahmeGISModel realisierteMassnahmeGISModel)
 {
     foreach (var ar in realisierteMassnahmeGISModel.ReferenzGruppeModel.AchsenReferenzenModel)
     {
         var achse = achsenSegmentService.GetById(ar.AchsenSegment);
         if (!gisService.CheckGeometriesIsInControlGeometry(new List <AchsenReferenzModel> {
             ar
         }, achse.Shape))
         {
             return(false);
         }
     }
     return(true);
 }
示例#3
0
        public bool IsZustandsabschnittWithinStrassenabschnitt(ZustandsabschnittGISModel zustandsabschnittGISModel)
        {
            Guid strabsid = zustandsabschnittGISModel.StrassenabschnittGIS;
            StrassenabschnittGIS        strab = GetEntityById <StrassenabschnittGIS>(strabsid);
            IList <AchsenReferenzModel> neueAchsenreferenzen = zustandsabschnittGISModel.ReferenzGruppeModel.AchsenReferenzenModel;

            return(gisService.CheckGeometriesIsInControlGeometry(neueAchsenreferenzen, strab.Shape));
        }
示例#4
0
        private bool IsZustandsabschnittWithinStrassenabschnitt(ZustandsabschnittGISDTO zustandsabschnittGISDTO)
        {
            //string geojsonstring = zustandsabschnittGISModel.FeatureGeoJSONString;
            Guid strabsid = zustandsabschnittGISDTO.StrassenabschnittGIS;
            StrassenabschnittGIS      strab = GetEntityById <StrassenabschnittGIS>(strabsid);
            IList <AchsenReferenzDTO> neue_achsenreferenzen = zustandsabschnittGISDTO.ReferenzGruppeDTO.AchsenReferenzenDTO;

            return(gisService.CheckGeometriesIsInControlGeometry(neue_achsenreferenzen, strab.Shape));
        }
        public bool Validate(MassnahmenvorschlagTeilsystemeGISModel model)
        {
            foreach (var ar in model.ReferenzGruppeModel.AchsenReferenzenModel)
            {
                IGeometry achsensegment = achsenSegmentService.GetById(ar.AchsenSegment).Shape;

                if (!gisService.CheckGeometriesIsInControlGeometry(new List <AchsenReferenzModel>()
                {
                    ar
                }, achsensegment))
                {
                    return(false);
                }
            }
            return(true);
        }
示例#6
0
        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());
        }