async static public Task <ServiceMap> CreateAsync(Map original, IMapServer mapServer, IEnumerable <IMapApplicationModule> modules) { var serviceMap = new ServiceMap(); serviceMap._mapServer = mapServer; serviceMap._modules = modules; serviceMap._layers = original._layers; serviceMap._datasets = original._datasets; serviceMap.m_imageMerger = new ImageMerger2(); serviceMap.m_name = original.Name; serviceMap._toc = original._toc; serviceMap.Title = original.Title; //serviceMap._ceckLayerVisibilityBeforeDrawing = true; serviceMap._mapUnits = original.MapUnits; serviceMap._displayUnits = original.DisplayUnits; serviceMap._backgroundColor = original.BackgroundColor; serviceMap.refScale = original.refScale; serviceMap.SpatialReference = original.Display.SpatialReference; serviceMap.LayerDefaultSpatialReference = original.LayerDefaultSpatialReference != null?original.LayerDefaultSpatialReference.Clone() as ISpatialReference : null; serviceMap._drawScaleBar = false; // Metadata await serviceMap.SetMetadataProviders(await original.GetMetadataProviders()); serviceMap._debug = false; serviceMap._layerDescriptions = original.LayerDescriptions; serviceMap._layerCopyrightTexts = original.LayerCopyrightTexts; serviceMap.SetResourceContainer(original.ResourceContainer); return(serviceMap); }
private static void ApplyMetadata(Map map) { try { if (map == null) { return; } FileInfo fi = new FileInfo(ServicesPath + @"\" + map.Name + ".meta"); IServiceMap sMap = new ServiceMap(map, Instance); XmlStream xmlStream; // 1. Bestehende Metadaten auf sds anwenden if (fi.Exists) { xmlStream = new XmlStream(""); xmlStream.ReadStream(fi.FullName); sMap.ReadMetadata(xmlStream); } // 2. Metadaten neu schreiben... xmlStream = new XmlStream("Metadata"); sMap.WriteMetadata(xmlStream); if (map is Metadata) { ((Metadata)map).Providers = sMap.Providers; } // Overriding: no good idea -> problem, if multiple instances do this -> killing the metadata file!!! //xmlStream.WriteStream(fi.FullName); } catch (Exception ex) { Logger.Log(loggingMethod.error, "LoadConfig: " + ex.Message); } }
async private Task <IServiceMap> FindServiceMap(string name, string alias, IServiceRequestContext context) { Map map = await FindMap(name, context); if (map != null) { IEnumerable <IMapApplicationModule> modules = null; if (_mapServiceDeploymentMananger.MapDocument is IMapDocumentModules) { modules = ((IMapDocumentModules)_mapServiceDeploymentMananger.MapDocument).GetMapModules(map); } return(await ServiceMap.CreateAsync(map, this, modules)); } if (name.Contains(",") /* && _serverLicType == ServerLicType.gdi*/) { Map newMap = null; string[] names = name.Split(','); #region Alias Service auflösen... StringBuilder sb = new StringBuilder(); foreach (string n in names) { IMapService ms = GetMapService(n.ServiceName(), n.FolderName()); if (ms == null) { return(null); } if (sb.Length > 0) { sb.Append(","); } if (ms is MapServiceAlias) { sb.Append(((MapServiceAlias)ms).ServiceName); } else { sb.Append(ms.Name); } } names = sb.ToString().Split(','); #endregion Array.Reverse(names); //if (names.Length > _maxGDIServices) //{ // return null; //} foreach (string n in names) { Map m1 = await FindMap(n, context); if (m1.Name == n) { if (newMap == null) { newMap = new Map(m1, true); } else { newMap.Append(m1, true); // SpatialReference von am weitesten unten liegenden Karte übernehmen // ist geschackssache... if (m1.Display != null && m1.Display.SpatialReference != null) { newMap.Display.SpatialReference = m1.Display.SpatialReference.Clone() as ISpatialReference; } } } } if (newMap != null) { // alle webServiceThemes im TOC vereinigen... if (newMap.TOC != null) { foreach (ITOCElement tocElement in newMap.TOC.Elements) { if (tocElement == null || tocElement.Layers == null) { continue; } foreach (ILayer layer in tocElement.Layers) { if (layer is IWebServiceLayer) { newMap.TOC.RenameElement(tocElement, newMap.Name + "_WebThemes"); break; } } } } newMap.Name = alias; if (!_mapServiceDeploymentMananger.MapDocument.AddMap(newMap)) { return(null); } bool found = false; foreach (IMapService ms in _mapServiceMananger.MapServices) { if (ms != null && ms.Name == alias && ms.Type == MapServiceType.GDI) { found = true; break; } } if (!found) { _mapServiceMananger.MapServices.Add(new MapService(_mapServiceMananger, name, String.Empty, MapServiceType.GDI)); } return(await ServiceMap.CreateAsync(newMap, this, null)); } } return(null); }