¿Existe una solución FOSS para el análisis de leyendas en un entorno de mapeo web?

14

Nuestros requisitos de mapeo web son bastante estándar: algunas consultas básicas y la capacidad de imprimir el mapa resultante (o guardar la imagen). Normalmente, hemos usado productos ESRI en el pasado (ahora estamos usando GeoCortex) pero aún no hemos podido resolver el problema de cómo analizar la información de la leyenda para que coincida con lo que realmente se muestra en el mapa. Por ejemplo, si hay cuatro polígonos que aparecen en el mapa, solo debería haber cuatro elementos de leyenda para los polígonos. ¿Existe una solución de código abierto para este problema?

EDIT : veamos si puedo aclarar esto más. Actualmente, tenemos una capa de geología con más de 33,000 polígonos. La leyenda de esta capa es una imagen única y contiene varios cientos de elementos de leyenda (es decir, es la leyenda de toda la capa de geología, almacenada en un JPEG / PNG).

Normalmente, un usuario ampliará un área (como una hoja de mapa NTS única, o incluso más pequeña) y así se mostrará un subconjunto de polígonos geológicos en la pantalla. Luego guardarán el mapa como un documento impreso (PDF o imagen), generado por GeoCortex / ArcGIS Server. El documento impreso contendrá un encabezado, una imagen del mapa y una leyenda. Sin embargo, la leyenda para la capa de geología será la leyenda para la capa de geología entera , no lo que realmente se muestra en el mapa (es decir, un subconjunto mucho más pequeño).

Por lo tanto, estoy mirando para ver si hay una solución FOSS que me permita recortar o generar sobre la marcha un subconjunto de la leyenda de la geología que refleja los elementos reales en pantalla / en el mapa, para ir con el documento impreso. Espero que esto aclare las cosas; ¡Me disculpo si no lo hace!

    
pregunta ollyoop 09.11.2012 - 18:32

4 respuestas

3

Definitivamente es posible hacer lo que quieras, dependiendo de ciertas condiciones. Eche un vistazo a esta aplicación Flex que había desarrollado hace un par de años: enlace .

La Leyenda y las Estadísticas, cambian según los datos visibles en la extensión actual. El algoritmo requiere que cada una de las clases tenga un color distinto. La aplicación Flex conoce la clase, y su color. En cada cambio de extensión, convierte la extensión del mapa actual en un mapa de bits y luego descubre los colores en él. Usando esto, puedes averiguar qué colores o clases están visibles actualmente. Sobre la base de esta información, la leyenda se crea de forma dinámica.

Había usado Flex en ese momento, pero esto también es posible usando el Canvas en HTML5. O puede usar cualquier código del lado del servidor para hacer lo mismo con su imagen de mapa para obtener su leyenda creada dinámicamente.

    
respondido por el Devdatta Tengshe 16.11.2012 - 17:23
5

AFAIK, en FOSS4G o ESRI, deberá escribir un código personalizado para generar esta capa.

No es difícil , pero te llevará más que unas pocas líneas de código.

Para ArcMap, esto se logra usando un Elemento personalizado . El sitio de ayuda de ESRI está lleno de ejemplos antiguos y nuevos ejemplos .

En el pasado, he logrado algo similar a lo que describiste utilizando Pagelayout Elementos del marco .

Si nunca has hecho ArcObjects (pero has programado), el código de dibujo puede ser un poco complicado, pero normalmente es necesario hacer que uno alcance ese "¡aha!" momento.

El algoritmo es simple:

  • (1) Obtenga Mapa objeto del PageLayout que desea usar como referencia para generar la leyenda ... Es posible que tenga que lidiar con múltiples cuadros para alcanzar el mapa que desea, ya que un Pagelayout puede contener varios objetos de mapa con diferentes extensiones, lo cual es un poco inusual si no lo ha hecho cualquier programación personalizada de ArcMap Pagelayout (piense en los pequeños mapas de inserción que puede tener).

  • (2) Agarra la Extensión visible de ActiveView del mapa que desea.

  • (3) Use eso como su geometría de filtro de consulta para realizar un bucle y buscar a través de todas las capas en el mapa.

  • (4) Si la capa devuelve los registros de cualquier , debe dibujarla como se muestra en los ejemplos que le di anteriormente.

Lo siento, no puedo ofrecerte una solución más fácil, pero al menos de esta manera podrás hacer que se vea como quieras, solo requiere codificación.

Actualización:

Como quería hacer esto en el contexto de una aplicación web, verifiqué la documentación y hay varias formas de hacerlo utilizando un algoritmo similar.

