2012-09-15 18:25:25 +03:00
|
|
|
from sextante.core.GeoAlgorithm import GeoAlgorithm
|
|
|
|
import os.path
|
|
|
|
from PyQt4 import QtGui
|
|
|
|
from PyQt4.QtCore import *
|
|
|
|
from PyQt4.QtGui import *
|
|
|
|
from qgis.core import *
|
|
|
|
from sextante.parameters.ParameterVector import ParameterVector
|
|
|
|
from sextante.core.QGisLayers import QGisLayers
|
|
|
|
from sextante.outputs.OutputVector import OutputVector
|
|
|
|
from sextante.parameters.ParameterSelection import ParameterSelection
|
|
|
|
from sextante.parameters.ParameterNumber import ParameterNumber
|
|
|
|
import random
|
|
|
|
|
|
|
|
class RandomSelection(GeoAlgorithm):
|
|
|
|
|
|
|
|
INPUT = "INPUT"
|
|
|
|
OUTPUT = "OUTPUT"
|
|
|
|
METHOD = "METHOD"
|
|
|
|
NUMBER = "NUMBER"
|
|
|
|
PERCENTAGE = "PERCENTAGE"
|
|
|
|
|
|
|
|
def getIcon(self):
|
|
|
|
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/random_selection.png")
|
|
|
|
|
|
|
|
def processAlgorithm(self, progress):
|
|
|
|
filename = self.getParameterValue(RandomSelection.INPUT)
|
|
|
|
layer = QGisLayers.getObjectFromUri(filename)
|
|
|
|
method = self.getParameterValue(self.METHOD)
|
|
|
|
if method == 0:
|
|
|
|
value = int(self.getParameterValue(self.NUMBER))
|
|
|
|
else:
|
|
|
|
value = self.getParameterValue(self.PERCENTAGE)
|
|
|
|
value = int(round((value / 100.0000), 4) * layer.featureCount())
|
|
|
|
selran = random.sample(xrange(0, layer.featureCount()), value)
|
|
|
|
layer.setSelectedFeatures(selran)
|
|
|
|
self.setOutputValue(self.OUTPUT, filename)
|
|
|
|
|
|
|
|
|
|
|
|
def defineCharacteristics(self):
|
|
|
|
self.name = "Random selection"
|
|
|
|
self.group = "Research tools"
|
|
|
|
self.addParameter(ParameterVector(RandomSelection.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
|
|
|
|
self.addParameter(ParameterSelection(RandomSelection.METHOD, "Method", ["Number of selected features", "Percentage of selected features"]))
|
|
|
|
self.addParameter(ParameterNumber(RandomSelection.NUMBER, "Number of selected features", 1, None, 10))
|
|
|
|
self.addParameter(ParameterNumber(RandomSelection.PERCENTAGE, "Percentage of selected features", 0, 100, 50))
|
|
|
|
self.addOutput(OutputVector(RandomSelection.OUTPUT, "Selection", True))
|