Más

GeoServer SLD: rellene un polígono con el color muestreado del degradado

GeoServer SLD: rellene un polígono con el color muestreado del degradado


Tengo una columna de "geometría" y una de "calificación". Quiero simbolizar las geometrías en un SLD (PolygonSymbolizer) pero llenarlo con un valor de color que se interpola entre AZUL-PÚRPURA-ROJO según el valor de calificación, en el rango de -100 a +100.

Entonces, el polígono tendría un solo color de relleno, pero el color debería ser dinámico, según el valor.

Intenté superponer dos simbolizadores con valores alfa escalados para el color de relleno: -100 a 0.0, +100 a 1.0 para el rojo y el valor negado para el azul, pero eso no funciona correctamente porque obtengo resultados diferentes dependiendo de si uso el rojo. primero y luego azul o al revés.


Al buscar una solución para "SLD basado en degradado de color para polígonos", encontré esta página: http://docs.geoserver.org/stable/en/user/styling/sld/tipstricks/transformation-func.html

Extracto: "Interpolar transforma un atributo de valor continuo en otro rango continuo de valores".

GeoServer proporciona una solución, pero no se llama algo con "gradiente".

Espero que esto ayude.


¿Cómo se cambia el color de un relleno complejo en ggplot2?

Estoy trazando un mapa con diferentes sitios de estudio de la resistencia a los medicamentos del parásito de la malaria. Los puntos de los sitios de estudio tienen un tamaño relativo a la cantidad de parásitos de la malaria que se muestrearon y el relleno de los puntos es un gradiente de 0 a 1 de la proporción de parásitos de la malaria que eran resistentes a los medicamentos. El siguiente código revela el mapa a continuación:

Intenté usar una opción de color pero no funcionó:

¿Alguien sabe cómo hacer que el color del relleno muestre una escala de rojo, siendo 0 más claro y 1 más oscuro?


GeoServer SLD: rellene un polígono con muestras de color de degradado - Sistemas de información geográfica

El proyecto CHGIS publica conjuntos de datos que deben ser abierto con software GIS (Geographic Information Systems), como ESRI ArcGIS (licencia paga) o QGIS (software gratuito). No podrá utilizar los datos de CHGIS, a menos que pueda aprender a utilizar el software GIS..

Vea una introducción a SIG de National Geographic Society.

Los conjuntos de datos publicados por CHGIS se dividen en varios tipos:

CHGIS también ofrece un buscador y API (interfaz del programa de aplicación) para buscar nombres de lugares individuales.

  • El motor de búsqueda es una forma simple de filtrar por nombre, tipo de característica, año de existencia.
  • La API está destinada a métodos de programación accionables por máquinas para buscar en el nomenclátor CHGIS y recuperar datos en varios formatos, como JSON y XML.

¿Qué son los datos de series temporales?

Para visualizar datos de series temporales, considere el diagrama a continuación, que muestra un grupo de objetos poligonales a medida que cambian con el tiempo. Son objetos separados temporalmente, pero superpuestos espacialmente.

Si estos tres objetos existieran en la misma capa GIS (de hecho, estos se encuentran en la capa Time Series Regime Polygons), se apilarían uno encima del otro y oscurecerían la forma del otro. El resultado sería una representación en la que las áreas reales de los objetos no podrían distinguirse visualmente con precisión. Dependiendo del orden en el que se apilan los objetos, que está determinado solo por el orden en que aparecen en la tabla GIS, es posible que se muestren parcialmente distorsionados o completamente oscurecidos, como se ve en la siguiente imagen.

Lo que estamos acostumbrados a ver como mapas son, de hecho, instantáneas geográficas en el tiempo, o Time Slices. Los segmentos de tiempo son simplemente capas de objetos espaciales para los que la fecha válida es la misma para todos los objetos. Cuando abrimos un atlas de carreteras, todas las características que se muestran se consideran vigentes en la fecha de publicación. Ver capas históricas de información espacial superpuestas una sobre otra es inusual en los mapas impresos y siempre se hace con un número muy limitado de capas que se pueden distinguir entre sí. Para nuestros datos de Series de Tiempo, no tenemos límite en la cantidad de objetos que pueden ocupar o superponerse en el mismo espacio, por lo tanto, la visualización de los datos da como resultado el tipo de problemas descritos anteriormente. Incluso si eliminamos el color de relleno de los polígonos, todavía nos queda una serie completamente ambigiosa de líneas de límite superpuestas, conocidas en el lenguaje GIS como & quotspaghetti. & Quot

