Ejemplo n.º 1
0
        public string GenerateGeoJsonStringFromEntity(InspektionsRouteGIS inspektionsroute)
        {
            if (inspektionsroute == null)
            {
                return("{ \"type\": \"FeatureCollection\", \"features\": []}");
            }

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

            IList <FeatureWithID> strassenabschnitte = new List <FeatureWithID>();


            feature.Id       = inspektionsroute.Id.ToString();
            feature.Geometry = inspektionsroute.Shape;
            attributes.AddAttribute(geoJSONAttribute_InspektionsrouteID, inspektionsroute.Id);
            attributes.AddAttribute(geoJSONAttribute_InspektionsrouteBezeichnung, inspektionsroute.Bezeichnung);
            attributes.AddAttribute(geoJSONAttribute_IsLocked, inspektionsroute.IsLocked);

            //GEOJSON PROPERTIES: Strassenabschnitte
            foreach (InspektionsRtStrAbschnitte inspektionsrouteStrassenabschnitt in inspektionsroute.InspektionsRtStrAbschnitteList)
            {
                FeatureWithID          featureIrs          = new FeatureWithID();
                IAttributesTable       attributeIrs        = new AttributesTable();
                IList <AchsenReferenz> achsenreferenzenIrs = achsenReferenzService.GetAchsenReferenzGruppe(inspektionsrouteStrassenabschnitt.StrassenabschnittGIS.ReferenzGruppe.Id);
                IList <FeatureWithID>  achsenreferenzen    = new List <FeatureWithID>();

                featureIrs.Id       = inspektionsrouteStrassenabschnitt.StrassenabschnittGIS.Id.ToString();
                featureIrs.Geometry = inspektionsrouteStrassenabschnitt.StrassenabschnittGIS.Shape;


                foreach (AchsenReferenz achsenreferenz in achsenreferenzenIrs)
                {
                    FeatureWithID    featAr = new FeatureWithID();
                    IAttributesTable attAr  = new AttributesTable();

                    featAr.Id       = achsenreferenz.Id.ToString();
                    featAr.Geometry = achsenreferenz.Shape;
                    attAr.AddAttribute(geoJSONAttribute_AchsenSegmentId, achsenreferenz.AchsenSegment.Id);
                    featAr.Attributes = attAr;

                    achsenreferenzen.Add(featAr);
                }

                attributeIrs.AddAttribute(geoJSONAttribute_childs, achsenreferenzen);

                featureIrs.Attributes = attributeIrs;
                strassenabschnitte.Add(featureIrs);
            }

            attributes.AddAttribute(geoJSONAttribute_Strassenabschnitte, strassenabschnitte);
            feature.Attributes = attributes;

            TextWriter sw = new StringWriter();

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

            return(geoJSONstring);
        }
Ejemplo n.º 2
0
        public IList <Guid> GetModifiedEntities(string geoJson)
        {
            FeatureWithID feature = GeoJSONReader.ReadFeatureWithID(new StringReader(geoJson));

            if (String.IsNullOrEmpty(feature.Id))
            {
                return(new List <Guid>());
            }
            return(this.GetModifiedEntities(Guid.Parse(feature.Id), feature.Geometry));
        }
