public IList <MassnahmenvorschlagTeilsystemeGIS> GetAllKoordinierteMassnahmenAt(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = GISService.CreateGeometryFactory().CreatePoint(new Coordinate((double)x, (double)y, 0));
            var       buffer       = clickedPoint.Buffer(tolerance);

            IList <MassnahmenvorschlagTeilsystemeGIS> koordinierteMassnahmenliste = GetBySpatialFilter(buffer).Where(mts => mts.Status != EMSG.Common.Enums.StatusTyp.Abgeschlossen).ToList();

            return(koordinierteMassnahmenliste);
        }
Beispiel #2
0
        public void SplitStrassenabschnittGISAtXY(Guid strassenabschnittId, string x, string y)
        {
            StrassenabschnittGIS strassenabschnittToSplit = GetEntityById(strassenabschnittId);

            //check whether the strassenabschnitt (inspektionsroute) is checked out (=locked)
            if (strassenabschnittToSplit.IsLocked)
            {
                return;
            }

            //1. find achsenref. to split
            IGeometry      splitPoint             = GISService.CreateGeometryFactory().CreatePoint(new Coordinate(double.Parse(x, System.Globalization.NumberFormatInfo.InvariantInfo), double.Parse(y, System.Globalization.NumberFormatInfo.InvariantInfo), 0));
            AchsenReferenz achsenreferenceToSplit = gisService.GetNearestGeometry(splitPoint, strassenabschnittToSplit.ReferenzGruppe.AchsenReferenzen);

            //2. split achsenref
            LengthIndexedLine line   = new LengthIndexedLine(achsenreferenceToSplit.Shape);
            IGeometry         split1 = line.ExtractLine(0, line.IndexOf(splitPoint.Coordinate));
            IGeometry         split2 = line.ExtractLine(line.IndexOf(splitPoint.Coordinate), line.EndIndex);

            //create new strassenabschnitte
            StrassenabschnittGIS copiedStrassenabschnittGIS1 = PrepareNewStrassenabschnitt(strassenabschnittToSplit, achsenreferenceToSplit, split1);
            StrassenabschnittGIS copiedStrassenabschnittGIS2 = PrepareNewStrassenabschnitt(strassenabschnittToSplit, achsenreferenceToSplit, split2);

            //3. relate other achsenrefs to the new two references
            foreach (AchsenReferenz achsref in strassenabschnittToSplit.ReferenzGruppe.AchsenReferenzen.Where(ac => !ac.Equals(achsenreferenceToSplit)))
            {
                if (achsref.Shape.Distance(split1) <= achsref.Shape.Distance(split2))
                {
                    copiedStrassenabschnittGIS1.ReferenzGruppe.AddAchsenReferenz(PrepareAchsenreferenz(achsref));
                    copiedStrassenabschnittGIS1.Shape = copiedStrassenabschnittGIS1.Shape.Union(achsref.Shape);
                }
                else
                {
                    copiedStrassenabschnittGIS2.ReferenzGruppe.AddAchsenReferenz(PrepareAchsenreferenz(achsref));
                    copiedStrassenabschnittGIS2.Shape = copiedStrassenabschnittGIS2.Shape.Union(achsref.Shape);
                }
            }

            copiedStrassenabschnittGIS1.Laenge = getLength(copiedStrassenabschnittGIS1);
            copiedStrassenabschnittGIS2.Laenge = getLength(copiedStrassenabschnittGIS2);


            //update inspektionsroute
            strassenabschnittToSplit.InspektionsRtStrAbschnitte.ForEach(s => s.InspektionsRouteGIS.AddStrassenabschnittGIS(copiedStrassenabschnittGIS1));
            strassenabschnittToSplit.InspektionsRtStrAbschnitte.ForEach(s => s.InspektionsRouteGIS.AddStrassenabschnittGIS(copiedStrassenabschnittGIS2));
            strassenabschnittToSplit.InspektionsRtStrAbschnitte.ForEach(s => s.InspektionsRouteGIS.RemoveStrassenabschnittGIS(strassenabschnittToSplit));


            //5. save/delete splitted strassenabschnitte
            Delete(strassenabschnittToSplit);

            CreateEntity(copiedStrassenabschnittGIS1);
            CreateEntity(copiedStrassenabschnittGIS2);
        }
