| pktools 2.6.7 Processing Kernel for geospatial data

pkextract_random.py
1# -*- coding: utf-8 -*-
2
3"""
4***************************************************************************
5 pkextract_random.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]
62EXTS = [
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
87 class pkextract_random(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 RANDOM = "RANDOM"
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 random points"
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
117 self.addParameter(ParameterBoolean(self.POLYGON, "Create OGRPolygon as geometry instead of OGRPoint",False))
118 self.addParameter(ParameterNumber(self.BUFFER, "Buffer for calculating statistics for point features",1,25,1))
119 self.addParameter(ParameterNumber(self.RANDOM, "Number of random points to generate",0,1000000,100))
120
121 self.addParameter(ParameterString(self.SRCNODATA, "invalid value(s) for input raster dataset (e.g., 0;255)","none"))
122 self.addParameter(ParameterString(self.BNDNODATA, "Band(s) in input image to check if pixel is valid (e.g., 0;1)","0"))
123 self.addParameter(ParameterString(self.EXTRA,
124 'Additional parameters', '', optional=True))
125
126 def processAlgorithm(self, progress):
127 cliPath = '"' + os.path.join(pktoolsUtils.pktoolsPath(), self.cliName()) + '"'
128 commands = [cliPath]
129
130 input=self.getParameterValue(self.INPUT)
131 commands.append('-i')
132 commands.append('"' + input + '"')
133
134 commands.append("-r")
135 commands.append(self.RULE_OPTIONS[self.getParameterValue(self.RULE)])
136
137 output = self.getOutputFromName(self.OUTPUT)
138 outFile = output.value
139 formatIdx = self.getParameterValue(self.FORMAT)
140 outFormat = '"' + FORMATS[formatIdx] + '"'
141 commands.append('-f')
142 commands.append(outFormat)
143 ext = EXTS[formatIdx]
144 if not outFile.endswith(ext):
145 outFile += ext
146 output.value = outFile
147 commands.append('-o')
148 commands.append('"' + outFile + '"')
149
150 if self.getParameterValue(self.POLYGON):
151 commands.append("-polygon")
152 buffer=self.getParameterValue(self.BUFFER)
153 if buffer > 1:
154 commands.append("-buf")
155 commands.append(str(buffer))
156
157 if self.getParameterValue(self.RANDOM) > 0:
158 commands.append("-rand")
159 commands.append(str(self.getParameterValue(self.RANDOM)))
160
161 srcnodata=self.getParameterValue(self.SRCNODATA)
162 if srcnodata != "none":
163 srcnodataValues = srcnodata.split(';')
164 for srcnodataValue in srcnodataValues:
165 commands.append('-srcnodata')
166 commands.append(srcnodataValue)
167 bndnodata=self.getParameterValue(self.BNDNODATA)
168 bndnodataValues = bndnodata.split(';')
169 for bndnodataValue in bndnodataValues:
170 commands.append('-bndnodata')
171 commands.append(bndnodataValue)
172
173 extra = str(self.getParameterValue(self.EXTRA))
174 if len(extra) > 0:
175 commands.append(extra)
176
177
178 pktoolsUtils.runpktools(commands, progress)
qgis.pkextract_random.pkextract_random
Definition: pkextract_random.py:87
qgis.pkextract_random.pkextract_random.OUTPUT
string OUTPUT
Definition: pkextract_random.py:90
qgis.pkextract_random.pkextract_random.SRCNODATA
string SRCNODATA
Definition: pkextract_random.py:98
qgis.pkextract_random.pkextract_random.cliName
def cliName(self)
Definition: pkextract_random.py:104
qgis.pkextract_random.pkextract_random.POLYGON
string POLYGON
Definition: pkextract_random.py:95
qgis.pkextract_random.pkextract_random.name
name
Definition: pkextract_random.py:108
qgis.pkextract_random.pkextract_random.RULE_OPTIONS
list RULE_OPTIONS
Definition: pkextract_random.py:92
qgis.pkextract_random.pkextract_random.INPUT
string INPUT
Definition: pkextract_random.py:89
qgis.pkextract_random.pkextract_random.BNDNODATA
string BNDNODATA
Definition: pkextract_random.py:99
qgis.pkextract_random.pkextract_random.FORMAT
string FORMAT
Definition: pkextract_random.py:102
qgis.pkextract_random.pkextract_random.group
group
Definition: pkextract_random.py:109
qgis.pkextract_random.pkextract_random.BUFFER
string BUFFER
Definition: pkextract_random.py:96
qgis.pkextract_random.pkextract_random.EXTRA
string EXTRA
Definition: pkextract_random.py:100
qgis.pkextract_random.pkextract_random.RANDOM
string RANDOM
Definition: pkextract_random.py:97
qgis.pkextract_random.pkextract_random.RULE
string RULE
Definition: pkextract_random.py:94
qgis.pktoolsAlgorithm.pktoolsAlgorithm
Definition: pktoolsAlgorithm.py:41