Skip to content

Commit 66d1a58

Browse files
committedJun 22, 2017
Restore regular points alg
1 parent c33f940 commit 66d1a58

File tree

3 files changed

+81
-77
lines changed

3 files changed

+81
-77
lines changed
 

‎python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
from .ImportIntoPostGIS import ImportIntoPostGIS
5959
from .Merge import Merge
6060
from .PostGISExecuteSQL import PostGISExecuteSQL
61+
from .RegularPoints import RegularPoints
6162

62-
# from .RegularPoints import RegularPoints
6363
# from .SymmetricalDifference import SymmetricalDifference
6464
# from .VectorSplit import VectorSplit
6565
# from .RandomExtract import RandomExtract
@@ -200,7 +200,7 @@ def getAlgs(self):
200200
# RandomSelection(), RandomSelectionWithinSubsets(),
201201
# SelectByLocation(), RandomExtract(),
202202
# RandomExtractWithinSubsets(), ExtractByLocation(),
203-
# SpatialJoin(), RegularPoints(), SymmetricalDifference(),
203+
# SpatialJoin(), SymmetricalDifference(),
204204
# VectorSplit(),
205205
# DeleteDuplicateGeometries(), TextToFloat(),
206206
# SelectByAttribute(),
@@ -261,7 +261,8 @@ def getAlgs(self):
261261
GridPolygon(),
262262
ImportIntoPostGIS(),
263263
Merge(),
264-
PostGISExecuteSQL()
264+
PostGISExecuteSQL(),
265+
RegularPoints()
265266
]
266267

267268
if hasPlotly:

‎python/plugins/processing/algs/qgis/RegularPoints.py

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,16 @@
3333
from qgis.PyQt.QtGui import QIcon
3434
from qgis.PyQt.QtCore import QVariant
3535
from qgis.core import (QgsRectangle, QgsFields, QgsField, QgsFeature, QgsWkbTypes,
36-
QgsGeometry, QgsPointXY, QgsCoordinateReferenceSystem)
36+
QgsGeometry, QgsPointXY, QgsCoordinateReferenceSystem,
37+
QgsProcessingParameterExtent,
38+
QgsProcessingParameterNumber,
39+
QgsProcessingParameterBoolean,
40+
QgsProcessingParameterCrs,
41+
QgsProcessingParameterFeatureSink,
42+
QgsProcessingParameterDefinition,
43+
QgsProcessingOutputVectorLayer)
3744

3845
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
39-
from processing.core.parameters import ParameterExtent
40-
from processing.core.parameters import ParameterNumber
41-
from processing.core.parameters import ParameterBoolean
42-
from processing.core.parameters import ParameterCrs
43-
from processing.core.outputs import OutputVector
44-
from processing.tools import dataobjects
4546

4647
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
4748

@@ -64,19 +65,21 @@ def group(self):
6465

6566
def __init__(self):
6667
super().__init__()
67-
self.addParameter(ParameterExtent(self.EXTENT,
68-
self.tr('Input extent'), optional=False))
69-
self.addParameter(ParameterNumber(self.SPACING,
70-
self.tr('Point spacing/count'), 100, 999999999.999999999, 100))
71-
self.addParameter(ParameterNumber(self.INSET,
72-
self.tr('Initial inset from corner (LH side)'), 0.0, 9999.9999, 0.0))
73-
self.addParameter(ParameterBoolean(self.RANDOMIZE,
74-
self.tr('Apply random offset to point spacing'), False))
75-
self.addParameter(ParameterBoolean(self.IS_SPACING,
76-
self.tr('Use point spacing'), True))
77-
self.addParameter(ParameterCrs(self.CRS,
78-
self.tr('Output layer CRS'), 'ProjectCrs'))
79-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Regular points'), datatype=[dataobjects.TYPE_VECTOR_POINT]))
68+
self.addParameter(QgsProcessingParameterExtent(self.EXTENT,
69+
self.tr('Input extent'), optional=False))
70+
self.addParameter(QgsProcessingParameterNumber(self.SPACING,
71+
self.tr('Point spacing/count'), QgsProcessingParameterNumber.Double, 100, False, 0.000001, 999999999.999999999))
72+
self.addParameter(QgsProcessingParameterNumber(self.INSET,
73+
self.tr('Initial inset from corner (LH side)'), QgsProcessingParameterNumber.Double, 0.0, False, 0.0, 9999.9999))
74+
self.addParameter(QgsProcessingParameterBoolean(self.RANDOMIZE,
75+
self.tr('Apply random offset to point spacing'), False))
76+
self.addParameter(QgsProcessingParameterBoolean(self.IS_SPACING,
77+
self.tr('Use point spacing'), True))
78+
self.addParameter(QgsProcessingParameterCrs(self.CRS,
79+
self.tr('Output layer CRS'), 'ProjectCrs'))
80+
81+
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Regular points'), QgsProcessingParameterDefinition.TypeVectorPoint))
82+
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT, self.tr('Regular points'), QgsProcessingParameterDefinition.TypeVectorPoint))
8083

8184
def name(self):
8285
return 'regularpoints'
@@ -85,23 +88,19 @@ def displayName(self):
8588
return self.tr('Regular points')
8689

8790
def processAlgorithm(self, parameters, context, feedback):
88-
extent = str(self.getParameterValue(self.EXTENT)).split(',')
91+
extent = self.parameterAsExtent(parameters, self.EXTENT, context)
8992

