-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstdDevEllipse.py
385 lines (336 loc) · 70.5 KB
/
stdDevEllipse.py
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
# -*- coding: utf-8 -*-
"""
stdDevEllipse.py
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""
__author__ = 'Leandro França'
__date__ = '2020-08-22'
__copyright__ = '(C) 2020, Leandro França'
from PyQt5.QtCore import QCoreApplication, QVariant
from qgis.core import (QgsProcessing,
QgsFeatureSink,
QgsWkbTypes,
QgsFields,
QgsField,
QgsFeature,
QgsPointXY,
QgsGeometry,
QgsProcessingException,
QgsProcessingAlgorithm,
QgsProcessingParameterString,
QgsProcessingParameterField,
QgsProcessingParameterBoolean,
QgsProcessingParameterCrs,
QgsProcessingParameterEnum,
QgsFeatureRequest,
QgsExpression,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterFeatureSink,
QgsProcessingParameterFileDestination,
QgsApplication,
QgsProject,
QgsCoordinateTransform,
QgsCoordinateReferenceSystem)
import processing
import numpy as np
from numpy import pi, cos, sin, sqrt
from scipy.stats import chi2
class StdDevEllipse(QgsProcessingAlgorithm):
LOC = QgsApplication.locale()
def translate(self, string):
return QCoreApplication.translate('Processing', string)
def tr(self, *string):
# Traduzir para o portugês: arg[0] - english (translate), arg[1] - português
if self.LOC == 'pt':
if len(string) == 2:
return string[1]
else:
return self.translate(string[0])
else:
return self.translate(string[0])
def createInstance(self):
return StdDevEllipse()
def name(self):
return 'stdellipse'
def displayName(self):
return self.tr('Directional Distribution', 'Distribuição Direcional')
def group(self):
return self.tr('LF Spatial Statistics', 'LF Estatística Espacial')
def groupId(self):
return 'lf_spatialstatistics'
def shortHelpString(self):
if self.LOC == 'pt':
return ""
else:
return self.tr("")
def tags(self):
return self.tr('ellipse,elipse,confidence,deviational,standard,tendency,dispertion,directional,trend,confidence,covariance,mvc').split(',')
def shortHelpString(self):
txt_en = 'Creates ellipses based on the covariance matrix to summarize the spatial characteristics of point type geographic features: central tendency, dispersion, and directional trends.'
txt_pt = 'Cria elipses a partir da matriz variância-covariância para resumir as características espaciais de feções geográficas do tipo ponto: tendência central, dispersão e tendências direcionais.'
dic_BW = {'face': 'iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMMwAADDMBUlqVhwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIUSURBVEiJvZa9quJAGIbfMfEYTUSUQAqLYOnehJobsBTlHLbRQtKKlY3lObegxRa7pRdg7y0saiuoKAErMZif2Squ2eTEOCfsC1Pk+3uYb2YyQwCg1+u9UUqHAKoAOCQrB8ASwPt0Ov1JdF3/bprmj4QhoXp5eXnjTdMcUEr/Bw+WZQ15Smn1q4UIIZBlGaIoghBys2+3W1yv19u367rfeAAc6ww5jkOz2USj0YAoigH/aDTCbrfzpfCUUrAC2+02NE2LjPm3NjNQkiTU6/WHsFAgi1RVRSqVCthd171BwmozA/P5fMA2n88xm81g2zYAwHGccCAL9H43elosFrhcLpE5zMCwHMdxImtRSp8DptNpZDIZAIAgCAG/IAi+42Ga5q29nkin06FxgZqmodvtxooFgPF4jPV67bM9NcNnW384HJI7h49kWRZOp9PXgOfzGfv9HgCQy+VQKBR8fsMwYFkWAOB4PMJ13UAN0mq1Yq/hfVytVoOu6z7/YDDAZrP5Wzzk6CR6LOLEJLqGcWrxYX2OW5wJmOQOjQX0ApOERgIrlQoTUJblgK1cLodeWZ4IIeDDngZx5P1T75XNZiFJUmQeTyl1wPAW/awrD7rlpDiOW3qL/cz4DBY1CCG/U4qifDw7O1YpivJBAGAymbwahjG0bbtKKeXjJJdKJaiq6rOtVqvAjU8IsTmOWxaLxfd+v//rD1H2cZ8dKhk8AAAAAElFTkSuQmCC', 'github': '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', 'instagram': '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', 'lattes': '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', 'linkedin': 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAM6QAADOkBmiiHWwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJRSURBVEiJ7ZU/aCJREMa/t7soa5LOoGihktZOQSxSWykBIYVaWZ6NVa6wSZ/WI5BGziJypA1CQBLsgkKKgBjFQkEtkouJ+AdxdeeKnHvurXdcXK84uK/amfl4v9m3s++xbrdrury8PGm324dEZMYGxRj7arPZvoRCoSPh/Pz8pFqtftgkYEnmTqeT6PV6xDscjs9EZPpLIADAy8uLS5jP52bGGACA4ziEw2H4/X5IkoSrqytcX1/rBhHRrrCcCAaDCAQCShyJRPD6+oq7uzvdMG458Hg8GoPX69UN0YDG47HGsCqnG5TP50FESjyZTFAoFDYCYvF4nBbDAAB7e3vw+XyQJAnFYhGPj4+6IUQE4eekJEm4vb0F8DaFC1mtVphMb3+BLMtotVogItjtdjgcDhiNRvT7fTw8PKzcbhXI5XIhlUqpOkkkEpjP5zg+PoYg/LCfnp5if38fbrdbteB0OsXFxQVubm5+DTIYDKoiYww8z4OIwPO8qhaLxbCzs6Pp3GAwIBqN4vn5Gff390qe0zj/UKsgywqFQqpY843eo1KphHK5DLPZjIODAxiNRqXmdDqxvb2N4XCoD1Sv13F2dqbEs9kM0WhU5bFYLApo7a1bTOZClUpF49na2lKe1wb1ej1VvGqklwdobdB79R/0j4FkWdYYiEh1dawrAcATgF0AaDabyOVyyuE5HA4xmUwAAJlMRjl2ZFlGo9FQLTQajZDNZiGKouKp1WqL8hNLJpPpwWCQ0N3ybySKYpqLxWJHjLFP399s03riOC4dCAQ+fgMeouMzfwx22gAAAABJRU5ErkJggg==', 'RG': 'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAcCAYAAAB2+A+pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMfwAADH8BdgxfmQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM2SURBVEiJtZdLSytJFMd/1dXB+OiQRJEQBEnbPgISJGIQcePKjyBZzoP5AH6OuR9gFjPMznwC1650EbKSy00WPhJ8EMlDtG1M0p2axZCA1871cZM/NDRFnfqdqjrnVJUAODg4+E0IsQ8sA5LRyANKQogve3t7/4hcLvcH8NeIYL5SSv2uAftDHhSl1A/7CCH2dWBxWNBoNIppmgSDQarVKufn53ie59d1RQO0YUBjsRg7OztomkatVmNpaYnNzU2EEH7dNX0YUKUUpmlyd3dHPp9HKcXV1RXT09MIIXyXfihgKSWGYVCpVPoQ27axbXugjS/4HcHh29btdlFKsbq6SiwWA6BQKHB/f/82WEpJKpUiEAi8aA8EAiilaLVaNBoNrq+vabfbr+BCCG5vb3l8fCSTyaDr/ov6KrA8z6NcLtNqtUgkEszPz+M4Ds1mE9u2MQyDjY0Ndnd3mZmZ6ds4jkMoFAKg0Wjw8PCAEIJOp+ML9nWnZ5hIJJBSUiqV+gMIIbAsi3Q6zdbWFoeHh7iuS7lcZn19HcdxsG0by7Ko1+sD93lgcCml6Ha7SClftZ+dnbG4uIhhGMzOznJzc0OlUkHTNBYWFtB1nXq9zunp6aA8/lxUe57H09MThmEwPj7ed+ji4oLLy0uEEHieNyiHPw+WUjI5OYlS6lXE9krmj6DwyaplmiaGYVCtVqnX658Z4u0ZCyGIx+O0223GxsaYm5sjHo9Tq9U4OTn5FPRdYCkly8vLCCEIh8MopSgUCpTLZVzXHR3YdV2Ojo7wPI/t7W1isRjBYPCnoPDOPVZK4XlePz2SySThcHj04J4ajQbFYhEpJZlM5lWOjwwMUCwWaTabRCIR0un08MG9gt/778l1XfL5PJ1OB9M0WVlZGR54amoKy7IIBoPouo5lWYRCof7SNptN8vk83W6XVCrF2toaExMTHwKLXC734vCVUpJOp9F1/cW5rGkapVLpRcGIRqMkk0kikQiO43B8fMzz8/O7wd73Mx90EfArg0opNE178/LwnboaUPID+H2DnPkgFOCbppT68lGrn5VS6k8tm83+DfwKfOX/Z8ao5AFflVK/ZLPZf/8DudZq3wvXLmgAAAAASUVORK5CYII=', 'tweeter': 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMMQAADDEBLaRWDgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK5SURBVEiJpZU7T+NAFEZP4kAePBwZ8TA0EUIRKKIgQhSImnZ/wDYr7Q/barddbRu2QVAQhChAgBQqQClwFEIcx8IYfLdKNk5sJ4GRRh6PPN+Z+90749jZ2VnGsqyfwD6QEREARISocdRcT7dF5AD4lmi327+AL0GCn4QgIhkR+SIiPxIish8k3i/yQVCn7ydEJD0sgjDBMUCZxCg2hQmqqsri4iKKotBoNKhWq741vesSvULpdJrJyUkajcZQy7a2tlheXqa3FQoFzs/PmZubQ9M0Dg8Pu2vivQJLS0sUi0Wy2WykFfl8fgACkEql2N3dJZfLcXFxgaqq/0G9O04mk8RiMba3t8nlcqHRrK6uDkB628TEBDs7O5imORgRgGVZ3Y/z+Tx7e3ssLCz4QMlkkng8HglqNpscHBzw9vbmz1EHVK1WWVtb6wpNTU1RLBZ5f3/HMAzq9TqO40RCAGq1Gq7r+jboK4aZmRmurq7Y3Nz0LVQUBV3X0XV9KATAcZwBy7vlLSJomjbU/1Ha8/PzAMhXdQ8PD5+GABiGEQ1qt9tcXl5+CvL09MTLy8ugdf0T9/f32LbNxsYGs7OzY4Our68DD/oASEQoFApMT0+PDTFNk7u7u0BQPAhULpdxXXds0PHxMZ7nDUBCQa1Wi1KpRKVSwTTNkSAnJyfU6/XQWz4QJCI4jsPj4yOKogyFnJ6ecnt7G3nTd3OUSCSYn59HURRUVUXXdTKZTCTAtm2Ojo585dwP6rx3Qa+vrzSbTdbX11lZWSEWi4UCLMvi5uaGSqWC53mh/67esa/qTNOkXC4DoGka2WyWVCoFgOu6tFotDMPAtu3QXISNA8tbRKjVaoEnPCwPYZZ1nnHP8+ww2Ed7P0RE7LjneX/7ff6ocES0pbiIfBWRP57n2aMAwywKGdsi8ltRlO//AFPkniYXwGRMAAAAAElFTkSuQmCC', 'udemy': 'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAdCAYAAAC9pNwMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMOgAADDoBpJd/BgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAYHSURBVEiJlZdbTFNbGsd/e/cCFtpgxX0sjHgJoepBJcqMl4gGjoYTb5PRYZxEMmq8cI5Oosw8ODG+iJpMHGN0Hsz4QHwwmRgLHpJjqkDqQZ+QWEWisdEIRZoKtAKFFuxt73nQ3aG05pT/2/rW5fd93/rW2msL/Lo0gO727dtlc+fO/cFoNK41mUzzjEajMR6Py6Ojo4FgMPjR4/E8fv369fULFy70A1EgnsHaaSVarVbj3bt3L/b3948pGSgWiylPnz71nj9//kcgBxBnC9Vfv379QG9vb0bAmZJlWXn06NFATU1NFaDPFDrn5s2b/56ampIVRVGCwaDS2NioNDQ0KG1tbbNy4MOHD7H6+vp/AHNmQjQzoXfu3Gnav39/rVarFQCam5vp6ekhHA7jdrtZs2YNBoMhowhyc3PFLVu2fOf3++c6nc5fgFg6sP7atWv/OnjwYK0gCAD4/X5aWlqQZRkARVEoLS3FbDZnmj20Wq2wcePG375582bM5XI5+VJ06uaLdXV1fzh27NhfRfH/9dDe3k40Gk20BUFAp9N9FdLd3c2VK1e4desWk5OTCbvZbBYaGhr+aTQaf6cyVYqhpqbmWnZ2tqAO7u3t5fnz5zO9Z968eWmhIyMj2Gw2vF4vL168wOFwJPWvXLlSe/z48f8ABhWsPXXq1Mmqqqpv1EHhcBibzZZIsSpJksjNzU0LfvjwIeFwONF2uVwoipI05uTJkyskSfo9oBUB/fr16+vUfVUUhaamJnw+X8riJSUlaaHDw8M4nc4kWzAYTNomAIvFIuzYsePvgF7MysqyVFRUFKqdbW1tdHd3pwVYrda09pm1ACDLckrGAKqqqr4FFmh37979l4KCAlFRFFpbW3E4HCkpAtDr9SxatCjF7vF46OnpSbGnWwOgsrJSB3ynlSTp28nJycR5/dqEoqKitBXd2tpKPJ56LSuKkjZii8UiZGVlWUWz2fwbv9+fBJ1+pFQtXbo0xfbu3TtcLhcA8+fPT5ony3LaIERRZMmSJUtEILeoqIjt27djtVrZtm0bmzdvTpmwePHilIju3buHoigIgsCmTZuS+mOxGJFIJGUOQFZWlln0+/1+gMrKSo4ePUp1dXVKRQuCQEFBQZKts7OTgYEBABYuXMiKFStQT4YKmX6JuN1uLl26xPj4OH19fV7t8PDwwMzoPB5PUttoNJKTk5Noj42Ncf/+/YRTW7duJScnB51Ol7Tfb9++JT8/n66uLux2O9FolIGBAWV8fNyjffz4cWcoFKpVFw6FQoRCoSSwwWBg+jlvbm5ORFNcXMzy5csRBAFJknj//n1int1ux+FwMDU1BYDJZKKvr08B3oo+n8/e3t6eOISRSCSlGqcXSUdHR6KgNBoNO3fuTDhVXl6eNE+W5QRUEASqq6ux2+2fAIcIDLW3t7vUwRqNJmmvAD5+/Mjg4CBOp5MHDx4kHKmoqKCwMHH3sG7dOpYtW8ZMZWdns2fPHsrKyrDb7Z3AkABo9Xr93q6urv+uXr1alGWZc+fOpaR7eqrhc0GdOHECrVabkp1Xr17hdruRZZkFCxZQWlqKwWDg6tWr0fr6+v3ATxpAjsfj/YFA4Pu9e/cWCILA0NAQXq83xXNVeXl5HDlyJKngpjsoSRIlJSVYrVYKCwvR6XSMjo5SW1vbMTExcQH4pD4EYi9fvnxZWFj457Vr1+osFgvPnj1LuX/h8xfq8OHD5Ofnf9WxmZJlmQMHDow9efLkCOAGFBWs8Hmv+8vLy3etWrVKLC4uxuv1MjExgSAImEwmNmzYwL59+8jLy8sYCnD27NlPN27cqAMcTHv+TNcci8VypqWlJaK+FgOBgDIyMqJEo9FZvzZjsZhy5syZSeBvpHnwpcA1Gs2fLl68OBaJRGYNU+Xz+eRdu3YNA3/MBKpKD5SVlpb+3NjYGI7FYhkDg8Ggcvny5U+SJDUDZcziXa1K5PPfQGVZWdnPp0+fnujo6IgHAoEU2ODgoGyz2WKHDh0as1gsTcAWfuVPQvhaxzRpAB1gBNZ9iUISRfGbLzfcIDAMvACeABNk8O/0PwJCxMb99V7LAAAAAElFTkSuQmCC', 'youtube': 'iVBORw0KGgoAAAANSUhEUgAAACEAAAAaCAYAAAA5WTUBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMNwAADDcBracSlQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKkSURBVEiJxZcxSBthFIC/918uGhxMsyptcGjoIgGHW9wSihQKGZrNthHsIC7S1TqWgkRwcZV2lKo0FouixaEuEQ4khIIdrClkEoIZgiae93fQgFgll5jqt93x3v++e3f/3TvhGgYHBx/UarUUEAMeA48A/3WxDagBf4A9EdmsVqsfd3d3j64GyeWDZDJpFAqFKWAC6G6haCPKIjKTzWbfA+4/Ev39/V2dnZ3LwNP/UPwqaycnJy9yuVwFQF2cVIFA4PMdCQAMBQKBL8lk0gAwACzLmtJav7kjgTp95XK5ViwWf0g0Gg36/f7fQLBRltYaEWkU5hkRKTmO06dM03ztRaAuEQ6H0Vq3RUJrHTIM46XR29v7jvNt2BClFEtLS0QiEfb39ymVSrfujIg4Cog0mxiPx1lYWGBycpKenh5c122cdANa64gCHra6QCKRYHl5mfHxcYLBII7jtLJMWAEdrUrUSaVSrK6uMjo6SigU4uzsrJn0DtU4xhs+n4+xsTFWVlYYHh6mq6vL821qm0Qd0zSZmJggk8kQi8XuR6LO1tYW+XzeUzd87S6ey+WYnZ0ln88jIijV+DrbJnF4eMj09DTb29u4rtvU+8MHVLnFDjk+PiadTrO+vs7p6WkrS1R9QAGPb8zLaK2Zm5tjcXGRSqXiqe03sO8D9pqVyGQyzM/PUywWMQzjNgIAv3xa600Ree4l2nEcRkZGODg4QCmFYRi3KQ6AiGzIwMBAt2EYB9znp9y27bLWesZjUtsELkjbtl2ur6osy/qqtX7W7io3ISIb2Wx2CHDrT5TrOE4SWLsjgW+O4yS4mLiv9ldZljWptX6Lx2mrSY6A9M7OzgeuG/kvE41Gg6ZpvhKROPCE85mj5Z8fEfnpuu5313U/2bZdvhr0F9Fo9phaoDu9AAAAAElFTkSuQmCC'}
image = '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'
footer = '''<div>
<div align="center">
<img src="data:image/jpg;base64,'''+ image +'''
</div>
<div align="right">
<p align="right">
<b>'''+self.tr('Author: Leandro Franca', 'Autor: Leandro França')+'''</b>
</p>
<a target="_blank" rel="noopener noreferrer" href="https://www.udemy.com/user/leandro-luiz-silva-de-franca/"><img title="Udemy" src="data:image/png;base64,'''+dic_BW['udemy']+'''"></a> <a target="_blank" rel="noopener noreferrer" href="https://www.facebook.com/GEOCAPT/"><img title="Facebook" src="data:image/png;base64,'''+dic_BW['face']+'''"></a> <a target="_blank" rel="noopener noreferrer" href="https://www.youtube.com/channel/UCLrewDGciytcBG9r0OxTW2w"><img title="Youtube" src="data:image/png;base64,'''+dic_BW['youtube']+'''"></a> <a target="_blank" rel="noopener noreferrer" href="https://www.researchgate.net/profile/Leandro_Franca2"><img title="ResearchGate" src="data:image/png;base64,'''+dic_BW['RG']+'''"></a> <a target="_blank" rel="noopener noreferrer" href="https://github.com/LEOXINGU"><img title="GitHub" src="data:image/png;base64,'''+dic_BW['github']+'''"></a> <a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/leandro-fran%C3%A7a-93093714b/"><img title="Linkedin" src="data:image/png;base64,'''+dic_BW['linkedin']+'''"></a> <a target="_blank" rel="noopener noreferrer" href="http://lattes.cnpq.br/8559852745183879"><img title="Lattes" src="data:image/png;base64,'''+dic_BW['lattes']+'''"></a>
</div>
</div>'''
if self.LOC == 'pt':
return txt_pt + footer
else:
return self.tr(txt_en) + footer
INPUT = 'INPUT'
TAM = 'TAM'
PESO = 'PESO'
CAMPO_PESO = 'CAMPO_PESO'
AGRUPAR = 'AGRUPAR'
CAMPO_AGRUPAR = 'CAMPO_AGRUPAR'
OUTPUT = 'OUTPUT'
def initAlgorithm(self, config=None):
# INPUT
self.addParameter(
QgsProcessingParameterFeatureSource(
self.INPUT,
self.tr('Point Layer', 'Camada de Pontos'),
[QgsProcessing.TypeVectorPoint]
)
)
tipos = [self.tr('68% Confidence Ellipse', 'Elipse com 68% de confiança'),
self.tr('90% Confidence Ellipse', 'Elipse com 90% de confiança'),
self.tr('95% Confidence Ellipse', 'Elipse com 95% de confiança'),
self.tr('99% Confidence Ellipse', 'Elipse com 99% de confiança')]
self.addParameter(
QgsProcessingParameterEnum(
self.TAM,
self.tr('Size', 'Tamanho'),
options = tipos,
defaultValue= 1
)
)
self.addParameter(
QgsProcessingParameterBoolean(
self.PESO,
self.tr('Use Weight', 'Utilizar Peso'),
defaultValue=False))
self.addParameter(
QgsProcessingParameterField(
self.CAMPO_PESO,
self.tr('Weight Field', 'Campo de Peso'),
parentLayerParameterName=self.INPUT,
type=QgsProcessingParameterField.Numeric,
optional=True
)
)
self.addParameter(
QgsProcessingParameterBoolean(
self.AGRUPAR,
self.tr('Group by Attribute', 'Agrupar por Atributo'),
defaultValue=False))
self.addParameter(
QgsProcessingParameterField(
self.CAMPO_AGRUPAR,
self.tr('Group Field', 'Campo de Agrupamento'),
parentLayerParameterName=self.INPUT,
type=QgsProcessingParameterField.Any,
optional=True
)
)
# OUTPUT
self.addParameter(
QgsProcessingParameterFeatureSink(
self.OUTPUT,
self.tr('Standard Deviational Ellipse(s)', 'Elipse(s) de Distribuição')
)
)
def processAlgorithm(self, parameters, context, feedback):
layer = self.parameterAsSource(
parameters,
self.INPUT,
context
)
if layer is None:
raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT))
size = self.parameterAsEnum(
parameters,
self.TAM,
context
)
porcent = [0.68, 0.90, 0.95, 0.99]
confidence = porcent[size]
size = chi2.ppf(confidence, 2)
Peso = self.parameterAsBool(
parameters,
self.PESO,
context
)
Campo_Peso = self.parameterAsFields(
parameters,
self.CAMPO_PESO,
context
)
if Peso and not Campo_Peso:
raise QgsProcessingException(self.tr('Insert Weight Field!', 'Insira o Campo Peso!'))
Agrupar = self.parameterAsBool(
parameters,
self.AGRUPAR,
context
)
Campo_Agrupar = self.parameterAsFields(
parameters,
self.CAMPO_AGRUPAR,
context
)
if Agrupar and not Campo_Agrupar:
raise QgsProcessingException(self.tr('Insert Group Field!', 'Insira o Campo de Agupamento!'))
# Field index
if Peso:
Campo_Peso = layer.fields().indexFromName(Campo_Peso[0])
if Agrupar:
Campo_Agrupar = layer.fields().indexFromName(Campo_Agrupar[0])
# OUTPUT
GeomType = QgsWkbTypes.Polygon
Fields = QgsFields()
CRS = layer.sourceCrs()
itens = {
'id' : QVariant.Int,
self.tr('group','grupo'): QVariant.String,
'avg_x' : QVariant.Double,
'avg_y' : QVariant.Double,
'std_x' : QVariant.Double,
'std_y' : QVariant.Double,
self.tr('confidence','confiança'): QVariant.Double,
self.tr('rotation','rotação'): QVariant.Double,
'major_axis': QVariant.Double,
'minor_axis': QVariant.Double
}
for item in itens:
Fields.append(QgsField(item, itens[item]))
(sink, dest_id) = self.parameterAsSink(
parameters,
self.OUTPUT,
context,
Fields,
GeomType,
CRS
)
if sink is None:
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
if Agrupar:
dic = {}
for feat in layer.getFeatures():
pnt = feat.geometry().asPoint()
grupo = feat[Campo_Agrupar]
if grupo in dic:
dic[grupo]['x'] = dic[grupo]['x'] + [pnt.x()]
dic[grupo]['y'] = dic[grupo]['y'] + [pnt.y()]
if Peso:
dic[grupo]['w'] = dic[grupo]['w'] + [int(feat[Campo_Peso])]
else:
if Peso:
dic[grupo] = {'x':[pnt.x()], 'y':[pnt.y()], 'w':[int(feat[Campo_Peso])]}
else:
dic[grupo] = {'x':[pnt.x()], 'y':[pnt.y()]}
else:
dic = {}
for feat in layer.getFeatures():
pnt = feat.geometry().asPoint()
grupo = 'ungrouped'
if grupo in dic:
dic[grupo]['x'] = dic[grupo]['x'] + [pnt.x()]
dic[grupo]['y'] = dic[grupo]['y'] + [pnt.y()]
if Peso:
dic[grupo]['w'] = dic[grupo]['w'] + [int(feat[Campo_Peso])]
else:
if Peso:
dic[grupo] = {'x':[pnt.x()], 'y':[pnt.y()], 'w':[int(feat[Campo_Peso])]}
else:
dic[grupo] = {'x':[pnt.x()], 'y':[pnt.y()]}
feature = QgsFeature()
total = 100.0 / len(dic) if len(dic) else 0
for current, grupo in enumerate(dic):
x = np.array(dic[grupo]['x'])
y = np.array(dic[grupo]['y'])
if Peso:
w = dic[grupo]['w']
if len(x)==1:
raise QgsProcessingException(self.tr("Invalid Group Field!","Campo de Agrupamento Inválido!"))
if Peso:
if (np.array(w) > 0).sum() > 1: # Mais de um ponto com peso maior que zero
MVC = np.cov(x,y, fweights = w)
mediaX = float(np.average(x, weights = w))
mediaY = float(np.average(y, weights = w))
std_X = float(np.sqrt(np.average((x-mediaX)**2, weights = w)))
std_Y = float(np.sqrt(np.average((y-mediaY)**2, weights = w)))
else:
continue
else:
MVC = np.cov(x,y)
mediaX = float(np.average(x))
mediaY = float(np.average(y))
std_X = float(np.std(x))
std_Y = float(np.std(y))
σ2x = MVC[0][0]
σ2y = MVC[1][1]
σ2xy = MVC[0][1]
# Elipse de Erro para um determinado desvio-padrão
# Centro da Elipse
C=[mediaX, mediaY]
# Auto valores e autovetores da MVC
Val, Vet = np.linalg.eig(np.matrix(MVC))
λ1 = Val[0]
λ2 = Val[1]
v1 = np.array(Vet[:,0]).reshape([1,2])
v2 = np.array(Vet[:,1]).reshape([1,2])
AtPA = Vet.T*MVC*Vet
c1 = sqrt(AtPA[1,1]) # para x
c2 = sqrt(AtPA[0,0]) # para y
# Construção da Elipse
p = np.arange(0,2*pi,0.1)
a = c2 if λ1 > λ2 else c1 # semi eixo maior
b = c1 if λ1 > λ2 else c2 # semi eixo menor
# Fator de tamanho
s = np.sqrt(size) # Distribuição Chi-Square, diferente do ArcGIS - sqrt(2*std**2)
x_ell = s*a*cos(p)
y_ell = s*b*sin(p)
M1 = np.matrix([x_ell, y_ell])
# Rotacionamento de phi (direção do eixo maior)
v = v1 if λ1 > λ2 else v2 # vetor do semi-eixo maior
if v[0][1]>=0:
phi = np.arccos(np.dot(v,[1,0]))[0] # 1Q e 2Q
else:
phi = np.pi - np.arccos(np.dot(v,[1,0]))[0] # 3Q e 4Q
rot = np.matrix([[cos(phi), -sin(phi)], [sin(phi), cos(phi)]])
M2 = rot*M1
X_ell = np.array(M2[0,:]) + C[0]
Y_ell = np.array(M2[1,:]) + C[1]
coord = []
for k in range(len(X_ell[0])):
coord += [QgsPointXY(float(X_ell[0,k]), float(Y_ell[0,k]))]
pol = QgsGeometry.fromPolygonXY([coord + [coord[0]]])
feat = QgsFeature(Fields)
feat.setGeometry(pol)
cont = 1
att = [cont, str(grupo), mediaX, mediaY, std_X,std_Y,
confidence, float(np.degrees(phi)),
float(np.sqrt(size)*a), float(np.sqrt(size)*b)]
feat.setAttributes(att)
sink.addFeature(feat, QgsFeatureSink.FastInsert)
if feedback.isCanceled():
break
feedback.setProgress(int(current * total))
feedback.pushInfo(self.tr('Operation completed successfully!', 'Operação finalizada com sucesso!'))
feedback.pushInfo('Leandro França - Eng Cart')
return {self.OUTPUT: dest_id}