Creando puntos espaciados regularmente dentro de los rasgos (features) de un vectorial tipo polígono con PyQGIS

La creación o generación de puntos regularmente espaciados es un procedimiento que puede realizarse utilizando las herramientas que pone a su disposición PyQGIS. Si a eso le añadimos la posibilidad de que los puntos esten sólo circunscritos dentro de los rasgos de un archivo vetorial tipo polígono y que el espaciamiento sea el de un ráster base, entonces podrían muestrearse los valores del ráster para hacer estadística zonal.

En este post sólo se va a producir una capa vectorial de puntos, con espaciamiento regular de 100 metros, para cada uno de los rasgos del vectorial tipo polígono de la imagen siguiente:

grid1

El código completo se incluye a continuación:

layer = iface.activeLayer()

feats = [ feat for feat in layer.getFeatures()]

points = []

for feat in feats:
    extent = feat.geometry().boundingBox()
    xmin = extent.xMinimum()
    ymax = extent.yMaximum()
    xmax = extent.xMaximum()
    ymin = extent.yMinimum()

    rows = int(ymax - ymin)/100
    cols = int(xmax - xmin)/100

    x = xmin
    y = ymax

    geom_feat = feat.geometry()

    for i in range(rows+1):
        for j in range(cols+1):
            pt = QgsPoint(x,y)
            tmp_pt = QgsGeometry.fromPoint(pt)
            if tmp_pt.within(geom_feat):
                points.append(tmp_pt.asPoint())
            x +=100
        x = xmin
        y -= 100

epsg = layer.crs().postgisSrid()

#points
uri = "Point?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"

mem_layer = QgsVectorLayer(uri,
                           'point',
                           'memory')

prov = mem_layer.dataProvider()

feats = [ QgsFeature() for i in range(len(points)) ]

for i, feat in enumerate(feats):
    feat.setAttributes([i])
    feat.setGeometry(QgsGeometry.fromPoint(points[i]))

prov.addFeatures(feats)

QgsMapLayerRegistry.instance().addMapLayer(mem_layer)

Después de ejecutado en la Python Console de QGIS se obtiene:

grid2

Se comprobó que la retícula de puntos tenía un espaciamiento de 100 m; tal como se esperaba.

Esta entrada fue publicada en PyQGIS, SIG, Software Libre. Guarda el enlace permanente.

2 respuestas a Creando puntos espaciados regularmente dentro de los rasgos (features) de un vectorial tipo polígono con PyQGIS

  1. Pingback: Camino a gvSIG 2.3: Ejemplo de script con la nueva implementación | gvSIG blog

  2. Pingback: Estadística zonal con puntos espaciados regularmente dentro de los rasgos (features) de un vectorial tipo polígono con PyQGIS | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s