90-
spacing = float(self.getParameterValue(self.SPACING))
91-
inset = float(self.getParameterValue(self.INSET))
92-
randomize = self.getParameterValue(self.RANDOMIZE)
93-
isSpacing = self.getParameterValue(self.IS_SPACING)
94-
crsId = self.getParameterValue(self.CRS)
95-
crs = QgsCoordinateReferenceSystem()
96-
crs.createFromUserInput(crsId)
97-
98-
extent = QgsRectangle(float(extent[0]), float(extent[2]),
99-
float(extent[1]), float(extent[3]))
93+
spacing = self.parameterAsDouble(parameters, self.SPACING, context)
94+
inset = self.parameterAsDouble(parameters, self.INSET, context)
95+
randomize = self.parameterAsBool(parameters, self.RANDOMIZE, context)
96+
isSpacing = self.parameterAsBool(parameters, self.IS_SPACING, context)
97+
crs = self.parameterAsCrs(parameters, self.CRS, context)
10098

10199
fields = QgsFields()
102100
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
103101

104-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, QgsWkbTypes.Point, crs, context)
102+
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
103+
fields, QgsWkbTypes.Point, crs)
105104

106105
if randomize:
107106
seed()
@@ -127,6 +126,9 @@ def processAlgorithm(self, parameters, context, feedback):
127126
while y >= extent.yMinimum():
128127
x = extent.xMinimum() + inset
129128
while x <= extent.xMaximum():
129+
if feedback.isCanceled():
130+
break
131+
130132
if randomize:
131133
geom = QgsGeometry().fromPoint(QgsPointXY(
132134
uniform(x - (pSpacing / 2.0), x + (pSpacing / 2.0)),
@@ -137,9 +139,10 @@ def processAlgorithm(self, parameters, context, feedback):
137139
if extent_engine.intersects(geom.geometry()):
138140
f.setAttribute('id', count)
139141
f.setGeometry(geom)
140-
writer.addFeature(f)
142+
sink.addFeature(f)
141143
x += pSpacing
142144
count += 1
143145
feedback.setProgress(int(count * total))
144146
y = y - pSpacing
145-
del writer
147+
148+
return {self.OUTPUT: dest_id}

‎python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,15 +1566,15 @@ tests:
15661566
name: expected/extract_by_attribute_greater.gml
15671567
type: vector
15681568

1569-
# - algorithm: qgis:createattributeindex
1570-
# name: Create Attribute Index (only tests for python errors, does not check result)
1571-
# params:
1572-
# FIELD: fid
1573-
# INPUT:
1574-
# name: lines.gml
1575-
# type: vector
1576-
# results: {}
1577-
#
1569+
- algorithm: qgis:createattributeindex
1570+
name: Create Attribute Index (only tests for python errors, does not check result)
1571+
params:
1572+
FIELD: fid
1573+
INPUT:
1574+
name: lines.gml
1575+
type: vector
1576+
results: {}
1577+
15781578
- algorithm: qgis:deletecolumn
15791579
name: Delete columns (multiple)
15801580
params:
@@ -2133,20 +2133,20 @@ tests:
21332133
# # name: expected/servicearea_bounds.gml
21342134
# # type: vector
21352135
#
2136-
# - algorithm: qgis:createattributeindex
2137-
# name: Create attribute index
2138-
# params:
2139-
# FIELD: id
2140-
# INPUT:
2141-
# name: custom/points.shp
2142-
# type: vector
2143-
# in_place: true
2144-
# results:
2145-
# INPUT:
2146-
# name: expected/create_attr_index_points.shp
2147-
# type: vector
2148-
# in_place_result: true
2149-
#
2136+
- algorithm: qgis:createattributeindex
2137+
name: Create attribute index
2138+
params:
2139+
FIELD: id
2140+
INPUT:
2141+
name: custom/points.shp
2142+
type: vector
2143+
in_place: true
2144+
results:
2145+
INPUT:
2146+
name: expected/create_attr_index_points.shp
2147+
type: vector
2148+
in_place_result: true
2149+
21502150
# - algorithm: qgis:createspatialindex
21512151
# name: Create spatial index
21522152
# params:
@@ -2375,23 +2375,23 @@ tests:
23752375
# name: expected/topocolor_polys_min_dist.gml
23762376
# type: vector
23772377
#
2378-
# - algorithm: qgis:regularpoints
2379-
# name: Regular point with standard extent
2380-
# params:
2381-
# EXTENT: -0.9182432432432436,10.208108108108108,-3.1266891891891904,5.480067567567567
2382-
# INSET: 0.0
2383-
# IS_SPACING: false
2384-
# RANDOMIZE: false
2385-
# SPACING: 100
2386-
# CRS: EPSG:4326
2387-
# results:
2388-
# OUTPUT:
2389-
# name: expected/regular_points.gml
2390-
# type: vector
2391-
# compare:
2392-
# geometry:
2393-
# precision: 5
2394-
#
2378+
- algorithm: qgis:regularpoints
2379+
name: Regular point with standard extent
2380+
params:
2381+
EXTENT: -0.9182432432432436,10.208108108108108,-3.1266891891891904,5.480067567567567
2382+
INSET: 0.0
2383+
IS_SPACING: false
2384+
RANDOMIZE: false
2385+
SPACING: 100
2386+
CRS: EPSG:4326
2387+
results:
2388+
OUTPUT:
2389+
name: expected/regular_points.gml
2390+
type: vector
2391+
compare:
2392+
geometry:
2393+
precision: 5
2394+
23952395
# - algorithm: qgis:rectanglesovalsdiamondsvariable
23962396
# name: Rectangular buffer shape
23972397
# params:

0 commit comments

Comments
 (0)
Please sign in to comment.