Ejemplo n.º 3
0
        public string GetNearestAchsenSegment(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = EMSG.Business.Services.GIS.GISService.CreateGeometryFactory().CreatePoint(new Coordinate((double)x, (double)y, 0));
            var       buffer       = clickedPoint.Buffer(tolerance);

            IList <AchsenSegment> achsegmentList        = GetCurrentEntityListBySpatialFilter(buffer);
            AchsenSegment         selectedAchsensegment = gisService.GetNearestGeometry(clickedPoint, achsegmentList);

            TextWriter       tw    = new StringWriter();
            IAttributesTable table = new AttributesTable();

            //GEOJSON PROPERTIES: STRASSENABSCHNITTE

            List <FeatureWithID> features = new List <FeatureWithID>();

            if (selectedAchsensegment == null)
            {
                return(GeoJSONStrings.GeoJSONFailure("No Achsen found"));
            }
            foreach (AchsenReferenz achsenreferenz in selectedAchsensegment.AchsenReferenzen.Where(ar => ar.Erfassungsperiod == historizationService.GetCurrentErfassungsperiod()))
            {
                if (achsenreferenz.ReferenzGruppe.StrassenabschnittGIS != null)
                {
                    FeatureWithID    feat = new FeatureWithID();
                    IAttributesTable att  = new AttributesTable();

                    feat.Id         = achsenreferenz.ReferenzGruppe.StrassenabschnittGIS.Id.ToString();
                    feat.Geometry   = achsenreferenz.ReferenzGruppe.StrassenabschnittGIS.Shape;
                    feat.Attributes = att;

                    if (!features.Contains(feat))
                    {
                        features.Add(feat);
                    }
                }
            }

            table.AddAttribute("Strassenabschnitte", features);

            table.AddAttribute("AchsenId", selectedAchsensegment.Achse.Id);
            table.AddAttribute("AchsenName", selectedAchsensegment.Achse.Name);
            table.AddAttribute("IsInverted", selectedAchsensegment.IsInverted);

            FeatureWithID feature = new FeatureWithID();

            feature.Id         = selectedAchsensegment.Id.ToString();
            feature.Geometry   = selectedAchsensegment.Shape;
            feature.Attributes = table;
            TextWriter sw = new StringWriter();

            GeoJSONWriter.WriteFeatureWithID(feature, sw);

            return(sw.ToString());
        }
Ejemplo n.º 4
0
        public AchsenSegmentModel GenerateAchsenSegmentModelFromGeoJsonString(AchsenSegmentModel model)
        {
            string        geoJSONString  = model.FeatureGeoJSONString;
            FeatureWithID feature        = GeoJSONReader.ReadFeatureWithID(new StringReader(model.FeatureGeoJSONString));
            string        invertedString = feature.Attributes[geoJSONAttribute_IsInverted] as string;
            bool?         invertedbool   = feature.Attributes[geoJSONAttribute_IsInverted] as bool?;

            model.IsInverted = (invertedString != null && invertedString.ToLower() == "true") || (invertedbool != null && invertedbool == true);
            //model.IsInverted = (bool)feature.Attributes[geoJSONAttribute_IsInverted];
            model.Shape      = feature.Geometry;
            model.Shape.SRID = GisConstants.SRID;
            return(model);
        }
