miércoles, 29 de noviembre de 2017

Usando Processing qgis:creategridpolygon en QGIS 2.99 (Windows)

En post anteriores he estado haciendo pruebas con la versión preliminar 2.99 de QGIS en Windows antes de que salga la versión definitiva (supuestamente casi exenta de errores) 3.0.0. He podido comprobar, por ahora, que no está suficientemente madura como para la producción de plugins. Sin embargo, se pueden probar por separado los algoritmos que estarán dentro de los futuros plugins una vez se resuelvan los problemas de estabilidad.

Después de hacer algunas pruebas con Processing, me he percatado que la oferta de algoritmos todavía no es completa; a pesar de que pueda arrojar resultados exitosos la evaluación de parámetros con 'processing.algorithmHelp'. Por tanto, esa evaluación parece ser más segura después de ejecutar:

1
2
for key, value in processing.algs.help.shortHelp.items():
    print(key)

donde se obtiene el resultado siguiente para los ya implementados:

 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
qgis:addfieldtoattributestable
qgis:adduniquevalueindexfield
qgis:advancedpythonfieldcalculator
qgis:aggregate
qgis:barplot
qgis:basicstatisticsforfields
qgis:boundary
qgis:buildvirtualvector
qgis:centroids
qgis:checkvalidity
qgis:clip
qgis:concavehull
qgis:convertgeometrytype
qgis:countpointsinpolygon
qgis:createattributeindex
qgis:createconstantrasterlayer
qgis:creategridlines
qgis:creategridpolygon
qgis:createpointsalonglines
qgis:createspatialindex
.
.
.
qgis:setstyleforvectorlayer
qgis:setzvalue
qgis:singlesidedbuffer
qgis:snapgeometries
qgis:splitwithlines
qgis:splitvectorlayer
qgis:statisticsbycategories
qgis:sumlinelengths
qgis:symmetricaldifference
qgis:texttofloat
qgis:topologicalcoloring
qgis:translate
qgis:truncatetable
qgis:union
qgis:variabledistancebuffer
qgis:vectorgrid
qgis:vectorlayerhistogram
qgis:vectorlayerscatterplot
qgis:voronoipolygons
qgis:zonalstatistics
saga:rastercalculator

De esta oferta de algoritmos se escogió qgis:creategridpolygon porque es similar a qgis:creategrid de QGIS 2.18.

Para averiguar los parámetros ejecutamos:

1
2
3
import processing

processing.algorithmHelp('qgis:creategridpolygon')

cuyo resultado visualizamos a continuación:

 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
31
32
33
34
35
36
37
----------------
Input parameters
----------------

TYPE:  <QgsProcessingParameterEnum>
 Grid type
  0 - Rectangle (polygon)
  1 - Diamond (polygon)
  2 - 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

Con base en lo anterior se elaboró el código siguiente:

 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 = 'c:/Users/usuario/pyqgis_data/utah_demUTM2.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 = 'c:/Users/usuario/pyqgis_data/grid.shp'

processing.run('qgis:creategridpolygon', 
               {'TYPE':0, 
                '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)

Al ejecutar el código anterior en la Python Console de QGIS 2.99 se obtuvo el resultado que se presenta a continuación:


No hay comentarios: