Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Severql bug fixes qnd smqll improvements in qgis bindings
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@43 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
- Loading branch information
Showing
with
574 additions
and 300 deletions.
- +4 −1 .pydevproject
- +27 −0 src/sextante/SextantePlugin.py
- +28 −0 src/sextante/about/AboutDialog.py
- 0 src/sextante/about/__init__.py
- +13 −0 src/sextante/about/about.htm
- BIN src/sextante/about/sextante_logo.png
- +14 −6 src/sextante/core/GeoAlgorithm.py
- +1 −2 src/sextante/core/Sextante.py
- +1 −1 src/sextante/core/SextanteLog.py
- +77 −0 src/sextante/ftools/ExtentFromLayer.py
- +6 −1 src/sextante/ftools/FToolsAlgorithmProvider.py
- +1 −1 src/sextante/ftools/PointsInPolygon.py
- +46 −0 src/sextante/ftools/RandomSelection.py
- +78 −0 src/sextante/ftools/RandomSelectionWithinSubsets.py
- +85 −0 src/sextante/ftools/SelectByLocation.py
- +1 −1 src/sextante/ftools/SimplifyGeometries.py
- +25 −9 src/sextante/gui/FixedTableDialog.py
- +2 −4 src/sextante/gui/FixedTablePanel.py
- +38 −41 src/sextante/gui/MultipleInputDialog.py
- +16 −3 src/sextante/gui/ParametersDialog.py
- +3 −0 src/sextante/gui/SextantePostprocessing.py
- BIN src/sextante/images/help.png
- BIN src/sextante/images/info.png
- +1 −1 src/sextante/metadata.txt
- +11 −10 src/sextante/modeler/ModelerAlgorithm.py
- +2 −2 src/sextante/modeler/ModelerParameterDefinitionDialog.py
- +18 −7 src/sextante/modeler/ModelerParametersDialog.py
- +4 −1 src/sextante/outputs/OutputFactory.py
- +6 −0 src/sextante/outputs/OutputVector.py
- +5 −1 src/sextante/parameters/ParameterBoolean.py
- +2 −1 src/sextante/parameters/ParameterFixedTable.py
- +10 −4 src/sextante/parameters/ParameterNumber.py
- +1 −1 src/sextante/parameters/ParameterTable.py
- +2 −1 src/sextante/parameters/ParameterVector.py
- +14 −6 src/sextante/r/RAlgorithm.py
- +5 −1 src/sextante/r/RUtils.py
- +18 −11 src/sextante/saga/SagaAlgorithm.py
- +7 −1 src/sextante/saga/SagaUtils.py
- +1 −1 src/sextante/saga/description/alg_221.txt
- +1 −1 src/sextante/saga/description/alg_82.txt
- +0 −122 src/sextante/untitled.ui
- +0 −58 src/sextante/untitled.ui.py
@@ -0,0 +1,28 @@ | ||
from PyQt4 import QtCore, QtGui, QtWebKit | ||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
import os | ||
|
||
class AboutDialog(QtGui.QDialog): | ||
|
||
def __init__(self): | ||
QtGui.QDialog.__init__(self) | ||
self.setModal(True) | ||
self.setupUi() | ||
|
||
def setupUi(self): | ||
self.setObjectName("AboutDialog") | ||
self.resize(500, 400) | ||
self.webView = QtWebKit.QWebView() | ||
self.webView.setObjectName("webView") | ||
self.setWindowTitle("About SEXTANTE") | ||
self.horizontalLayout= QtGui.QHBoxLayout() | ||
self.horizontalLayout.setSpacing(2) | ||
self.horizontalLayout.setMargin(0) | ||
self.horizontalLayout.setObjectName("horizontalLayout") | ||
self.horizontalLayout.addWidget(self.webView) | ||
self.setLayout(self.horizontalLayout) | ||
filename = os.path.dirname(__file__) + "/about.htm" | ||
url = QtCore.QUrl(filename) | ||
self.webView.load(url) | ||
|
Empty file.
@@ -0,0 +1,13 @@ | ||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> | ||
<title>SEXTANTE Spatial Data Analysis Library</title> | ||
</head> | ||
<body> | ||
<img src="sextante_logo.png" /> | ||
<h2>SEXTANTE for QGIS</h2> | ||
<p>SEXTANTE, a geoprocessing platform for QGIS</p> | ||
<p>A development by Victor Olaya (volayaf@gmail.com)</p> | ||
<p>You are currently using SEXTANTE v1.0</p> | ||
<p>For more information, please visit our website at <a href="http://sextantegis.com">http://sextantegis.com</a></p> | ||
</body> | ||
</html> |
Binary file not shown.
@@ -0,0 +1,77 @@ | ||
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 | ||
|
||
class ExtentFromLayer(GeoAlgorithm): | ||
|
||
INPUT = "INPUT" | ||
OUTPUT = "OUTPUT" | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/layer_extent.png") | ||
|
||
def processAlgorithm(self, progress): | ||
settings = QSettings() | ||
systemEncoding = settings.value( "/UI/encoding", "System" ).toString() | ||
output = self.getOutputValue(ExtentFromLayer.OUTPUT) | ||
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(ExtentFromLayer.INPUT)) | ||
fields = { | ||
0 : QgsField( "MINX", QVariant.Double ), | ||
1 : QgsField( "MINY", QVariant.Double ), | ||
2 : QgsField( "MAXX", QVariant.Double ), | ||
3 : QgsField( "MAXY", QVariant.Double ), | ||
4 : QgsField( "CNTX", QVariant.Double ), | ||
5 : QgsField( "CNTY", QVariant.Double ), | ||
6 : QgsField( "AREA", QVariant.Double ), | ||
7 : QgsField( "PERIM", QVariant.Double ), | ||
8 : QgsField( "HEIGHT", QVariant.Double ), | ||
9 : QgsField( "WIDTH", QVariant.Double ) } | ||
|
||
writer = QgsVectorFileWriter(output, systemEncoding, fields, QGis.WKBPolygon, vlayer.crs() ) | ||
rect = vlayer.extent() | ||
minx = rect.xMinimum() | ||
miny = rect.yMinimum() | ||
maxx = rect.xMaximum() | ||
maxy = rect.yMaximum() | ||
height = rect.height() | ||
width = rect.width() | ||
cntx = minx + ( width / 2.0 ) | ||
cnty = miny + ( height / 2.0 ) | ||
area = width * height | ||
perim = ( 2 * width ) + (2 * height ) | ||
rect = [ | ||
QgsPoint( minx, miny ), | ||
QgsPoint( minx, maxy ), | ||
QgsPoint( maxx, maxy ), | ||
QgsPoint( maxx, miny ), | ||
QgsPoint( minx, miny ) ] | ||
geometry = QgsGeometry().fromPolygon( [ rect ] ) | ||
feat = QgsFeature() | ||
feat.setGeometry( geometry ) | ||
feat.setAttributeMap( { | ||
0 : QVariant( minx ), | ||
1 : QVariant( miny ), | ||
2 : QVariant( maxx ), | ||
3 : QVariant( maxy ), | ||
4 : QVariant( cntx ), | ||
5 : QVariant( cnty ), | ||
6 : QVariant( area ), | ||
7 : QVariant( perim ), | ||
8 : QVariant( height ), | ||
9 : QVariant( width ) } ) | ||
writer.addFeature( feat ) | ||
del writer | ||
|
||
|
||
def defineCharacteristics(self): | ||
self.name = "Extent from layer" | ||
self.group = "Research tools" | ||
self.addParameter(ParameterVector(ExtentFromLayer.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY)) | ||
self.addOutput(OutputVector(ExtentFromLayer.OUTPUT, "Extent layer")) | ||
#========================================================= |
@@ -0,0 +1,46 @@ | ||
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)) |
@@ -0,0 +1,78 @@ | ||
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 | ||
from sextante.parameters.ParameterTableField import ParameterTableField | ||
from sextante.ftools import ftools_utils | ||
|
||
class RandomSelectionWithinSubsets(GeoAlgorithm): | ||
|
||
INPUT = "INPUT" | ||
OUTPUT = "OUTPUT" | ||
METHOD = "METHOD" | ||
NUMBER = "NUMBER" | ||
PERCENTAGE = "PERCENTAGE" | ||
FIELD = "FIELD" | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/random_selection.png") | ||
|
||
def processAlgorithm(self, progress): | ||
method = self.getParameterValue(self.METHOD) | ||
field = self.getParameterValue(RandomSelectionWithinSubsets.FIELD) | ||
filename = self.getParameterValue(RandomSelectionWithinSubsets.INPUT) | ||
vlayer = QGisLayers.getObjectFromUri(filename) | ||
vlayer.removeSelection(True) | ||
vprovider = vlayer.dataProvider() | ||
allAttrs = vprovider.attributeIndexes() | ||
vprovider.select(allAttrs) | ||
index = vprovider.fieldNameIndex(field) | ||
unique = ftools_utils.getUniqueValues(vprovider, int(index)) | ||
inFeat = QgsFeature() | ||
selran = [] | ||
nFeat = vprovider.featureCount() * len(unique) | ||
nElement = 0 | ||
if not len(unique) == vlayer.featureCount(): | ||
for i in unique: | ||
vprovider.rewind() | ||
FIDs= [] | ||
while vprovider.nextFeature(inFeat): | ||
atMap = inFeat.attributeMap() | ||
if atMap[index] == QVariant(i): | ||
FID = inFeat.id() | ||
FIDs.append(FID) | ||
nElement += 1 | ||
progress.setPercentage(nElement/nFeat * 100) | ||
if method == 0: | ||
value = int(self.getParameterValue(self.NUMBER)) | ||
else: | ||
value = self.getParameterValue(self.PERCENTAGE) | ||
value = int(round((value / 100.0000) * len(FIDs), 0)) | ||
if value >= len(FIDs): | ||
selFeat = FIDs | ||
else: | ||
selFeat = random.sample(FIDs, value) | ||
selran.extend(selFeat) | ||
vlayer.setSelectedFeatures(selran) | ||
else: | ||
vlayer.setSelectedFeatures(range(0, vlayer.featureCount())) | ||
self.setOutputValue(RandomSelectionWithinSubsets.OUTPUT, filename) | ||
|
||
|
||
def defineCharacteristics(self): | ||
self.name = "Random selection within subsets" | ||
self.group = "Research tools" | ||
self.addParameter(ParameterVector(RandomSelectionWithinSubsets.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY)) | ||
self.addParameter(ParameterTableField(RandomSelectionWithinSubsets.FIELD, "ID Field", RandomSelectionWithinSubsets.INPUT)) | ||
self.addParameter(ParameterSelection(RandomSelectionWithinSubsets.METHOD, "Method", ["Number of selected features", "Percentage of selected features"])) | ||
self.addParameter(ParameterNumber(RandomSelectionWithinSubsets.NUMBER, "Number of selected features", 1, None, 10)) | ||
self.addParameter(ParameterNumber(RandomSelectionWithinSubsets.PERCENTAGE, "Percentage of selected features", 0, 100, 50)) | ||
self.addOutput(OutputVector(RandomSelectionWithinSubsets.OUTPUT, "Selection", True)) |
Oops, something went wrong.