Select to view content in your preferred language

Copying multile types of layers from one map to another

935
3
10-13-2010 07:01 AM
jonataspovoas
Regular Contributor
Hi,

My application has two maps: the main page map and the print page childwindow map

so far, i copy the map layers one to the other statically, like this:

ArcGISDynamicMapServiceLayer servicoDestino;
ArcGISDynamicMapServiceLayer servicoOrigem;
GraphicsLayer graficosOrigem = Mapa.Layers["MyGraphicsLayer"] as GraphicsLayer;
GraphicsLayer graficosDestino = new GraphicsLayer();

//Pega os Layers Visíveis
//Layers Mapa Base - 22/069/2010
servicoDestino = new ArcGISDynamicMapServiceLayer();
List<int> ListaLayersVisiveis = new List<int>();
servicoOrigem = Mapa.Layers["Mapa Base"] as ArcGISDynamicMapServiceLayer;
servicoDestino.Url = servicoOrigem.Url;
if (servicoOrigem.Visible == true)
{
    if (servicoOrigem.VisibleLayers != null)
    {
        ListaLayersVisiveis = servicoOrigem.VisibleLayers.ToList();
        servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
    }
    servicoDestino.Opacity = servicoOrigem.Opacity;
    servicoDestino.ImageFormat = ArcGISDynamicMapServiceLayer.RestImageFormat.PNG32;
    imprimir.MapaImpressao.Layers.Add(servicoDestino);
}

//Layers Ortofoto 2006
servicoDestino = new ArcGISDynamicMapServiceLayer();
ListaLayersVisiveis = new List<int>();
servicoOrigem = Mapa.Layers["Ortofoto"] as ArcGISDynamicMapServiceLayer;
servicoDestino.Url = servicoOrigem.Url;
if (servicoOrigem.Visible == true)
{
    if (servicoOrigem.VisibleLayers != null)
    {
        ListaLayersVisiveis = servicoOrigem.VisibleLayers.ToList();
        servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
    }
    servicoDestino.Opacity = servicoOrigem.Opacity;
    servicoDestino.ImageFormat = ArcGISDynamicMapServiceLayer.RestImageFormat.PNG32;
    imprimir.MapaImpressao.Layers.Add(servicoDestino);
}

//Logradouros
servicoDestino = new ArcGISDynamicMapServiceLayer();
ListaLayersVisiveis = new List<int>();
servicoOrigem = Mapa.Layers["Logradouros"] as ArcGISDynamicMapServiceLayer;
servicoDestino.Url = servicoOrigem.Url;
if (servicoOrigem.Visible == true)
{
    if (servicoOrigem.VisibleLayers != null)
    {
        ListaLayersVisiveis = servicoOrigem.VisibleLayers.ToList();
        servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
    }
    servicoDestino.Opacity = servicoOrigem.Opacity;
    servicoDestino.ImageFormat = ArcGISDynamicMapServiceLayer.RestImageFormat.PNG32;
    imprimir.MapaImpressao.Layers.Add(servicoDestino);
}

//Bairros
servicoDestino = new ArcGISDynamicMapServiceLayer();
ListaLayersVisiveis = new List<int>();
servicoOrigem = Mapa.Layers["Bairros"] as ArcGISDynamicMapServiceLayer;
servicoDestino.Url = servicoOrigem.Url;
if (servicoOrigem.Visible == true)
{
    if (servicoOrigem.VisibleLayers != null)
    {
        ListaLayersVisiveis = servicoOrigem.VisibleLayers.ToList();
        servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
    }
    servicoDestino.Opacity = servicoOrigem.Opacity;
    servicoDestino.ImageFormat = ArcGISDynamicMapServiceLayer.RestImageFormat.PNG32;
    imprimir.MapaImpressao.Layers.Add(servicoDestino);
}

imprimir.MapaImpressao.ZoomTo(this._extentHistory[this._currentExtentIndex]);
imprimir.MapaImpressao.ZoomToResolution(this.Mapa.Resolution);
imprimir.MapaImpressao.PanTo(this.Mapa.Extent.GetCenter());

//Pega os Graficos do layerDeDesenhos
foreach (Graphic i in graficosOrigem)
{
    Graphic g = new Graphic();
    g.Geometry = i.Geometry;
    g.Symbol = i.Symbol;
    graficosDestino.Graphics.Add(g);
}
imprimir.MapaImpressao.Layers.Add(graficosDestino);

//Layer de Resultados de ZoomPorCoordenadas
graficosOrigem = Mapa.Layers["layerGraficoBuscaCoordenadas"] as GraphicsLayer;
graficosDestino = new GraphicsLayer();
foreach (Graphic i in graficosOrigem)
{
    Graphic g = new Graphic();
    g.Geometry = i.Geometry;
    g.Symbol = i.Symbol;
    graficosDestino.Graphics.Add(g);
}
imprimir.MapaImpressao.Layers.Add(graficosDestino);

//Layer de Graficos de  Resultados de Logradouros
graficosOrigem = Mapa.Layers["layerGraficosResultadosLogradouros"] as GraphicsLayer;
graficosDestino = new GraphicsLayer();
foreach (Graphic i in graficosOrigem)
{
    Graphic g = new Graphic();
    g.Geometry = i.Geometry;
    g.Symbol = i.Symbol;
    graficosDestino.Graphics.Add(g);
}
imprimir.MapaImpressao.Layers.Add(graficosDestino);


