Ejemplo n.º 1
0
        public void AddLayer(ArcImsLayer layer, string query, LayerQueryMode queryMode, Renderer renderer)
        {
            int nextLayerNo = 0;

            // layers from other services and data frames are not allowed

            if (layer.DataFrame != DataFrame)
            {
                throw new ArcImsException("The specified ArcImsLayer is not in the same service and dataframe as the ArcImsMap.");
            }

            // queries and renderers are only allow on feature layers

            SpatialQuery spatialQuery = null;

            if (!String.IsNullOrEmpty(query) && queryMode != LayerQueryMode.None)
            {
                if (layer.Type != CommonLayerType.Feature)
                {
                    throw new ArcImsException("Definition and selection queries are only allowed on feature layers");
                }

                spatialQuery = new SpatialQuery(query);
            }

            if (renderer != null && layer.Type != CommonLayerType.Feature)
            {
                throw new ArcImsException("Custom renderers are only allowed on feature layers");
            }

            // add all group layers that contain this layer

            ArcImsLayer parent = layer.Parent as ArcImsLayer;

            while (parent != null)
            {
                AddLayer(new LayerDef(parent.ID));
                parent = parent.Parent as ArcImsLayer;
            }

            // handle queries and renderers

            LayerDef layerDef = new LayerDef(layer.ID);

            if (spatialQuery != null)
            {
                if (queryMode == LayerQueryMode.Definition)
                {
                    layerDef.Query    = spatialQuery;
                    layerDef.Renderer = renderer;
                }

                if (queryMode == LayerQueryMode.Selection)
                {
                    Layer axlLayer = new Layer(String.Format("__{0}", nextLayerNo++));
                    axlLayer.Query   = spatialQuery;
                    axlLayer.Dataset = new Dataset(layer.ID);

                    if (_service.IsArcMap)
                    {
                        layerDef.Renderer = renderer;
                    }
                    else
                    {
                        axlLayer.Renderer = renderer;
                    }

                    AddLayer(axlLayer);
                }
            }
            else
            {
                layerDef.Renderer = renderer;
            }

            AddLayer(layerDef);
        }
Ejemplo n.º 2
0
 public void AddLayer(ArcImsLayer layer, string query, LayerQueryMode queryMode)
 {
     AddLayer(layer, query, queryMode, null);
 }