8 votos

Cómo contar los puntos dentro de los colindantes hexagonal de las celdas de la cuadrícula?

Actualmente estoy usando QGIS, y han desarrollado un vector de cuadrícula (hexagonal). Tengo una capa independiente con punto de datos. Para cada celda de la cuadrícula necesito para contar el número de puntos en esa celda (pero también todas las celdas adyacentes).

He buscado este problema en Google y de Intercambio de la Pila, pero ninguna de las soluciones que he sido capaz de encontrar nada.

Algunos diagramas para explicar, a continuación.

Cualquier ayuda muy apreciada - sólo una herramienta o proceso que podría completar esta tarea.

Imagen 1: quiero calcular un valor para esta celda de la cuadrícula

Imagen 2: Valor para la celda seleccionada = el número de puntos dentro de esta celda + todas las celdas adyacentes

I want to calculate a value for this grid cell

I want the value for the cell to = the number of points within this cell and all adjoining cells

7voto

Nick Puntos 3115

La primera parte de su pregunta es muy fácil. Ir a Vector->Analysis Tools->Points in Polygon. Esta herramienta va a iterar sobre todos sus polígonos y añadir una columna (el llamado 'PNTCNT' por defecto) con el número de puntos en cada polígono.

Esta herramienta le da un simple recuento del número de puntos en cada polígono como el nombre sugiere. Puede ajustar esta utilizando una de las herramientas de la Processing ToolBox como: Count points in polygon(weighted) o Count unique points in polygon.

El segundo requisito es un poco más complicado para automatizar, pero afortunadamente alguien ya ha hecho esto para usted! En primer lugar, realizar el Punto básico En el conteo de Polígonos como el anterior. A continuación, siga este tutorial, con el guión previsto y el cambio de la suma de campo en el guión de 'PNTCNT'. Este script básicamente itera a través de su polígonos, seleccionando cada uno a su vez y, a continuación, vuelva a seleccionar todos los polígonos que se cruzan con el actual (como por tu segunda imagen). A continuación, itera sobre el nuevo conjunto de polígonos, sumar los valores de su punto de conteo de campo para todos los vecinos.

6voto

GriffinHeart Puntos 187

Usted puede hacer esto en una de datos espaciales tales como Spatialite con estas dudas:

Para obtener un recuento de los puntos sólo dentro de cada celda de la cuadrícula:

SELECT g.id, Count(p.id) 
FROM points AS p, grid AS g
WHERE ST_Contains(g.geometry, p.geometry) 
GROUP BY g.id;

y para consulta de todos tocando las celdas de la cuadrícula así, trate de:

SELECT g.id, Count(p.id) he
FROM points AS p, grid AS g, grid AS g2
WHERE ST_Contains(ST_Union(g.geometry, g2.geometry), p.geometry) AND
ST_Touches(g.geometry, g2.geometry) AND
g.id <> g2.id
GROUP BY g.id;

Es importante tener en cuenta que la segunda consulta va a tomar mucho tiempo si hay muchas células en la cuadrícula. Por lo que sería importante agregar índices espaciales y el uso de ellos en la consulta.

2voto

Muxa Puntos 2425

Si entiendo correctamente, usted quiere clúster de hexágono-redes basadas en los alrededores a pie hasta el radio de dos hexágono (mi caso es el radio de la hexagonal es de 10000 metros y clúster radio de búsqueda es de alrededor de 18000 metros)

Radius

Me gustaría seguir como abajo-

        1. Generate center of each grids.
        2. Calculate the radius between two hexagon (my case is about 18000   meters) and add bit more(?).
        3. Create buffer around each center where radius is that distance (my case is 18000 meters).
        4. Then run spatial query to select hexa-grids inside each circle/buffer then dissolve into one polygon and save.
        5. Then run Points in Polygon tool on this saved hex-grid clusters polygon - it populate attribute table (PNTCNT field) as you intended.

cluster

steps

N. B., Usted tiene que deshacerse de todos los puntos fuera de la red en un primer momento - para ello sólo tiene que ejecutar el clip de la operación a la primera. Puede haber una automatización en pyqgis..

1voto

Yada Puntos 9489

La herramienta en QGIS es "el Recuento de Puntos en Polígonos": Vector -> Análisis -> Herramientas - > Punto en Polígonos.

Prueba con extend_grid2 y random_points2 capas vectoriales:

enter image description here

El recuento es, por defecto, en PNTCNT campo.

enter image description here

La Edición De La Nota:

Basado en MappaGnosis respuesta la clave está aquí:

.
.
.
from qgis.utils import iface
from PyQt4.QtCore import QVariant

# Replace the values below with values from your layer.
# For example, if your identifier field is called 'XYZ', then change the line
# below to _NAME_FIELD = 'XYZ'
_NAME_FIELD = 'test'
# Replace the value below with the field name that you want to sum up.
# For example, if the # field that you want to sum up is called 'VALUES', then
# change the line below to _SUM_FIELD = 'VALUES'
_SUM_FIELD = 'PNTCNT'
.
.
.

El campo de identificador ('test' en mi caso) debe ser "cadena" de tipo (I clonado de ID). Cuando me encontré con la secuencia de comandos en la Consola de Python este fue el resultado:

enter image description here

Funciona muy bien.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X