Para dar sentido visual a los datos de series temporales, es conveniente extraer un subconjunto de los datos que sea válido para un tiempo determinado, en otras palabras, filtrar un solo intervalo de tiempo de los & quotspaghetti & quot de los objetos. Debido a que la unidad de tiempo más pequeña en los conjuntos de datos de CHGIS es un año, la granularidad temporal, si podemos seleccionar todos los objetos que eran válidos para un solo año, crearemos efectivamente un intervalo de tiempo para ese año.

Para tener una idea de cómo funciona esto, consulte el siguiente diagrama, en el que las series temporales cambiantes de los polígonos se representan con barras verticales, mientras que sus respectivas fechas de inicio y finalización aparecen como etiquetas en fuente azul. Los polígonos son representativos de lugares históricos que cambian en diferentes momentos, por lo que los registros de cada objeto histórico único tienen asincrónico fechas de inicio y finalización.

Por ejemplo, el polígono de color jade pálido, tiene tres instancias históricas que se muestra en el diagrama. La primera instancia es válida desde el momento 1 hasta el momento 4, la segunda instancia desde el momento 5 hasta el momento 9 y la tercera instancia desde el momento 10 hasta el momento 29. Por el contrario, el polígono de color canela se estableció por primera vez en el momento 5 y tomó jurisdicción sobre parte del área que antes formaba parte del polígono de color jade. En otras palabras, el área de jurisdicción del polígono de jade se redujo, y el área que perdió el polígono de jade se colocó bajo la jurisdicción del polígono tan recién creado. Este es un ejemplo típico de los cambios que se están rastreando en los conjuntos de datos de CHGIS.

En la columna central se muestran los segmentos de tiempo, que son un subconjunto de los datos de la serie de tiempo. Los objetos de un intervalo de tiempo son válidos por un solo año. Por lo tanto, al seleccionar solo los objetos que eran válidos para el tiempo 2, obtenemos un intervalo de tiempo en el tiempo 2, que se muestra en la parte inferior de la columna central.

Para seleccionar un solo año de los datos de la serie temporal, use una expresión de consulta para ArcGIS o QGIS.

¿Qué son los datos de Time Slice?

Para visualizar los datos del intervalo de tiempo, considere el siguiente diagrama, que muestra un grupo de objetos poligonales válidos para cuatro fechas diferentes.

Observando los cuatro cortes de tiempo consecutivos desde abajo y moviéndonos hacia arriba, podemos comprender cómo cambiaron los objetos con el tiempo. Por ejemplo, el polígono de color jade pálido se redujo de tamaño entre el tiempo 2 y el tiempo 6, y el área que perdió el polígono de jade se convirtió en un nuevo polígono de color tostado. Luego, entre el tiempo 6 y el tiempo 11, el polígono de jade se expandió ligeramente, mientras que el polígono de color lavanda se redujo de tamaño. Podemos deducir que estos cambios ocurrieron, pero a partir de los intervalos de tiempo representados no podemos decir cuándo ocurrieron los cambios.

Sería conveniente que los lugares históricos reales representados cambiaran simultáneamente a intervalos regulares, como parece implicar el diagrama. Pero, de hecho, las unidades administrativas históricas y otras características geográficas cambian constantemente de forma independiente unas de otras. Cada uno tiene sus propios plazos separados, desde el momento en que se establecieron o registraron por primera vez, a través de varios cambios de nombre o jurisdicción, y hasta el momento en que fueron abolidos, absorbidos o transformados en una nueva característica. En realidad, lo que estamos tratando al rastrear objetos geográficos históricos es una serie completa de eventos asincrónicos y una serie completa de objetos espaciales que se utilizan para representar cada una de las "instancias" de cambio para esos objetos.

Cuando estos objetos asincrónicos se recopilan en una sola capa GIS, nos referimos a ellos como conjuntos de datos de series temporales.

