def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] clipLayer = self.getParameterValue(self.CLIP_LAYER) ogrClipLayer = GdalUtils.ogrConnectionString(clipLayer, context)[1:-1] output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value output = GdalUtils.ogrConnectionString(outFile, context) options = str(self.getParameterValue(self.OPTIONS)) arguments = [] arguments.append('-clipsrc') arguments.append(ogrClipLayer) arguments.append("-clipsrclayer") arguments.append(GdalUtils.ogrLayerName(clipLayer)) if options is not None and len(options.strip()) > 0: arguments.append(options) arguments.append(output) arguments.append(ogrLayer) arguments.append(GdalUtils.ogrLayerName(inLayer)) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) geometry = self.getParameterValue(self.GEOMETRY) distance = self.getParameterValue(self.RADIUS) leftright = self.getParameterValue(self.LEFTRIGHT) dissolveall = self.getParameterValue(self.DISSOLVEALL) field = self.getParameterValue(self.FIELD) multi = self.getParameterValue(self.MULTI) options = self.getParameterValue(self.OPTIONS) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] layername = GdalUtils.ogrLayerName(inLayer) output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value output = GdalUtils.ogrConnectionString(outFile, context) layername = GdalUtils.ogrLayerName(inLayer) arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') if dissolveall or field is not None: sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})), * FROM '{}'".format(geometry, distance, leftright, layername) else: sql = "SELECT ST_SingleSidedBuffer({},{},{}), * FROM '{}'".format(geometry, distance, leftright, layername) if field is not None: sql = '"{} GROUP BY {}"'.format(sql, field) arguments.append(sql) if field is not None and multi: arguments.append('-explodecollections') if options is not None and len(options.strip()) > 0: arguments.append(options) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): sql = self.getParameterValue(self.SQL) if sql == '': raise GeoAlgorithmExecutionException( self.tr('Empty SQL. Please enter valid SQL expression and try again.')) arguments = [] arguments.append('-sql') arguments.append(sql) dialectIdx = self.getParameterValue(self.DIALECT) dialect = DIALECTS[dialectIdx] if dialect: arguments.append("-dialect") arguments.append(dialect) output = self.getOutputFromName(self.OUTPUT) outFile = output.value arguments.append(outFile) layer = self.getParameterValue(self.INPUT) conn = GdalUtils.ogrConnectionString(layer, context)[1:-1] arguments.append(conn) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback): """ Interprets a parameter as an OGR compatible source and layer name """ input_layer = self.parameterAsVectorLayer(parameters, parameter_name, context) ogr_data_path = None ogr_layer_name = None if input_layer is None: # parameter is not a vector layer - try to convert to a source compatible with OGR # and extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(ogr_data_path) elif input_layer.dataProvider().name() == 'ogr': # parameter is a vector layer, with OGR data provider # so extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) else: # vector layer, but not OGR - get OGR compatible path # TODO - handle "selected features only" mode!! ogr_data_path = GdalUtils.ogrConnectionString(input_layer.dataProvider().dataSourceUri(), context)[1:-1] ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) return ogr_data_path, ogr_layer_name
def getConsoleCommands(self, parameters, context, feedback): out = self.getOutputValue(self.OUTPUT) mask = self.getParameterValue(self.MASK) context = dataobjects.createContext() maskLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.MASK), context) ogrMask = GdalUtils.ogrConnectionString(mask, context)[1:-1] noData = self.getParameterValue(self.NO_DATA) opts = self.getParameterValue(self.OPTIONS) if noData is not None: noData = str(noData) addAlphaBand = self.getParameterValue(self.ALPHA_BAND) cropToCutline = self.getParameterValue(self.CROP_TO_CUTLINE) keepResolution = self.getParameterValue(self.KEEP_RESOLUTION) arguments = [] arguments.append('-ot') arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)]) arguments.append('-q') arguments.append('-of') arguments.append(GdalUtils.getFormatShortNameFromFilename(out)) if noData and len(noData) > 0: arguments.append('-dstnodata') arguments.append(noData) if keepResolution: r = gdal.Open(self.getParameterValue(self.INPUT)) geoTransform = r.GetGeoTransform() r = None arguments.append('-tr') arguments.append(str(geoTransform[1])) arguments.append(str(geoTransform[5])) arguments.append('-tap') arguments.append('-cutline') arguments.append(ogrMask) if maskLayer and maskLayer.subsetString() != '': arguments.append('-cwhere') arguments.append(maskLayer.subsetString()) if cropToCutline: arguments.append('-crop_to_cutline') if addAlphaBand: arguments.append('-dstalpha') if opts: arguments.append('-co') arguments.append(opts) if GdalUtils.version() in [2010000, 2010100]: arguments.append("--config GDALWARP_IGNORE_BAD_CUTLINE YES") arguments.append(self.getParameterValue(self.INPUT)) arguments.append(out) return ['gdalwarp', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): context = dataobjects.createContext() inLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context) inRasterLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT_RASTER), context) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] ogrRasterLayer = GdalUtils.ogrConnectionString(inRasterLayer, context)[1:-1] arguments = [] arguments.append('-a') arguments.append(str(self.getParameterValue(self.FIELD))) arguments.append('-l') arguments.append(GdalUtils.ogrLayerName(inLayer)) arguments.append(ogrLayer) arguments.append(ogrRasterLayer) return ['gdal_rasterize', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback): arguments = ["ogrinfo"] arguments.append('-al') if self.getParameterValue(self.SUMMARY_ONLY): arguments.append('-so') layer = self.getParameterValue(self.INPUT) conn = GdalUtils.ogrConnectionString(layer, context) arguments.append(conn) return arguments
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback, executing): """ Interprets a parameter as an OGR compatible source and layer name :param executing: """ input_layer = self.parameterAsVectorLayer(parameters, parameter_name, context) ogr_data_path = None ogr_layer_name = None if input_layer is None: if executing: # parameter is not a vector layer - try to convert to a source compatible with OGR # and extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(ogr_data_path) else: #not executing - don't waste time converting incompatible sources, just return dummy strings #for the command preview (since the source isn't compatible with OGR, it has no meaning anyway and can't #be run directly in the command line) ogr_data_path = 'path_to_data_file' ogr_layer_name = 'layer_name' elif input_layer.dataProvider().name() == 'ogr': if executing: # parameter is a vector layer, with OGR data provider # so extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) else: #not executing - don't worry about 'selected features only' handling. It has no meaning #for the command line preview since it has no meaning outside of a QGIS session! ogr_data_path = GdalUtils.ogrConnectionString(input_layer.dataProvider().dataSourceUri(), context)[1:-1] ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) else: # vector layer, but not OGR - get OGR compatible path # TODO - handle "selected features only" mode!! ogr_data_path = GdalUtils.ogrConnectionString(input_layer.dataProvider().dataSourceUri(), context)[1:-1] ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) return ogr_data_path, ogr_layer_name
def getConsoleCommands(self, parameters, context, feedback, executing=True): arguments = ['ogrinfo'] arguments.append('-al') if self.parameterAsBool(parameters, self.SUMMARY_ONLY, context): arguments.append('-so') if self.parameterAsBool(parameters, self.NO_METADATA, context): arguments.append('-nomd') inLayer = self.parameterAsVectorLayer(parameters, self.INPUT, context) connectionString = GdalUtils.ogrConnectionString(inLayer.source(), context) arguments.append(connectionString) return arguments
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value formatIdx = self.getParameterValue(self.FORMAT) outFormat = FORMATS[formatIdx] ext = EXTS[formatIdx] if not outFile.endswith(ext): outFile += ext output.value = outFile output = GdalUtils.ogrConnectionString(outFile, context) options = str(self.getParameterValue(self.OPTIONS)) if outFormat == 'SQLite' and os.path.isfile(output): os.remove(output) arguments = [] arguments.append('-f') arguments.append(outFormat) if options is not None and len(options.strip()) > 0: arguments.append(options) arguments.append(output) arguments.append(ogrLayer) arguments.append(GdalUtils.ogrLayerName(inLayer)) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) geometry = self.getParameterValue(self.GEOMETRY) distance = self.getParameterValue(self.RADIUS) options = self.getParameterValue(self.OPTIONS) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] layername = "'" + GdalUtils.ogrLayerName(inLayer) + "'" output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value output = GdalUtils.ogrConnectionString(outFile, context) layername = GdalUtils.ogrLayerName(inLayer) arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') sql = "SELECT ST_OffsetCurve({}, {}), * FROM '{}'".format(geometry, distance, layername) arguments.append(sql) if options is not None and len(options.strip()) > 0: arguments.append(options) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] clipExtent = self.getParameterValue(self.CLIP_EXTENT) if not clipExtent: clipExtent = QgsProcessingUtils.combineLayerExtents([inLayer]) output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value output = GdalUtils.ogrConnectionString(outFile, context) options = str(self.getParameterValue(self.OPTIONS)) arguments = [] regionCoords = clipExtent.split(',') arguments.append('-spat') arguments.append(regionCoords[0]) arguments.append(regionCoords[2]) arguments.append(regionCoords[1]) arguments.append(regionCoords[3]) arguments.append('-clipsrc spat_extent') if options is not None and len(options.strip()) > 0: arguments.append(options) arguments.append(output) arguments.append(ogrLayer) arguments.append(GdalUtils.ogrLayerName(inLayer)) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback, executing=True): arguments = [self.commandName(), '-al'] if self.parameterAsBool(parameters, self.SUMMARY_ONLY, context): arguments.append('-so') if self.parameterAsBool(parameters, self.NO_METADATA, context): arguments.append('-nomd') inLayer = self.parameterAsVectorLayer(parameters, self.INPUT, context) if inLayer is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) connectionString = GdalUtils.ogrConnectionString(inLayer.source(), context) arguments.append(connectionString) return arguments
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback, executing): """ Interprets a parameter as an OGR compatible source and layer name :param executing: """ if not executing and parameter_name in parameters and isinstance(parameters[parameter_name], QgsProcessingFeatureSourceDefinition): # if not executing, then we throw away all 'selected features only' settings # since these have no meaning for command line gdal use, and we don't want to force # an export of selected features only to a temporary file just to show the command! parameters = {parameter_name: parameters[parameter_name].source} input_layer = self.parameterAsVectorLayer(parameters, parameter_name, context) ogr_data_path = None ogr_layer_name = None if input_layer is None or input_layer.dataProvider().name() == 'memory': if executing: # parameter is not a vector layer - try to convert to a source compatible with OGR # and extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(ogr_data_path) else: #not executing - don't waste time converting incompatible sources, just return dummy strings #for the command preview (since the source isn't compatible with OGR, it has no meaning anyway and can't #be run directly in the command line) ogr_data_path = 'path_to_data_file' ogr_layer_name = 'layer_name' elif input_layer.dataProvider().name() == 'ogr': if executing: # parameter is a vector layer, with OGR data provider # so extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath(parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) else: #not executing - don't worry about 'selected features only' handling. It has no meaning #for the command line preview since it has no meaning outside of a QGIS session! ogr_data_path = GdalUtils.ogrConnectionStringAndFormatFromLayer(input_layer)[0] ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) else: # vector layer, but not OGR - get OGR compatible path # TODO - handle "selected features only" mode!! ogr_data_path = GdalUtils.ogrConnectionString(input_layer.dataProvider().dataSourceUri(), context) ogr_layer_name = GdalUtils.ogrLayerName(input_layer.dataProvider().dataSourceUri()) return ogr_data_path, ogr_layer_name
def getConsoleCommands(self, parameters, context, feedback, executing=True): connection = self.DB_CONNECTIONS[self.getParameterValue(self.DATABASE)] uri = uri_from_name(connection) if executing: # to get credentials input when needed uri = GeoDB(uri=uri).uri inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] shapeEncoding = self.getParameterValue(self.SHAPE_ENCODING) schema = str(self.getParameterValue(self.SCHEMA)) table = str(self.getParameterValue(self.TABLE)) pk = str(self.getParameterValue(self.PK)) pkstring = "-lco FID=" + pk primary_key = self.getParameterValue(self.PRIMARY_KEY) where = str(self.getParameterValue(self.WHERE)) wherestring = '-where "' + where + '"' gt = str(self.getParameterValue(self.GT)) overwrite = self.getParameterValue(self.OVERWRITE) append = self.getParameterValue(self.APPEND) addfields = self.getParameterValue(self.ADDFIELDS) launder = self.getParameterValue(self.LAUNDER) launderstring = "-lco LAUNDER=NO" skipfailures = self.getParameterValue(self.SKIPFAILURES) precision = self.getParameterValue(self.PRECISION) options = str(self.getParameterValue(self.OPTIONS)) arguments = [] arguments.append('-progress') arguments.append('--config PG_USE_COPY YES') if len(shapeEncoding) > 0: arguments.append('--config') arguments.append('SHAPE_ENCODING') arguments.append('"' + shapeEncoding + '"') arguments.append('-f') arguments.append('PostgreSQL') arguments.append('PG:"') for token in uri.connectionInfo(executing).split(' '): arguments.append(token) arguments.append('active_schema={}'.format(schema or 'public')) arguments.append('"') arguments.append(ogrLayer) arguments.append('-nlt NONE') arguments.append(GdalUtils.ogrLayerName(inLayer)) if launder: arguments.append(launderstring) if append: arguments.append('-append') if addfields: arguments.append('-addfields') if overwrite: arguments.append('-overwrite') if len(pk) > 0: arguments.append(pkstring) elif primary_key is not None: arguments.append("-lco FID=" + primary_key) if len(table) == 0: table = GdalUtils.ogrLayerName(inLayer).lower() if schema: table = '{}.{}'.format(schema, table) arguments.append('-nln') arguments.append(table) if skipfailures: arguments.append('-skipfailures') if where: arguments.append(wherestring) if len(gt) > 0: arguments.append('-gt') arguments.append(gt) if not precision: arguments.append('-lco PRECISION=NO') if len(options) > 0: arguments.append(options) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT) noData = self.getParameterValue(self.NO_DATA) rastext = str(self.getParameterValue(self.RAST_EXT)) if not rastext: rastext = QgsProcessingUtils.combineLayerExtents([inLayer]) opts = self.getParameterValue(self.OPTIONS) out = self.getOutputValue(self.OUTPUT) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] if noData is not None: noData = str(noData) arguments = [] arguments.append('-a') arguments.append(str(self.getParameterValue(self.FIELD))) arguments.append('-ot') arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)]) dimType = self.getParameterValue(self.DIMENSIONS) arguments.append('-of') arguments.append(GdalUtils.getFormatShortNameFromFilename(out)) regionCoords = rastext.split(',') try: rastext = [] rastext.append('-te') rastext.append(regionCoords[0]) rastext.append(regionCoords[2]) rastext.append(regionCoords[1]) rastext.append(regionCoords[3]) except IndexError: rastext = [] if rastext: arguments.extend(rastext) if dimType == 0: # size in pixels arguments.append('-ts') arguments.append(str(self.getParameterValue(self.WIDTH))) arguments.append(str(self.getParameterValue(self.HEIGHT))) else: # resolution in map units per pixel arguments.append('-tr') arguments.append(str(self.getParameterValue(self.WIDTH))) arguments.append(str(self.getParameterValue(self.HEIGHT))) if noData and len(noData) > 0: arguments.append('-a_nodata') arguments.append(noData) if opts: arguments.append('-co') arguments.append(opts) arguments.append('-l') print(GdalUtils.ogrLayerName(inLayer)) arguments.append(GdalUtils.ogrLayerName(inLayer)) arguments.append(ogrLayer) arguments.append(out) return ['gdal_rasterize', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) geometry = self.getParameterValue(self.GEOMETRY) field = self.getParameterValue(self.FIELD) multi = self.getParameterValue(self.MULTI) fields = self.getParameterValue(self.FIELDS) count = self.getParameterValue(self.COUNT) area = self.getParameterValue(self.AREA) stats = self.getParameterValue(self.STATS) statsatt = self.getParameterValue(self.STATSATT) options = self.getParameterValue(self.OPTIONS) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] layername = GdalUtils.ogrLayerName(inLayer) output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value output = GdalUtils.ogrConnectionString(outFile, context) arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') sql = "SELECT ST_Union({})".format(geometry) sqlOpts = '' if fields: sqlOpts += ',*' else: sqlOpts += ',{}'.format(field) if count: sqlOpts += ", COUNT({}) AS count".format(geometry) if stats: sqlOpts += ", SUM({0}) AS sum_diss, MIN({0}) AS min_diss, MAX({0}) AS max_diss, AVG({0}) AS avg_diss".format(statsatt) if area: sqlOpts += ", SUM(ST_Area({0})) AS area_diss, ST_Perimeter(ST_Union({0})) AS peri_diss".format(geometry) sql = '{}{} FROM {} GROUP BY {}'.format(sql, sqlOpts, layername, field) arguments.append(sql) if not multi: arguments.append('-explodecollections') if options is not None and len(options.strip()) > 0: arguments.append(options) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): connection = self.getParameterValue(self.DATABASE) uri = uri_from_name(connection) if self.processing: # to get credentials input when needed uri = GeoDB(uri=uri).uri inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] shapeEncoding = self.getParameterValue(self.SHAPE_ENCODING) ssrs = self.getParameterValue(self.S_SRS) tsrs = self.getParameterValue(self.T_SRS) asrs = self.getParameterValue(self.A_SRS) schema = self.getParameterValue(self.SCHEMA) table = self.getParameterValue(self.TABLE) pk = self.getParameterValue(self.PK) primary_key = self.getParameterValue(self.PRIMARY_KEY) geocolumn = self.getParameterValue(self.GEOCOLUMN) dim = self.DIMLIST[self.getParameterValue(self.DIM)] simplify = self.getParameterValue(self.SIMPLIFY) segmentize = self.getParameterValue(self.SEGMENTIZE) spat = self.getParameterValue(self.SPAT) if not spat: spat = QgsProcessingUtils.combineLayerExtents([inLayer]) clip = self.getParameterValue(self.CLIP) where = self.getParameterValue(self.WHERE) gt = self.getParameterValue(self.GT) overwrite = self.getParameterValue(self.OVERWRITE) append = self.getParameterValue(self.APPEND) addfields = self.getParameterValue(self.ADDFIELDS) launder = self.getParameterValue(self.LAUNDER) index = self.getParameterValue(self.INDEX) skipfailures = self.getParameterValue(self.SKIPFAILURES) promotetomulti = self.getParameterValue(self.PROMOTETOMULTI) precision = self.getParameterValue(self.PRECISION) options = self.getParameterValue(self.OPTIONS) arguments = [] arguments.append('-progress') arguments.append('--config PG_USE_COPY YES') if shapeEncoding: arguments.append('--config') arguments.append('SHAPE_ENCODING') arguments.append('"' + shapeEncoding + '"') arguments.append('-f') arguments.append('PostgreSQL') arguments.append('PG:"') for token in uri.connectionInfo(self.processing).split(' '): arguments.append(token) arguments.append('active_schema={}'.format(schema or 'public')) arguments.append('"') arguments.append("-lco DIM=" + dim) arguments.append(ogrLayer) arguments.append(GdalUtils.ogrLayerName(inLayer)) if index: arguments.append("-lco SPATIAL_INDEX=OFF") if launder: arguments.append("-lco LAUNDER=NO") if append: arguments.append('-append') if addfields: arguments.append('-addfields') if overwrite: arguments.append('-overwrite') if len(self.GEOMTYPE[self.getParameterValue(self.GTYPE)]) > 0: arguments.append('-nlt') arguments.append(self.GEOMTYPE[self.getParameterValue(self.GTYPE)]) if geocolumn: arguments.append("-lco GEOMETRY_NAME=" + geocolumn) if pk: arguments.append("-lco FID=" + pk) elif primary_key is not None: arguments.append("-lco FID=" + primary_key) if not table: table = GdalUtils.ogrLayerName(inLayer).lower() if schema: table = '{}.{}'.format(schema, table) arguments.append('-nln') arguments.append(table) if ssrs: arguments.append('-s_srs') arguments.append(ssrs) if tsrs: arguments.append('-t_srs') arguments.append(tsrs) if asrs: arguments.append('-a_srs') arguments.append(asrs) if spat: regionCoords = spat.split(',') arguments.append('-spat') arguments.append(regionCoords[0]) arguments.append(regionCoords[2]) arguments.append(regionCoords[1]) arguments.append(regionCoords[3]) if clip: arguments.append('-clipsrc spat_extent') if skipfailures: arguments.append('-skipfailures') if where: arguments.append('-where "' + where + '"') if simplify: arguments.append('-simplify') arguments.append(simplify) if segmentize: arguments.append('-segmentize') arguments.append(segmentize) if gt: arguments.append('-gt') arguments.append(gt) if promotetomulti: arguments.append('-nlt PROMOTE_TO_MULTI') if precision is False: arguments.append('-lco PRECISION=NO') if options: arguments.append(options) commands = [] if isWindows(): commands = [ 'cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments) ] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.getParameterValue(self.INPUT_LAYER) geometry = self.getParameterValue(self.GEOMETRY) field = self.getParameterValue(self.FIELD) multi = self.getParameterValue(self.MULTI) fields = self.getParameterValue(self.FIELDS) count = self.getParameterValue(self.COUNT) area = self.getParameterValue(self.AREA) stats = self.getParameterValue(self.STATS) statsatt = self.getParameterValue(self.STATSATT) options = self.getParameterValue(self.OPTIONS) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] layername = GdalUtils.ogrLayerName(inLayer) output = self.getOutputFromName(self.OUTPUT_LAYER) outFile = output.value output = GdalUtils.ogrConnectionString(outFile, context) arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') sql = "SELECT ST_Union({})".format(geometry) sqlOpts = '' if fields: sqlOpts += ',*' else: sqlOpts += ',{}'.format(field) if count: sqlOpts += ", COUNT({}) AS count".format(geometry) if stats: sqlOpts += ", SUM({0}) AS sum_diss, MIN({0}) AS min_diss, MAX({0}) AS max_diss, AVG({0}) AS avg_diss".format( statsatt) if area: sqlOpts += ", SUM(ST_Area({0})) AS area_diss, ST_Perimeter(ST_Union({0})) AS peri_diss".format( geometry) sql = '{}{} FROM {} GROUP BY {}'.format(sql, sqlOpts, layername, field) arguments.append(sql) if not multi: arguments.append('-explodecollections') if options is not None and len(options.strip()) > 0: arguments.append(options) commands = [] if isWindows(): commands = [ 'cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments) ] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getOgrCompatibleSource(self, parameter_name, parameters, context, feedback, executing): """ Interprets a parameter as an OGR compatible source and layer name :param executing: """ if not executing and parameter_name in parameters and isinstance( parameters[parameter_name], QgsProcessingFeatureSourceDefinition): # if not executing, then we throw away all 'selected features only' settings # since these have no meaning for command line gdal use, and we don't want to force # an export of selected features only to a temporary file just to show the command! parameters = {parameter_name: parameters[parameter_name].source} input_layer = self.parameterAsVectorLayer(parameters, parameter_name, context) ogr_data_path = None ogr_layer_name = None if input_layer is None or input_layer.dataProvider().name( ) == 'memory': if executing: # parameter is not a vector layer - try to convert to a source compatible with OGR # and extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath( parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName(ogr_data_path) else: #not executing - don't waste time converting incompatible sources, just return dummy strings #for the command preview (since the source isn't compatible with OGR, it has no meaning anyway and can't #be run directly in the command line) ogr_data_path = 'path_to_data_file' ogr_layer_name = 'layer_name' elif input_layer.dataProvider().name() == 'ogr': if executing: # parameter is a vector layer, with OGR data provider # so extract selection if required ogr_data_path = self.parameterAsCompatibleSourceLayerPath( parameters, parameter_name, context, QgsVectorFileWriter.supportedFormatExtensions(), feedback=feedback) ogr_layer_name = GdalUtils.ogrLayerName( input_layer.dataProvider().dataSourceUri()) else: #not executing - don't worry about 'selected features only' handling. It has no meaning #for the command line preview since it has no meaning outside of a QGIS session! ogr_data_path = GdalUtils.ogrConnectionStringAndFormatFromLayer( input_layer)[0] ogr_layer_name = GdalUtils.ogrLayerName( input_layer.dataProvider().dataSourceUri()) else: # vector layer, but not OGR - get OGR compatible path # TODO - handle "selected features only" mode!! ogr_data_path = GdalUtils.ogrConnectionString( input_layer.dataProvider().dataSourceUri(), context) ogr_layer_name = GdalUtils.ogrLayerName( input_layer.dataProvider().dataSourceUri()) return ogr_data_path, ogr_layer_name
def getConsoleCommands(self, parameters, context, feedback): connection = self.getParameterValue(self.DATABASE) uri = uri_from_name(connection) if self.processing: # to get credentials input when needed uri = GeoDB(uri=uri).uri inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] shapeEncoding = self.getParameterValue(self.SHAPE_ENCODING) ssrs = self.getParameterValue(self.S_SRS) tsrs = self.getParameterValue(self.T_SRS) asrs = self.getParameterValue(self.A_SRS) schema = self.getParameterValue(self.SCHEMA) table = self.getParameterValue(self.TABLE) pk = self.getParameterValue(self.PK) primary_key = self.getParameterValue(self.PRIMARY_KEY) geocolumn = self.getParameterValue(self.GEOCOLUMN) dim = self.DIMLIST[self.getParameterValue(self.DIM)] simplify = self.getParameterValue(self.SIMPLIFY) segmentize = self.getParameterValue(self.SEGMENTIZE) spat = self.getParameterValue(self.SPAT) if not spat: spat = QgsProcessingUtils.combineLayerExtents([inLayer]) clip = self.getParameterValue(self.CLIP) where = self.getParameterValue(self.WHERE) gt = self.getParameterValue(self.GT) overwrite = self.getParameterValue(self.OVERWRITE) append = self.getParameterValue(self.APPEND) addfields = self.getParameterValue(self.ADDFIELDS) launder = self.getParameterValue(self.LAUNDER) index = self.getParameterValue(self.INDEX) skipfailures = self.getParameterValue(self.SKIPFAILURES) promotetomulti = self.getParameterValue(self.PROMOTETOMULTI) precision = self.getParameterValue(self.PRECISION) options = self.getParameterValue(self.OPTIONS) arguments = [] arguments.append('-progress') arguments.append('--config PG_USE_COPY YES') if shapeEncoding: arguments.append('--config') arguments.append('SHAPE_ENCODING') arguments.append('"' + shapeEncoding + '"') arguments.append('-f') arguments.append('PostgreSQL') arguments.append('PG:"') for token in uri.connectionInfo(self.processing).split(' '): arguments.append(token) arguments.append('active_schema={}'.format(schema or 'public')) arguments.append('"') arguments.append("-lco DIM=" + dim) arguments.append(ogrLayer) arguments.append(GdalUtils.ogrLayerName(inLayer)) if index: arguments.append("-lco SPATIAL_INDEX=OFF") if launder: arguments.append("-lco LAUNDER=NO") if append: arguments.append('-append') if addfields: arguments.append('-addfields') if overwrite: arguments.append('-overwrite') if len(self.GEOMTYPE[self.getParameterValue(self.GTYPE)]) > 0: arguments.append('-nlt') arguments.append(self.GEOMTYPE[self.getParameterValue(self.GTYPE)]) if geocolumn: arguments.append("-lco GEOMETRY_NAME=" + geocolumn) if pk: arguments.append("-lco FID=" + pk) elif primary_key is not None: arguments.append("-lco FID=" + primary_key) if not table: table = GdalUtils.ogrLayerName(inLayer).lower() if schema: table = '{}.{}'.format(schema, table) arguments.append('-nln') arguments.append(table) if ssrs: arguments.append('-s_srs') arguments.append(ssrs) if tsrs: arguments.append('-t_srs') arguments.append(tsrs) if asrs: arguments.append('-a_srs') arguments.append(asrs) if spat: regionCoords = spat.split(',') arguments.append('-spat') arguments.append(regionCoords[0]) arguments.append(regionCoords[2]) arguments.append(regionCoords[1]) arguments.append(regionCoords[3]) if clip: arguments.append('-clipsrc spat_extent') if skipfailures: arguments.append('-skipfailures') if where: arguments.append('-where "' + where + '"') if simplify: arguments.append('-simplify') arguments.append(simplify) if segmentize: arguments.append('-segmentize') arguments.append(segmentize) if gt: arguments.append('-gt') arguments.append(gt) if promotetomulti: arguments.append('-nlt PROMOTE_TO_MULTI') if precision is False: arguments.append('-lco PRECISION=NO') if options: arguments.append(options) commands = [] if isWindows(): commands = ['cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments)] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback, executing=True): connection = self.DB_CONNECTIONS[self.getParameterValue(self.DATABASE)] uri = uri_from_name(connection) if executing: # to get credentials input when needed uri = GeoDB(uri=uri).uri inLayer = self.getParameterValue(self.INPUT_LAYER) ogrLayer = GdalUtils.ogrConnectionString(inLayer, context)[1:-1] shapeEncoding = self.getParameterValue(self.SHAPE_ENCODING) schema = str(self.getParameterValue(self.SCHEMA)) table = str(self.getParameterValue(self.TABLE)) pk = str(self.getParameterValue(self.PK)) pkstring = "-lco FID=" + pk primary_key = self.getParameterValue(self.PRIMARY_KEY) where = str(self.getParameterValue(self.WHERE)) wherestring = '-where "' + where + '"' gt = str(self.getParameterValue(self.GT)) overwrite = self.getParameterValue(self.OVERWRITE) append = self.getParameterValue(self.APPEND) addfields = self.getParameterValue(self.ADDFIELDS) launder = self.getParameterValue(self.LAUNDER) launderstring = "-lco LAUNDER=NO" skipfailures = self.getParameterValue(self.SKIPFAILURES) precision = self.getParameterValue(self.PRECISION) options = str(self.getParameterValue(self.OPTIONS)) arguments = [] arguments.append('-progress') arguments.append('--config PG_USE_COPY YES') if len(shapeEncoding) > 0: arguments.append('--config') arguments.append('SHAPE_ENCODING') arguments.append('"' + shapeEncoding + '"') arguments.append('-f') arguments.append('PostgreSQL') arguments.append('PG:"') for token in uri.connectionInfo(executing).split(' '): arguments.append(token) arguments.append('active_schema={}'.format(schema or 'public')) arguments.append('"') arguments.append(ogrLayer) arguments.append('-nlt NONE') arguments.append(GdalUtils.ogrLayerName(inLayer)) if launder: arguments.append(launderstring) if append: arguments.append('-append') if addfields: arguments.append('-addfields') if overwrite: arguments.append('-overwrite') if len(pk) > 0: arguments.append(pkstring) elif primary_key is not None: arguments.append("-lco FID=" + primary_key) if len(table) == 0: table = GdalUtils.ogrLayerName(inLayer).lower() if schema: table = '{}.{}'.format(schema, table) arguments.append('-nln') arguments.append(table) if skipfailures: arguments.append('-skipfailures') if where: arguments.append(wherestring) if len(gt) > 0: arguments.append('-gt') arguments.append(gt) if not precision: arguments.append('-lco PRECISION=NO') if len(options) > 0: arguments.append(options) commands = [] if isWindows(): commands = [ 'cmd.exe', '/C ', 'ogr2ogr.exe', GdalUtils.escapeAndJoin(arguments) ] else: commands = ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)] return commands