Uno de estos es a través de un ArcGIS Server Object Extension . Debería realizar todos los pasos excepto (1) (no tiene que preocuparse por Pagelayout en este contexto). Exponer el resultado utilizando REST.

Desde aquí, tiene varias opciones (en función de si desea utilizar Flex o Javascript), pero la idea es la misma: en la actualización de la página, llame al servicio web REST que creó y dibuje la leyenda.

La ventaja de este enfoque, a diferencia de otros que se han sugerido, es que puede utilizar la simbología cualquier con sus características (y no se limita a colores distintos para la simbología de la característica). Puede utilizar su idioma web favorito para el código del lado del cliente. Los símbolos que genera para la leyenda se pueden generar automáticamente desde el mapa.

¡La desventaja es que necesitarás escribir una extensión de objeto de servidor! Afortunadamente, hay un muestra de ESRI que hace el 75% de lo que hace ya lo necesito y debería darte una idea clara de cómo continuar con los comentarios que hice anteriormente.

Actualización 2: En cuanto a una solución FOSS4G para esto, el mismo enfoque también funcionaría con cualquiera de los servidores FOSS, aunque la API es ligeramente diferente para cada uno.

    
respondido por el Ragi Yaser Burhum 16.11.2012 - 16:58
3

Cuando exporta a un PDF con Geocortex Essentials, la leyenda se genera mediante un subinforme en la plantilla de impresión. Este subinforme recibe todas las capas visibles que se usaron para crear la imagen del mapa, y todas las muestras de leyenda producidas por ArcGIS Server. No emite ninguna consulta espacial para determinar si alguna capa en la leyenda se dibuja realmente en la extensión del área impresa.

Por lo tanto, si desea cambiar el comportamiento de la leyenda, puede personalizar el subinforme de leyenda o puede usar una imagen en lugar de un subinforme para incluir una leyenda en la plantilla de impresión. Si ya está generando una imagen de leyenda para su uso en su visor, debería poder reutilizar ese servicio desde el motor de impresión.

La leyenda ya contiene algún código en línea incrustado que alterna el formato del texto de la leyenda en función de si la muestra es para una capa o para una clase en la capa. Puede ver el código en línea al cambiar a la pestaña "Secuencias de comandos" en el diseñador de informes.

(trabajo en Latitude Geographics)

    
respondido por el mwalker 17.11.2012 - 08:00
1

Acerca del "mapeo web" con la "solución FOSS" completa ... Consideraciones:

  • La "solución FOSS" debe ser "popular" (tener una comunidad grande y organizada) para que sea segura, estable, etc.
  • Un concepto clave en FOSS y GIS es estandarización : las mejores soluciones adoptan estándares, como OGC .
  • Hoy en día, las populares "soluciones web" son OpenLayers, Mapserver, GeoServer, PostGIS, etc. Todos tienen un núcleo compatible con OGC. La solución "GeoCortex / ArcGIS Server" no es FOSS, pero, quizás, es compatible con OGC.

Y consideración técnica: estás utilizando "coberturas" (?), por lo que un buen estándar OGC para recuperar tu información espacial es el WMS .

Una solución simple compatible con OGC para su problema es utilizar los servicios WMS GetCapabilities y GetLegendGraphic , que devuelven una descripción de leyenda estándar en un archivo XML, y la imagen con leyendas.

  

NOTA: cuando piensas en alguna solución GIS / FOSS, puedes pensar primero con los estándares, luego el problema se reduce a un "problema conocido de piezas LEGO", y las piezas provienen de cualquier proveedor.

ArcGIS 10+ tiene GetLegendGraphic , pero verifica si puede especificar BBOX para mostrar solo un subconjunto de leyenda.

Si desea crear un diseño de mapa con leyenda , hay otras piezas de esta "solución FOSS LEGO":

Cualquier servidor de mapas FOSS, como MapServer (y creo que las soluciones ESRI también) pueden ofrecer una imagen JPEG como una solicitud de mapa WMS (sin mosaico); consulte servicio GetMap de WMS.

PS: no es un estándar, pero quizás su servidor puede configurarse para ofrecer mapa con leyenda , por plantilla herramientas, como MapServer.

Para crear un diseño de "mapa con leyenda", puede generar un HTML (o "archivo PDF al vuelo") con Javascript, PHP u otro idioma que haga (REST) servicio web solicitudes de mapa y leyenda.

Prefiero generar PDF desde HTML: puede usar wkHtmlToPdf , una solución FOSS para HTML a PDF conversiones Para producir diseños más deficientes, con "diseño JPEG al vuelo", puede usar un kit de herramientas estándar de FOSS, como imagemagick , en el servidor.

    
respondido por el Peter Krauss 20.11.2012 - 11:34

Lea otras preguntas en las etiquetas