예제 #1
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);
                }
            }
        }
예제 #2
0
 private void CheckIfLocked(IAbschnittGISBase abschnittGISBase)
 {
     if (abschnittGISBase is StrassenabschnittGIS)
     {
         StrassenabschnittGIS straGis = (StrassenabschnittGIS)abschnittGISBase;
         if (straGis.IsLocked)
         {
             throw new AchsenUpdateAbschnittLockedException();
         }
     }
 }
예제 #3
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);
            }
        }
예제 #4
0
        public string GenerateGeoJsonStringFromEntity(IAbschnittGISBase entity)
        {
            if (entity == null)
            {
                return("{ \"type\": \"FeatureCollection\", \"features\": []}");
            }


            FeatureWithID feature = getFeatureWithId(entity);
            TextWriter    sw      = new StringWriter();

            GeoJSONWriter.WriteWithID(feature, sw);
            string geoJSONstring = sw.ToString();

            return(geoJSONstring);
        }
예제 #5
0
        private void UpdateGeometryFromReferences(IAbschnittGISBase abschnittGISBase)
        {
            IGeometry newShape = null;

            foreach (AchsenReferenz achsRef in abschnittGISBase.ReferenzGruppe.AchsenReferenzen)
            {
                if (newShape == null)
                {
                    newShape = achsRef.Shape;
                }
                else
                {
                    newShape = newShape.Union(achsRef.Shape);
                }
            }
            abschnittGISBase.Shape = newShape;
        }
예제 #6
0
 public void ReportUpdated(IAbschnittGISBase item)
 {
     if (item is StrassenabschnittGIS)
     {
         UpdatedStrassenabschnitts++;
     }
     if (item is ZustandsabschnittGIS)
     {
         UpdatedZustandsabschnitts++;
     }
     if (item is KoordinierteMassnahmeGIS)
     {
         UpdatedKoordinierteMassnahmen++;
     }
     if (item is MassnahmenvorschlagTeilsystemeGIS)
     {
         UpdatedMassnahmenvorschlagTeilsysteme++;
     }
 }
예제 #7
0
        private void UpdateAbschnitt(IAbschnittGISBase abschnitt)
        {
            IGeometry shape = null;

            foreach (AchsenReferenz aref in abschnitt.ReferenzGruppe.AchsenReferenzen)
            {
                if (shape != null)
                {
                    shape = shape.Union(aref.Shape);
                }
                else
                {
                    shape = aref.Shape;
                }
            }
            abschnitt.Shape  = shape;
            abschnitt.Laenge = (decimal)Math.Round(shape.Length * 10) / 10;
            this.transactionScopeProvider.CurrentTransactionScope.Session.Update(abschnitt);
        }
예제 #8
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);
        }
예제 #9
0
        public const int CONFLICTTYPE_COMPLETELOSS_REFERENCE_TOOSHORT = 16 | 4; // 20

        public static int ItemTypeFromClass(IAbschnittGISBase item)
        {
            if (item is StrassenabschnittGIS)
            {
                return(AchsenUpdateConflict.ITEMTYPE_STRASSENABSCHNITT);
            }
            if (item is ZustandsabschnittGIS)
            {
                return(AchsenUpdateConflict.ITEMTYPE_ZUSTAND);
            }
            if (item is KoordinierteMassnahmeGIS)
            {
                return(AchsenUpdateConflict.ITEMTYPE_KOORDINIERTEMASSNAHME);
            }
            if (item is MassnahmenvorschlagTeilsystemeGIS)
            {
                return(AchsenUpdateConflict.ITEMTYPE_MASSNVORSCHLAGTEILSYSTEM);
            }
            if (item is RealisierteMassnahmeGIS)
            {
                return(AchsenUpdateConflict.ITEMTYPE_REALISIERTEMASSNAHME);
            }
            return(-1);
        }
