pktools  2.6.7
Processing Kernel for geospatial data
pkextract_grid.py
1 # -*- coding: utf-8 -*-
2 
3 """
4 ***************************************************************************
5  pkextract_grid.py
6  ---------------------
7  Date : April 2015
8  Copyright : (C) 2015 by Pieter Kempeneers
9  Email : kempenep at gmail dot com
10 ***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************
18 """
19 
20 __author__ = 'Pieter Kempeneers'
21 __date__ = 'April 2015'
22 __copyright__ = '(C) 2015, Pieter Kempeneers'
23 # This will get replaced with a git SHA1 when you do a git archive
24 __revision__ = '$Format:%H$'
25 
26 import os
27 from pktoolsUtils import pktoolsUtils
28 from pktoolsAlgorithm import pktoolsAlgorithm
29 from processing.core.parameters import ParameterRaster
30 from processing.core.parameters import ParameterVector
31 from processing.core.outputs import OutputVector
32 from processing.core.parameters import ParameterSelection
33 from processing.core.parameters import ParameterNumber
34 from processing.core.parameters import ParameterString
35 from processing.core.parameters import ParameterBoolean
36 from processing.core.parameters import ParameterExtent
37 
38 FORMATS = [
39  'ESRI Shapefile',
40  'GeoJSON',
41  'GeoRSS',
42  'SQLite',
43  'GMT',
44  'MapInfo File',
45  'INTERLIS 1',
46  'INTERLIS 2',
47  'GML',
48  'Geoconcept',
49  'DXF',
50  'DGN',
51  'CSV',
52  'BNA',
53  'S57',
54  'KML',
55  'GPX',
56  'PGDump',
57  'GPSTrackMaker',
58  'ODS',
59  'XLSX',
60  'PDF',
61 ]
62 EXTS = [
63  '.shp',
64  '.geojson',
65  '.xml',
66  '.sqlite',
67  '.gmt',
68  '.tab',
69  '.ili',
70  '.ili',
71  '.gml',
72  '.txt',
73  '.dxf',
74  '.dgn',
75  '.csv',
76  '.bna',
77  '.000',
78  '.kml',
79  '.gpx',
80  '.pgdump',
81  '.gtm',
82  '.ods',
83  '.xlsx',
84  '.pdf',
85 ]
86 
88 
89  INPUT = "INPUT"
90  OUTPUT = "OUTPUT"
91 
92  RULE_OPTIONS = ['centroid', 'point', 'mean', 'proportion', 'custom', 'min', 'max', 'mode', 'sum', 'median', 'stdev', 'percentile']
93 
94  RULE = "RULE"
95  POLYGON = "POLYGON"
96  BUFFER = "BUFFER"
97  GRID = "GRID"
98  SRCNODATA = "SRCNODATA"
99  BNDNODATA = "BNDNODATA"
100  EXTRA = 'EXTRA'
101 
102  FORMAT = "FORMAT"
103 
104  def cliName(self):
105  return "pkextractogr"
106 
107  def defineCharacteristics(self):
108  self.name = "extract regular grid"
109  self.group = "[pktools] raster/vector"
110  self.addParameter(ParameterRaster(self.INPUT, 'Input raster data set'))
111  self.addParameter(ParameterSelection(self.RULE,"extraction rule",self.RULE_OPTIONS, 0))
112 
113  self.addOutput(OutputVector(self.OUTPUT, 'Output vector data set'))
114  self.addParameter(ParameterSelection(self.FORMAT,
115  'Destination Format', FORMATS))
116  self.addParameter(ParameterBoolean(self.POLYGON, "Create OGRPolygon as geometry instead of OGRPoint",False))
117  self.addParameter(ParameterNumber(self.BUFFER, "Buffer for calculating statistics for point features",1,25,1))
118  self.addParameter(ParameterNumber(self.GRID, "Cell grid size (in projected units, e.g,. m)",0,1000000,1))
119 
120  self.addParameter(ParameterString(self.SRCNODATA, "invalid value(s) for input raster dataset (e.g., 0;255)","none"))
121  self.addParameter(ParameterString(self.BNDNODATA, "Band(s) in input image to check if pixel is valid (e.g., 0;1)","0"))
122  self.addParameter(ParameterString(self.EXTRA, 'Additional parameters', '', optional=True))
123 
124  def processAlgorithm(self, progress):
125  cliPath = '"' + os.path.join(pktoolsUtils.pktoolsPath(), self.cliName()) + '"'
126  commands = [cliPath]
127 
128  input=self.getParameterValue(self.INPUT)
129  commands.append('-i')
130  commands.append('"' + input + '"')
131 
132  commands.append("-r")
133  commands.append(self.RULE_OPTIONS[self.getParameterValue(self.RULE)])
134 
135  output = self.getOutputFromName(self.OUTPUT)
136  outFile = output.value
137  formatIdx = self.getParameterValue(self.FORMAT)
138  outFormat = '"' + FORMATS[formatIdx] + '"'
139  commands.append('-f')
140  commands.append(outFormat)
141  ext = EXTS[formatIdx]
142  if not outFile.endswith(ext):
143  outFile += ext
144  output.value = outFile
145  commands.append('-o')
146  commands.append('"' + outFile + '"')
147 
148  if self.getParameterValue(self.POLYGON):
149  commands.append("-polygon")
150  buffer=self.getParameterValue(self.BUFFER)
151  if buffer > 1:
152  commands.append("-buf")
153  commands.append(str(buffer))
154 
155  if self.getParameterValue(self.GRID) > 0:
156  commands.append("-grid")
157  commands.append(str(self.getParameterValue(self.GRID)))
158 
159  srcnodata=self.getParameterValue(self.SRCNODATA)
160  if srcnodata != "none":
161  srcnodataValues = srcnodata.split(';')
162  for srcnodataValue in srcnodataValues:
163  commands.append('-srcnodata')
164  commands.append(srcnodataValue)
165  bndnodata=self.getParameterValue(self.BNDNODATA)
166  bndnodataValues = bndnodata.split(';')
167  for bndnodataValue in bndnodataValues:
168  commands.append('-bndnodata')
169  commands.append(bndnodataValue)
170 
171  extra = str(self.getParameterValue(self.EXTRA))
172  if len(extra) > 0:
173  commands.append(extra)
174 
175  pktoolsUtils.runpktools(commands, progress)