Пример #1
0
        private static Layers FindMapLayersFromTOC(IServiceMap map, string id)
        {
            if (map.TOC == null)
            {
                return(new Layers());
            }

            ITOC toc = map.TOC;

            foreach (ITOCElement tocElement in toc.Elements)
            {
                if (tocElement == null ||
                    tocElement.ElementType != TOCElementType.Layer ||
                    tocElement.Layers.Count == 0
                    )
                {
                    continue;
                }

                foreach (ILayer layer in tocElement.Layers)
                {
                    if (layer.SID == id)
                    {
                        Layers layers = new Layers(tocElement.Layers);

                        layers.Title      = tocElement.Name;
                        layers.TocElement = tocElement;
                        return(layers);
                    }
                }
            }

            return(new Layers());
        }
Пример #2
0
        private static List <Layers> MapLayersFromTOC(IServiceMap map)
        {
            List <Layers> layersList = new List <Layers>();

            if (map.TOC == null)
            {
                return(layersList);
            }

            ITOC toc = map.TOC;

            foreach (ITOCElement tocElement in toc.Elements)
            {
                if (tocElement == null ||
                    tocElement.ElementType != TOCElementType.Layer ||
                    tocElement.Layers.Count == 0
                    )
                {
                    continue;
                }

                Layers layers = new Layers();
                layers.Title      = tocElement.Name;
                layers.TocElement = tocElement;
                layers.GroupName  = ParentGroupName(tocElement);
                foreach (ILayer layer in tocElement.Layers)
                {
                    if (layer == null)
                    {
                        continue;
                    }
                    layers.Add(layer);
                }
                if (layers.Count > 0)
                {
                    layersList.Add(layers);
                }
            }

            return(layersList);
        }
Пример #3
0
        public void Load(IPersistStream stream)
        {
            string mapName = (string)stream.Load("map", "");

            if (_maps != null)
            {
                foreach (IMap map in _maps)
                {
                    if (map.Name == mapName)
                    {
                        this.Map = (Map)map;
                        break;
                    }
                }
            }

            double?minx = (double?)stream.Load("minx");

            if (minx != null)
            {
                _envelope = new Envelope(
                    (double)minx,
                    (double)stream.Load("miny", 0.0),
                    (double)stream.Load("maxx", 0.0),
                    (double)stream.Load("maxy", 0.0));
            }

            if (this.Map != null)
            {
                TOC objInst = new TOC(this.Map);
                objInst.Modifier = TOCModifier.Private;
                _toc             = (TOC)stream.Load("ITOC", null, objInst);
                if (_toc == null)
                {
                    objInst.Dispose();
                }
                _displayRotation = (double)stream.Load("DisplayRotation", (double)0.0);
            }
        }
Пример #4
0
        private static Layers FindMapLayersFromTOC(IServiceMap map, string id, List <ILayer> clonedLayers)
        {
            if (map.TOC == null)
            {
                return(new Layers());
            }

            ITOC toc = map.TOC;

            foreach (ITOCElement tocElement in toc.Elements)
            {
                if (tocElement == null ||
                    tocElement.ElementType != TOCElementType.Layer ||
                    tocElement.Layers.Count == 0
                    )
                {
                    continue;
                }

                foreach (ILayer layer in tocElement.Layers)
                {
                    if (layer.SID == id)
                    {
                        Layers layers = new Layers();
                        foreach (ILayer origLayer in tocElement.Layers)
                        {
                            layers.Add(GetLayerByID(clonedLayers, origLayer.ID));
                        }
                        layers.Title      = tocElement.Name;
                        layers.TocElement = tocElement;
                        layers.GroupName  = ParentGroupName(tocElement);
                        return(layers);
                    }
                }
            }

            return(new Layers());
        }
