def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() savename = self.getOutputValue(self.SAVENAME) index = self.getParameterValue(self.NEWTYPE) splitnodes = 0 if index == 0: newtype = QGis.WKBPoint elif index == 1: newtype = QGis.WKBPoint splitnodes = 1 elif index == 2: newtype = QGis.WKBLineString elif index == 3: newtype = QGis.WKBMultiLineString elif index == 4: newtype = QGis.WKBPolygon else: newtype = QGis.WKBPoint message = mmqgisx_geometry_convert(qgis, layername, newtype, splitnodes, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() outfilename = self.getOutputValue(self.OUTFILENAME) layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() if self.getParameterValue(self.FIELDDELIMITER) == 1: field_delimiter = "|" elif self.getParameterValue(self.FIELDDELIMITER) == 2: field_delimiter = " " else: field_delimiter = "," if self.getParameterValue(self.LINETERMINATOR) == 1: line_terminator = "\n" else: line_terminator = "\r\n" message = mmqgisx_attribute_export(qgis, outfilename, layername, None, field_delimiter, line_terminator) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() node_filename = self.getOutputValue(self.NODEFILENAME) attribute_filename = self.getOutputValue(self.ATTRIBUTEFILENAME) print "Layer: " + str(layername) print "Nodes: " + str(node_filename) print "Attributes: " + str(attribute_filename) if self.getParameterValue(self.FIELDDELIMITER) == 1: field_delimiter = "|" elif self.getParameterValue(self.FIELDDELIMITER) == 2: field_delimiter = " " else: field_delimiter = "," if self.getParameterValue(self.LINETERMINATOR) == 1: line_terminator = "\n" else: line_terminator = "\r\n" message = mmqgisx_geometry_export_to_csv(qgis, layername, node_filename, attribute_filename, field_delimiter, line_terminator) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() node_filename = self.getOutputValue(self.NODEFILENAME) attribute_filename = self.getOutputValue(self.ATTRIBUTEFILENAME) print "Layer: " + str(layername) print "Nodes: " + str(node_filename) print "Attributes: " + str(attribute_filename) if self.getParameterValue(self.FIELDDELIMITER) == 1: field_delimiter = "|" elif self.getParameterValue(self.FIELDDELIMITER) == 2: field_delimiter = " " else: field_delimiter = "," if self.getParameterValue(self.LINETERMINATOR) == 1: line_terminator = "\n" else: line_terminator = "\r\n" message = mmqgisx_geometry_export_to_csv(qgis, layername, node_filename, attribute_filename, field_delimiter, line_terminator) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() outfilename = self.getOutputValue(self.OUTFILENAME) layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() if self.getParameterValue(self.FIELDDELIMITER) == 1: field_delimiter = "|" elif self.getParameterValue(self.FIELDDELIMITER) == 2: field_delimiter = " " else: field_delimiter = "," if self.getParameterValue(self.LINETERMINATOR) == 1: line_terminator = "\n" else: line_terminator = "\r\n" message = mmqgisx_attribute_export(qgis, outfilename, layername, None, field_delimiter, line_terminator) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() table = QGisLayers.getObjectFromUri( self.getParameterValue(self.INFILENAME)) infilename = table.name() joinfield = self.getParameterValue(self.JOINFIELD) joinattribute = self.getParameterValue(self.JOINATTRIBUTE) outfilename = self.getOutputValue(self.OUTFILENAME) notfoundname = self.getOutputValue(self.NOTFOUNDNAME) message = mmqgisx_attribute_join(qgis, layername, infilename, joinfield, joinattribute, outfilename, notfoundname, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() table = QGisLayers.getObjectFromUri(self.getParameterValue(self.CSVNAME)) csvname = table.name() params = [ self.getParameterValue(self.ADDRESS), self.getParameterValue(self.CITY), self.getParameterValue(self.STATE), self.getParameterValue(self.COUNTRY), ] keys = [] for param in params: if not (param in keys): keys.append(param) shapefilename = self.getOutputValue(self.SHAPEFILENAME) notfoundfile = self.getOutputValue(self.NOTFOUNDFILE) message = mmqgisx_geocode_google(qgis, csvname, shapefilename, notfoundfile, keys, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() savename = self.getOutputValue(self.SAVENAME) index = self.getParameterValue(self.NEWTYPE) splitnodes = 0 if index == 0: newtype = QGis.WKBPoint elif index == 1: newtype = QGis.WKBPoint splitnodes = 1 elif index == 2: newtype = QGis.WKBLineString elif index == 3: newtype = QGis.WKBMultiLineString elif index == 4: newtype = QGis.WKBPolygon else: newtype = QGis.WKBPoint message = mmqgisx_geometry_convert(qgis, layername, newtype, splitnodes, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() table = QGisLayers.getObjectFromUri( self.getParameterValue(self.CSVNAME)) csvname = table.name() params = [ self.getParameterValue(self.ADDRESS), self.getParameterValue(self.CITY), self.getParameterValue(self.STATE), self.getParameterValue(self.COUNTRY) ] keys = [] for param in params: if not (param in keys): keys.append(param) shapefilename = self.getOutputValue(self.SHAPEFILENAME) notfoundfile = self.getOutputValue(self.NOTFOUNDFILE) message = mmqgisx_geocode_google(qgis, csvname, shapefilename, notfoundfile, keys, False) if message: raise GeoAlgorithmExecutionException(message)
def setSessionProjectionFromProject(self, commands): if not GrassUtils.projectionSet: from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() proj4 = qgis.mapCanvas().mapRenderer().destinationCrs().toProj4() command = "g.proj" command +=" -c" command +=" proj4=\""+proj4+"\"" commands.append(command) GrassUtils.projectionSet = True
def setSessionProjectionFromProject(self, commands): if not GrassUtils.projectionSet: from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() proj4 = qgis.mapCanvas().mapRenderer().destinationCrs().toProj4() command = "g.proj" command += " -c" command += " proj4=\"" + proj4 + "\"" commands.append(command) GrassUtils.projectionSet = True
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_voronoi_diagram(qgis, layer, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_voronoi_diagram(qgis, layer, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() attribute = self.getParameterValue(self.ATTRIBUTE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_text_to_float(qgis, layername, [ attribute ], savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() hspacing = self.getParameterValue(self.HSPACING) vspacing = self.getParameterValue(self.VSPACING) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_gridify_layer(qgis, layername, hspacing, vspacing, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layersource = QGisLayers.getObjectFromUri(self.getParameterValue(self.SOURCENAME)) layerdest = QGisLayers.getObjectFromUri(self.getParameterValue(self.DESTNAME)) nameattribute = self.getParameterValue(self.NAMEATTRIBUTE) units = self.unitlist[self.getParameterValue(self.UNITS)] addlines = self.getParameterValue(self.SHAPETYPE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_hub_distance(qgis, layersource, layerdest, nameattribute, units, addlines, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() hublayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.HUBNAME)) spokelayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.SPOKENAME)) hubattribute = self.getParameterValue(self.HUBATTRIBUTE) spokeattribute = self.getParameterValue(self.SPOKEATTRIBUTE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_hub_lines(qgis, hublayer, hubattribute, spokelayer, spokeattribute, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() attribute = self.getParameterValue(self.ATTRIBUTE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_text_to_float(qgis, layername, [attribute], savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() hspacing = self.getParameterValue(self.HSPACING) vspacing = self.getParameterValue(self.VSPACING) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_gridify_layer(qgis, layername, hspacing, vspacing, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() attribute = self.getParameterValue(self.ATTRIBUTE) comparison = self.comparisons [ self.getParameterValue(self.COMPARISON) ] # print str(self.getParameterValue(self.COMPARISON)) + ": " + str(comparison) comparisonvalue = self.getParameterValue(self.COMPARISONVALUE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_select(qgis, layername, attribute, comparisonvalue, comparison, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def fillCombo(self): self.combo.clear() #add algorithms for providerName in Sextante.algs.keys(): provider = Sextante.algs[providerName] algs = provider.values() for alg in algs: self.combo.addItem("SEXTANTE algorithm: " + alg.name) #add functions for command in dir(self.commands): if isinstance(self.commands.__dict__.get(command), types.FunctionType): self.combo.addItem("Command: " + command); #add menu entries menuActions = [] actions = Sextante.getInterface().mainWindow().menuBar().actions() for action in actions: menuActions.extend(self.getActions(action)) for action in menuActions: self.combo.addItem("Menu action: " + unicode(action.text()))
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() table = QGisLayers.getObjectFromUri(self.getParameterValue(self.NODEFILENAME)) node_filename = table.name() longitude = self.getParameterValue(self.LONGITUDE) latitude = self.getParameterValue(self.LATITUDE) shapeid = self.getParameterValue(self.SHAPEID) geometrytype = self.geotypes[self.getParameterValue(self.GEOMETRYTYPE)] shapefilename = self.getOutputValue(self.SHAPEFILENAME) message = mmqgisx_geometry_import_from_csv(qgis, node_filename, longitude, latitude, shapeid, geometrytype, shapefilename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() hublayer = QGisLayers.getObjectFromUri( self.getParameterValue(self.HUBNAME)) spokelayer = QGisLayers.getObjectFromUri( self.getParameterValue(self.SPOKENAME)) hubattribute = self.getParameterValue(self.HUBATTRIBUTE) spokeattribute = self.getParameterValue(self.SPOKEATTRIBUTE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_hub_lines(qgis, hublayer, hubattribute, spokelayer, spokeattribute, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri( self.getParameterValue(self.LAYERNAME)) layername = layer.name() attribute = self.getParameterValue(self.ATTRIBUTE) comparison = self.comparisons[self.getParameterValue(self.COMPARISON)] # print str(self.getParameterValue(self.COMPARISON)) + ": " + str(comparison) comparisonvalue = self.getParameterValue(self.COMPARISONVALUE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_select(qgis, layername, attribute, comparisonvalue, comparison, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() savename = self.getOutputValue(self.SAVENAME) hspacing = self.getParameterValue(self.HSPACING) vspacing = self.getParameterValue(self.VSPACING) width = self.getParameterValue(self.WIDTH) height = self.getParameterValue(self.HEIGHT) centerx = self.getParameterValue(self.CENTERX) centery = self.getParameterValue(self.CENTERY) originx = centerx - (width / 2.0) originy = centery - (height / 2.0) gridtype = self.gridtype_options[self.getParameterValue(self.GRIDTYPE)] message = mmqgisx_grid(qgis, savename, hspacing, vspacing, width, height, originx, originy, gridtype, 0) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layersource = QGisLayers.getObjectFromUri( self.getParameterValue(self.SOURCENAME)) layerdest = QGisLayers.getObjectFromUri( self.getParameterValue(self.DESTNAME)) nameattribute = self.getParameterValue(self.NAMEATTRIBUTE) units = self.unitlist[self.getParameterValue(self.UNITS)] addlines = self.getParameterValue(self.SHAPETYPE) savename = self.getOutputValue(self.SAVENAME) message = mmqgisx_hub_distance(qgis, layersource, layerdest, nameattribute, units, addlines, savename, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME)) layername = layer.name() table = QGisLayers.getObjectFromUri(self.getParameterValue(self.INFILENAME)) infilename = table.name() joinfield = self.getParameterValue(self.JOINFIELD) joinattribute = self.getParameterValue(self.JOINATTRIBUTE) outfilename = self.getOutputValue(self.OUTFILENAME) notfoundname = self.getOutputValue(self.NOTFOUNDNAME) message = mmqgisx_attribute_join(qgis, layername, infilename, joinfield, joinattribute, outfilename, notfoundname, False) if message: raise GeoAlgorithmExecutionException(message)
def processAlgorithm(self, progress): # Include must be done here to avoid cyclic import from sextante.core.Sextante import Sextante qgis = Sextante.getInterface() table = QGisLayers.getObjectFromUri( self.getParameterValue(self.NODEFILENAME)) node_filename = table.name() longitude = self.getParameterValue(self.LONGITUDE) latitude = self.getParameterValue(self.LATITUDE) shapeid = self.getParameterValue(self.SHAPEID) geometrytype = self.geotypes[self.getParameterValue(self.GEOMETRYTYPE)] shapefilename = self.getOutputValue(self.SHAPEFILENAME) message = mmqgisx_geometry_import_from_csv(qgis, node_filename, longitude, latitude, shapeid, geometrytype, shapefilename, False) if message: raise GeoAlgorithmExecutionException(message)
class CommanderWindow(QtGui.QDialog): def __init__(self, parent, canvas): self.canvas = canvas QtGui.QDialog.__init__(self, parent, Qt.FramelessWindowHint) #self.setModal(True) self.commands = imp.load_source("commands", self.commandsFile()) self.initGui() def commandsFolder(self): folder = unicode(os.path.join(SextanteUtils.userFolder(), "commander")) mkdir(folder) return os.path.abspath(folder) def commandsFile(self): f = os.path.join(self.commandsFolder(), "commands.py") if not os.path.exists(f): out = open(f, "w") out.write("from qgis.core import *\n") out.write("import sextante\n\n") out.write("def removeall():\n") out.write("\tmapreg = QgsMapLayerRegistry.instance()\n") out.write("\tmapreg.removeAllMapLayers()\n\n") out.write("def load(*args):\n") out.write("\tsextante.load(args[0])\n") out.close() return f def algsListHasChanged(self): self.fillCombo() def initGui(self): self.combo= ExtendedComboBox() self.fillCombo() self.combo.setEditable(True) self.label = QtGui.QLabel("Enter command:") self.errorLabel = QtGui.QLabel("Enter command:") self.vlayout = QtGui.QVBoxLayout() self.vlayout.setSpacing(2) self.vlayout.setMargin(0) self.vlayout.addSpacerItem(QtGui.QSpacerItem(0, OFFSET, QSizePolicy.Maximum, QSizePolicy.Expanding)); self.hlayout = QtGui.QHBoxLayout() self.hlayout.addWidget(self.label) #self.hlayout.addWidget(self.errorLabel) self.vlayout.addLayout(self.hlayout) self.hlayout2 = QtGui.QHBoxLayout() self.hlayout2.addWidget(self.combo) self.vlayout.addLayout(self.hlayout2) self.vlayout.addSpacerItem(QtGui.QSpacerItem(0, OFFSET, QSizePolicy.Maximum, QSizePolicy.Expanding)); self.setLayout(self.vlayout) self.combo.lineEdit().returnPressed.connect(self.run) self.prepareGui() def fillCombo(self): self.combo.clear() #add algorithms for providerName in Sextante.algs.keys(): provider = Sextante.algs[providerName] algs = provider.values() for alg in algs: self.combo.addItem("SEXTANTE algorithm: " + alg.name) #add functions for command in dir(self.commands): if isinstance(self.commands.__dict__.get(command), types.FunctionType): self.combo.addItem("Command: " + command); #add menu entries menuActions = [] actions = Sextante.getInterface().mainWindow().menuBar().actions() for action in actions: menuActions.extend(self.getActions(action)) for action in menuActions: self.combo.addItem("Menu action: " + unicode(action.text())) def prepareGui(self): self.combo.setEditText("") self.combo.setMaximumSize(QtCore.QSize(self.canvas.rect().width() - 2 * OFFSET, ITEMHEIGHT)) self.combo.view().setStyleSheet("min-height: 150px") self.combo.setFocus(Qt.OtherFocusReason) self.label.setMaximumSize(self.combo.maximumSize()) self.label.setVisible(False) self.adjustSize() pt = self.canvas.rect().topLeft() absolutePt = self.canvas.mapToGlobal(pt) self.move(absolutePt) self.resize(self.canvas.rect().width(), HEIGHT) self.setStyleSheet("CommanderWindow { background-color: #e7f5fe; border: 1px solid #b9cfe4; }") def getActions(self, action): menuActions = [] menu = action.menu() if menu is None: menuActions.append(action) return menuActions else: actions = menu.actions() for subaction in actions: if subaction.menu() is not None: menuActions.extend(self.getActions(subaction)) elif not subaction.isSeparator(): menuActions.append(subaction) return menuActions def run(self): s = unicode(self.combo.currentText()) if s.startswith("SEXTANTE algorithm: "): algName = s[len("SEXTANTE algorithm: "):] alg = Sextante.getAlgorithmFromFullName(algName) if alg is not None: self.close() self.runAlgorithm(alg) elif s.startswith("Command: "): command = s[len("Command: "):] try: self.runCommand(command) self.close() except Exception, e: self.label.setVisible(True) self.label.setText("Error:" + unicode(e) ) elif s.startswith("Menu action: "): actionName = s[len("Menu action: "):] menuActions = [] actions = Sextante.getInterface().mainWindow().menuBar().actions() for action in actions: menuActions.extend(self.getActions(action)) for action in menuActions: if action.text() == actionName: self.close() action.trigger() return