¿Cuál es la mejor manera de producir un mapa de densidad a partir de puntos ponderados en QGIS?

18

Realmente me gustaría repetir la funcionalidad de la herramienta Densidad del kernel de ArcGIS. ¿Cómo podría hacer eso?

Me gustaría limitar las respuestas a un software de código abierto y fácil de instalar , es decir, QGIS se instala fácilmente con GRASS en todas las plataformas, por lo que QGIS + GRASS estaría bien, pero SAGA no (desafortunadamente, ya que tiene lo que puede ser la herramienta ideal).

Estoy tratando de producir mapas de densidad de vida silvestre en áreas protegidas en QGIS. El mapa de densidad en el siguiente ejemplo se produjo en ArcGIS a partir de observaciones puntuales de la vida silvestre, con recuentos sin procesar del tamaño del grupo (un campo en el archivo vectorial) utilizado para ponderar la densidad de cada celda de la cuadrícula en la herramienta Densidad del Kernel (SpatialAnalyst), con el radio de búsqueda elegido y el tamaño de celda de la cuadrícula:

Enunapregunta anterior sobre la densidad , se sugirió usar la herramienta GRASS v.kernel para imitar la herramienta de densidad del núcleo de ArcGIS, pero v.kernel no hace el mismo trabajo . Después de mirar el manual y (con éxito) producir un mapa de densidad, parece que la v. la función del kernel solo funciona con densidad de puntos , y no hay oportunidad de dar una variable para cada punto (como los recuentos sin procesar) para ponderar cada punto.

ACTUALIZAR

Parece que hay varias herramientas *.surf.* en GRASS que pueden ayudar a crear una superficie de densidad, y estas aceptan una columna de ponderación o valor z, o se realizan en rásteres. @underdark sugirió v.surf.rst, y la variable 'zcolumn' sería mi ponderación (contar), pero no puedo averiguar cómo pedirle a la herramienta que cree un tamaño de cuadrícula determinado o use un radio determinado.

¿Sugerencias sobre cómo usar v.surf.rst o cualquier otro método?

Datos de muestra

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0
    
pregunta Simbamangu 01.11.2012 - 14:29

6 respuestas

8

Según su página de manual, el comando GRASS r.resamp.filter hará para rásteres que representan datos de puntos exactamente lo que ArcGIS hará para capas de puntos : use la opción filter=box para un ráster "simple" y use la opción filter=gauss para el otro kernel de ArcGIS. Use el indicador -n para evitar la propagación de nulos.

Tenga en cuenta que las estimaciones de densidad del kernel (también conocidas como "mapas de calor") son no interpolaciones de los datos. El valor de un KDE en una ubicación x calcula la cantidad de un valor " Z " por unidad de área cerca de x . (El radio o "ancho de banda" cuantifica lo que significa "cerca"). No es necesario definir los valores de Z en todas las ubicaciones posibles del mapa. Por ejemplo, Z podría representar la presencia de algo como una persona, en cuyo caso el KDE proporciona densidad de población . Tampoco los valores de Z tienen que variar continuamente en el mapa. Para la interpolación, se supone que Z se define en todas las ubicaciones y que los datos son observaciones de los valores de Z en puntos específicos. El interpolador intenta predecir los valores no observados de Z en todos los demás puntos. Esto tendría sentido cuando Z es, por ejemplo, una temperatura o presión, pero generalmente no tiene sentido cuando Z registra la presencia de algo o cuando los datos son un censo completo. (En este último caso, contemple lo que podría significar un mapa de densidad de carreteras para una región y cómo uno podría dar sentido a la "interpolación" de carreteras en áreas que no son carreteras).

    
respondido por el whuber 05.11.2012 - 23:22
3

El módulo de SAGA 'Estimación de la densidad del kernel' es lo que está buscando.

Instale la interfaz del módulo SAGA en QGIS (en el menú: Complementos - > Fetch complementos de Python ..) y use el módulo. ¡Buena suerte!

    
respondido por el Vladimir 01.11.2012 - 14:44
3

Un método realmente simplista con GRASS GIS que está más cercano a la densidad de puntos en ArcMap que a la densidad del kernel:

  1. Importe los puntos a un mapa ráster con r.in.xyz usando method = sum en una resolución de ráster especificada (establecida con g.region ).

  2. Use r.neighbors para suavizar el mapa con method = average (que es el valor predeterminado) y use el tamaño de la opción para establecer el radio de búsqueda.

(No tengo acceso a GRASS en este momento, ¡así que no probé esto realmente!)

    
respondido por el Torsti 05.11.2012 - 10:14
2

A medida que solicitó más orientación sobre v.surf.rst, aquí están mis entradas

Primero, sobre el tamaño de la cuadrícula, puedes usar Plugin - > HIERBA - > Edite la región actual de GRASS y establezca la resolución de salida. Tu salida de v.surf.rst tendrá esa resolución.

Para el radio, la 'tensión' parece ser el parámetro. No soy un experto en este algoritmo, pero al leer el manual, este parece ser el bit relevante

  

"... Alta tensión" aumenta las distancias entre los puntos "y   reduce el rango de impacto de cada punto, baja tensión "disminuye la   distancia "y los puntos se influyen entre sí en un rango más largo) .."

Por lo tanto, podrías usar el parámetro de tensión aproximadamente como usarías el parámetro de radio.

A partir de sus datos de muestra, el resultado de v.surf.rst se ve a continuación y parece razonable dado que está utilizando los conteos como ponderaciones para la interpolación

    
respondido por el spatialthoughts 07.11.2012 - 06:43
2

Si bien no lo he probado, en el repositorio de QGIS Contributors hay un complemento llamado 'Estimación del rango de inicio con R'. Esto incluye los cálculos de Kernel (¿densidad?). Reconozco, si funciona, que este sería el mejor método. R hará el método estadístico real para calcular la densidad del kernel.

Si tienes R instalada, deberías poder instalar el complemento y darle una oportunidad.

    
respondido por el Alex Leith 08.11.2012 - 23:25
1

Si acepta hacer un poco de programación en java fuera de qgis, simplemente podría usar esta biblioteca del generador de mapas de densidad .

Usando el constructor HeatMapBuilder(int w, int h, int[][] pts, int[] weights) , es posible asignar un peso para cada punto que necesite. La imagen de salida puede recuperarse con el método getImage() y guardarse en su disco con un ImageIO.write("mymap.png") .

Aquí hay un ejemplo de salida:

Es posible cambiar la intensidad de suavizado y la paleta de colores.

    
respondido por el julien 04.11.2012 - 15:21

Lea otras preguntas en las etiquetas