2 changes: 2 additions & 0 deletions python/plugins/sextante/algs/ftools/ReprojectLayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,5 @@ def processAlgorithm(self, progress):
progress.setPercentage(int(current * total))

del writer

self.crs = targetCrs
8 changes: 2 additions & 6 deletions python/plugins/sextante/core/Sextante.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import sextante
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
Expand Down Expand Up @@ -252,7 +253,7 @@ def runAlgorithm(algOrName, onFinish, *args):
return
if len(args) != alg.getVisibleParametersCount() + alg.getVisibleOutputsCount():
print ("Error: Wrong number of parameters")
alghelp(algOrName)
sextante.alghelp(algOrName)
return

alg = alg.getCopy()
Expand Down Expand Up @@ -340,9 +341,4 @@ def cancel():
return alg


##==========================================================
##These methods are here to be used from the python console,
##making it easy to use SEXTANTE from there
##==========================================================


5 changes: 1 addition & 4 deletions python/plugins/sextante/gdal/OgrAlgorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,7 @@ def ogrConnectionString(self, uri):
layer = QGisLayers.getObjectFromUri(uri, False)
if layer == None:
return uri;
provider = layer.dataProvider().name()
qDebug("inputLayer provider '%s'" % provider)
#qDebug("inputLayer layer '%s'" % layer.providerType())
qDebug("inputLayer.source '%s'" % layer.source())
provider = layer.dataProvider().name()
if provider == 'spatialite':
#dbname='/geodata/osm_ch.sqlite' table="places" (Geometry) sql=
regex = re.compile("dbname='(.+)'")
Expand Down
103 changes: 38 additions & 65 deletions python/plugins/sextante/gdal/ogr2ogr.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,37 +23,30 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
import re
import string
from string import Template
import tempfile

from PyQt4.QtCore import *
from PyQt4.QtGui import *

from qgis.core import *

from sextante.core.SextanteLog import SextanteLog
from sextante.core.QGisLayers import QGisLayers

from sextante.parameters.ParameterVector import ParameterVector
from sextante.parameters.ParameterString import ParameterString
from sextante.outputs.OutputVector import OutputVector

from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.gdal.OgrAlgorithm import OgrAlgorithm
from sextante.gdal.pyogr.ogr2ogr import *

from sextante.gdal.GdalUtils import GdalUtils

try:
from osgeo import gdal, ogr, osr
gdalAvailable = True
from osgeo import gdal, ogr, osr
gdalAvailable = True
except:
gdalAvailable = False
gdalAvailable = False

GeomOperation = Enum(["NONE", "SEGMENTIZE", "SIMPLIFY_PRESERVE_TOPOLOGY"])

FORMATS = ['ESRI Shapefile','GeoJSON',' GeoRSS','SQLite','Generic Mapping Tools','Mapinfo TAB','ESRI Shapefile','INTERLIS 1',
'Geography Markup Language','Geoconcept','AutoCAD DXF','INTERLIS 2','','Microstation DGN',
'Comma Separated Value','Atlas BNAGPS eXchange Format','S-57 Base file','Keyhole Markup Language']
EXTS = ["shp",'geojson','.xml','.sqlite','.gmt','.tab','.shp','.ili','.gml','.txt','.dxf','.ili','.dgn','.csv','.bna','.gpx','.000','.kml']

class Ogr2Ogr(OgrAlgorithm):

Expand All @@ -69,63 +62,48 @@ def defineCharacteristics(self):

#we add the input vector layer. It can have any kind of geometry
#It is a mandatory (not optional) one, hence the False argument
self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY, False))
#self.addParameter(ParameterString(self.DEST_DS, "Output DS", "/tmp/out.sqlite"))
self.addParameter(ParameterString(self.DEST_FORMAT, "Destination Format", "ESRI Shapefile")) #SQLite
self.addParameter(ParameterString(self.DEST_DSCO, "Creation Options", "")) #SPATIALITE=YES
self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY, False))
self.addParameter(ParameterSelection(self.DEST_FORMAT, "Destination Format", FORMATS))
self.addParameter(ParameterString(self.DEST_DSCO, "Creation Options", ""))