예제 #10
0
        private FeatureWithID getFeatureWithId(IAbschnittGISBase entity)
        {
            List <AchsenReferenz> achsenreferenzListe = achsenReferenzService.GetAchsenReferenzGruppe(entity.ReferenzGruppe.Id);

            //create geojson
            List <FeatureWithID> featuresListChilds = new List <FeatureWithID>();

            FeatureWithID    feature   = new FeatureWithID();
            IAttributesTable attribute = new AttributesTable();

            feature.Id       = entity.Id.ToString();
            feature.Geometry = entity.Shape;

            //GEOJSON PROPERTIES: Childs (= Achsenreferenzen)

            foreach (AchsenReferenz ar in achsenreferenzListe)
            {
                FeatureWithID    feat       = new FeatureWithID();
                IAttributesTable attributes = new AttributesTable();

                feat.Id       = ar.Id.ToString();
                feat.Geometry = ar.Shape;
                attributes.AddAttribute(geoJSONAttribute_AchsenSegmentId, ar.AchsenSegment.Id);
                attributes.AddAttribute(geoJSONAttribute_IsInverted, ar.AchsenSegment.IsInverted);
                feat.Attributes = attributes;
                featuresListChilds.Add(feat);
            }

            attribute.AddAttribute(geoJSONAttribute_childs, featuresListChilds);

            if (entity is KoordinierteMassnahmeGIS)
            {
                attribute.AddAttribute("Name", ((KoordinierteMassnahmeGIS)entity).Projektname);
            }
            if (entity is MassnahmenvorschlagTeilsystemeGIS)
            {
                attribute.AddAttribute("Name", ((MassnahmenvorschlagTeilsystemeGIS)entity).Projektname);
                attribute.AddAttribute("System", localizationService.GetLocalizedEnum <TeilsystemTyp>(((MassnahmenvorschlagTeilsystemeGIS)entity).Teilsystem));
            }
            //GEOJSON PROPERTIES: ZUSTANDSABSCHNITTE
            if (entity is StrassenabschnittGIS)
            {
                List <FeatureWithID> featuresListZustandsabschnitte = new List <FeatureWithID>();

                List <ZustandsabschnittGIS> zustandsabschnitte = transactionScopeProvider.Queryable <ZustandsabschnittGIS>().Where(za => za.StrassenabschnittGIS.Id == entity.Id).ToList();
                foreach (ZustandsabschnittGIS zustandsabschnitt in zustandsabschnitte)
                {
                    FeatureWithID    feat = new FeatureWithID();
                    IAttributesTable att  = new AttributesTable();

                    feat.Id         = zustandsabschnitt.Id.ToString();
                    feat.Geometry   = zustandsabschnitt.Shape;
                    feat.Attributes = att;

                    featuresListZustandsabschnitte.Add(feat);
                }
                var sa = entity as StrassenabschnittGIS;

                attribute.AddAttribute(geoJSONAttribute_Zustandsabschnitte, featuresListZustandsabschnitte);
                attribute.AddAttribute(geoJSONAttribute_IsLocked, sa.IsLocked);
                if (sa.InspektionsRtStrAbschnitte.Count > 0)
                {
                    attribute.AddAttribute(geoJSONAttribute_InspektionsrouteID, sa.InspektionsRtStrAbschnitte.SingleOrDefault().InspektionsRouteGIS.Id);
                }
                else
                {
                    attribute.AddAttribute(geoJSONAttribute_InspektionsrouteID, "");
                }
            }
            else
            {
                if (entity is ZustandsabschnittGIS)
                {
                    attribute.AddAttribute(geoJSONAttribute_StrassenabschnittsID, ((ZustandsabschnittGIS)entity).StrassenabschnittGIS.Id);
                    var za = entity as ZustandsabschnittGIS;
                    attribute.AddAttribute(geoJSONAttribute_IsLocked, za.IsLocked);
                }
            }
            feature.Attributes = attribute;
            return(feature);
        }