1

I am using QGIS 2.18.11 and need to select 250 points from the existing points in a map. I know that I can randomly select points through Vector> Research Tools> Random Selection but I don't know how to make it "reproducible" (replicable). I don't know much about Python.

1
  • 3
    For making reproducible a random selection you need to use in a python script, for instance, 'random.seed' method from numpy (please, see my answer).
    – xunilk
    Commented Aug 19, 2017 at 4:37

1 Answer 1

5

For making reproducible a random selection you need to use in a PyQGIS script, for instance, 'random.seed' method from numpy. Assuming that you have 10.000 points in your layer, next code select same 250 points each time is running (with seed equal 0).

import numpy as np

np.random.seed(0)

random_numbers = []
n = 0

while (n < 250):

    number = np.random.randint(0,10000)

    if number not in random_numbers:
        random_numbers.append(number)

    n = len(random_numbers)


print random_numbers

registry = QgsMapLayerRegistry.instance()
Points = registry.mapLayersByName('Points')
feats = [ feat for feat in Points[0].getFeatures() ]
epsg = Points[0].crs().postgisSrid()

selected_features = []

for number in random_numbers:
    selected_features.append(feats[number])

uri = "Point?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"

mem_layer = QgsVectorLayer(uri,
                           'selected_points',
                           'memory')

prov = mem_layer.dataProvider()

for i, feat in enumerate(selected_features):
    feat.setAttributes([i])

prov.addFeatures(selected_features)

registry.instance().addMapLayer(mem_layer)

I tried it out with next point layer having 10.000 points:

enter image description here

After running the script 5 times, it can be observed that selected points were always the same:

enter image description here

3
  • I don't know much about python. Can you please be more specific about how I should incorporate the code above? @xunilk
    – Z N
    Commented Aug 21, 2017 at 3:28
  • 2
    I answered your question because you tagged it with python. I supposed that you were fairly experienced with language. So, you first need to search how to open QGIS Python Console and load and run a script. Afterward, copy/paste above script in your scripts folder with a suggestive name. You also need to change in registry.mapLayersByName('Points') name 'Points' for your name shapefile.
    – xunilk
    Commented Aug 21, 2017 at 21:49
  • This worked very well for me! Thanks so much @xunilk for your help
    – Z N
    Commented Aug 22, 2017 at 4:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.