¿Cómo hago un mapa de calor o Choropleth que usa polígonos en QGis?

12

He estado jugando con el complemento de mapa de calor para QGIS y me pregunto si es posible hacer un mapa de calor usando un complemento / herramienta similar que use polígonos y puntos.

Me gustaría obtener una representación de la densidad de los datos de la misma manera que lo hace el complemento de mapa de calor con puntos.

La siguiente imagen es un esbozo de mi resultado deseado:

ingrese la descripción de la imagen aquí

NWT Adam
fuente
3
¿Has pensado en generar centroides para tus polígonos y construir el mapa de calor a partir de ellos?
andytilia
1
Algunos detalles más sobre sus datos ayudarían. ¿Qué representan los polígonos y cómo se distribuyen? ¿Puedes publicar una foto de muestra?
andytilia
@andytilia: los centroides no representan con precisión la cobertura de los polígonos. Los polígonos representan el uso de recursos dentro de un área de 1200m2. Algunos polígonos son pequeños y representan un buen parche de bayas y otros son enormes y cubren los hábitats del caribú y el alce. He estado buscando en un binning una cuadrícula hexagonal y luego contando superposiciones ... pero soy casi un novato, así que no he podido encontrar un buen tutorial que pueda entender sobre ese tema.
NWT Adam
1
consulte el complemento QGIS heatmap qgis.spatialthoughts.com/2012/07/…
rkm
¿Los valores numéricos tienen algún significado para usted o solo está buscando una visualización bonita / clara?
oscuro

Respuestas:

5

Tal vez pueda generar un conjunto de puntos aleatorios en sus polígonos, ¿hay una herramienta QGIS para eso ? Si tiene polígonos superpuestos, entonces tiene una mayor densidad de ellos en esta área. Luego usa el mapa de calor para los puntos. Tendría que ejecutar varias rondas para encontrar el número óptimo de puntos, ya que el resultado depende de eso.

Si sus datos muestran la distribución de algunos hábitats, que de todos modos es confusa, entonces esto podría estar más cerca de la situación del mundo real, donde un punto refleja aproximadamente un espécimen.

JaakL
fuente
1
+1 Gran idea. Lo único que agregaría es unirme en la ubicación con los datos de puntos y los polígonos hexagonales, deshacerme de las características que no coinciden y luego generar puntos en eso, para que sus puntos individuales no se ahoguen entre todos los demás puntos.
RomaH
Esto parece dar el mejor resultado. Gracias a todas las personas que ofrecieron soluciones. Me siento mal dando la recompensa a una sola persona, ya que parece que hay una serie de buenas soluciones.
NWT Adam
6

Si entiendo su pregunta correctamente, he hecho algo similar antes; Solo tenía que recordar lo que hice.

Esto funcionará si sus polys se superponen Y NO son la misma capa. Si están en la misma capa y es posible, muévalos a capas separadas, si no lo hace, la capa de destino simplemente heredará uno de los valores.

El proceso clave a utilizar son los atributos de Unir por ubicación en el menú Vector> Gestión de datos . Aquí especifique su campo hexagonal como la capa objetivo y la capa de unión como uno de sus polígonos. Asigne un nombre a la capa resultante y marque el botón de radio para Conservar todos los registros .

La capa resultante debe ser una copia de su capa hexagonal con todas las celdas que intersectan su capa de polígono. Ahora, para la interacción, use su última capa resultante como capa objetivo y únase a la siguiente capa de polígono. Tome el láser resultante y únase a su próxima capa hasta que haya unido todas sus capas.

Su capa final debería haber heredado todos los campos de atributos de las capas anteriores y gran parte puede decir NULL.

Aquí es donde tenemos que jugar en algunas de las entrañas de un shapefile, así que si no ha guardado la capa como un shapefile, hágalo ahora. Y elimine la capa de su espacio de trabajo en QGIS.

Abra los archivos * .dbf del shapefile en OpenOffice Calc, NO use Excel. Destrozará el archivo y será inútil, lo aprendí por las malas. Y no reordene los datos, también es muy específico en el orden de las filas del archivo. Compruebe para asegurarse de que los NULL ahora son ceros si no lo son, reemplácelos con cuidado.

Ahora inserte el archivo de forma en QGIS y abra la tabla de atributos . Ahora debería mostrar ceros en lugar de NULL. Use la Calculadora de campo y sume los campos que se asignan a su trabajo en una nueva columna.

Ahora tiene un campo sumado que debe mostrar con un grado de precisión los valores de todas las colecciones de entidades que se superponen al campo de destino. Puede usar la función Simbología para colorear sus polígonos en función del valor de su campo sumado para un bonito mapa coroplético.

Si desea deshacerse de todos los campos no utilizados en el archivo. Simplemente abra el archivo dbf nuevamente en Calc y elimine las columnas no deseadas a voluntad. Personalmente, aconsejaría aprender a sentirse cómodo yendo a un shapefile de esta manera como lo hago a menudo.

