public bool ZustandsabschnittWithinStrassenabschnitt(StrassenabschnittGISModel strassenabschnittgismodel) { //check if all zabs associated with the strabs still fit on it //dont check new strabs Guid strassenabschnittsid = strassenabschnittgismodel.Id; if (strassenabschnittsid != Guid.Empty) { //get the shape of the strabs IGeometry neu_strabsShape = strassenabschnittgismodel.Shape; neu_strabsShape.SRID = GisConstants.SRID; //get all zabs on the strabs IQueryable <ZustandsabschnittGIS> zustandsabschnitte = zustandsabschnittGISService.GetCurrentEntities(); zustandsabschnitte = zustandsabschnitte.Where(zabs => zabs.StrassenabschnittGIS.Id == strassenabschnittsid); foreach (ZustandsabschnittGIS zabs in zustandsabschnitte) { if (!gisService.CheckGeometriesIsInControlGeometry(zabs.ReferenzGruppe.AchsenReferenzen, neu_strabsShape)) { return(false); } } } return(true); }
public bool IsRealisierteMassnahmeOnAchsensegment(RealisierteMassnahmeGISModel realisierteMassnahmeGISModel) { foreach (var ar in realisierteMassnahmeGISModel.ReferenzGruppeModel.AchsenReferenzenModel) { var achse = achsenSegmentService.GetById(ar.AchsenSegment); if (!gisService.CheckGeometriesIsInControlGeometry(new List <AchsenReferenzModel> { ar }, achse.Shape)) { return(false); } } return(true); }
public bool IsZustandsabschnittWithinStrassenabschnitt(ZustandsabschnittGISModel zustandsabschnittGISModel) { Guid strabsid = zustandsabschnittGISModel.StrassenabschnittGIS; StrassenabschnittGIS strab = GetEntityById <StrassenabschnittGIS>(strabsid); IList <AchsenReferenzModel> neueAchsenreferenzen = zustandsabschnittGISModel.ReferenzGruppeModel.AchsenReferenzenModel; return(gisService.CheckGeometriesIsInControlGeometry(neueAchsenreferenzen, strab.Shape)); }
private bool IsZustandsabschnittWithinStrassenabschnitt(ZustandsabschnittGISDTO zustandsabschnittGISDTO) { //string geojsonstring = zustandsabschnittGISModel.FeatureGeoJSONString; Guid strabsid = zustandsabschnittGISDTO.StrassenabschnittGIS; StrassenabschnittGIS strab = GetEntityById <StrassenabschnittGIS>(strabsid); IList <AchsenReferenzDTO> neue_achsenreferenzen = zustandsabschnittGISDTO.ReferenzGruppeDTO.AchsenReferenzenDTO; return(gisService.CheckGeometriesIsInControlGeometry(neue_achsenreferenzen, strab.Shape)); }
public bool Validate(MassnahmenvorschlagTeilsystemeGISModel model) { foreach (var ar in model.ReferenzGruppeModel.AchsenReferenzenModel) { IGeometry achsensegment = achsenSegmentService.GetById(ar.AchsenSegment).Shape; if (!gisService.CheckGeometriesIsInControlGeometry(new List <AchsenReferenzModel>() { ar }, achsensegment)) { return(false); } } return(true); }
private IList <Guid> UpdateAchsenReferenzen(AchsenSegment currententity, IGeometry shape, bool persistChanges, AchseModificationAction modificationAction = AchseModificationAction.Change) { Dictionary <AchsenReferenz, GeometryTransformerResult> ret = new Dictionary <AchsenReferenz, GeometryTransformerResult>(); foreach (AchsenReferenz referenz in currententity.AchsenReferenzen.ToList()) { ILineString oldRefGeometry = (ILineString)referenz.Shape; ILineString newSegmentGeometry = (ILineString)shape; GeometryTransformer gt = new GeometryTransformer(oldRefGeometry, newSegmentGeometry); GeometryTransformerResult result = gt.Transform(); if (result.ResultState != GeometryTransformerResultState.Success || !result.NewRefGeometry.EqualsExact(oldRefGeometry)) { ret.Add(referenz, result); } } //check if strabs are overlapping other strabs foreach (var pair in ret.Where(p => p.Key.ReferenzGruppe.StrassenabschnittGIS != null && p.Value.ResultState == GeometryTransformerResultState.Success).ToList()) { IEnumerable <AchsenReferenz> strabsar = pair.Key.AchsenSegment.AchsenReferenzen.Where(ar => ar.Id != pair.Key.Id && ar.ReferenzGruppe.StrassenabschnittGIS != null); foreach (AchsenReferenz strabref in strabsar) { IGeometry currentstrabref = strabref.Shape; bool exists = true; KeyValuePair <AchsenReferenz, GeometryTransformerResult> newZabref = ret.Where(p => p.Key.Id.Equals(strabref.Id)).SingleOrDefault(); if (!newZabref.Equals(default(KeyValuePair <AchsenReferenz, GeometryTransformerResult>))) { currentstrabref = newZabref.Value.NewRefGeometry; exists = newZabref.Value.ResultState == GeometryTransformerResultState.Success; } if (exists) { if (!gisService.CheckOverlapp(new List <IGeometry>() { currentstrabref }, pair.Value.NewRefGeometry)) { ret[pair.Key] = new GeometryTransformerResult(GeometryTransformerResultState.FailedWouldBeOutside, pair.Value.NewRefGeometry); } } } } //check if zabs still within strabs and update results if not, ensure zabs are not overlapping others foreach (var pair in ret.Where(p => p.Key.ReferenzGruppe.ZustandsabschnittGIS != null && p.Value.ResultState == GeometryTransformerResultState.Success).ToList()) { ZustandsabschnittGIS zab = pair.Key.ReferenzGruppe.ZustandsabschnittGIS; if (zab != null && pair.Value.ResultState == GeometryTransformerResultState.Success) { IEnumerable <AchsenReferenz> strabrefs = ret.Where(p => p.Key.ReferenzGruppe.StrassenabschnittGIS != null && p.Key.ReferenzGruppe.StrassenabschnittGIS.Id == zab.StrassenabschnittGIS.Id && p.Value.ResultState == GeometryTransformerResultState.Success).Select(p => p.Key).ToList(); IList <IGeometry> zabrefs = new List <IGeometry>() { pair.Value.NewRefGeometry }; foreach (AchsenReferenz achsref in strabrefs) { bool isWithin = false; if (ret[achsref].ResultState == GeometryTransformerResultState.Success) { isWithin = isWithin || gisService.CheckGeometriesIsInControlGeometry(zabrefs, ret[achsref].NewRefGeometry); } if (!isWithin) { ret[pair.Key] = new GeometryTransformerResult(GeometryTransformerResultState.FailedWouldBeOutside, pair.Value.NewRefGeometry); } } IEnumerable <AchsenReferenz> allzabrefs = zab.StrassenabschnittGIS.Zustandsabschnitten.SelectMany(z => z.ReferenzGruppe.AchsenReferenzen).Where(ar => !ar.Id.Equals(pair.Key.Id)); foreach (AchsenReferenz zabref in allzabrefs) { IGeometry currentzabref = zabref.Shape; bool exists = true; KeyValuePair <AchsenReferenz, GeometryTransformerResult> newZabref = ret.Where(p => p.Key.Id.Equals(zabref.Id)).SingleOrDefault(); if (!newZabref.Equals(default(KeyValuePair <AchsenReferenz, GeometryTransformerResult>))) { currentzabref = newZabref.Value.NewRefGeometry; exists = newZabref.Value.ResultState == GeometryTransformerResultState.Success; } if (exists) { if (!gisService.CheckOverlapp(new List <IGeometry>() { currentzabref }, pair.Value.NewRefGeometry)) { ret[pair.Key] = new GeometryTransformerResult(GeometryTransformerResultState.FailedWouldBeOutside, pair.Value.NewRefGeometry); } } } } } if (persistChanges) { foreach (var pair in ret) { this.UpdateAchsenReferenz(pair.Key, pair.Value, modificationAction == AchseModificationAction.Delete); } } return(ret.Keys.Select(k => k.Id).ToList()); }