def testOgrConnectionStringAndFormat(self): context = QgsProcessingContext() output, outputFormat = GdalUtils.ogrConnectionStringAndFormat('d:/test/test.shp', context) self.assertEqual(output, '"d:/test/test.shp"') self.assertEqual(outputFormat, '"ESRI Shapefile"') output, outputFormat = GdalUtils.ogrConnectionStringAndFormat('d:/test/test.mif', context) self.assertEqual(output, '"d:/test/test.mif"') self.assertEqual(outputFormat, '"MapInfo File"')
def getConsoleCommands(self, parameters, context, feedback, executing=True): ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) if outputFormat == 'SQLite' and os.path.isfile(output): raise QgsProcessinException( self.tr('Output file "{}" already exists.'.format(output))) arguments = [] if outputFormat: arguments.append('-f {}'.format(outputFormat)) if options: arguments.append(options) arguments.append(output) arguments.append(ogrLayer) arguments.append(layerName) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): inLayer, inLayerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) maskLayer, maskLayerName = self.getOgrCompatibleSource( self.MASK, parameters, context, feedback, executing) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) arguments = [] arguments.append('-clipsrc') arguments.append(maskLayer) arguments.append('-clipsrclayer') arguments.append(maskLayerName) arguments.append(output) arguments.append(inLayer) arguments.append(inLayerName) if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): fields = self.parameterAsSource(parameters, self.INPUT, context).fields() ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) distance = self.parameterAsDouble(parameters, self.DISTANCE, context) side = self.parameterAsEnum(parameters, self.BUFFER_SIDE, context) fieldName = self.parameterAsString(parameters, self.FIELD, context) dissolve = self.parameterAsBool(parameters, self.DISSOLVE, context) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) other_fields = [] for f in fields: if f.name() == geometry: continue other_fields.append(f.name()) if other_fields: other_fields = ', {}'.format(','.join(other_fields)) else: other_fields = '' arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') if dissolve or fieldName: sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})) AS {}{} FROM '{}'".format( geometry, distance, side, geometry, other_fields, layerName) else: sql = "SELECT ST_SingleSidedBuffer({}, {}, {}) AS {}{} FROM '{}'".format( geometry, distance, side, geometry, other_fields, layerName) if fieldName: sql = '"{} GROUP BY {}"'.format(sql, fieldName) arguments.append(sql) if self.parameterAsBool(parameters, self.EXPLODE_COLLECTIONS, context): arguments.append('-explodecollections') if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) source = self.parameterAsSource(parameters, self.INPUT, context) extent = self.parameterAsExtent(parameters, self.EXTENT, context, source.sourceCrs()) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) arguments = [] arguments.append('-spat') arguments.append(str(extent.xMinimum())) arguments.append(str(extent.yMaximum())) arguments.append(str(extent.xMaximum())) arguments.append(str(extent.yMinimum())) arguments.append('-clipsrc spat_extent') arguments.append(output) arguments.append(ogrLayer) arguments.append(layerName) if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): input_layers = self.parameterAsLayerList(parameters, self.LAYERS, context) crs_field = self.parameterAsString(parameters, self.CRS_FIELD_NAME, context) crs_format = self.parameterAsEnum(parameters, self.CRS_FORMAT, context) target_crs = self.parameterAsCrs(parameters, self.TARGET_CRS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) layers = [] for layer in input_layers: if layer.type() != QgsMapLayer.RasterLayer: raise QgsProcessingException( self.tr('All layers must be raster layers!')) layers.append(layer.source()) arguments = [] arguments.append('-tileindex') arguments.append( self.parameterAsString(parameters, self.PATH_FIELD_NAME, context)) if self.parameterAsBool(parameters, self.ABSOLUTE_PATH, context): arguments.append('-write_absolute_path') if self.parameterAsBool(parameters, self.PROJ_DIFFERENCE, context): arguments.append('-skip_different_projection') if crs_field: arguments.append('-src_srs_name {}'.format(crs_field)) if crs_format: arguments.append('-src_srs_format {}'.format( self.modes[crs_format][1])) if target_crs.isValid(): arguments.append('-t_srs') arguments.append(GdalUtils.gdal_crs_string(target_crs)) if outFormat: arguments.append('-f {}'.format(outFormat)) arguments.append(output) arguments.append(' '.join(layers)) return [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): fields = self.parameterAsSource(parameters, self.INPUT, context).fields() ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) distance = self.parameterAsDouble(parameters, self.DISTANCE, context) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) other_fields = [] for f in fields: if f.name() == geometry: continue other_fields.append(f.name()) if other_fields: other_fields = ', {}'.format(','.join(other_fields)) else: other_fields = '' arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') sql = "SELECT ST_OffsetCurve({}, {}) AS {}{} FROM '{}'".format( geometry, distance, geometry, other_fields, layerName) arguments.append(sql) if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): arguments = [] inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context) arguments.append(inLayer.source()) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) arguments.append(output) if self.parameterAsBool(parameters, self.EIGHT_CONNECTEDNESS, context): arguments.append('-8') arguments.append('-b') arguments.append( str(self.parameterAsInt(parameters, self.BAND, context))) if outFormat: arguments.append('-f {}'.format(outFormat)) arguments.append(GdalUtils.ogrLayerName(output)) arguments.append( self.parameterAsString(parameters, self.FIELD, context)) commands = [] if isWindows(): commands = [ 'cmd.exe', '/C ', 'gdal_polygonize.bat', GdalUtils.escapeAndJoin(arguments) ] else: commands = [ 'gdal_polygonize.py', GdalUtils.escapeAndJoin(arguments) ] return commands
def getConsoleCommands(self, parameters, context, feedback, executing=True): ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) sql = self.parameterAsString(parameters, self.SQL, context) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) if not sql: raise QgsProcessingException( self. tr('Empty SQL. Please enter valid SQL expression and try again.' )) arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-sql') arguments.append(sql) dialect = self.dialects[self.parameterAsEnum(parameters, self.DIALECT, context)][1] if dialect: arguments.append('-dialect') arguments.append(dialect) if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): fields = self.parameterAsSource(parameters, self.INPUT, context).fields() ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) fieldName = self.parameterAsString(parameters, self.FIELD, context) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) other_fields = [] for f in fields: if f.name() == geometry: continue other_fields.append(f.name()) if other_fields: other_fields = ', {}'.format(','.join(other_fields)) else: other_fields = '' arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') tokens = [] if self.parameterAsBool(parameters, self.COUNT_FEATURES, context): tokens.append("COUNT({}) AS count".format(geometry)) if self.parameterAsBool(parameters, self.COMPUTE_AREA, context): tokens.append("SUM(ST_Area({0})) AS area, ST_Perimeter(ST_Union({0})) AS perimeter".format(geometry)) statsField = self.parameterAsString(parameters, self.FIELD, context) if statsField and self.parameterAsBool(parameters, self.COMPUTE_STATISTICS, context): tokens.append("SUM({0}) AS sum, MIN({0}) AS min, MAX({0}) AS max, AVG({0}) AS avg".format(statsField)) params = ','.join(tokens) if params: if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context): sql = "SELECT ST_Union({}) AS {}{}, {} FROM {} GROUP BY {}".format(geometry, geometry, other_fields, params, layerName, fieldName) else: sql = "SELECT ST_Union({}) AS {}, {}, {} FROM {} GROUP BY {}".format(geometry, geometry, fieldName, params, layerName, fieldName) else: if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context): sql = "SELECT ST_Union({}) AS {}{} FROM {} GROUP BY {}".format(geometry, geometry, other_fields, layerName, fieldName) else: sql = "SELECT ST_Union({}) AS {}, {} FROM {} GROUP BY {}".format(geometry, geometry, fieldName, layerName, fieldName) arguments.append(sql) if self.parameterAsBool(parameters, self.EXPLODE_COLLECTIONS, context): arguments.append('-explodecollections') if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]