Ejemplo n.º 1
0
        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();
                }
            };
        }
Ejemplo n.º 2
0
        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();
                }
            };
        }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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;
                }
            };
        }
Ejemplo n.º 8
0
        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);
        }