QGIS/python/plugins/sextante/pymorph/PymorphAlgorithm.py

55 lines
2.7 KiB
Python
Raw Normal View History

from sextante.script.ScriptAlgorithm import ScriptAlgorithm
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.outputs.OutputRaster import OutputRaster
from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.pymorph.AlgNames import AlgNames
import os
class PymorphAlgorithm(ScriptAlgorithm):
LOAD_LAYER_SCRIPT = "from sextante.gdal.GdalUtils import GdalUtils\n" \
+"from sextante.pymorph.mmorph import datatype\n" \
+ "import numpy\n" \
+"gdal_datatypes={'binary':'Byte','uint8':'Byte','uint16':'UInt16','int32':'Int32'}\n" \
+ "try:\n" \
+ "\tfrom osgeo import gdal\n" \
+ "except ImportError:\n" \
+ "\timport gdal\n" \
+ "gdal.AllRegister()\n" \
+ "img = gdal.Open(input_filename)\n"\
+ "input_array = img.ReadAsArray()\n" \
+ "if isinstance(input_array[0][0], (numpy.float32, numpy.float64)):\n" \
+ "\tinput_array = input_array.astype(numpy.int32)\n"
SAVE_LAYER_SCRIPT = "\ndrv = gdal.GetDriverByName(GdalUtils.getFormatShortNameFromFilename(output_filename))\n" \
+ "out = drv.Create(output_filename, img.RasterXSize, img.RasterYSize, 1, gdal.GetDataTypeByName('UInt16'))\n"\
+ "out.SetGeoTransform( img.GetGeoTransform())\n"\
+ "out.SetProjection( img.GetProjectionRef())\n"\
+ "out.GetRasterBand(1).WriteArray(output_array)"
#gdal_datatypes[datatype(output_array)]
def getCopy(self):
newone = PymorphAlgorithm(self.descriptionFile)
newone.provider = self.provider
return newone
def getIcon(self):
return GeoAlgorithm.getIcon(self)
def defineCharacteristicsFromFile(self):
ScriptAlgorithm.defineCharacteristicsFromFile(self)
self.parameters.insert(0, ParameterRaster("input_filename", "Input image", False))
self.outputs.append(OutputRaster("output_filename", "Output image"))
self.script = self.LOAD_LAYER_SCRIPT + self.script + self.SAVE_LAYER_SCRIPT
self.cmdname = self.name
self.name = AlgNames.getName(self.name)
def helpFile(self):
command = os.path.basename(self.descriptionFile)
command = command[:command.rfind(".")].replace("_", "")
filename = os.path.dirname(__file__) + "/html/morph/morph/mm" + command + ".html"
return filename
def commandLineName(self):
return "pymorph:" + ":" + self.cmdname