RomaH
fuente
Desafortunadamente, tengo cientos de polígonos superpuestos en la misma capa. ¿Puedes ver una forma de evitar esto sin separarlos en unos cientos de capas?
NWT Adam
1
Puede crear una superposición de polígono con PostGIS (si lo usa) que rompe sus polys superpuestos. gis.stackexchange.com/questions/83/… Tal vez alguien con un mejor SQL-fu pueda ayudarnos aquí y cómo conseguir que las políticas resultantes hereden sus valores, no soy muy bueno en eso.
RomaH
1
Otra opción, una que yo sugeriría también, es que tal vez sea hora de repensar el enfoque exacto de su problema. ¿Qué datos estás tratando de mapear? ¿Hay alguna razón para suponer que el valor sería homogéneo en todos los polígonos? ¿Tendría un polígono superpuesto un efecto acumulativo? A menos que tenga buena evidencia para sugerir estas cosas, el uso de este mapa para cualquier tipo de modelado predictivo podría ser inestable. Solo piense detenidamente, podría tener la solución correcta pero podría descubrir una mejor manera de modelarla o mapearla.
RomaH
1
Gracias por la sugerencia de PostGIS. Lo echaré un vistazo, pero recién estoy empezando a saber cómo usar PostGIS. En cuanto a reevaluar la pregunta ... veo lo que quieres decir, pero no estoy seguro de qué otra manera podría visualizar lo que estamos tratando de expresar. Nuestros datos representan todas las áreas que los ancianos de la comunidad y los usuarios de recursos asignan como productivas o importantes desde una perspectiva cultural. Entendemos que el mapa de valores no es homogéneo en todo el polígono, pero está lo suficientemente cerca del punto que queremos expresar con el mapa.
NWT Adam
1
Pulgar hacia abajo a cualquier cosa manual en qgis, especialmente una vez que comience a tratar con // toneladas // de archivos de forma, podría terminar en una posición realmente frustrante. No se arrepentirá de usar su SQL-fu, ya sea con el complemento postGIS o el complemento GRASS (consulte mi respuesta a continuación: gis.stackexchange.com/a/42188/7689 ).
egbutter
4

Este es un flujo de trabajo general que utiliza rásteres. No sé los detalles para lograrlo en QGIS.

  1. Use la herramienta de intersección para crear una nueva capa vectorial de las áreas de superposición de polígonos
  2. Convierta sus capas vectoriales, incluida la capa de superposición, en rásteres
  3. Utilice la aritmética ráster (probablemente además) para combinar los rásteres
  4. El resultado debería ser un ráster que se parece a un mapa de calor

Los valores alfa / nulos y / o la transparencia de la capa le permitirán superponer el ráster en cualquier mapa base.


fuente
Después de pasar por este flujo de trabajo, me queda un gran bloque gris que cubre la extensión del nuevo ráster. ¿Cómo consigo que esto parezca un mapa de calor?
NWT Adam
1
¿Hay diferentes valores asignados a los píxeles en el ráster final? Algunas reflexiones: puede que tenga que especificar una resolución más fina (más píxeles) al crear los rásteres; los rásteres deben ser del mismo tamaño y resolución; Es posible que deba estirar o modificar el mapa de colores del ráster resultante para mostrar colores más brillantes para valores más grandes.
De acuerdo, configuré el mapa de color, pero solo obtengo dos colores azul (valor 0) y rojo (2), el valor rojo cubre el área de mis capas originales de vectores y mi capa superpuesta. Supongo que cada una de las capas recibió un valor de 1 en lugar de cada polígono cuando se rasterizaron. Luego, cuando se agregaron los rásteres, el valor total fue igual a 2. ¿Cómo lograr que los valores se mantengan / agreguen a nivel de polígono en lugar de a nivel de capa?
NWT Adam
la trama de resolución más fina debería ayudar
¿Cómo hago un ráster de resolución más fina?
NWT Adam
4

Intente esto en su lugar, si se ajusta a sus necesidades, no es una solución computacional para el conjunto de datos, pero si está buscando simplemente una solución infográfica, puede probar esto.

Unir atributos por ubicación, con sus celdas hexagonales como el objetivo y sus datos de puntos como la unión. Elija mantener todas las funciones. Establezca la simbología en las celdas con el valor heredado en el color deseado y establezca la transparencia en algo así como 50%.

Luego, en su capa con el círculo polys, establezca su simbología en el mismo color y transparencia. Coloque el círculo poli delante de la celda poli. Esto dará la ilusión de una mayor saturación a medida que aumenta el valor.

Si lo desea, también puede extraer las líneas de todas las capas y superposiciones en la parte superior para que los contornos de la subcapa no parezcan coloreados por las otras capas.

Tendrás que jugar con los colores y la transparencia para encontrar la mejor solución. Encuentro que los mismos colores se ven mejor pero experimentan.

RomaH
fuente
4

Le sugiero que use el complemento GRASS: QGIS tiene una funcionalidad bastante limitada (¿y por qué reinventar la rueda en Python cuando ya existe un software como GRASS?):

v.in.ogr.qgis

[las siguientes dos líneas pueden ser necesarias, dependiendo de si sus polígonos ya tienen un valor]

v.db.addcol 
v.db.update_const 

aquí es donde sumamos la superposición en los polígonos y luego hacemos el ráster basado en esas columnas

v.to.db ... qcolumns=sum(col_with_polygon_value)
v.to.rast.attr

v.out.ogr [r.out.ogr]
egbutter
fuente
3

Con QGIS simple, podría ser complicado, es posible que necesite secuencias de comandos personalizadas o usar una base de datos espacial como PostGIS o Spatialite. Crearía una cuadrícula regular de puntos con PostGIS o la generaría como archivo de texto CSV e importaría esto. Luego dibuje un círculo alrededor de cada punto con st_buffer, o rectángulos con ST_MakeEnvelope, y cuente todas las áreas superpuestas de cada buffer. Entonces, probablemente desee eliminar todos los valores 0, si significa "sin datos". Finalmente, puede hacer un mapa de calor para la cuadrícula, utilizando el contador como campo de Peso.

Necesita experimentar con diferentes resoluciones de cuadrícula para encontrar una óptima. En esencia, es muy similar al enfoque de trama sugerido por Kevin, simplemente quedarse en el mundo vectorial.

JaakL
fuente