mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
[processing] attempt to fix proximity algorithm
This commit is contained in:
parent
6910a2ed8e
commit
47e27d1e2e
@ -47,6 +47,7 @@ from processing.gdal.ClipByExtent import ClipByExtent
|
||||
from processing.gdal.ClipByMask import ClipByMask
|
||||
from processing.gdal.contour import contour
|
||||
from processing.gdal.rasterize import rasterize
|
||||
from processing.gdal.proximity import proximity
|
||||
|
||||
from processing.gdal.ogr2ogr import Ogr2Ogr
|
||||
from processing.gdal.ogrinfo import OgrInfo
|
||||
@ -96,7 +97,7 @@ class GdalOgrAlgorithmProvider(AlgorithmProvider):
|
||||
self.preloadedAlgs = [nearblack(), information(), warp(), translate(),
|
||||
rgb2pct(), pct2rgb(), merge(), polygonize(),
|
||||
gdaladdo(), ClipByExtent(), ClipByMask(),
|
||||
contour(), rasterize(),
|
||||
contour(), rasterize(), proximity(),
|
||||
OgrInfo(), Ogr2Ogr(), OgrSql()]
|
||||
|
||||
#And then we add those that are created as python scripts
|
||||
|
108
python/plugins/processing/gdal/proximity.py
Normal file
108
python/plugins/processing/gdal/proximity.py
Normal file
@ -0,0 +1,108 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
***************************************************************************
|
||||
proximity.py
|
||||
---------------------
|
||||
Date : August 2012
|
||||
Copyright : (C) 2012 by Victor Olaya
|
||||
Email : volayaf 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__ = 'Victor Olaya'
|
||||
__date__ = 'August 2012'
|
||||
__copyright__ = '(C) 2012, Victor Olaya'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
import os
|
||||
from PyQt4 import QtGui, QtCore
|
||||
|
||||
from processing.core.GeoAlgorithm import GeoAlgorithm
|
||||
|
||||
from processing.parameters.ParameterRaster import ParameterRaster
|
||||
from processing.parameters.ParameterString import ParameterString
|
||||
from processing.parameters.ParameterSelection import ParameterSelection
|
||||
from processing.parameters.ParameterNumber import ParameterNumber
|
||||
from processing.outputs.OutputRaster import OutputRaster
|
||||
|
||||
from processing.tools.system import *
|
||||
|
||||
from processing.gdal.GdalUtils import GdalUtils
|
||||
|
||||
class proximity(GeoAlgorithm):
|
||||
|
||||
INPUT = "INPUT"
|
||||
VALUES = "VALUES"
|
||||
UNITS = "UNITS"
|
||||
MAX_DIST = "MAX_DIST"
|
||||
NODATA = "NODATA"
|
||||
BUF_VAL = "BUF_VAL"
|
||||
OUTPUT = "OUTPUT"
|
||||
|
||||
DISTUNITS = ["GEO", "PIXEL"]
|
||||
|
||||
def getIcon(self):
|
||||
filepath = os.path.dirname(__file__) + "/icons/proximity.png"
|
||||
return QtGui.QIcon(filepath)
|
||||
|
||||
def defineCharacteristics(self):
|
||||
self.name = "Proximity"
|
||||
self.group = "[GDAL] Analysis"
|
||||
self.addParameter(ParameterRaster(self.INPUT, "Input layer", False))
|
||||
self.addParameter(ParameterString(self.VALUES, "Values", ""))
|
||||
self.addParameter(ParameterSelection(self.UNITS, "Dist units", self.DISTUNITS, 0))
|
||||
self.addParameter(ParameterNumber(self.MAX_DIST, "Max dist (negative value to ignore)", -1, 9999, -1))
|
||||
self.addParameter(ParameterNumber(self.NODATA, "No data (negative value to ignore)", -1, 9999, -1))
|
||||
self.addParameter(ParameterNumber(self.BUF_VAL, "Fixed buf val (negative value to ignore)", -1, 9999, -1))
|
||||
|
||||
self.addOutput(OutputRaster(self.OUTPUT, "Output layer"))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
output = self.getOutputValue(self.OUTPUT)
|
||||
|
||||
arguments = []
|
||||
arguments.append(self.getParameterValue(self.INPUT))
|
||||
arguments.append(output)
|
||||
|
||||
arguments.append("-of")
|
||||
arguments.append(GdalUtils.getFormatShortNameFromFilename(output))
|
||||
|
||||
arguments.append("-distunits")
|
||||
arguments.append(self.DISTUNITS[self.getParameterValue(self.UNITS)])
|
||||
|
||||
values = self.getParameterValue(self.VALUES)
|
||||
if len(values) > 0:
|
||||
arguments.append("-values")
|
||||
arguments.append(values)
|
||||
|
||||
values = str(self.getParameterValue(self.MAX_DIST))
|
||||
if values < 0:
|
||||
arguments.append("-maxdist")
|
||||
arguments.append(values)
|
||||
|
||||
values = str(self.getParameterValue(self.NODATA))
|
||||
if values < 0:
|
||||
arguments.append("-nodata")
|
||||
arguments.append(values)
|
||||
|
||||
values = str(self.getParameterValue(self.BUF_VAL))
|
||||
if values < 0:
|
||||
arguments.append("-fixed-buf-val")
|
||||
arguments.append(values)
|
||||
|
||||
commands = []
|
||||
if isWindows():
|
||||
commands = ["cmd.exe", "/C ", "gdal_proximity.bat", GdalUtils.escapeAndJoin(arguments)]
|
||||
else:
|
||||
commands = ["gdal_proximity.py", GdalUtils.escapeAndJoin(arguments)]
|
||||
|
||||
GdalUtils.runGdal(commands, progress)
|
@ -1,102 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
***************************************************************************
|
||||
proximity.py
|
||||
---------------------
|
||||
Date : August 2012
|
||||
Copyright : (C) 2012 by Victor Olaya
|
||||
Email : volayaf 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__ = 'Victor Olaya'
|
||||
__date__ = 'August 2012'
|
||||
__copyright__ = '(C) 2012, Victor Olaya'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
#******************************************************************************
|
||||
# Adapted from gdal_proximity.py, Copyright (c) 2008, Frank Warmerdam
|
||||
#******************************************************************************
|
||||
##[GDAL] Analysis=group
|
||||
##src_filename=raster
|
||||
##dst_filename=output raster
|
||||
##values=string
|
||||
##maxdist=number 0
|
||||
##nodata=number 0
|
||||
##distunits=selection GEO;PIXEL
|
||||
##fixed_buf_val=number 0
|
||||
from processing.gdal.GdalUtils import GdalUtils
|
||||
try:
|
||||
from osgeo import gdal
|
||||
except ImportError:
|
||||
import gdal
|
||||
|
||||
creation_options = []
|
||||
options = []
|
||||
src_band_n = 1
|
||||
dst_band_n = 1
|
||||
creation_type = 'Float32'
|
||||
|
||||
gdal.AllRegister()
|
||||
options.append( 'MAXDIST=' + str(maxdist))
|
||||
if len(values) > 0:
|
||||
options.append( 'VALUES=' + values )
|
||||
if distunits == 0:
|
||||
options.append( 'DISTUNITS=GEO')
|
||||
else:
|
||||
options.append( 'DISTUNITS=PIXEL')
|
||||
options.append( 'NODATA=' + str(nodata))
|
||||
options.append( 'FIXED_BUF_VAL=' +str(fixed_buf_val))
|
||||
|
||||
src_ds = gdal.Open( src_filename )
|
||||
srcband = src_ds.GetRasterBand(src_band_n)
|
||||
|
||||
# =============================================================================
|
||||
# Try opening the destination file as an existing file.
|
||||
# =============================================================================
|
||||
|
||||
try:
|
||||
driver = gdal.IdentifyDriver( dst_filename )
|
||||
if driver is not None:
|
||||
dst_ds = gdal.Open( dst_filename, gdal.GA_Update )
|
||||
dstband = dst_ds.GetRasterBand(dst_band_n)
|
||||
else:
|
||||
dst_ds = None
|
||||
except:
|
||||
dst_ds = None
|
||||
|
||||
# =============================================================================
|
||||
# Create output file.
|
||||
# =============================================================================
|
||||
if dst_ds is None:
|
||||
drv = gdal.GetDriverByName(GdalUtils.getFormatShortNameFromFilename(dst_filename))
|
||||
dst_ds = drv.Create( dst_filename,
|
||||
src_ds.RasterXSize, src_ds.RasterYSize, 1,
|
||||
gdal.GetDataTypeByName(creation_type) )
|
||||
|
||||
dst_ds.SetGeoTransform( src_ds.GetGeoTransform() )
|
||||
dst_ds.SetProjection( src_ds.GetProjectionRef() )
|
||||
|
||||
dstband = dst_ds.GetRasterBand(1)
|
||||
|
||||
# =============================================================================
|
||||
# Invoke algorithm.
|
||||
# =============================================================================
|
||||
|
||||
prog_func = gdal.TermProgress
|
||||
gdal.ComputeProximity( srcband, dstband, options,
|
||||
callback = prog_func )
|
||||
|
||||
srcband = None
|
||||
dstband = None
|
||||
src_ds = None
|
||||
dst_ds = None
|
Loading…
x
Reference in New Issue
Block a user