6 votos

Automatizar la exportación de leyendas de ArcMap

He estado construyendo leyendas para mis sitios web en javascript que utilizan servicios 9.3.1. Sé que existe la herramienta de leyendas de ESRI para los servicios más antiguos, pero no me parece que haga un buen trabajo a la hora de producir imágenes de leyendas para las capas rasterizadas, especialmente las capas rasterizadas continuas. También deja caer cosas como los encabezados de los símbolos. Idealmente, me gustaría ser capaz de imitar automáticamente el aspecto de la TOC de ArcMap.

He estado tratando de construir algún código de ArcObjects para crear una Leyenda para adjuntar a la Disposición de la Página y luego exportar eso a una imagen, pero parece que no puedo ser capaz de encontrar el código necesario para exportar la imagen después de construir la leyenda.

el siguiente código es el núcleo básico de lo que he probado hasta ahora:

    void OpenMXDViaMapDocument(string path)
    {

        IMapDocument pMapDocument = new MapDocumentClass();            

        if (pMapDocument.get_IsMapDocument(path))
        {
            pMapDocument.Open(path, null);
            IMap pMap;

            IPageLayout layout = pMapDocument.PageLayout;

            for (int i = 0; i <= pMapDocument.MapCount - 1; i++)
            {
                pMap = pMapDocument.get_Map(i);
                UID pId = new UID();
                pId.Value ="esriCarto.Legend";
                IMapSurround surround = pMap.CreateMapSurround(pId, null);
                ILegend iLegend = (ILegend)surround;
                int p = iLegend.ItemCount;

                iLegend.AutoVisibility = false;

                System.Drawing.Bitmap myBitmap = new Bitmap(500,500);
                IntPtr ptr = myBitmap.GetHbitmap();

                ESRI.ArcGIS.Display.SimpleDisplayClass sdc = new ESRI.ArcGIS.Display.SimpleDisplayClass();

                for (int y = 0; y < p; y++)
                {
                    ILegendItem iLegendItem = iLegend.get_Item(y);
                    LegendFormat legendFormat = new LegendFormat();
                    legendFormat.ShowTitle = true;

                    iLegendItem.CreateGraphics(sdc,legendFormat);
                    IEnumElement enumEles = iLegendItem.Graphics;
                    enumEles.Reset();
                    IGraphicElement ige = (IGraphicElement)enumEles.Next();
                    while (ige != null)
                    {
                        FileStreamClass fs_class = new FileStreamClass();
                        richTextBox1.Text = richTextBox1.Text + "#"+y+" - Graphic Element Type " + identifyGraphicElementType(ige) +"\n";
                        if (identifyGraphicElementType(ige).Equals("BmpPictureElement"))
                        {
            //All of them are apparently BmpPictureElements
                            BmpPictureElement bmpE;
                            //Java version has bmpE.save(IStream) ? 
                            fs_class.SaveToFile("C:\\utils\\newImages\\{0}_{1}.bmp");
                        }
                        ige = (IGraphicElement)enumEles.Next();
                    }                        
                }

            }

        }
    }

También me gustaría generar una imagen para cada capa del mapa que muestre el título, el encabezamiento del símbolo si lo hay y el símbolo. ¿Cómo puedo hacerlo?

2voto

saint_groceon Puntos 2696

Tal vez intente esto:

Cree un diseño con el marco del mapa situado fuera de la extensión de la página (ya que no le interesa dibujarlo). Haz que el tamaño del diseño sea sólo un poco más grande que el marco de la leyenda.

Para cada capa rasterizada, cargue el elemento de leyenda en la leyenda. Debería haber un solo elemento de leyenda para los tipos de capas que está haciendo, ¿verdad?

Ha pasado un tiempo, pero en algún lugar de ahí, puede que necesites llamar a IActiveView.Activate para que la leyenda se actualice.

Exportar todo el diseño utilizando el código del Ejemplo de exportación de la vista activa .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X