Beispiel #3
0
        public ZustandsabschnittGISModel GetZustandsabschnittAt(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = GISService.CreateGeometryFactory().CreatePoint(new Coordinate(x, y, 0));
            var       buffer       = clickedPoint.Buffer(tolerance);

            //ZustandsabschnittGIS zustandsabschnitt = gisService.GetNearestGeometry(buffer, GetEntityListBySpatialFilter(buffer).Where(e=> e.ErfassungsPeriod==CurrentErfassungsPeriod).ToList());
            ZustandsabschnittGIS zustandsabschnitt = gisService.GetNearestGeometry(clickedPoint, GetCurrentZustandsAbschnitteBySpatialFilter(buffer, CurrentErfassungsPeriod));
            var zustandsabschnittmodel             = new ZustandsabschnittGISModel();//base.GetById(zustandsabschnitt.Id);

            zustandsabschnittmodel.FeatureGeoJSONString = geoJSONParseService.GenerateGeoJsonStringFromEntity(zustandsabschnitt);
            return(zustandsabschnittmodel);
        }
Beispiel #4
0
        public RealisierteMassnahmeGISModel GetRealisierteMassnahmeAt(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = GISService.CreateGeometryFactory().CreatePoint(new Coordinate(x, y, 0));
            var       buffer       = clickedPoint.Buffer(tolerance);

            IList <RealisierteMassnahmeGIS> realisierteMassnahmenliste = GetCurrentBySpatialFilter(buffer).ToList();

            RealisierteMassnahmeGIS realisierteMassnahme = gisService.GetNearestGeometry(buffer, realisierteMassnahmenliste);

            return(new RealisierteMassnahmeGISModel {
                FeatureGeoJSONString = geoJSONParseService.GenerateGeoJsonStringFromEntity(realisierteMassnahme)
            });
        }
        public MassnahmenvorschlagTeilsystemeGISModel GetKoordinierteMassnahmeAt(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = GISService.CreateGeometryFactory().CreatePoint(new Coordinate((double)x, (double)y, 0));
            var       buffer       = clickedPoint.Buffer(tolerance);

            IList <MassnahmenvorschlagTeilsystemeGIS> koordinierteMassnahmenliste = GetBySpatialFilter(buffer).Where(mts => mts.Status != EMSG.Common.Enums.StatusTyp.Abgeschlossen).ToList();

            MassnahmenvorschlagTeilsystemeGIS koordinierteMassnahme = gisService.GetNearestGeometry(buffer, koordinierteMassnahmenliste);

            return(new MassnahmenvorschlagTeilsystemeGISModel {
                FeatureGeoJSONString = geoJSONParseService.GenerateGeoJsonStringFromEntity(koordinierteMassnahme)
            });
        }
Beispiel #6
0
        public StrassenabschnittGISModel GetCurrentStrassenabschnittAt(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = GISService.CreateGeometryFactory().CreatePoint(new Coordinate((double)x, (double)y, 0));
            var       buffer       = clickedPoint.Buffer(tolerance);

            //only strassenabschnitte from current erfassungsperiode
            ErfassungsPeriod             currentErfassungsperiod = historizationService.GetCurrentErfassungsperiod();
            IList <StrassenabschnittGIS> strabsliste             = GetCurrentBySpatialFilter(buffer);

            StrassenabschnittGIS strabs = gisService.GetNearestGeometry(clickedPoint, strabsliste);

            return(new StrassenabschnittGISModel {
                FeatureGeoJSONString = geoJSONParseService.GenerateGeoJsonStringFromEntity(strabs)
            });
        }
