pktools  2.6.3
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  'SQLite',
40  'ESRI Shapefile',
41  'GeoJSON',
42  'GeoRSS',
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  '.sqlite',
64  '.shp',
65  '.geojson',
66  '.xml',
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 
87 class pkextract_grid(pktoolsAlgorithm):
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 "pkextract"
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,"composite 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.GRID, "Cell grid size (in projected units, e.g,. m)",0,1000000,1))
118 
119  self.addParameter(ParameterString(self.SRCNODATA, "invalid value(s) for input raster dataset (e.g., 0;255)","none"))
120  self.addParameter(ParameterString(self.BNDNODATA, "Band(s) in input image to check if pixel is valid (e.g., 0;1)","0"))
121  self.addParameter(ParameterString(self.EXTRA, 'Additional parameters', '', optional=True))
122 
123  def processAlgorithm(self, progress):
124 
125  commands = [os.path.join(pktoolsUtils.pktoolsPath(), self.cliName())]
126 
127  input=self.getParameterValue(self.INPUT)
128  commands.append('-i')
129  commands.append(input)
130 
131  commands.append("-r")
132  commands.append(self.RULE_OPTIONS[self.getParameterValue(self.RULE)])
133 
134  output = self.getOutputFromName(self.OUTPUT)
135  outFile = output.value
136  formatIdx = self.getParameterValue(self.FORMAT)
137  outFormat = FORMATS[formatIdx].replace(' ','\\ ')
138  commands.append('-f')
139  commands.append(outFormat)
140  ext = EXTS[formatIdx]
141  if not outFile.endswith(ext):
142  outFile += ext
143  output.value = outFile
144  commands.append('-o')
145  commands.append(outFile)
146 
147  if self.getParameterValue(self.POLYGON):
148  commands.append("-polygon")
149  buffer=self.getParameterValue(self.BUFFER)
150  if buffer > 1:
151  commands.append("-buf")
152  commands.append(str(buffer))
153 
154  if self.getParameterValue(self.GRID) > 0:
155  commands.append("-grid")
156  commands.append(str(self.getParameterValue(self.GRID)))
157 
158  srcnodata=self.getParameterValue(self.SRCNODATA)
159  if srcnodata != "none":
160  srcnodataValues = srcnodata.split(';')
161  for srcnodataValue in srcnodataValues:
162  commands.append('-srcnodata')
163  commands.append(srcnodataValue)
164  bndnodata=self.getParameterValue(self.BNDNODATA)
165  bndnodataValues = bndnodata.split(';')
166  for bndnodataValue in bndnodataValues:
167  commands.append('-bndnodata')
168  commands.append(bndnodataValue)
169 
170  extra = str(self.getParameterValue(self.EXTRA))
171  if len(extra) > 0:
172  commands.append(extra)
173 
174  f=open('/tmp/a','w')
175  for item in commands:
176  print >> f, item
177  f.close()
178  pktoolsUtils.runpktools(commands, progress)