Cuando los lugares historicos validos solo para un año en particular se recopilan en una sola capa GIS, nos referimos a ellos como un conjunto de datos de intervalo de tiempo. Actualmente, los datos de CHGIS incluyen un conjunto de datos de intervalo de tiempo completo para el año 1820 y un conjunto de datos de intervalo de tiempo parcial para el año 1911.


Extensión de gráfico GeoServer

Los informes comerciales son una necesidad común en varias organizaciones. La mayoría de las veces, se basa en tablas y gráficos simples, como gráficos circulares o de barras. Sin embargo, a veces, es necesario agregarle una dimensión adicional, en particular, la distribución geográfica. En algunos casos, un mapa temático funciona bien, pero si necesita representar la composición de un fenómeno basándose en más de una variable, el resultado termina siendo difícil de leer.

Aquí es donde entra en juego la superposición de gráficos y mapas: la idea es superponer caracteres de barra, o gráficos circulares, sobre un polígono o mapa de puntos, asociando cada característica geográfica con su propio diagrama pequeño. Por sorprendente que parezca, ha podido crear mapas de este tipo con GeoServer desde hace unos meses: al combinar la función de simbolizadores dinámicos y la API en línea de Google Charts, ya es posible superponer gráficamente gráficos de la parte superior de un mapa. Esto funciona muy bien en conjunto con la salida KML, donde el cliente tiene que ir y buscar el gráfico por separado de todos modos. Sin embargo, presenta algunas limitaciones en el caso clásico de WMS:

depende de un servicio externo que no está bajo su control

Si falta alguna característica, puede preguntar y esperar que la próxima versión incluya esa característica.

la representación de los gráficos requiere llamadas remotas, lo que ralentizará significativamente la representación del mapa, al menos para las primeras solicitudes

Una solución de código abierto, completamente integrada en GeoServer, garantizaría el control sobre la disponibilidad del servicio, sobre sus características y proporcionaría un rendimiento excelente. David Gilbert, famoso por JFreeChart, debió haber pensado lo mismo cuando desarrolló Eastwood Charts, una implementación de código abierto de la API de Google Charts.

El módulo de gráficos GeoServer se basa en los gráficos de Eastwood, uniéndolo con las capacidades de simbolizadores dinámicos ya disponibles, para proporcionar gráficos rápidos en proceso sobre el mapa. Echemos un vistazo a un ejemplo creado sobre la capa de demostración de los estados top: estados. Vamos a representar la distribución de la población masculina / femenina en los distintos estados usando gráficos circulares, y para hacer que el diagrama sea más interesante, haremos que el tamaño del gráfico sea proporcional a la cantidad total de personas en el estado. Así es como se verá el resultado:

Puede descargar el estilo completo si lo desea, aquí veremos el fragmento en el que está configurado el diagrama:

Analicemos los componentes de la llamada ExternalGraphic, que siguen las reglas de una llamada API de Google Charts:

cht = p: el tipo de gráfico es circular

chd = t: $ <100 * MALE / PERSONS>, $ <100 * FEMALE / PERSONS>: los datos del gráfico se expresan en formato "texto" y, en particular, el primer valor es el resultado de 100 * MALE / PERSONS, donde MALE y PERSONS son dos atributos de la característica que se representa

chf = bg, s, FFFFFF00: indicamos que el relleno del fondo del gráfico es sólido, blanco y… transparente. En particular, el color se expresa como RRGGBBAA, donde AA es el componente alfa, que controla la transparencia. En particular, 0 es completamente transparente, 255 es completamente opaco

El tamaño del gráfico se controla utilizando el elemento habitual de gráficos externos, y en particular, se configura de manera que sea proporcional al atributo PERSONAS mediante la expresión: `20 + (PERSONAS / 20.000.000) * 60`.

Le recomendamos que descargue la extensión de gráficos y explore sus posibilidades de gráficos. Puede usarlo con GeoServer 1.7.4, y puede encontrar más información sobre la configuración de gráficos en la documentación en línea de Google Charts (tenga en cuenta que Eastwood no admite un puñado de gráficos y opciones, en particular, el Google-o-meter y el arañas).


Simbolizadores dinámicos¶