Beispiel #7
0
        private object ConvertMLineStringTo2D(object source, PropertyInfo sourceProperty, PropertyInfo destinationProperty)
        {
            IGeometryFactory gf           = GISService.CreateGeometryFactory();
            var sourceEntityPropertyValue = sourceProperty.GetValue(source, new object[0]);

            if (sourceEntityPropertyValue == null)
            {
                return(null);
            }

            var mlineString = sourceEntityPropertyValue as MLineString;

            if (mlineString != null)
            {
                return(GeometryUtils.ConvertMLineStringTo2D(gf, mlineString));
            }
            else
            {
                return(sourceEntityPropertyValue);
            }
        }
        public InspektionsRouteGISModel GetInspektionsRouteGISAt(double x, double y, double tolerance)
        {
            IGeometry clickedPoint = GISService.CreateGeometryFactory().CreatePoint(new Coordinate((double)x, (double)y, 0));
            IGeometry buffer       = clickedPoint.Buffer(tolerance);

            IList <InspektionsRouteGIS> inspektionsRouteGISListe = GetCurrentEntityListBySpatialFilter(buffer);

            InspektionsRouteGIS inspektionsRoute = gisService.GetNearestGeometry(buffer, inspektionsRouteGISListe);

            if (inspektionsRoute != null)
            {
                return(new InspektionsRouteGISModel {
                    FeatureGeoJSONString = geoJSONParseService.GenerateGeoJsonStringFromEntity(inspektionsRoute)
                });
            }
            else
            {
                return(new InspektionsRouteGISModel {
                    FeatureGeoJSONString = "{ \"type\": \"FeatureCollection\", \"features\": []}"
                });
            }
        }
        public Stream WriteShape(IList <Feature> featureCollection, string name, DbaseFileHeader header = null)
        {
            if (featureCollection.IsEmpty())
            {
                return(null);
            }
            ShapeMemoryStreamDataWriter shapeWriter = new ShapeMemoryStreamDataWriter(GISService.CreateGeometryFactory());

            shapeWriter.Header = header == null?ShapefileDataWriter.GetHeader(featureCollection.First(), featureCollection.Count) : header;

            shapeWriter.Write(featureCollection as IList);

            MemoryStream shpMemStream = shapeWriter.GetShpStream();
            MemoryStream shxMemStream = shapeWriter.GetShxStream();
            MemoryStream dbfMemStream = shapeWriter.GetDbfStream();
            MemoryStream prjMemStream = new MemoryStream(Encoding.UTF8.GetBytes(GisConstants.EsriWkt21781));
            MemoryStream cpgMemStream = new MemoryStream(Encoding.UTF8.GetBytes(GisConstants.EsriUTF8CodePage));

            ZipFile zipfile = new ZipFile();

            shpMemStream.Seek(0, 0);
            shxMemStream.Seek(0, 0);
            dbfMemStream.Seek(0, 0);
            prjMemStream.Seek(0, 0);

            zipfile.AddEntry(name + ".shp", shpMemStream);
            zipfile.AddEntry(name + ".shx", shxMemStream);
            zipfile.AddEntry(name + ".dbf", dbfMemStream);
            zipfile.AddEntry(name + ".prj", prjMemStream);
            zipfile.AddEntry(name + ".cpg", cpgMemStream);

            MemoryStream stream = new MemoryStream();

            zipfile.Save(stream);
            stream.Seek(0, 0);

            shpMemStream.Close();
            shxMemStream.Close();
            dbfMemStream.Close();
            prjMemStream.Close();
            return(stream);
        }
        public ActionResult GetStrassenabschnittByBbox(double minX, double minY, double maxX, double maxY)
        {
            try
            {
                Coordinate bottomLeft  = new Coordinate(minX, minY);
                Coordinate topRight    = new Coordinate(maxX, maxY);
                Coordinate bottomRight = new Coordinate(maxX, minY);
                Coordinate topLeft     = new Coordinate(minX, maxY);

                ILinearRing linearRing = new LinearRing(new Coordinate[] { topLeft, topRight, bottomRight, bottomLeft, topLeft });

                IGeometry filterGeom = new NetTopologySuite.Geometries.Polygon(linearRing, GISService.CreateGeometryFactory());

                IList <StrassenabschnittGIS> strassenabschnitte = strassenabschnittGISService.GetCurrentBySpatialFilter(filterGeom);

                strassenabschnitte = strassenabschnitte.Where(s => s.Shape.Intersects(filterGeom)).ToList();
                return(Content(geoJSONParseService.GenereateGeoJsonStringfromEntities(strassenabschnitte), "application/json"));
            }
            catch (Exception exc)
            {
                return(Content(GeoJSONStrings.GeoJSONFailure(exc.Message), "application/json"));
            }
        }