Estoy construyendo funciones de anotación con Python/comtypes/ArcObjects. La anotación funciona muy bien en ArcMap (10.1), pero no se dibuja cuando se publica en un servicio de mapas en ArcGIS Server. Cada pieza de anotación consiste en una o más formas gráficas (GraphicElement), normalmente rectángulos, y uno o más objetos de texto gráfico (TextElement) sobre esos gráficos, todos agrupados en un GroupElement. El GroupElement es lo que se almacena en la anotación. La imagen de abajo muestra tres piezas de anotación, dos con fondos de rectángulos gráficos y una que contiene sólo un TextElement. Pensamos que el problema estaba en la fuente personalizada que contiene los caracteres de flecha, pero parece estar bien. La captura de pantalla es de ArcMap. Cuando la anotación que se ve aquí se publica en un servicio de mapas, sólo la característica de anotación simple sin el fondo de color se dibuja en el servicio. La anotación más compleja no lo hace, por lo que el problema parece estar en la presencia de objetos GraphicElement y TextElement en la misma característica de anotación o en el hecho de que el elemento almacenado es un GroupElement. (Hasta donde yo sé, una característica de anotación sólo puede almacenar un único elemento, de ahí que se agrupen primero todos los componentes).
¿Podría alguien tener alguna idea de por qué no se dibuja la anotación compleja? Cuando empecé, hace muchas lunas, a construir los scripts para hacer la anotación de esta manera, no había intención, al menos por mi parte, de desplegar nada de esto en un servicio de mapas. De hecho, sé poco sobre los servicios de mapas y su particular idiosincrasia. Estaba escribiendo estrictamente para la producción de datos en ArcMap para cubrir una necesidad de construcción y almacenamiento de información gráfica especializada en una geodatabase. La solución de las anotaciones ha funcionado tan bien que los poderes fácticos se han puesto manos a la obra y están intentando utilizar las anotaciones en servicios de mapas y aplicaciones web. Estoy fuera de mi zona de confort aquí, ya que mis scripts se han convertido a .NET y se han desplegado en aplicaciones web, y no he tenido mucho que ver con nada de eso. Lo que sé es que la anotación funciona maravillosamente en ArcMap pero no en un servicio de mapas. Cualquier idea aquí sería muy apreciada.
ACTUALIZACIÓN: No tengo acceso al servicio de mapas en cuestión aquí, y mi jefe está haciendo las pruebas aquí y allá entre los vuelos. Mi información es más bien de segunda mano; sin embargo, podría tener otra pista. (Lo que significa, no estoy seguro). Hay otras anotaciones que hacer renderizar OK. Un tipo es "sólo gráfico" construido a partir de múltiples formas gráficas que se agrupan y se almacenan en la anotación. El otro es el de las señales de stop. Estas señales se construyen a partir de una forma gráfica y un cuadro de texto que contiene la palabra "STOP". La diferencia entre la señal de stop y las otras anotaciones complejas ya comentadas (que no se renderizan) es que el cuadro de texto utiliza sólo una fuente, Arial para ser exactos. Las anotaciones complejas que no se renderizan acceden tanto a Arial (para las letras) como a nuestra fuente personalizada (para las flechas y otros símbolos). Por lo tanto, las anotaciones que no se renderizan son las que (1) se construyen a partir de gráficos y cuadros de texto y (2) en las que los cuadros de texto acceden a múltiples fuentes. Ambas condiciones son aparentemente necesarias para que no se rendericen. La anotación simple de la captura de pantalla -que sí se renderiza correctamente- accede a ambos tipos de letra pero no tiene ningún gráfico. (Desgraciadamente, la mayor parte de nuestras anotaciones cumplen los dos criterios de no renderización anteriores).
Además, he visto una posible solución que implica mover la capa de anotación a su propio servicio utilizando ArcGISDynamicMapServiceLayer. ¿Tiene esto algún sentido para alguien?
ACTUALIZACIÓN 2: Después de muchas pruebas y alguna ayuda experta de ESRI a través de los foros, se encontró una causa para el mal comportamiento del servicio de mapas. Parece que un servicio de mapas optimizado por ESRI no puede manejar anidado grupos, es decir, grupos dentro de grupos. El programador de ESRI que me ayudó es de la opinión de que esta deficiencia es un error y va a intentar registrarlo como tal. A continuación intentaré construir nuestra anotación sin agrupar ningún gráfico hasta que finalmente se agrupen todos una vez construidas todas las partes. De esta manera sólo hay un GroupElement global para todo el signo que se requiere para el almacenamiento en la anotación. Volveré a actualizar con mis resultados.