mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[processing] adapted algorithm to function refactoring
Also set threaded execution to false by default, since it was behaving strangely
This commit is contained in:
parent
ff5e1ee3a8
commit
236c239844
@ -16,6 +16,7 @@
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
from processing.tools import dataobjects
|
||||
|
||||
__author__ = 'Victor Olaya'
|
||||
__date__ = 'October 2012'
|
||||
@ -24,7 +25,6 @@ __copyright__ = '(C) 2012, Victor Olaya'
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
import os
|
||||
from processing.core.QGisLayers import QGisLayers
|
||||
from processing.parameters.ParameterBoolean import ParameterBoolean
|
||||
from processing.parameters.ParameterVector import ParameterVector
|
||||
from processing.core.GeoAlgorithm import GeoAlgorithm
|
||||
@ -81,7 +81,7 @@ class ImportIntoPostGIS(GeoAlgorithm):
|
||||
options['overwrite'] = True
|
||||
|
||||
layerUri = self.getParameterValue(self.INPUT);
|
||||
layer = QGisLayers.getObjectFromUri(layerUri)
|
||||
layer = dataobjects.getObjectFromUri(layerUri)
|
||||
ret, errMsg = QgsVectorLayerImport.importLayer(layer, uri.uri(), providerName, self.crs, False, False, options)
|
||||
if ret != 0:
|
||||
raise GeoAlgorithmExecutionException(u"Error importing to PostGIS\n%s" % errMsg)
|
||||
|
@ -24,14 +24,10 @@ __copyright__ = '(C) 2013, Alexander Bruy'
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
import math
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
|
||||
from qgis.core import *
|
||||
|
||||
from processing.tools import dataobjects, vector
|
||||
from processing.core.GeoAlgorithm import GeoAlgorithm
|
||||
from processing.core.QGisLayers import QGisLayers
|
||||
|
||||
from processing.parameters.ParameterVector import ParameterVector
|
||||
from processing.parameters.ParameterNumber import ParameterNumber
|
||||
from processing.parameters.ParameterBoolean import ParameterBoolean
|
||||
@ -58,12 +54,12 @@ class PointsDisplacement(GeoAlgorithm):
|
||||
horizontal = self.getParameterValue(self.HORIZONTAL)
|
||||
output = self.getOutputFromName(self.OUTPUT_LAYER)
|
||||
|
||||
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
|
||||
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
|
||||
|
||||
provider = layer.dataProvider()
|
||||
writer = output.getVectorWriter(provider.fields(), provider.geometryType(), provider.crs())
|
||||
|
||||
features = QGisLayers.features(layer)
|
||||
features = vector.features(layer)
|
||||
|
||||
current = 0
|
||||
total = 100.0 / len(features)
|
||||
|
@ -24,21 +24,14 @@ __copyright__ = '(C) 2013, Alexander Bruy'
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
|
||||
from osgeo import gdal
|
||||
|
||||
from qgis.core import *
|
||||
|
||||
from processing.tools import vector, raster, dataobjects
|
||||
from processing.core.GeoAlgorithm import GeoAlgorithm
|
||||
from processing.core.QGisLayers import QGisLayers
|
||||
|
||||
from processing.parameters.ParameterRaster import ParameterRaster
|
||||
from processing.parameters.ParameterVector import ParameterVector
|
||||
|
||||
from processing.outputs.OutputVector import OutputVector
|
||||
|
||||
from processing.algs import QGISUtils as utils
|
||||
|
||||
class PointsFromLines(GeoAlgorithm):
|
||||
|
||||
INPUT_RASTER = "INPUT_RASTER"
|
||||
@ -47,7 +40,7 @@ class PointsFromLines(GeoAlgorithm):
|
||||
OUTPUT_LAYER = "OUTPUT_LAYER"
|
||||
|
||||
def defineCharacteristics(self):
|
||||
self.name = "Points from lines"
|
||||
self.name = "Get raster values at layer point"
|
||||
self.group = "Vector geometry tools"
|
||||
|
||||
self.addParameter(ParameterRaster(self.INPUT_RASTER, "Raster layer"))
|
||||
@ -55,7 +48,7 @@ class PointsFromLines(GeoAlgorithm):
|
||||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer"))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))
|
||||
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))
|
||||
|
||||
rasterPath = unicode(self.getParameterValue(self.INPUT_RASTER))
|
||||
|
||||
@ -78,7 +71,7 @@ class PointsFromLines(GeoAlgorithm):
|
||||
self.pointId = 0
|
||||
|
||||
current = 0
|
||||
features = QGisLayers.features(layer)
|
||||
features = vector.features(layer)
|
||||
total = 100.0 / len(features)
|
||||
for f in features:
|
||||
geom = f.geometry()
|
||||
@ -89,8 +82,8 @@ class PointsFromLines(GeoAlgorithm):
|
||||
p1 = line[i]
|
||||
p2 = line[i + 1]
|
||||
|
||||
x1, y1 = utils.mapToPixel(p1.x(), p1.y(), geoTransform)
|
||||
x2, y2 = utils.mapToPixel(p2.x(), p2.y(), geoTransform)
|
||||
x1, y1 = raster.mapToPixel(p1.x(), p1.y(), geoTransform)
|
||||
x2, y2 = raster.mapToPixel(p2.x(), p2.y(), geoTransform)
|
||||
|
||||
self.buildLine(x1, y1, x2, y2, geoTransform, writer, outFeature)
|
||||
else:
|
||||
@ -99,8 +92,8 @@ class PointsFromLines(GeoAlgorithm):
|
||||
p1 = points[i]
|
||||
p2 = points[i + 1]
|
||||
|
||||
x1, y1 = utils.mapToPixel(p1.x(), p1.y(), geoTransform)
|
||||
x2, y2 = utils.mapToPixel(p2.x(), p2.y(), geoTransform)
|
||||
x1, y1 = raster.mapToPixel(p1.x(), p1.y(), geoTransform)
|
||||
x2, y2 = raster.mapToPixel(p2.x(), p2.y(), geoTransform)
|
||||
|
||||
self.buildLine(x1, y1, x2, y2, geoTransform, writer, outFeature)
|
||||
|
||||
@ -114,7 +107,6 @@ class PointsFromLines(GeoAlgorithm):
|
||||
|
||||
def buildLine(self, startX, startY, endX, endY, geoTransform, writer, feature):
|
||||
point = QgsPoint()
|
||||
|
||||
if startX == endX:
|
||||
if startY > endY:
|
||||
startY, endY = endY, startY
|
||||
@ -168,7 +160,7 @@ class PointsFromLines(GeoAlgorithm):
|
||||
startY += dy2
|
||||
|
||||
def createPoint(self, pX, pY, geoTransform, writer, feature):
|
||||
x, y = utils.pixelToMap(pX, pY, geoTransform)
|
||||
x, y = raster.pixelToMap(pX, pY, geoTransform)
|
||||
|
||||
feature.setGeometry(QgsGeometry.fromPoint(QgsPoint(x, y)))
|
||||
feature["id"] = self.fid
|
||||
|
@ -23,21 +23,15 @@ __copyright__ = '(C) 2013, Alexander Bruy'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
|
||||
from osgeo import gdal
|
||||
|
||||
from qgis.core import *
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
from processing.core.GeoAlgorithm import GeoAlgorithm
|
||||
from processing.core.QGisLayers import QGisLayers
|
||||
|
||||
from processing.parameters.ParameterRaster import ParameterRaster
|
||||
from processing.parameters.ParameterVector import ParameterVector
|
||||
|
||||
from processing.outputs.OutputVector import OutputVector
|
||||
|
||||
from processing.algs import QGISUtils as utils
|
||||
from processing.tools import dataobjects, vector
|
||||
from processing.tools.general import *
|
||||
|
||||
class PointsFromPolygons(GeoAlgorithm):
|
||||
|
||||
@ -55,7 +49,7 @@ class PointsFromPolygons(GeoAlgorithm):
|
||||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer"))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))
|
||||
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))
|
||||
|
||||
rasterPath = unicode(self.getParameterValue(self.INPUT_RASTER))
|
||||
|
||||
@ -79,7 +73,7 @@ class PointsFromPolygons(GeoAlgorithm):
|
||||
pointId = 0
|
||||
|
||||
current = 0
|
||||
features = QGisLayers.features(layer)
|
||||
features = vector.features(layer)
|
||||
total = 100.0 / len(features)
|
||||
for f in features:
|
||||
geom = f.geometry()
|
||||
@ -90,12 +84,12 @@ class PointsFromPolygons(GeoAlgorithm):
|
||||
yMin = bbox.yMinimum()
|
||||
yMax = bbox.yMaximum()
|
||||
|
||||
startRow, startColumn = utils.mapToPixel(xMin, yMax, geoTransform)
|
||||
endRow, endColumn = utils.mapToPixel(xMax, yMin, geoTransform)
|
||||
startRow, startColumn = mapToPixel(xMin, yMax, geoTransform)
|
||||
endRow, endColumn = mapToPixel(xMax, yMin, geoTransform)
|
||||
|
||||
for row in xrange(startRow, endRow + 1):
|
||||
for col in xrange(startColumn, endColumn + 1):
|
||||
x, y = utils.pixelToMap(row, col, geoTransform)
|
||||
x, y = pixelToMap(row, col, geoTransform)
|
||||
point.setX(x)
|
||||
point.setY(y)
|
||||
|
||||
|
@ -1,98 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
***************************************************************************
|
||||
QGISUtils.py
|
||||
---------------------
|
||||
Date : August 2013
|
||||
Copyright : (C) 2013 by Alexander Bruy
|
||||
Email : alexander dot bruy at gmail dot com
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
|
||||
__author__ = 'Alexander Bruy'
|
||||
__date__ = 'August 2013'
|
||||
__copyright__ = '(C) 2013, Alexander Bruy'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
import math
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
|
||||
from qgis.core import *
|
||||
|
||||
|
||||
def mapToPixel(mX, mY, geoTransform):
|
||||
'''Convert map coordinates to pixel coordinates.
|
||||
|
||||
@param mX Input map X coordinate (double)
|
||||
@param mY Input map Y coordinate (double)
|
||||
@param geoTransform Input geotransform (six doubles)
|
||||
@return pX, pY Output coordinates (two doubles)
|
||||
'''
|
||||
if geoTransform[2] + geoTransform[4] == 0:
|
||||
pX = (mX - geoTransform[0]) / geoTransform[1]
|
||||
pY = (mY - geoTransform[3]) / geoTransform[5]
|
||||
else:
|
||||
pX, pY = applyGeoTransform(mX, mY, invertGeoTransform(geoTransform))
|
||||
return int(pX), int(pY)
|
||||
|
||||
def pixelToMap(pX, pY, geoTransform):
|
||||
'''Convert pixel coordinates to map coordinates.
|
||||
|
||||
@param pX Input pixel X coordinate (double)
|
||||
@param pY Input pixel Y coordinate (double)
|
||||
@param geoTransform Input geotransform (six doubles)
|
||||
@return mX, mY Output coordinates (two doubles)
|
||||
'''
|
||||
mX, mY = applyGeoTransform(pX + 0.5, pY + 0.5, geoTransform)
|
||||
return mX, mY
|
||||
|
||||
def applyGeoTransform(inX, inY, geoTransform):
|
||||
'''Apply a geotransform to coordinates.
|
||||
|
||||
@param inX Input coordinate (double)
|
||||
@param inY Input coordinate (double)
|
||||
@param geoTransform Input geotransform (six doubles)
|
||||
@return outX, outY Output coordinates (two doubles)
|
||||
'''
|
||||
outX = geoTransform[0] + inX * geoTransform[1] + inY * geoTransform[2]
|
||||
outY = geoTransform[3] + inX * geoTransform[4] + inY * geoTransform[5]
|
||||
return outX, outY
|
||||
|
||||
def invertGeoTransform(geoTransform):
|
||||
'''Invert standard 3x2 set of geotransform coefficients.
|
||||
|
||||
@param geoTransform Input GeoTransform (six doubles - unaltered)
|
||||
@return outGeoTransform Output GeoTransform (six doubles - updated)
|
||||
on success, None if the equation is uninvertable
|
||||
'''
|
||||
# we assume a 3rd row that is [1 0 0]
|
||||
# compute determinate
|
||||
det = geoTransform[1] * geoTransform[5] - geoTransform[2] * geoTransform[4]
|
||||
|
||||
if abs(det) < 0.000000000000001:
|
||||
return
|
||||
|
||||
invDet = 1.0 / det
|
||||
|
||||
# compute adjoint and divide by determinate
|
||||
outGeoTransform = [0, 0, 0, 0, 0, 0]
|
||||
outGeoTransform[1] = geoTransform[5] * invDet
|
||||
outGeoTransform[4] = -geoTransform[4] * invDet
|
||||
|
||||
outGeoTransform[2] = -geoTransform[2] * invDet
|
||||
outGeoTransfrom[5] = geoTransform[1] * invDet
|
||||
|
||||
outGeoTransform[0] = (geoTransform[2] * geoTransform[3] - geoTransform[0] * geoTransform[5]) * invDet
|
||||
outGeoTransform[3] = (-geoTransform[1] * geoTransform[3] + geoTransform[0] * geoTransform[4]) * invDet
|
||||
|
||||
return outGeoTransform
|
@ -24,26 +24,19 @@ __copyright__ = '(C) 2013, Alexander Bruy'
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
|
||||
import numpy
|
||||
from osgeo import gdal, ogr, osr
|
||||
|
||||
from qgis.core import *
|
||||
|
||||
from processing.tools.raster import mapToPixel
|
||||
from processing.tools import dataobjects, vector
|
||||
from processing.core.GeoAlgorithm import GeoAlgorithm
|
||||
from processing.core.QGisLayers import QGisLayers
|
||||
|
||||
from processing.parameters.ParameterVector import ParameterVector
|
||||
from processing.parameters.ParameterRaster import ParameterRaster
|
||||
from processing.parameters.ParameterString import ParameterString
|
||||
from processing.parameters.ParameterNumber import ParameterNumber
|
||||
from processing.parameters.ParameterBoolean import ParameterBoolean
|
||||
|
||||
from processing.outputs.OutputVector import OutputVector
|
||||
|
||||
from processing.algs.ftools import FToolsUtils as ftools_utils
|
||||
from processing.algs import QGISUtils as utils
|
||||
|
||||
class ZonalStatistics(GeoAlgorithm):
|
||||
|
||||
INPUT_RASTER = "INPUT_RASTER"
|
||||
@ -65,7 +58,7 @@ class ZonalStatistics(GeoAlgorithm):
|
||||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer"))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))
|
||||
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_VECTOR))
|
||||
|
||||
rasterPath = unicode(self.getParameterValue(self.INPUT_RASTER))
|
||||
bandNumber = self.getParameterValue(self.RASTER_BAND)
|
||||
@ -99,8 +92,8 @@ class ZonalStatistics(GeoAlgorithm):
|
||||
yMin = rasterBBox.yMinimum()
|
||||
yMax = rasterBBox.yMaximum()
|
||||
|
||||
startColumn, startRow = utils.mapToPixel(xMin, yMax, geoTransform)
|
||||
endColumn, endRow = utils.mapToPixel(xMax, yMin, geoTransform)
|
||||
startColumn, startRow = mapToPixel(xMin, yMax, geoTransform)
|
||||
endColumn, endRow = mapToPixel(xMax, yMin, geoTransform)
|
||||
|
||||
width = endColumn - startColumn
|
||||
height = endRow - startRow
|
||||
@ -120,15 +113,15 @@ class ZonalStatistics(GeoAlgorithm):
|
||||
memRasterDriver = gdal.GetDriverByName("MEM")
|
||||
|
||||
fields = layer.pendingFields()
|
||||
idxMin, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "min", 21, 6)
|
||||
idxMax, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "max", 21, 6)
|
||||
idxSum, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "sum", 21, 6)
|
||||
idxCount, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "count", 21, 6)
|
||||
idxMean, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "mean", 21, 6)
|
||||
idxStd, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "std", 21, 6)
|
||||
idxUnique, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "unique", 21, 6)
|
||||
idxRange, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "range", 21, 6)
|
||||
idxCV, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "cv", 21, 6)
|
||||
idxMin, fields = vector.findOrCreateField(layer, fields, columnPrefix + "min", 21, 6)
|
||||
idxMax, fields = vector.findOrCreateField(layer, fields, columnPrefix + "max", 21, 6)
|
||||
idxSum, fields = vector.findOrCreateField(layer, fields, columnPrefix + "sum", 21, 6)
|
||||
idxCount, fields = vector.findOrCreateField(layer, fields, columnPrefix + "count", 21, 6)
|
||||
idxMean, fields = vector.findOrCreateField(layer, fields, columnPrefix + "mean", 21, 6)
|
||||
idxStd, fields = vector.findOrCreateField(layer, fields, columnPrefix + "std", 21, 6)
|
||||
idxUnique, fields = vector.findOrCreateField(layer, fields, columnPrefix + "unique", 21, 6)
|
||||
idxRange, fields = vector.findOrCreateField(layer, fields, columnPrefix + "range", 21, 6)
|
||||
idxCV, fields = vector.findOrCreateField(layer, fields, columnPrefix + "cv", 21, 6)
|
||||
#idxMedian, fields = ftools_utils.findOrCreateField(layer, fields, columnPrefix + "median", 21, 6)
|
||||
|
||||
writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(fields.toList(),
|
||||
@ -140,7 +133,7 @@ class ZonalStatistics(GeoAlgorithm):
|
||||
outFeat.setFields(fields)
|
||||
|
||||
current = 0
|
||||
features = QGisLayers.features(layer)
|
||||
features = vector.features(layer)
|
||||
total = 100.0 / len(features)
|
||||
for f in features:
|
||||
geom = f.geometry()
|
||||
@ -156,8 +149,8 @@ class ZonalStatistics(GeoAlgorithm):
|
||||
yMin = bbox.yMinimum()
|
||||
yMax = bbox.yMaximum()
|
||||
|
||||
startColumn, startRow = utils.mapToPixel(xMin, yMax, geoTransform)
|
||||
endColumn, endRow = utils.mapToPixel(xMax, yMin, geoTransform)
|
||||
startColumn, startRow = mapToPixel(xMin, yMax, geoTransform)
|
||||
endColumn, endRow = mapToPixel(xMax, yMin, geoTransform)
|
||||
|
||||
width = endColumn - startColumn
|
||||
height = endRow - startRow
|
||||
|
@ -143,7 +143,7 @@ class PointDistance(GeoAlgorithm):
|
||||
|
||||
first = True
|
||||
current = 0
|
||||
features = QGisLayers.features(inLayer)
|
||||
features = vector.features(inLayer)
|
||||
total = 100.0 / float(len(features))
|
||||
|
||||
for inFeat in features:
|
||||
|
@ -54,8 +54,8 @@ class ProcessingConfig():
|
||||
def initialize():
|
||||
icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/alg.png")
|
||||
ProcessingConfig.settingIcons["General"] = icon
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.USE_THREADS, "Run algorithms in a new thread", True))
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.SHOW_DEBUG_IN_DIALOG, "Show extra info in Log panel (threaded execution only)", True))
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.USE_THREADS, "Run algorithms in a new thread (unstable)", False))
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.SHOW_DEBUG_IN_DIALOG, "Show extra info in Log panel", True))
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.KEEP_DIALOG_OPEN, "Keep dialog open after running an algorithm", False))
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.USE_SELECTED, "Use only selected features", True))
|
||||
ProcessingConfig.addSetting(Setting("General", ProcessingConfig.TABLE_LIKE_PARAM_PANEL, "Show table-like parameter panels", False))
|
||||
|
@ -5,14 +5,11 @@
|
||||
##Output_table=output table
|
||||
|
||||
import os
|
||||
|
||||
from processing.raster import *
|
||||
from osgeo import gdal, ogr, osr
|
||||
|
||||
from processing.core.TableWriter import TableWriter
|
||||
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
|
||||
|
||||
from processing.algs import QGISUtils as utils
|
||||
|
||||
raster = gdal.Open(Input_raster)
|
||||
|
||||
rasterBaseName = os.path.splitext(os.path.basename(Input_raster))[0]
|
||||
@ -81,7 +78,7 @@ for i in xrange(bandCount):
|
||||
pnt = coordTransform.TransformPoint(x, y, 0)
|
||||
x = pnt[0]
|
||||
y = pnt[1]
|
||||
rX, rY = utils.mapToPixel(x, y, geoTransform)
|
||||
rX, rY = raster.mapToPixel(x, y, geoTransform)
|
||||
if rX > rasterXSize or rY > rasterYSize:
|
||||
feature = layer.GetNextFeature()
|
||||
continue
|
||||
|
@ -5,12 +5,9 @@
|
||||
##Output_layer=output vector
|
||||
|
||||
import os
|
||||
|
||||
from osgeo import gdal, ogr, osr
|
||||
|
||||
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
|
||||
|
||||
from processing.algs import QGISUtils as utils
|
||||
from processing.tools.raster import mapToPixel
|
||||
|
||||
raster = gdal.Open(Input_raster)
|
||||
|
||||
@ -104,7 +101,7 @@ for i in xrange(bandCount):
|
||||
pnt = coordTransform.TransformPoint(x, y, 0)
|
||||
x = pnt[0]
|
||||
y = pnt[1]
|
||||
rX, rY = utils.mapToPixel(x, y, geoTransform)
|
||||
rX, rY = mapToPixel(x, y, geoTransform)
|
||||
if rX > rasterXSize or rY > rasterYSize:
|
||||
feature = layer.GetNextFeature()
|
||||
continue
|
||||
|
@ -5,7 +5,7 @@
|
||||
raster.py
|
||||
---------------------
|
||||
Date : February 2013
|
||||
Copyright : (C) 2013 by Victor Olaya
|
||||
Copyright : (C) 2013 by Victor Olaya and Alexander Bruy
|
||||
Email : volayaf at gmail dot com
|
||||
***************************************************************************
|
||||
* *
|
||||
@ -17,9 +17,9 @@
|
||||
***************************************************************************
|
||||
"""
|
||||
|
||||
__author__ = 'Victor Olaya'
|
||||
__author__ = 'Victor Olaya and Alexander Bruy'
|
||||
__date__ = 'February 2013'
|
||||
__copyright__ = '(C) 2013, Victor Olaya'
|
||||
__copyright__ = '(C) 2013, Victor Olaya and Alexander Bruy'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
@ -40,3 +40,70 @@ def scanraster(layer, progress):
|
||||
if value == nodata:
|
||||
value = None
|
||||
yield value
|
||||
|
||||
def mapToPixel(mX, mY, geoTransform):
|
||||
'''Convert map coordinates to pixel coordinates.
|
||||
|
||||
@param mX Input map X coordinate (double)
|
||||
@param mY Input map Y coordinate (double)
|
||||
@param geoTransform Input geotransform (six doubles)
|
||||
@return pX, pY Output coordinates (two doubles)
|
||||
'''
|
||||
if geoTransform[2] + geoTransform[4] == 0:
|
||||
pX = (mX - geoTransform[0]) / geoTransform[1]
|
||||
pY = (mY - geoTransform[3]) / geoTransform[5]
|
||||
else:
|
||||
pX, pY = applyGeoTransform(mX, mY, invertGeoTransform(geoTransform))
|
||||
return int(pX), int(pY)
|
||||
|
||||
def pixelToMap(pX, pY, geoTransform):
|
||||
'''Convert pixel coordinates to map coordinates.
|
||||
|
||||
@param pX Input pixel X coordinate (double)
|
||||
@param pY Input pixel Y coordinate (double)
|
||||
@param geoTransform Input geotransform (six doubles)
|
||||
@return mX, mY Output coordinates (two doubles)
|
||||
'''
|
||||
mX, mY = applyGeoTransform(pX + 0.5, pY + 0.5, geoTransform)
|
||||
return mX, mY
|
||||
|
||||
def applyGeoTransform(inX, inY, geoTransform):
|
||||
'''Apply a geotransform to coordinates.
|
||||
|
||||
@param inX Input coordinate (double)
|
||||
@param inY Input coordinate (double)
|
||||
@param geoTransform Input geotransform (six doubles)
|
||||
@return outX, outY Output coordinates (two doubles)
|
||||
'''
|
||||
outX = geoTransform[0] + inX * geoTransform[1] + inY * geoTransform[2]
|
||||
outY = geoTransform[3] + inX * geoTransform[4] + inY * geoTransform[5]
|
||||
return outX, outY
|
||||
|
||||
def invertGeoTransform(geoTransform):
|
||||
'''Invert standard 3x2 set of geotransform coefficients.
|
||||
|
||||
@param geoTransform Input GeoTransform (six doubles - unaltered)
|
||||
@return outGeoTransform Output GeoTransform (six doubles - updated)
|
||||
on success, None if the equation is uninvertable
|
||||
'''
|
||||
# we assume a 3rd row that is [1 0 0]
|
||||
# compute determinate
|
||||
det = geoTransform[1] * geoTransform[5] - geoTransform[2] * geoTransform[4]
|
||||
|
||||
if abs(det) < 0.000000000000001:
|
||||
return
|
||||
|
||||
invDet = 1.0 / det
|
||||
|
||||
# compute adjoint and divide by determinate
|
||||
outGeoTransform = [0, 0, 0, 0, 0, 0]
|
||||
outGeoTransform[1] = geoTransform[5] * invDet
|
||||
outGeoTransform[4] = -geoTransform[4] * invDet
|
||||
|
||||
outGeoTransform[2] = -geoTransform[2] * invDet
|
||||
outGeoTransform[5] = geoTransform[1] * invDet
|
||||
|
||||
outGeoTransform[0] = (geoTransform[2] * geoTransform[3] - geoTransform[0] * geoTransform[5]) * invDet
|
||||
outGeoTransform[3] = (-geoTransform[1] * geoTransform[3] + geoTransform[0] * geoTransform[4]) * invDet
|
||||
|
||||
return outGeoTransform
|
Loading…
x
Reference in New Issue
Block a user