then I tried to make this generalization:
ESRI.ArcGIS.Client.GraphicsLayer servicoGrafico = new ESRI.ArcGIS.Client.GraphicsLayer();
ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer servicoDinamico = new ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer();
List<int> ListaLayersVisiveis = new List<int>();
for (int i = 0; i < Mapa.Layers.Count; i++)
{
    ListaLayersVisiveis = new List<int>();
    if (Mapa.Layers is ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer)
    {
        servicoDinamico = Mapa.Layers as ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer;
        ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer servicoDestino = new ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer();
        servicoDestino.Url = servicoDinamico.Url;
        if (servicoDinamico.Visible == true)
        {
            ListaLayersVisiveis = servicoDinamico.VisibleLayers.ToList();
            servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
            servicoDestino.ImageFormat = servicoDinamico.ImageFormat;
        }
        imprimir.MapaImpressao.Layers.Add(servicoDestino);
    }
    if (Mapa.Layers is ESRI.ArcGIS.Client.GraphicsLayer)
    {
        servicoGrafico = Mapa.Layers as ESRI.ArcGIS.Client.GraphicsLayer;
        ESRI.ArcGIS.Client.GraphicsLayer servicoDestino = new ESRI.ArcGIS.Client.GraphicsLayer();
        foreach (Graphic desenho in servicoGrafico)
        {
            Graphic aux = new Graphic();
            aux.Geometry = desenho.Geometry;
            aux.Symbol = desenho.Symbol;
            servicoDestino.Graphics.Add(aux);
        }
        imprimir.MapaImpressao.Layers.Add(servicoDestino);
    }
}


What am i missing??
0 Kudos
3 Replies
JenniferNery
Esri Regular Contributor
How about if you iterate through Map.Layers property?

Something like

foreach(var layer in MainPageMap.Layers)
{
     if(layer is ArcGISTiledMapServiceLayer)
     {
          ArcGISTiledMapServiceLayer tiledLayer = layer as ArcGISTiledMapServiceLayer;
          //TODO: Set all properties you need to copy
          ChildWindowMap.Layers.Add(new ArcGISTiledMapServiceLayer() {Url = tiledLayer.Url}); }
      }
    //TODO: continue to check other layer types
}
0 Kudos
dotMorten_esri
Esri Notable Contributor
What am i missing??


In the first place, what is the problem you are experiencing?
0 Kudos
jonataspovoas
Regular Contributor
In the first place, what is the problem you are experiencing?


in here:

    (...)
    if (servicoOrigem.VisibleLayers != null)
    {
        ListaLayersVisiveis = servicoOrigem.VisibleLayers.ToList();
        servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
        servicoDestino.ImageFormat = servicoDinamico.ImageFormat;
    }
    (...)


ListaLayersVisiveis should get the visible layers of the original layers, but servicoOrigem does not get the list of visible layers from the original map.

I need to copy the map as it is shown on the screen, so i must have the information of which layers are Visible and which are not.

Why does the fisrt one below gets the Layer.VisibleLayers list and the second one doesn't?

ArcGISDynamicMapServiceLayer servicoDestino;
ArcGISDynamicMapServiceLayer servicoOrigem;

servicoDestino = new ArcGISDynamicMapServiceLayer();
List<int> ListaLayersVisiveis = new List<int>();
servicoOrigem = Mapa.Layers["Mapa Base"] as ArcGISDynamicMapServiceLayer;
servicoDestino.Url = servicoOrigem.Url;
if (servicoOrigem.Visible == true)
{
    if (servicoOrigem.VisibleLayers != null)
    {
        ListaLayersVisiveis = servicoOrigem.VisibleLayers.ToList();
        servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
    }
    servicoDestino.Opacity = servicoOrigem.Opacity;
    servicoDestino.ImageFormat = ArcGISDynamicMapServiceLayer.RestImageFormat.PNG32;
    imprimir.MapaImpressao.Layers.Add(servicoDestino);
}

ArcGISDynamicMapServiceLayer servicoDinamico = new ArcGISDynamicMapServiceLayer();
List<int> ListaLayersVisiveis = new List<int>();
for (int i = 0; i < Mapa.Layers.Count; i++)
{
    ListaLayersVisiveis = new List<int>();
    if (Mapa.Layers is ArcGISDynamicMapServiceLayer)
    {
        servicoDinamico = Mapa.Layers as ArcGISDynamicMapServiceLayer;
        ArcGISDynamicMapServiceLayer servicoDestino = new ArcGISDynamicMapServiceLayer();
        servicoDestino.Url = servicoDinamico.Url;
        if (servicoDinamico.Visible == true)
        {
            ListaLayersVisiveis = servicoDinamico.VisibleLayers.ToList(); //<=this SHOULD have a list, but is always null.
            servicoDestino.VisibleLayers = ListaLayersVisiveis.ToArray();
            servicoDestino.ImageFormat = servicoDinamico.ImageFormat;
        }
        imprimir.MapaImpressao.Layers.Add(servicoDestino);
    }
}
0 Kudos