self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer"))

def processAlgorithm(self, progress):
'''Here is where the processing itself takes place'''

if not gdalAvailable:
SextanteLog.addToLog(SextanteLog.LOG_ERROR, "GDAL bindings not installed." )
return
raise GeoAlgorithmExecutionException("GDAL bindings not installed.")

input = self.getParameterValue(self.INPUT_LAYER)
ogrLayer = self.ogrConnectionString(input)
output = self.getOutputValue(self.OUTPUT_LAYER)

#dst_ds = self.getParameterValue(self.DEST_DS)
dst_ds = self.ogrConnectionString(output)
dst_format = self.getParameterValue(self.DEST_FORMAT)
ogr_dsco = [self.getParameterValue(self.DEST_DSCO)] #TODO: split
#dst_ds = "PG:dbname='glarus_np' options='-c client_encoding=LATIN9'"
#dst_format ="PostgreSQL"

qDebug("Opening data source '%s'" % ogrLayer)

output = self.getOutputFromName(self.OUTPUT_LAYER)
outfile = output.value

formatIdx = self.getParameterValue(self.DEST_FORMAT)

ext = EXTS[formatIdx]
if not outfile.endswith(ext):
outfile = outfile + ext;
output.value = outfile

dst_ds = self.ogrConnectionString(outfile)
dst_format = FORMATS[formatIdx]
ogr_dsco = [self.getParameterValue(self.DEST_DSCO)]

poDS = ogr.Open( ogrLayer, False )
if poDS is None:
SextanteLog.addToLog(SextanteLog.LOG_ERROR, self.failure(ogrLayer))
return

srs = osr.SpatialReference()
srs.ImportFromEPSG( 21781 ) #FIXME
qDebug("Creating output '%s'" % dst_ds)
raise GeoAlgorithmExecutionException(self.failure(ogrLayer))

if dst_format == "SQLite" and os.path.isfile(dst_ds):
os.remove(dst_ds)
qDebug("Using driver '%s'" % dst_format)
driver = ogr.GetDriverByName(dst_format)
os.remove(dst_ds)
driver = ogr.GetDriverByName(str(dst_format))
poDstDS = driver.CreateDataSource(dst_ds, options = ogr_dsco)
if poDstDS is None:
SextanteLog.addToLog(SextanteLog.LOG_ERROR, "Error creating %s" % dst_ds)
raise GeoAlgorithmExecutionException("Error creating %s" % dst_ds)
return
self.ogrtransform(poDS, poDstDS, bOverwrite = True)
#ogr2ogr(pszFormat = dst_format, pszDataSource = poDS, pszDestDataSource = poDstDS, bOverwrite = True)

def transformed_template(self, template, substitutions):
vrt_templ = Template(open(template).read())
vrt_xml = vrt_templ.substitute(substitutions)
vrt = tempfile.mktemp( '.vrt', 'ogr_', '/vsimem')
# Create in-memory file
gdal.FileFromMemBuffer(vrt, vrt_xml)
return vrt

def transformed_datasource(self, template, substitutions):
vrt = transformed_template(template, substitutions)
ds = ogr.Open(vrt)
return ds
self.ogrtransform(poDS, poDstDS, bOverwrite = True)


