示例#1
0
        public ExportResult Export(CheckOutGISStreams checkoutGISStream, IList <CheckOutsGISModel> cogModelList)
        {
            var exportResult = new ExportResult();

            try
            {
                string clientFilesPath = serverConfigurationProvider.ClientFilesFolderPath;

                using (ZipFile zipFile = new ZipFile())
                {
                    zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestSpeed;
                    AddLocalizedResourcesToZip(clientFilesPath, zipFile);

                    zipFile.AddDirectory(Path.Combine(clientFilesPath, FileNameConstants.MobilePackageFolderName), FileNameConstants.MobilePackageFolderName);
                    zipFile.AddEntry(checkoutGISStream.Bezeichnung + ".model", checkoutGISStream.ModelsToExport);
                    foreach (var kvp in checkoutGISStream.LegendStreams)
                    {
                        zipFile.AddEntry(kvp.Key, kvp.Value);
                    }

                    foreach (var tileInfo in checkoutGISStream.Tiles)
                    {
                        System.Uri uri1 = new Uri(Path.Combine(tileInfo.BasePath, tileInfo.RelativePath));

                        foreach (string file in tileInfo.AbsoluteFilePaths)
                        {
                            FileInfo      info        = new FileInfo(file);
                            DirectoryInfo directory   = info.Directory;
                            System.Uri    uri2        = new Uri(directory.ToString());
                            Uri           relativeUri = uri1.MakeRelativeUri(uri2);
                            zipFile.AddFile(file, Path.Combine(FileNameConstants.TileFolderName, tileInfo.RelativePath, relativeUri.ToString()));
                        }
                    }

                    cogModelList.ToList().ForEach(cog => cog = checkOutsGISService.CreateEntity(cog));
                    AddPackageDescriptor(zipFile, cogModelList, checkoutGISStream);

                    zipFile.Save(exportResult.Stream);
                }
                exportResult.Stream.Seek(0, 0);
            }
            catch (Exception ex)
            {
                Loggers.ApplicationLogger.Error("Exception while creating Zipfile for Export: " + ex.Message, ex);
                exportResult.Errors.Add(ex.Message);
            }

            return(exportResult);
        }
示例#2
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);
        }
示例#3
0
        private void AddPackageDescriptor(ZipFile zipFile, IList <CheckOutsGISModel> cogModelList, CheckOutGISStreams checkoutGis)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(ServerPackageDescriptor));

            Stream packageDescriptorStream = new MemoryStream();
            var    packageDescriptor       = new ServerPackageDescriptor
            {
                Version        = PackageVersioner.GetServerPackageVersion(),
                CurrentCulture = Thread.CurrentThread.CurrentUICulture.Name
            };

            foreach (var cog in cogModelList)
            {
                var id = cog.InspektionsRouteGIS;
                packageDescriptor.Inspektionsrouten.Add(new XMLKeyValuePair <Guid, string>(id, inspektionsRouteGISService.GetById(id).Bezeichnung));
                packageDescriptor.CheckOutsGISInspektionsroutenList.Add(new XMLKeyValuePair <Guid, Guid>(cog.Id, id));
            }
            var filepaths = zipFile.EntryFileNames.ToList();

            IList <string> fileextensions = new List <string>();

            filepaths.Where(fp => Path.GetExtension(fp) != string.Empty).ToList().ForEach(fp => fileextensions.Add(Path.GetExtension(fp)));
            foreach (var file in fileextensions.Distinct())
            {
                packageDescriptor.FileCount.Add(new XMLKeyValuePair <string, int>(file, fileextensions.Count(fe => fe == file)));
            }

            packageDescriptor.LayerConfig.AddRange(checkoutGis.Tiles);

            xmlSerializer.Serialize(packageDescriptorStream, packageDescriptor);
            packageDescriptorStream.Seek(0, 0);

            zipFile.AddEntry(FileNameConstants.ServerPackageDescriptorFileName, packageDescriptorStream);
        }