¿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). Por lo general, hemos usado productos ESRI en el pasado (en este momento 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?

EDITAR : 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 archivo JPEG / PNG).

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

Entonces, estoy buscando ver si hay una solución de software libre que me permita recortar o generar sobre la marcha un subconjunto de la leyenda de la geología que refleje los elementos reales en pantalla / en el mapa, para ir con el documento impreso . Espero que esto aclare las cosas; Pido disculpas si no es así!

ollyoop
fuente
1
Hola ollyoop: me cuesta imaginarme el resultado deseado. ¿Puedes incluir un ejemplo de la leyenda mala y un ejemplo de una buena leyenda? Creo que eso podría ayudarme a mí u otros a dar una respuesta. Gracias
andytilia
Esta característica se ha incluido en Arcgis Server 10.1, la he visto durante una presentación de ESRI.
geogeek
Hmmm, bueno, veremos cómo funciona. Mientras tanto, ¿hay alguna solución de software libre?
ollyoop
1
Basado en FOSS o ESRI, parece que necesitará un código personalizado.
Ragi Yaser Burhum
Seguramente Latitude Geographics puede hacer esto. ¿Has hablado con ellos al respecto (ya sea que esté o no en Geocortex Essentials o si planean implementarlo)?
Chad Cooper el

Respuestas:

3

Definitivamente es posible hacer lo que quiera, dependiendo de ciertas condiciones. Eche un vistazo a esta aplicación Flex que había desarrollado hace un par de años: http://india-wris.nrsc.gov.in/LULCApp.html .

La leyenda y las estadísticas cambian según los datos visibles en la extensión actual. El algoritmo requiere que cada clase 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 que contiene. Con esto, puede averiguar qué colores o clases están actualmente visibles. Según esta información, la leyenda se crea dinámicamente.

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 del mapa para obtener su leyenda creada dinámicamente.

Devdatta Tengshe
fuente
Eso es exactamente! Genial para ver un ejemplo en la práctica. ¡¡¡Muy apreciado!!!
ollyoop
5

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

No es eso difícil, pero le tomará más de unas pocas líneas de código.

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

En el pasado, he logrado algo similar a lo que describiste usando Pagelayout Frame Elements .

Si nunca ha hecho ArcObjects (pero lo ha programado), el código de dibujo puede ser un poco complicado, pero generalmente se necesita hacer uno para alcanzar ese "¡ajá!" momento.

El algoritmo es simple:

  • (1) Obtenga el objeto Map del diseño de página que desea usar como referencia para generar la leyenda ... Puede que tenga que lidiar con varios marcos para llegar al mapa que desea, porque un Pagelayout puede contener varios objetos Map con diferentes extensiones que es un poco inusual si no ha realizado ninguna programación personalizada de ArcMap Pagelayout (piense en los pequeños mapas insertados que puede tener).

  • (2) Tome la extensión visible de ActiveView del mapa que desee.

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

  • (4) Si la capa devuelve algún registro, debe dibujarla como se muestra en los ejemplos que le di antes.

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

Actualizar:

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

Una de ellas es a través de una Extensión de Objeto de ArcGIS Server . Seguiría todos los pasos excepto (1) (no necesita preocuparse por la reproducción de página en este contexto). Exponer el resultado usando REST.

A partir de aquí, tiene varias opciones (basadas en si desea usar 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 en comparación con otros que se han sugerido es que puede usar cualquier simbología con sus características (y no se limita a colores distintos para la simbología de la característica). Puede usar 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á escribir una Extensión de Objeto de Servidor! Afortunadamente, hay una muestra de ESRI que ya hace el 75% de lo que necesita y debería darle 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.

Ragi Yaser Burhum
fuente
1
¡Muchas gracias por la respuesta! Hay una herramienta llamada Legend Limiter que ya hace esto para el entorno ArcGIS. Lo que estoy buscando hacer es portar esa capacidad al mundo del mapeo web.
ollyoop
@ollyoop Al menos hasta 9.3, sé que este mismo enfoque habría funcionado completamente bien para ArcGIS Server. Sé que ha habido cambios significativos en la arquitectura de representación del servidor desde 9.3, y admito que no he seguido el ritmo. Sin embargo, me sorprendería que los elementos personalizados se extrajeran de 10.1.
Ragi Yaser Burhum
@ollyoop agregó un enfoque que funcionaría con ArcGIS Server
Ragi Yaser Burhum
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 de la leyenda se dibuja realmente en la extensión del área impresa.

Entonces, si desea cambiar el comportamiento de la leyenda, puede personalizar el subinforme de la leyenda o puede usar una imagen en lugar de un subinforme para colocar una leyenda en la plantilla de impresión. Si ya está generando una imagen de leyenda de alguna manera para usar 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)

mwalker
fuente
1

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

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

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


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

NOTA: cuando piensa en alguna solución GIS / FOSS, puede pensar primero con 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 verifique si puede especificar BBOX para mostrar solo un subconjunto de leyenda.


Si desea construir 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), puede ofrecer una imagen JPEG como una solicitud de mapa WMS (sin mosaico): consulte el servicio GetMap de WMS .

PD: no es un estándar, pero quizás su servidor pueda configurarse para ofrecer un mapa con leyenda , mediante herramientas de plantilla, como MapServer.

Para crear un diseño de "mapa con leyenda", puede generar un HTML (o "archivo PDF sobre la marcha") con Javascript, PHP u otro idioma que realice las solicitudes del servicio web (REST) de mapa y leyenda.

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

Peter Krauss
fuente