def ogrtransform(self,
poSrcDS,
Expand Down Expand Up @@ -163,8 +141,7 @@ def ogrtransform(self,
poLayer = poSrcDS.GetLayer(iLayer)

if poLayer is None:
SextanteLog.addToLog(SextanteLog.LOG_ERROR, "FAILURE: Couldn't fetch advertised layer %d!" % iLayer)
return False
raise GeoAlgorithmExecutionException( "FAILURE: Couldn't fetch advertised layer %d!" % iLayer)

papoLayers[iLayer] = poLayer
iLayer = iLayer + 1
Expand All @@ -179,16 +156,12 @@ def ogrtransform(self,
poLayer = poSrcDS.GetLayerByName(layername)

if poLayer is None:
SextanteLog.addToLog(SextanteLog.LOG_ERROR, "FAILURE: Couldn't fetch advertised layer %s!" % layername)
return False
raise GeoAlgorithmExecutionException("FAILURE: Couldn't fetch advertised layer %s!" % layername)

papoLayers[iLayer] = poLayer
iLayer = iLayer + 1

for poSrcLayer in papoLayers:
qDebug(poSrcLayer.GetLayerDefn().GetName())
#TODO: poDstDS.GetLayerByName for VRT layer fails if name is not lower case

for poSrcLayer in papoLayers:
ok = TranslateLayer( poSrcDS, poSrcLayer, poDstDS, papszLCO, pszNewLayerName, \
bTransform, poOutputSRS, poSourceSRS, papszSelFields, \
bAppend, eGType, bOverwrite, eGeomOp, dfGeomOpParam, \
Expand Down
6 changes: 2 additions & 4 deletions python/plugins/sextante/gdal/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
* *
***************************************************************************
"""
from sextante.parameters.ParameterString import ParameterString

__author__ = 'Victor Olaya'
__date__ = 'August 2012'
Expand All @@ -25,11 +24,9 @@
__revision__ = '$Format:%H$'

import os

from PyQt4 import QtGui

from sextante.core.GeoAlgorithm import GeoAlgorithm

from sextante.parameters.ParameterString import ParameterString
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterBoolean import ParameterBoolean
Expand Down Expand Up @@ -107,6 +104,7 @@ def processAlgorithm(self, progress):
if srs is not None:
arguments.append("-a_srs")
arguments.append(str(srs))
self.crs = QgsCoordinateReferenceSystem(crsId)
if sds:
arguments.append("-sds")
if len(extra) > 0:
Expand Down
8 changes: 3 additions & 5 deletions python/plugins/sextante/gdal/warp.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,14 @@

import os
from PyQt4 import QtGui

from qgis.core import *

from sextante.core.GeoAlgorithm import GeoAlgorithm

from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.parameters.ParameterCrs import ParameterCrs
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterString import ParameterString
from sextante.outputs.OutputRaster import OutputRaster

from sextante.gdal.GdalUtils import GdalUtils

class warp(GeoAlgorithm):
Expand Down Expand Up @@ -70,7 +66,9 @@ def processAlgorithm(self, progress):
arguments.append("-s_srs")
arguments.append(str(self.getParameterValue(warp.SOURCE_SRS)))
arguments.append("-t_srs")
arguments.append(str(self.getParameterValue(warp.DEST_SRS)))
crsId = self.getParameterValue(warp.DEST_SRS)
self.crs = QgsCoordinateReferenceSystem(crsId)
arguments.append(str(crsId))
arguments.append("-r")
arguments.append(warp.METHOD_OPTIONS[self.getParameterValue(warp.METHOD)])
arguments.append("-of")
Expand Down
4 changes: 3 additions & 1 deletion python/plugins/sextante/modeler/ModelerAlgorithmProvider.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* *
***************************************************************************
"""

__author__ = 'Victor Olaya'
__date__ = 'August 2012'
__copyright__ = '(C) 2012, Victor Olaya'
Expand All @@ -26,6 +27,7 @@
from PyQt4.QtGui import *
import os.path
from sextante.core.SextanteConfig import SextanteConfig, Setting
from sextante.modeler.SaveAsPythonScriptAction import SaveAsPythonScriptAction
from sextante.core.SextanteLog import SextanteLog
from sextante.modeler.ModelerUtils import ModelerUtils
from sextante.modeler.ModelerAlgorithm import ModelerAlgorithm
Expand All @@ -41,7 +43,7 @@ class ModelerAlgorithmProvider(AlgorithmProvider):
def __init__(self):
AlgorithmProvider.__init__(self)
self.actions = [CreateNewModelAction()]
self.contextMenuActions = [EditModelAction(), DeleteModelAction()]
self.contextMenuActions = [EditModelAction(), DeleteModelAction(), SaveAsPythonScriptAction()]

def initializeSettings(self):
AlgorithmProvider.initializeSettings(self)
Expand Down
Loading