@@ -146,14 +146,14 @@ def createSinglePolygon(self, vlayer):
146
146
provider .select (allAttrs )
147
147
feat = QgsFeature ()
148
148
geom = QgsGeometry ()
149
- geom2 = QgsGeometry ()
149
+ # geom2 = QgsGeometry()
150
150
provider .nextFeature (feat )
151
- geom = feat .geometry ()
151
+ geom = QgsGeometry ( feat .geometry () )
152
152
count = 10.00
153
153
add = ( 40.00 - 10.00 ) / provider .featureCount ()
154
- provider .rewind ()
155
- provider .nextFeature (feat )
156
- geom = QgsGeometry (feat .geometry ())
154
+ # provider.rewind()
155
+ # provider.nextFeature(feat)
156
+ # geom = QgsGeometry(feat.geometry())
157
157
while provider .nextFeature (feat ):
158
158
geom = geom .combine (QgsGeometry ( feat .geometry () ))
159
159
count = count + add
@@ -176,13 +176,41 @@ def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
176
176
self .progressBar .setValue (count )
177
177
return points
178
178
179
+ def vectorRandom (self , n , layer , xmin , xmax , ymin , ymax ):
180
+ provider = layer .dataProvider ()
181
+ provider .select ([])
182
+ index = ftools_utils .createIndex (provider )
183
+ seed ()
184
+ points = []
185
+ feat = QgsFeature ()
186
+ i = 1
187
+ count = 40.00
188
+ add = ( 70.00 - 40.00 ) / n
189
+ while i <= n :
190
+ point = QgsPoint (xmin + (xmax - xmin ) * random (), ymin + (ymax - ymin ) * random ())
191
+ pGeom = QgsGeometry ().fromPoint (point )
192
+ ids = index .intersects (pGeom .buffer (5 ,5 ).boundingBox ())
193
+ for id in ids :
194
+ provider .featureAtId (int (id ),feat ,True )
195
+ tGeom = QgsGeometry (feat .geometry ())
196
+ if pGeom .intersects (tGeom ):
197
+ points .append (pGeom )
198
+ i = i + 1
199
+ count = count + add
200
+ self .progressBar .setValue (count )
201
+ break
202
+ return points
203
+
179
204
def randomize (self , inLayer , outPath , minimum , design , value ):
180
205
outFeat = QgsFeature ()
181
206
if design == self .tr ("unstratified" ):
182
207
ext = inLayer .extent ()
183
- if inLayer .type () == inLayer .RasterLayer : bound = ext
184
- else : bound = self .createSinglePolygon (inLayer )
185
- points = self .simpleRandom (int (value ), bound , ext .xMinimum (), ext .xMaximum (), ext .yMinimum (), ext .yMaximum ())
208
+ if inLayer .type () == inLayer .RasterLayer :
209
+ points = self .simpleRandom (int (value ), ext , ext .xMinimum (),
210
+ ext .xMaximum (), ext .yMinimum (), ext .yMaximum ())
211
+ else :
212
+ points = self .vectorRandom (int (value ), inLayer ,
213
+ ext .xMinimum (), ext .xMaximum (), ext .yMinimum (), ext .yMaximum ())
186
214
else : points = self .loopThruPolygons (inLayer , value , design )
187
215
crs = self .mapCanvas .mapRenderer ().destinationSrs ()
188
216
if not crs .isValid (): crs = None
0 commit comments