jueves, 15 de marzo de 2018

Usando Processing qgis:creategrid en QGIS 3 (Linux)

En un post anterior ya se probó este método con la versión previa de QGIS y en QGIS 2.99 uno similar (qgis:creategridpolygon) que no sobrevivió a la versión actual 3.0.0. Los parámetros a ser introducidos en este caso, averiguados con processing.algorithmHelp('qgis:creategrid'), son los siguientes:

----------------
Input parameters
----------------

TYPE:  <QgsProcessingParameterEnum>
 Grid type
  0 - Point
  1 - Line
  2 - Rectangle (polygon)
  3 - Diamond (polygon)
  4 - Hexagon (polygon)

EXTENT:  <QgsProcessingParameterExtent>
 Grid extent

HSPACING:  <QgsProcessingParameterNumber>
 Horizontal spacing

VSPACING:  <QgsProcessingParameterNumber>
 Vertical spacing

HOVERLAY:  <QgsProcessingParameterNumber>
 Horizontal overlay

VOVERLAY:  <QgsProcessingParameterNumber>
 Vertical overlay

CRS:  <QgsProcessingParameterCrs>
 Grid CRS

OUTPUT:  <QgsProcessingParameterFeatureSink>
 Grid

----------------
Outputs
----------------

OUTPUT:  <QgsProcessingOutputVectorLayer>
 Grid

Esto conlleva a adoptar el código a continuación para la ejecución del algoritmo; donde la forma de diccionario para pasar los parámetros permite prescindir del orden y de aquellos que no son mandatorios.

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import processing

uri = '/home/zeito/pyqgis_data/utah_demUTM12.tif'

layer = QgsRasterLayer(uri,
                       'raster')

extent = layer.extent()

xmin, ymin, xmax, ymax = extent.toRectF().getCoords()

extent = str(xmin)+ ',' + str(xmax)+ ',' +str(ymin)+ ',' +str(ymax) 

output = '/home/zeito/pyqgis_data/grid.shp'

processing.run('qgis:creategrid', 
               {'TYPE':2, 
                'EXTENT':extent, 
                'HSPACING':5000,
                'VSPACING':5000,
                'HOVERLAY':0,
                'VOVERLAY':0,
                'CRS':layer.crs().authid(), 
                'OUTPUT':output})

grid = QgsVectorLayer(output,
                      'grid',
                      'ogr')

QgsProject.instance().addMapLayer(grid)

Después de ejecutado el código anterior en la Python Console para los 'TYPE' 0 y 2, se obtuvo el resultado que se presenta a continuación:


La grid de puntos es una oferta novedosa en la versión actual de QGIS 3.

No hay comentarios: