public ZustandTrottoirViewModel( ZustandsabschnittGISDTO zustandsabschnittGisdto, StrassenabschnittGISDTO strassenabschnittGisdto, IDTOService dtoService, IWindowService windowService) { this.zustandsabschnittGisdto = zustandsabschnittGisdto; this.strassenabschnittGisdto = strassenabschnittGisdto; this.dtoService = dtoService; this.windowService = windowService; Load(zustandsabschnittGisdto); PropertyChanged += (sender, args) => { if ( args.PropertyName == ExpressionHelper.GetPropertyName(() => ZustandsindexTrottoirLinks) || args.PropertyName == ExpressionHelper.GetPropertyName(() => ZustandsindexTrottoirRechts) || args.PropertyName == ExpressionHelper.GetPropertyName(() => DringlichkeitTrottoirLinks) || args.PropertyName == ExpressionHelper.GetPropertyName(() => DringlichkeitTrottoirRechts) || args.PropertyName == ExpressionHelper.GetPropertyName(() => MassnahmenvorschlagTrottoirLinks) || args.PropertyName == ExpressionHelper.GetPropertyName(() => MassnahmenvorschlagTrottoirRechts) ) { OnChanged(); } }; }
public ZustandsErfassungsmodusChooserViewModel( ZustandsabschnittGISDTO zustandsabschnittGisDto, StrassenabschnittGISDTO strassenabschnittGisdto, IDTOService dtoService, IWindowService windowService, ISchadenMetadatenService schadenMetadatenService, IMessageBoxService messageBoxService, bool isNew) { this.zustandsabschnittGisDto = zustandsabschnittGisDto; this.strassenabschnittGisdto = strassenabschnittGisdto; this.dtoService = dtoService; this.windowService = windowService; this.schadenMetadatenService = schadenMetadatenService; this.messageBoxService = messageBoxService; this.isNew = isNew; OpenZustandsFahrbahnWindowCommand = new DelegateCommand(OpenZustandsFahrbahnWindow); RegisterValidation(m => m.Zustandsindex, () => IsValidDecimalWithDecimalPlaces(Zustandsindex, 2), string.Format(MobileLocalization.InvalidDecimalPlacesValidationError, 2)); RegisterValidation(m => m.Zustandsindex, () => RangeValidator(Zustandsindex, 0, 5), RangeValidationMessage(0, 5)); RegisterValidation(m => m.Zustandsindex, IsZustandsindexValid, RangeValidationMessage(0, 5)); RegisterValidation(m => m.IsGrobInitializiert, () => ZustandsErfassungsmodus != ZustandsErfassungsmodus.Grob || IsGrobInitializiert, MobileLocalization.GrobFormIsNotinitialized); RegisterValidation(m => m.IsDetailInitializiert, () => ZustandsErfassungsmodus != ZustandsErfassungsmodus.Detail || IsDetailInitializiert, MobileLocalization.DetailFormIsNotinitialized); ReCreateZustabdFahrbahnWindowViewModel(); Load(zustandsabschnittGisDto, isNew); PropertyChanged += (sender, args) => { if (args.PropertyName == ExpressionHelper.GetPropertyName(() => Zustandsindex)) { HasNoChanges = false; } }; DelegateEvent(() => IsValid, () => HasError); DelegateEvent(() => Zustandsindex, () => ZustandsindexCalculated); PropertyChanged += (sender, args) => { if ( args.PropertyName == ExpressionHelper.GetPropertyName(() => Zustandsindex) || args.PropertyName == ExpressionHelper.GetPropertyName(() => IsGrobInitializiert) || args.PropertyName == ExpressionHelper.GetPropertyName(() => IsDetailInitializiert) || args.PropertyName == ExpressionHelper.GetPropertyName(() => Massnahmenvorschlag) || args.PropertyName == ExpressionHelper.GetPropertyName(() => ZustandsErfassungsmodus) || args.PropertyName == ExpressionHelper.GetPropertyName(() => Dringlichkeit) ) { OnChanged(); } }; }
private void Load(ZustandsabschnittGISDTO za, StrassenabschnittGISDTO sa) { Laenge = za.Laenge; Aufnahmedatum = za.Aufnahmedatum; Aufnahmeteam = za.Aufnahmeteam; Abschnittsnummer = za.Abschnittsnummer; Wetter = za.Wetter; Bemerkung = za.Bemerkung; FlaecheFahrbahn = za.FlaecheFahrbahn; FlaecheTrottoirLinks = za.FlaceheTrottoirLinks; FlaecheTrottoirRechts = za.FlaceheTrottoirRechts; HasTrottoir = sa.Trottoir != TrottoirTyp.NochNichtErfasst && sa.Trottoir != TrottoirTyp.KeinTrottoir; }
public ZustandsabschnittDetailsViewModel( ZustandsabschnittGISDTO zustandsabschnittGisdto, StrassenabschnittGISDTO strassenabschnittGisdto, IDTOService dtoService, IWindowService windowService) { this.zustandsabschnittGisdto = zustandsabschnittGisdto; this.strassenabschnittGisdto = strassenabschnittGisdto; this.dtoService = dtoService; this.windowService = windowService; RegisterValidation(vm => vm.Aufnahmeteam, () => LenghtValidator(Aufnahmeteam), LengthValidationMessage()); RegisterValidation(vm => vm.Bemerkung, () => LenghtValidator(Bemerkung, 8000), LengthValidationMessage(8000)); RegisterValidation(vm => vm.Aufnahmedatum, () => DateTimeValidator(Aufnahmedatum), DateTimeValidationMessage()); RegisterValidation(vm => vm.Aufnahmedatum, () => RequiredValidator(Aufnahmedatum), MobileLocalization.RequiredValidationError); RegisterValidation(vm => vm.Abschnittsnummer, () => RangeValidator(Abschnittsnummer), RangeValidationMessage()); RegisterValidation(vm => vm.Laenge, () => RequiredValidator(Laenge), MobileLocalization.GeometryShouldBeNotNull); RegisterValidation(vm => vm.Laenge, () => RangeValidator(Laenge, 1), RangeValidationMessage(1)); RegisterValidation(vm => vm.Laenge, ValidateZustandsabschnittStrassenabschnittLaenge, ZustandsabschnittStrassenabschnittLaengeValidationMessage()); Load(zustandsabschnittGisdto, strassenabschnittGisdto); DelegateEvent(() => IsValid, () => HasError); PropertyChanged += (sender, args) => { if ( args.PropertyName == ExpressionHelper.GetPropertyName(() => Aufnahmedatum) || args.PropertyName == ExpressionHelper.GetPropertyName(() => Laenge) || args.PropertyName == ExpressionHelper.GetPropertyName(() => Aufnahmeteam) || args.PropertyName == ExpressionHelper.GetPropertyName(() => Bemerkung) || args.PropertyName == ExpressionHelper.GetPropertyName(() => Wetter) ) { OnChanged(); } }; }
public ZustandFahrbahnWindowViewModel( ZustandsabschnittGISDTO zustandsabschnittGisdto, StrassenabschnittGISDTO strassenabschnittGisdto, IDTOService dtoService, ISchadenMetadatenService schadenMetadatenService, IWindowService windowService, IMessageBoxService messageBoxService) { this.zustandsabschnittGisdto = zustandsabschnittGisdto; this.strassenabschnittGisdto = strassenabschnittGisdto; this.dtoService = dtoService; this.schadenMetadatenService = schadenMetadatenService; this.messageBoxService = messageBoxService; OkCommand = new DelegateCommand(Ok); CancelCommand = new DelegateCommand(Cancel); RegisterValidation(m => m.Zustandsindex, () => IsValidDecimalWithDecimalPlaces(Zustandsindex, 2), string.Format(MobileLocalization.InvalidDecimalPlacesValidationError, 2)); RegisterValidation(m => m.Zustandsindex, () => RangeValidator(Zustandsindex, 0, 5), RangeValidationMessage(0, 5)); GrobItemViewModels = new ObservableCollection <GrobItemViewModel>(); DetailGroupItemViewModels = new ObservableCollection <DetailGroupItemViewModel>(); Load(zustandsabschnittGisdto); PropertyChanged += (sender, args) => { if (args.PropertyName != ExpressionHelper.GetPropertyName(() => IsValid) && args.PropertyName != ExpressionHelper.GetPropertyName(() => ValidationErrorStrings) && args.PropertyName != ExpressionHelper.GetPropertyName(() => IsGrobInitializiert) && args.PropertyName != ExpressionHelper.GetPropertyName(() => IsDetailInitializiert) && args.PropertyName != ExpressionHelper.GetPropertyName(() => HasNoChanges) ) { HasNoChanges = false; } }; HasNoChanges = true; }
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); }
public ZustandsabschnittViewModel( ZustandsabschnittGISDTO zustandsabschnittGisDto, StrassenabschnittGISDTO strassenabschnittGisdto, IDTOService dtoService, IWindowService windowService, ISchadenMetadatenService schadenMetadatenService, IFormService formService, IMessageBoxService messageBoxService, IGeoJsonService geoJsonService, bool isNew = false) { this.zustandsabschnittGisDto = zustandsabschnittGisDto; this.strassenabschnittGisdto = strassenabschnittGisdto; this.dtoService = dtoService; this.formService = formService; this.messageBoxService = messageBoxService; this.geoJsonService = geoJsonService; ZustandsabschnittDetailsViewModel = new ZustandsabschnittDetailsViewModel(zustandsabschnittGisDto, strassenabschnittGisdto, dtoService, windowService); ZustandsErfassungsmodusChooserViewModel = new ZustandsErfassungsmodusChooserViewModel(zustandsabschnittGisDto, strassenabschnittGisdto, dtoService, windowService, schadenMetadatenService, messageBoxService, isNew); TabViewModels = new ObservableCollection <IZustandsabschnittTabViewModel> { ZustandsabschnittDetailsViewModel, ZustandsErfassungsmodusChooserViewModel }; if (strassenabschnittGisdto.Trottoir != TrottoirTyp.KeinTrottoir && strassenabschnittGisdto.Trottoir != TrottoirTyp.NochNichtErfasst) { ZustandTrottoirViewModel = new ZustandTrottoirViewModel(zustandsabschnittGisDto, strassenabschnittGisdto, dtoService, windowService); TabViewModels.Add(ZustandTrottoirViewModel); } SaveCommand = new DelegateCommand(Save); ApplyCommand = new DelegateCommand(Apply); CancelCommand = new DelegateCommand(Cancel); DeleteCommand = new DelegateCommand(Delete); OpenHelpWindowCommand = new DelegateCommand(() => { if (SelectedTabViewModel != null) { SelectedTabViewModel.OpenHelp(); } }); foreach (var tabViewModel in TabViewModels) { tabViewModel.PropertyChanged += (sender, args) => { if (args.PropertyName == ExpressionHelper.GetPropertyName(() => IsValid)) { IsChildsValid = TabViewModels.All(tvm => tvm.IsValid); } }; tabViewModel.Changed += (sender, args) => { HasChanges = true; }; } IsNew = isNew; RegisterValidation(vm => vm.BezeichnungVon, () => LenghtValidator(BezeichnungVon), LengthValidationMessage()); RegisterValidation(vm => vm.BezeichnungBis, () => LenghtValidator(BezeichnungBis), LengthValidationMessage()); Load(); PropertyChanged += (sender, args) => { if ( args.PropertyName == ExpressionHelper.GetPropertyName(() => BezeichnungVon) || args.PropertyName == ExpressionHelper.GetPropertyName(() => BezeichnungBis) ) { HasChanges = true; } }; }
public CheckOutGISStreams CheckOutData(IList <Guid> ids, bool exportBackground) { CheckOutGISStreams checkoutGISStreams = new CheckOutGISStreams(); DTOContainer dtosToExport = new DTOContainer(); Mandant mandant = null; IGeometry bbox = null; foreach (Guid id in ids) { InspektionsRouteGIS inspektionsroute = inspektionsRouteGISService.GetInspektionsRouteById(id); mandant = inspektionsroute.Mandant; if (bbox != null) { bbox = bbox.Union(inspektionsroute.Shape.Envelope).Envelope; } else { bbox = inspektionsroute.Shape.Envelope; } IList <InspektionsRtStrAbschnitte> inspektionsroutenAbschnitte = inspektionsRtStrAbschnitteService.GetCurrentEntities().Where(ira => ira.InspektionsRouteGIS.Id == inspektionsroute.Id).ToList(); inspektionsroutenAbschnitte.OrderBy(ira => ira.Reihenfolge); //Strassenabschnitte foreach (InspektionsRtStrAbschnitte inspektionsroutenAbschnitt in inspektionsroutenAbschnitte) { StrassenabschnittGISDTO strassenabschnittGISDTO = strassenabschnittGISDTOService.GetDTOByID(inspektionsroutenAbschnitt.StrassenabschnittGIS.Id); dtosToExport.DataTransferObjects.Add(strassenabschnittGISDTO); //Zustandsabschnitte foreach (ZustandsabschnittGIS zustandsabschnitt in inspektionsroutenAbschnitt.StrassenabschnittGIS.Zustandsabschnitten) { ZustandsabschnittGISDTO zustandsabschnittGISDTO = zustandsabschnittGISDTOService.GetDTOByID(zustandsabschnitt.Id); dtosToExport.DataTransferObjects.Add(zustandsabschnittGISDTO); foreach (Schadendetail schaden in zustandsabschnitt.Schadendetails) { SchadendetailDTO schadendto = schadendetailDTOService.GetDTOByID(schaden.Id); schadendto.ZustandsabschnittId = zustandsabschnitt.Id; dtosToExport.DataTransferObjects.Add(schadendto); } foreach (Schadengruppe schadengruppe in zustandsabschnitt.Schadengruppen) { SchadengruppeDTO schadengruppedto = schadengruppeDTOService.GetDTOByID(schadengruppe.Id); schadengruppedto.ZustandsabschnittId = zustandsabschnitt.Id; dtosToExport.DataTransferObjects.Add(schadengruppedto); } } } } IGeometry backgroundBbox = null; //Achsensegmente foreach (AchsenSegment achsensegment in achsenSegmentService.GetCurrentBySpatialFilter(bbox).Where(a => a.Mandant == mandant)) { dtosToExport.DataTransferObjects.Add(achsenSegmentDTOService.GetDTOByID(achsensegment.Id)); if (backgroundBbox != null) { backgroundBbox = backgroundBbox.Envelope.Union(achsensegment.Shape.Envelope); } else { backgroundBbox = achsensegment.Shape.Envelope; } } List <Belastungskategorie> belastungskategorien = belastungskategorieService.AlleBelastungskategorie; foreach (Belastungskategorie bk in belastungskategorien) { dtosToExport.DataTransferObjects.Add(belastungskategorieDTOService.GetDTOByID(bk.Id)); } List <MassnahmenvorschlagKatalog> mvklist = massnahmenvorschlagKatalogService.GetCurrentEntities().Where(mvk => mvk.Mandant.Id == mandant.Id && mvk.ErfassungsPeriod.IsClosed == false).ToList(); foreach (MassnahmenvorschlagKatalog mvk in mvklist) { dtosToExport.DataTransferObjects.Add(massnahmenvorschlagKatalogDTOService.GetDTOByID(mvk.Id)); } IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); MemoryStream serializedModelsStream = new MemoryStream(); formatter.Serialize(serializedModelsStream, dtosToExport); serializedModelsStream.Seek(0, 0); checkoutGISStreams.Bezeichnung = "export"; LayerCollection exportLayer = serverConfigurationProvider.ExportLayer; int count = exportLayer.Count; string filepath = serverConfigurationProvider.WMSCacheFolderPath; for (int i = 0; i < count; i++) { ITileSourceFactory fact = null; var layer = exportLayer[i]; switch (layer.ServiceType) { case ServiceType.WMS: fact = new WmsTileSourceFactory(layer); break; case ServiceType.WMTS: fact = new WmtsTileSourceFactory(layer); break; default: break; } TileLoader loader = new TileLoader(fact.GetTileSource()); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); checkoutGISStreams.Tiles.Add(loader.GetTiles(layer, bbox, filepath, serverConfigurationProvider.UseWMSCaching, fact.Format, serverConfigurationProvider.ExportBackgroundMapBuffer, serverConfigurationProvider.ExportTileLimit, download: exportBackground)); stopwatch.Stop(); Loggers.PeformanceLogger.DebugFormat("Layer {0} downloaded in {1}", layer.Name, stopwatch.Elapsed); } checkoutGISStreams.ModelsToExport = serializedModelsStream; checkoutGISStreams.LegendStreams.Add(FileNameConstants.AchsenSegmentLayerLegendFilename, legendService.GetLegendStream("AchsenSegmentLayer")); checkoutGISStreams.LegendStreams.Add(FileNameConstants.StrassenabschnittLayerLegendFilename, legendService.GetLegendStream("StrassenabschnittLayer")); checkoutGISStreams.LegendStreams.Add(FileNameConstants.ZustandsabschnittLayerLegendFilename, legendService.GetLegendStream("ZustandsabschnittLayer")); checkoutGISStreams.LegendStreams.Add(FileNameConstants.ZustandsabschnittLayerTrottoirLegendFilename, legendService.GetLegendStream("ZustandsabschnittLayer_Trottoir")); return(checkoutGISStreams); }