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