4 votos

Es allí cualquier simple integración para el recuento de puntos en el polígono usando python qgis?

Es allí cualquier simple de integración para el cálculo de conteo de puntos en el polígono utilizando QGIS-Python integración?

En otras palabras, ¿hay alguna pre-funciones definidas por puntos en el polígono de QGIS usando python, por lo que podemos utilizar en nuestra secuencia de comandos de python?

6voto

Ivan Petrushev Puntos 158

Reescribí mi respuesta de un paralelo de pregunta recuento de puntos en el actual atlas característica: Cómo contar los puntos dentro de la corriente de Impresión compositor característica atlas en QGIS 2.8?

Construir 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 

Lo utilizan como una expresión de la capa de polígono donde 'mypoints' es el nombre de la capa de puntos: countPointsInPolygon( 'mypoints', $geometry )

Si usted no quiere que se implementa como una expresión, puede llamar a la función desde su propia secuencia de comandos de bucle de las características de la capa de polígonos de llamadas countPointsInPolygon para cada característica.

2voto

Nunca he trabajado con QGIS del API de python, así que mi respuesta es una conjetura. Pero parece QGIS es el uso de GEOS objetos de la geometría similar a la de django. Así que esto podría funcionar en QGIS también:

len(geom.coords)

2voto

greg reny Puntos 1

Puedo asumir que sus polígono es una qgsfeature :

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

Yo no probarlo, pero supongo que funcionaría :

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

polígono.geometría() da un qgsgeometry clase.

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

Edit : se desea Que los puntos en el interior del polígono? Tiene puntos en otra capa y la maravilla que cruzan su polígono?

2voto

xenny Puntos 670

la forma más simple es el uso de "Unirse atributo por ubicación". Puede hacerlo desde el menú (data managment > Unirse por ubicación), o con Python ("qgis:joinbylocation") con la opción de "tomar resumen de intersección de las funciones", calculando la suma de un campo con el número "1" en cada punto.

2voto

Mue Puntos 2469

Grandes métodos ya publicados! También hay herramientas de la caja de herramientas de Procesamiento de lo que se pueda llamar desde la secuencia de comandos (esto es suponiendo que usted está ejecutando scripts dentro de QGIS):

  • Contar los puntos en el polígono
  • Cuenta puntos en el polígono (ponderada)
  • Recuento de puntos singulares en el polígono

Tomando la primera herramienta, se le puede llamar usando:

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, Procesamiento plugin v2.9.3. Espero que esto ayude!

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: