| pktools 2.6.7 Processing Kernel for geospatial data

pkextract.py
1# -*- coding: utf-8 -*-
2
3"""
4***************************************************************************
5 pkextract.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(pktoolsAlgorithm):
88
89 INPUT = "INPUT"
90 SAMPLE = "SAMPLE"
91 ITERATE = "ITERATE"
92 OUTPUT = "OUTPUT"
93
94 RULE_OPTIONS = ['centroid', 'point', 'mean', 'proportion', 'count', 'min', 'max', 'mode', 'sum', 'median', 'stdev', 'percentile']
95
96 RULE = "RULE"
97 POLYGON = "POLYGON"
98 BUFFER = "BUFFER"
99 SRCNODATA = "SRCNODATA"
100 BNDNODATA = "BNDNODATA"
101
102 EXTRA = 'EXTRA'
103
104 FORMAT = "FORMAT"
105
106 def cliName(self):
107 return "pkextractogr"
108
109 def defineCharacteristics(self):
110 self.name = "extract vector sample from raster"
111 self.group = "[pktools] raster/vector"
112 self.addParameter(ParameterRaster(self.INPUT, 'Input raster data set'))
113 self.addParameter(ParameterVector(self.SAMPLE, 'Sample vector data set'))
114 self.addParameter(ParameterBoolean(self.ITERATE, "Iterate over all layers",True))
115 self.addParameter(ParameterSelection(self.RULE,"extraction rule",self.RULE_OPTIONS, 0))
116
117 self.addOutput(OutputVector(self.OUTPUT, 'Output vector data set'))
118 self.addParameter(ParameterSelection(self.FORMAT,
119 'Destination Format', FORMATS))
120
121 self.addParameter(ParameterBoolean(self.POLYGON, "Create OGRPolygon as geometry instead of OGRPoint",False))
122 self.addParameter(ParameterNumber(self.BUFFER, "Buffer for calculating statistics for point features",0,19,0))
123 self.addParameter(ParameterString(self.SRCNODATA, "invalid value(s) for input raster dataset (e.g., 0;255)","none"))
124 self.addParameter(ParameterString(self.BNDNODATA, "Band(s) in input image to check if pixel is valid (e.g., 0;1)","0"))
125
126 self.addParameter(ParameterString(self.EXTRA,
127 'Additional parameters', '', optional=True))
128
129 def processAlgorithm(self, progress):
130 cliPath = '"' + os.path.join(pktoolsUtils.pktoolsPath(), self.cliName()) + '"'
131 commands = [cliPath]
132
133 input=self.getParameterValue(self.INPUT)
134 commands.append('-i')
135 commands.append('"' + input + '"')
136
137 sample=self.getParameterValue(self.SAMPLE)
138 if self.getParameterValue(self.ITERATE):
139 if str(sample).find('|')>0:
140 samplename=str(sample)[:str(sample).find('|')]
141 else:
142 samplename=str(sample)
143 else:
144 samplename=str(sample).replace("|layername"," -ln")
145 commands.append('-s')
146 commands.append(samplename)
147
148 if self.getParameterValue(self.POLYGON):
149 commands.append("-polygon")
150
151 commands.append("-r")
152 commands.append(self.RULE_OPTIONS[self.getParameterValue(self.RULE)])
153
154 output = self.getOutputFromName(self.OUTPUT)
155 outFile = output.value
156 formatIdx = self.getParameterValue(self.FORMAT)
157 outFormat = '"' + FORMATS[formatIdx] + '"'
158 commands.append('-f')
159 commands.append(outFormat)
160 ext = EXTS[formatIdx]
161 if not outFile.endswith(ext):
162 outFile += ext
163 output.value = outFile
164 commands.append('-o')
165 commands.append('"' + outFile + '"')
166
167 buffer=self.getParameterValue(self.BUFFER)
168 if buffer > 1:
169 commands.append("-buf")
170 commands.append(str(buffer))
171
172 srcnodata=self.getParameterValue(self.SRCNODATA)
173 if srcnodata != "none":
174 srcnodataValues = srcnodata.split(';')
175 for srcnodataValue in srcnodataValues:
176 commands.append('-srcnodata')
177 commands.append(srcnodataValue)
178 bndnodata=self.getParameterValue(self.BNDNODATA)
179 bndnodataValues = bndnodata.split(';')
180 for bndnodataValue in bndnodataValues:
181 commands.append('-bndnodata')
182 commands.append(bndnodataValue)
183
184 extra = str(self.getParameterValue(self.EXTRA))
185 if len(extra) > 0:
186 commands.append(extra)
187
188 pktoolsUtils.runpktools(commands, progress)
qgis.pkextract.pkextract
Definition: pkextract.py:87
qgis.pkextract.pkextract.BUFFER
string BUFFER
Definition: pkextract.py:98
qgis.pkextract.pkextract.SAMPLE
string SAMPLE
Definition: pkextract.py:90
qgis.pkextract.pkextract.BNDNODATA
string BNDNODATA
Definition: pkextract.py:100
qgis.pkextract.pkextract.name
name
Definition: pkextract.py:110
qgis.pkextract.pkextract.EXTRA
string EXTRA
Definition: pkextract.py:102
qgis.pkextract.pkextract.RULE_OPTIONS
list RULE_OPTIONS
Definition: pkextract.py:94
qgis.pkextract.pkextract.ITERATE
string ITERATE
Definition: pkextract.py:91
qgis.pkextract.pkextract.INPUT
string INPUT
Definition: pkextract.py:89
qgis.pkextract.pkextract.SRCNODATA
string SRCNODATA
Definition: pkextract.py:99
qgis.pkextract.pkextract.group
group
Definition: pkextract.py:111
qgis.pkextract.pkextract.POLYGON
string POLYGON
Definition: pkextract.py:97
qgis.pkextract.pkextract.cliName
def cliName(self)
Definition: pkextract.py:106
qgis.pkextract.pkextract.OUTPUT
string OUTPUT
Definition: pkextract.py:92
qgis.pkextract.pkextract.FORMAT
string FORMAT
Definition: pkextract.py:104
qgis.pkextract.pkextract.RULE
string RULE
Definition: pkextract.py:96
qgis.pktoolsAlgorithm.pktoolsAlgorithm
Definition: pktoolsAlgorithm.py:41