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