Cómo producir rejillas (grid) hexagonales mediante PyQGIS

En el post anterior se consideró la manera de obtener “buffers” con diferentes formas poligonales alrededor de puntos (centroides). En este post se va a aprovechar este hecho para generar una rejilla hexagonal a partir de un punto de referencia dado.

A diferencia de las rejillas cuadradas, el punto de comienzo en las filas de las hexagonales debe ser movido, según la fila, para que se ajusten adecuadamente con la de abajo. Los desplazamientos horizontal y vertical han sido determinados con base en consideraciones geométricas de los polígonos hexagonales.

El código completo, para generar una rejilla hexagonal (lado 1000 m) con 8 filas y 10 columnas (EPSG:32612), se incluye a continuación. El punto de referencia fue (354972.451507, 4473426.04508).

import numpy as np

bufferLength = 1000
polygonSides = 6

inc_x = 2 * bufferLength * np.cos(np.pi*30/180)
inc_y = inc_x * np.cos(np.pi*30/180)

p1 = QgsPoint(354972.451507, 4473426.04508)

points = []

x = p1.x() + inc_x/2
y = p1.y()

rows = 8
cols = 10
    
for i in range(rows):
    for j in range(cols):
        point = QgsPoint(x, y)
        points.append(point)
        x += inc_x
    y -= inc_y
    ver = i%2

    if ver ==0:
        h = 0
    else:
        h = inc_x/2
    x = p1.x() + h

epsg = 32612

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

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

prov = mem_layer.dataProvider()

for i, point in enumerate(points):
    outFeat = QgsFeature()

    outFeat.setGeometry(QgsGeometry.fromPolygon([[ QgsPoint(point[0] + np.sin(angle)*bufferLength, point[1] + np.cos(angle)*bufferLength)
                        for angle in np.linspace(0, 2*np.pi, polygonSides + 1, endpoint = True) ]]))
    
    outFeat.setAttributes([i])
    prov.addFeatures([outFeat])

QgsMapLayerRegistry.instance().addMapLayer(mem_layer)

Después de ejecutado en la Python Console de Qgis se obtiene lo siguiente:

hex_grid1

En el Map Canvas de QGIS se observa el punto de referencia usado para generar la rejilla. Sólo falta hacer más prolijo el resultado cortando la memory layer generada para evitar los trozos “salientes” por fila y columna. Además, es necesario indicar el punto de comienzo de la rejilla en lugar del centroide “desplazado” del primer hexágono; temas del próximo post.

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

2 respuestas a Cómo producir rejillas (grid) hexagonales mediante PyQGIS

  1. Pingback: Cortando una rejilla (grid) hexagonal creada con PyQGIS | El Blog de José Guerrero

  2. Pingback: Cómo producir rejillas (grid) triangulares mediante 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