Пример #5
0
        async public Task <IBitmap> Legend()
        {
            ITOC toc = _toc.Clone(this) as ITOC;

            #region WebServiceLayer
            List <IWebServiceLayer> webServices;
            if (this.TOC != null)
            {
                webServices = ListOperations <IWebServiceLayer> .Swap(this.TOC.VisibleWebServiceLayers);
            }
            else
            {
                webServices = new List <IWebServiceLayer>();
                foreach (IDatasetElement layer in this.MapElements)
                {
                    if (!(layer is IWebServiceLayer))
                    {
                        continue;
                    }

                    if (((ILayer)layer).Visible)
                    {
                        webServices.Add((IWebServiceLayer)layer);
                    }
                }
            }
            foreach (IWebServiceLayer element in webServices)
            {
                if (!(element is ILayer))
                {
                    continue;
                }

                if (!element.Visible)
                {
                    continue;
                }

                IWebServiceLayer wsLayer = LayerFactory.Create(element.WebServiceClass.Clone() as IClass, element) as IWebServiceLayer;
                if (wsLayer == null || wsLayer.WebServiceClass == null)
                {
                    continue;
                }

                if (BeforeRenderLayers != null)
                {
                    // layer im geklonten TOC austauschen...
                    // Besser layer als layer.Class verwendenden, weil Class von mehrerenen Layern
                    // verwendet werden kann zB bei gesplitteten Layern...
                    //ITOCElement tocElement = toc.GetTOCElement(element.Class);
                    ITOCElement tocElement = toc.GetTOCElement(element);
                    tocElement.RemoveLayer(element);
                    tocElement.AddLayer(wsLayer);

                    List <ILayer> modLayers = new List <ILayer>();
                    foreach (IWebServiceTheme theme in wsLayer.WebServiceClass.Themes)
                    {
                        if (theme is ILayer)
                        {
                            modLayers.Add(theme);
                        }
                    }
                    BeforeRenderLayers(this, modLayers);
                }
            }
            #endregion

            List <ILayer> layers = new List <ILayer>();
            if (this.TOC != null)
            {
                if (this.GetType().Equals(typeof(ServiceMap)))
                {
                    layers = ListOperations <ILayer> .Swap(this.TOC.Layers);
                }
                else
                {
                    layers = ListOperations <ILayer> .Swap(this.TOC.VisibleLayers);
                }
            }
            else
            {
                layers = new List <ILayer>();
                foreach (IDatasetElement layer in this.MapElements)
                {
                    if (!(layer is ILayer))
                    {
                        continue;
                    }

                    if (((ILayer)layer).Visible)
                    {
                        layers.Add((ILayer)layer);
                    }
                }
            }

            if (BeforeRenderLayers != null)
            {
                //
                // Kopie der Original Layer erstellen
                // ACHTUNG: Renderer werden nicht kopiert!
                // dürfen in BeforeRenderLayers nicht verändert werden...
                // Eine zuweisung eines neuen Renderers ist jedoch legitim.
                //
                List <ILayer> modLayers = new List <ILayer>();
                foreach (IDatasetElement element in layers)
                {
                    if (!(element is ILayer) || element is IWebServiceTheme)
                    {
                        continue;
                    }

                    ILayer layer = (ILayer)element;
                    if (layer.MinimumScale > 1 && layer.MinimumScale > this.mapScale)
                    {
                        continue;
                    }

                    if (layer.MaximumScale > 1 && layer.MaximumScale < this.mapScale)
                    {
                        continue;
                    }

                    ILayer newLayer = null;
                    modLayers.Add(newLayer = LayerFactory.Create(layer.Class, layer));

                    // layer im geklonten TOC austauschen...
                    if (element is ILayer && newLayer != null)
                    {
                        // Besser layer als layer.Class verwendenden, weil Class von mehrerenen Layern
                        // verwendet werden kann zB bei gesplitteten Layern...
                        //ITOCElement tocElement = toc.GetTOCElement(layer.Class);
                        ITOCElement tocElement = toc.GetTOCElement(layer);
                        tocElement.RemoveLayer(element as ILayer);
                        tocElement.AddLayer(newLayer);
                    }
                }
                BeforeRenderLayers(this, modLayers);
                layers = modLayers;
            }

            return(await toc.Legend());
        }