Ejemplo n.º 5
0
        public string GenerateGeoJsonStringFromEntity(IDTOGeometryHolder entity)
        {
            if (entity == null)
            {
                return(geoJSON_EmptyFeatureCollection);
            }


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

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

            return(geoJSONstring);
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        public string GetAchsensegmentCollection(string achsensegmentIds)
        {
            var splitachsensegmentIds           = achsensegmentIds.Split(',');
            List <FeatureWithID> achsensegmente = new List <FeatureWithID>();
            StringWriter         sw             = new StringWriter();

            foreach (string achsensegmentId in splitachsensegmentIds)
            {
                AchsenSegment        aseg = GetEntityById(Guid.Parse(achsensegmentId));
                FeatureWithID        feat = new FeatureWithID();
                IAttributesTable     att  = new AttributesTable();
                List <FeatureWithID> strassenabschnitte = new List <FeatureWithID>();

                foreach (AchsenReferenz achsenreferenz in aseg.AchsenReferenzen.Where(a => a.Erfassungsperiod == historizationService.GetCurrentErfassungsperiod()))
                {
                    if (achsenreferenz.ReferenzGruppe.StrassenabschnittGIS != null)
                    {
                        FeatureWithID    strabsfeat = new FeatureWithID();
                        IAttributesTable strabsatt  = new AttributesTable();

                        strabsfeat.Id         = achsenreferenz.ReferenzGruppe.StrassenabschnittGIS.Id.ToString();
                        strabsfeat.Geometry   = achsenreferenz.ReferenzGruppe.StrassenabschnittGIS.Shape;
                        strabsfeat.Attributes = strabsatt;

                        if (!strassenabschnitte.Contains(strabsfeat))
                        {
                            strassenabschnitte.Add(strabsfeat);
                        }
                    }
                }
                att.AddAttribute("AchsenId", aseg.Achse.Id);
                att.AddAttribute("AchsenName", aseg.Achse.Name);
                att.AddAttribute("IsInverted", aseg.IsInverted);
                att.AddAttribute("Strassenabschnitte", strassenabschnitte);
                feat.Geometry   = aseg.Shape;
                feat.Id         = aseg.Id.ToString();
                feat.Attributes = att;
                achsensegmente.Add(feat);
            }

            GeoJSONWriter.WritewithID(achsensegmente, sw);
            sw.Flush();

            return(sw.ToString());
        }
Ejemplo n.º 8
0
        public string GenereateGeoJsonStringfromAchsenSegment(IEnumerable <AchsenSegment> entities)
        {
            List <FeatureWithID> achsensegmente = new List <FeatureWithID>();
            StringWriter         sw             = new StringWriter();

            foreach (var aseg in entities)
            {
                FeatureWithID    feat = new FeatureWithID();
                IAttributesTable att  = new AttributesTable();
                att.AddAttribute(geoJSONAttribute_AchsenId, aseg.Achse.Id);
                att.AddAttribute(geoJSONAttribute_AchsenName, aseg.Achse.Name);
                att.AddAttribute(geoJSONAttribute_IsInverted, aseg.IsInverted);
                feat.Geometry   = aseg.Shape;
                feat.Id         = aseg.Id.ToString();
                feat.Attributes = att;
                achsensegmente.Add(feat);
            }
            GeoJSONWriter.WritewithID(achsensegmente, sw);
            sw.Flush();

            return(sw.ToString());
        }
Ejemplo n.º 9
0
        private FeatureWithID getFeatureWithId(IDTOGeometryHolder entity)
        {
            //create geojson
            List <FeatureWithID> featuresListChilds = new List <FeatureWithID>();

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

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

            IGeometry shape2d = (IGeometry)entity.Shape.Clone();

            foreach (Coordinate coord in shape2d.Coordinates)
            {
                coord.Z = Double.NaN;
            }

            feature.Geometry = shape2d;



            //GEOJSON PROPERTIES: Childs (= Achsenreferenzen)
            if (entity is IReferenzGruppeDTOHolder)
            {
                IReferenzGruppeDTOHolder holder = entity as IReferenzGruppeDTOHolder;
                List <AchsenReferenzDTO> achsenreferenzListe = holder.ReferenzGruppeDTO.AchsenReferenzenDTO;
                foreach (AchsenReferenzDTO 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);
                    AchsenSegmentDTO achs = null;
                    if (ar.AchsenSegmentDTO == null)
                    {
                        achs = (AchsenSegmentDTO)dtoService.GetDTOByID(ar.AchsenSegment);
                    }
                    else
                    {
                        achs = ar.AchsenSegmentDTO;
                    }
                    attributes.AddAttribute(geoJSONAttribute_IsInverted, achs.IsInverted.ToString());
                    feat.Attributes = attributes;
                    featuresListChilds.Add(feat);
                }

                attribute.AddAttribute(geoJSONAttribute_childs, featuresListChilds);
                if (entity is AchsenSegmentDTO)
                {
                    AchsenSegmentDTO achs = entity as AchsenSegmentDTO;
                    attribute.AddAttribute(geoJSONAttribute_IsInverted, achs.IsInverted.ToString());
                }

                //GEOJSON PROPERTIES: ZUSTANDSABSCHNITTE
                if (entity is StrassenabschnittGISDTO)
                {
                    StrassenabschnittGISDTO sa = entity as StrassenabschnittGISDTO;
                    List <FeatureWithID>    featuresListZustandsabschnitte = new List <FeatureWithID>();

                    IEnumerable <ZustandsabschnittGISDTO> zustandsabschnitte = this.dtoService.Get <ZustandsabschnittGISDTO>().Where(z => sa.ZustandsabschnittenId.Any(id => id.Equals(z.Id)));
                    foreach (ZustandsabschnittGISDTO 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);
                    }

                    attribute.AddAttribute(geoJSONAttribute_Zustandsabschnitte, featuresListZustandsabschnitte);

                    attribute.AddAttribute(geoJSONAttribute_InspektionsrouteID, sa.InspektionsRouteId);
                }
                else
                {
                    if (entity is ZustandsabschnittGISDTO)
                    {
                        var za = entity as ZustandsabschnittGISDTO;
                        attribute.AddAttribute(geoJSONAttribute_StrassenabschnittsID, za.StrassenabschnittGIS);
                        attribute.AddAttribute(geoJSONAttribute_Zustandsindex, za.Zustandsindex.ToString(CultureInfo.InvariantCulture));
                        StrassenabschnittGISDTO strab     = this.dtoService.GetDTOByID <StrassenabschnittGISDTO>(za.StrassenabschnittGIS);
                        IList <FeatureWithID>   trottoirs = new List <FeatureWithID>();

                        if (strab.Trottoir == Common.Enums.TrottoirTyp.BeideSeiten || strab.Trottoir == Common.Enums.TrottoirTyp.Links)
                        {
                            FeatureWithID      trottfeature = new FeatureWithID();
                            List <ILineString> lines        = new List <ILineString>();
                            IAttributesTable   attributes   = new AttributesTable();
                            trottfeature.Id = Guid.NewGuid().ToString();
                            foreach (AchsenReferenzDTO referenz in strab.ReferenzGruppeDTO.AchsenReferenzenDTO)
                            {
                                AchsenSegmentDTO segment = this.dtoService.GetDTOByID <AchsenSegmentDTO>(referenz.AchsenSegment);
                                decimal          offset  = (decimal)(strab.BreiteFahrbahn + strab.BreiteTrottoirLinks) / 2;
                                if (segment.IsInverted)
                                {
                                    offset *= -1;
                                }
                                lines.Add(GeometryUtils.createOffsetLineNew(referenz.Shape.Factory, (ILineString)referenz.Shape, (double)offset));
                            }
                            IGeometry shape = za.Shape.Factory.CreateMultiLineString(lines.Where(l => l != null).ToArray());

                            trottfeature.Geometry = shape;
                            attributes.AddAttribute(geoJSONAttribute_ZustandsabschnittId, za.Id.ToString());
                            attributes.AddAttribute(geoJSONAttribute_Zustandsindex, (int)za.ZustandsindexTrottoirLinks);
                            trottfeature.Attributes = attributes;
                            trottoirs.Add(trottfeature);
                        }
                        if (strab.Trottoir == Common.Enums.TrottoirTyp.BeideSeiten || strab.Trottoir == Common.Enums.TrottoirTyp.Rechts)
                        {
                            FeatureWithID      trottfeature = new FeatureWithID();
                            IAttributesTable   attributes   = new AttributesTable();
                            List <ILineString> lines        = new List <ILineString>();
                            trottfeature.Id = Guid.NewGuid().ToString();
                            foreach (AchsenReferenzDTO referenz in za.ReferenzGruppeDTO.AchsenReferenzenDTO)
                            {
                                AchsenSegmentDTO segment = this.dtoService.GetDTOByID <AchsenSegmentDTO>(referenz.AchsenSegment);
                                decimal          offset  = (decimal)(strab.BreiteFahrbahn + strab.BreiteTrottoirRechts) / 2;
                                if (!segment.IsInverted)
                                {
                                    offset *= -1;
                                }
                                lines.Add(GeometryUtils.createOffsetLineNew(referenz.Shape.Factory, (ILineString)referenz.Shape, (double)offset));
                            }
                            IGeometry shape = za.Shape.Factory.CreateMultiLineString(lines.Where(l => l != null).ToArray());

                            trottfeature.Geometry = shape;
                            attributes.AddAttribute(geoJSONAttribute_ZustandsabschnittId, za.Id.ToString());
                            attributes.AddAttribute(geoJSONAttribute_Zustandsindex, (int)za.ZustandsindexTrottoirRechts);
                            trottfeature.Attributes = attributes;
                            trottoirs.Add(trottfeature);
                        }
                        if (trottoirs.IsEmpty())
                        {
                            attribute.AddAttribute(geoJSONAttribute_Trottoir, geoJSON_EmptyFeatureCollection);
                        }
                        else
                        {
                            attribute.AddAttribute(geoJSONAttribute_Trottoir, trottoirs);
                        }
                    }
                }
            }
            feature.Attributes = attribute;
            return(feature);
        }
Ejemplo n.º 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);
        }