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?