4 votos

Contar puntos en un polígono usando PyQGIS

¿Existe alguna integración sencilla para calcular el recuento de puntos en el polígono utilizando la integración QGIS-Python?

En otras palabras, ¿hay alguna función predefinida para los puntos en el polígono de QGIS usando python, para que podamos usarla en nuestro script de python?

0 votos

Grandes preguntas, aunque lo mejor sería envolver estas preguntas en una sola.

0 votos

Puedes encontrar un código paralelo en esta pregunta contando puntos en la función de atlas actual: gis.stackexchange.com/questions/152296/

6voto

Ivan Petrushev Puntos 158

Reescribí mi respuesta a partir de una pregunta paralela contando puntos en la función actual del atlas: ¿Cómo contar los puntos dentro de la característica actual del atlas del compositor de impresión en QGIS 2.8?

Construye una nueva función en el editor de expresiones:

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

@qgsfunction(args="auto", group='Custom')
    def countPointsInPolygon(pointLayerName, geom, feature, parent):
        # If point geom is empty, return 0
        if (geom is None):
            return 0

        # Get point layer reference from layername
        pointLayer = QgsMapLayerRegistry.instance().mapLayersByName(pointLayerName)[0]

        # Raise if layer not found
        if pointLayer is None:
            raise Exception("Layer not found: " + pointLayerName)

        # Count point within current polygon feature
        countPoint = 0
        for pointFeature in pointLayer.getFeatures():
            pointGeom = pointFeature.geometry()
            if (pointGeom is None):
                continue
            if pointGeom.within(geom):
                countPoint += 1

        return countPoint 

Utilícelo como una expresión en la capa de polígonos donde 'mispuntos' es el nombre de la capa de puntos: countPointsInPolygon( 'mypoints', $geometry )

Si no quiere que se implemente como una expresión, puede llamar a la función desde su propio script haciendo un bucle con las características de la capa de polígonos llamando a countPointsInPolygon para cada característica.

3voto

Mue Puntos 2469

¡Grandes métodos ya publicados! También hay herramientas del Caja de herramientas de procesamiento que podría llamar desde su script (esto es asumiendo que está ejecutando scripts dentro de QGIS):

  • Contar puntos en el polígono
  • Cuenta puntos en el polígono (ponderado)
  • Contar puntos únicos en el polígono

Tomando la primera herramienta, podría llamarse usar:

import processing

Result = "path\to\saved_output.shp"
processing.runalg("qgis:countpointsinpolygon", "path\to\polygon_layer.shp", "path\to\point_layer.shp", 'NUMPOINTS', Result)

donde NUMPOINTS es el nombre del campo que almacena el número de puntos.

Estoy usando QGIS 2.8.2-Wien, Processing plugin v2.9.3. ¡Espero que esto ayude!

2voto

xenny Puntos 670

La forma más sencilla es utilizar "Join attribute by location". Puedes hacerlo desde el menú (gestión de datos > Unir por ubicación), o con Python ("qgis:joinbylocation") con la opción "tomar resumen de características de intersección", calculando la suma de un campo con "1" en cada punto.

1voto

Nunca he trabajado con la API de python de QGIS, así que mi respuesta es una conjetura. Pero es parece QGIS utiliza objetos geométricos GEOS similares a los de django. Así que esto podría funcionar en QGIS también:

len(geom.coords)

0 votos

Buena suposición, pero no es eso lo que estoy preguntando. Tengo todo puntos, polígono. lo que quiero es calcular los puntos en el polígono utilizando pyqgis

1voto

greg reny Puntos 1

Supongo que su polígono es un qgsfeature :

http://qgis.org/api/classQgsFeature.html

No lo he probado pero supongo que funcionaría :

len(polygon.geometry().asPolygon())

polygon.geometry() da una clase qgsgeometry.

qgsgeometry.asPolygon() da una lista de los puntos de su polígono.

Edición : ¿Quieres los puntos dentro del polígono? ¿Tiene puntos en otra capa y se pregunta cuáles se cruzan con su polígono?

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