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); }
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); }
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); }
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) }); }
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) }); }
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")); } }