En SLD estándar, el elemento Mark / WellKnowName y el atributo ExternalGraphic / OnlineResource / & # 64xlink: href son cadenas fijas. Esto significa que tienen el mismo valor para todas las funciones renderizadas. Cuando los símbolos que se muestran varían según los atributos de las características, esta restricción da lugar a un estilo muy detallado, ya que se debe utilizar una Regla y un Simbolizador separados para cada símbolo diferente.

GeoServer mejora esto al permitir que las expresiones CQL se incrusten dentro del contenido de WellKnownName y OnlineResource / & # 64xlink: href. Cuando los nombres de los símbolos se pueden derivar de los valores de los atributos de características, esto proporciona un estilo mucho más compacto. Las expresiones CQL se pueden incrustar en una cadena de contenido & ltWellKnownName & gt o en un atributo & ltOnlineResource & gt xlink: href mediante la sintaxis:

Actualmente, las cadenas xlink: href deben ser URL válidas antes de se realiza la expansión de la expresión. Esto significa que una expresión no puede proporcionar completamente la URL. La cadena xlink: href debe incluir explícitamente al menos el prefijo http: //

La forma más simple de expresión es un nombre de atributo único, como $ . Por ejemplo, supongamos que queremos mostrar las banderas de los estados de EE. UU. Utilizando símbolos cuyos nombres de archivo coinciden con el nombre del estado. El siguiente estilo especifica los símbolos de la bandera usando una sola regla:

Si se requiere la manipulación de los valores de los atributos, se puede especificar una expresión CQL completa. Por ejemplo, si los valores del atributo STATE_ABBR están en mayúsculas pero la URL requiere un nombre en minúsculas, se puede utilizar la función CQL strToLowerCase:


Múltiplos pequeños para mapas de flujo de OD utilizando capas virtuales

En mis publicaciones anteriores, hablé de los mapas de flujo clásicos que usan flechas de diferente ancho para codificar flujos entre regiones. Esta publicación presenta una versión alternativa de la visualización de flujos, sin flechas. Este estilo está inspirado en Go with the Flow de Robert Radburn y Visualización de orígenes, destinos y flujos con mapas OD de J. Wood et al.

El punto de partida de esta visualización es una matriz OD clásica.

Para mis mapas de flujo anteriores, ya convertí estos datos en un formato más compatible con SIG: un Geopaquete con líneas e información sobre el origen, el destino y la fuerza del flujo:

Además, tomé polígonos de estado de Natural Earth Data.

En este punto, tenemos 72 entidades de flujo y 9 entidades poligonales de estado. Una combinación ordinaria en las propiedades de la capa no funcionará. Todavía estaríamos atascados con solo 9 polígonos.

¡Capas virtuales al rescate!

La función de capas virtuales de QGIS (menú Capa | Agregar capa | Agregar / editar capa virtual) proporciona capacidades de base de datos sin que tengamos que configurar una base de datos & # 8230 * win! *

Usando una consulta SQL clásica, podemos unir polígonos de estado y flujos de migración en una nueva capa virtual:

La capa virtual resultante contiene 72 entidades poligonales. Hay 8 copias de cada estado.

Ahora que los datos están listos, podemos empezar a diseñar el visualización en el Compositor de impresión.

Este es probablemente el paso más manual de todo este proceso: necesitamos 9 elementos de mapa, uno para cada minimapa en la visualización de múltiplos pequeños. Crea uno y configúralo a tu gusto, luego copia y pega para crear 8 copias más.

He decidido organizar los elementos del mapa de una manera que se asemeje a la ubicación geográfica real del estado que está representado por el mapa respectivo, desde el estado de Vorarlberg (un orgulloso patrocinador de QGIS por cierto) en el suroeste hasta Lower Austria en el noreste.

Para configurar qué elemento del mapa representará los flujos desde qué estado de origen, establecemos el ID del elemento del mapa en el ID del estado correspondiente. Como puede ver, los elementos del mapa están numerados del 1 al 9:

Una vez que todos los elementos del mapa están configurados, podemos usar los ID de elementos del mapa para filtrar las características en cada mapa. Esto se puede implementar usando un renderizador basado en reglas:

La primera regla garantizará que cada mapa solo muestre los flujos que se originan en un estado específico y la segunda regla seleccionará el estado en sí.

Configuramos el símbolo de la primera regla para visualizar la fuerza del flujo. El color representa el número de personas que se mudan al distrito respectivo. He decidido utilizar un degradado suave en lugar de clases predefinidas para los colores de relleno del polígono. La siguiente expresión asigna la característica y el valor de peso # 8217s a una sombra en la rampa de color Viridis:

Puede utilizar cualquier rampa de color que desee. Si desea utilizar la rampa de color Viridis, guarde el siguiente código en un archivo .xml e impórtelo usando el Administrador de estilos. (Esta rampa de color ha sido proporcionada por Richard Styron en rocksandwater.net).

Si volvemos al Compositor de impresión y actualizamos las vistas previas de los elementos del mapa, vemos que todo se junta:

Finalmente, establecemos el título, la leyenda, los textos explicativos y el color de fondo:

Creo que es sorprendente que podamos diseñar una visualización como esta sin tener que crear ningún archivo intermedio o tener que escribir código personalizado. Siempre que se edita un valor en el conjunto de datos de migración original, el cambio se refleja inmediatamente en los múltiplos pequeños.


¿Es posible rotar un relleno degradado con su forma?

Me resulta muy molesto tener que cambiar el ángulo de un relleno de degradado después de haber girado / volteado una forma.

¿Hay alguna forma de rotar la forma Y el relleno degradado al mismo tiempo?

En otros foros, algunos usuarios sugirieron transformar la capa en un objeto inteligente. Pero eso no es lo que quiero, ya que pierde todos los beneficios de una forma vectorial: si amplía su vector, se pixelará y deberá editar el objeto inteligente en sí.

Además, esto trae otros problemas (¿qué pasa si hay varias apariciones de ese objeto inteligente en su archivo, o si usa un objeto inteligente vinculado que está incrustado en otro lugar?)

Entonces, esa idea específica (convertir en un objeto pequeño) parece bastante torpe, excepto si Photoshop tiene la misma función que After Effects (rasterizar constantemente) que permite cambiar el tamaño de las composiciones sin pérdida de calidad.


6 respuestas 6

Finalmente, con la versión 12.1 vienen las directivas HatchFilling y PatternFilling que facilitan mucho la tarea:

La siguiente solución es una solución alternativa para superar la falta de directivas de patrón adecuadas. No me gusta al 100%, pero aún se puede usar.


9 Respuestas 9

Para trazar una función continua, puede hacer algo como esto:

Este método se puede utilizar para trazar una lista de puntos, así como interpolando los puntos primero, p. Ej.

Aquí hay una modificación del enfoque ParametricPlot de Heike, usando texturas en lugar de ColorFunction.

Estoy usando una imagen de 1 píxel de ancho que contiene el degradado negro-azul-blanco que usó Heike. (En realidad, no tiene un cabezal de imagen, es solo ImageData).

También estoy especificando que quiero que la textura corresponda a las coordenadas $ x $ y $ y $ en lugar del valor predeterminado de $ u $ y $ v $.

Este enfoque nos permite generalizar el degradado a algo más complicado, o incluso a una imagen arbitraria:


Como dijeron los demás, haz un anillo y rellénalo con un degradado lineal.

  • Usando la herramienta de selección de ruta (A), haga clic en su elipse y cópiela
  • Use Pasado en el lugar (CMD + Shift + V) para colocar el círculo copiado en el inicial y luego use Transformación libre (CMD + T) para encoger el círculo copiado hacia abajo. ¡Asegúrate de mantener presionada la tecla MAYÚS + ALT mientras lo haces!
  • Con su nueva elipse más pequeña aún seleccionada, haga clic en Restar de forma en el Panel de propiedades (Ventana> Propiedades)

Esta imagen fue creada con una técnica diferente. Note que el el gradiente es lineal y el el círculo tiene bordes afilados.

Desde arriba, la forma más fácil que se me ocurre para recrear esto es crear un círculo vectorial y rellenarlo con un degradado lineal.


Ver el vídeo: Cómo realizar polígonos perfectamente adyacentes sin intersecciones en QGIS