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) 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 [self.commandName(), 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) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) extent = self.parameterAsExtent(parameters, self.EXTENT, context, source.sourceCrs()) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) 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 [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback): fields = self.parameterAsSource(parameters, self.INPUT, context).fields() ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback) distance = self.parameterAsDouble(parameters, self.DISTANCE, context) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) options = self.parameterAsString(parameters, self.OPTIONS, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) other_fields = [] for f in fields: if f.name() == geometry: continue other_fields.append(f.name()) arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') sql = "SELECT ST_Line_Interpolate_Point({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(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): 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): arguments = [] inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context) if inLayer is None: raise QgsProcessingException(self.invalidRasterError(parameters, self.INPUT)) 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 ', self.commandName() + '.bat', GdalUtils.escapeAndJoin(arguments)] else: commands = [self.commandName() + '.py', GdalUtils.escapeAndJoin(arguments)] return commands
def getConsoleCommands(self, parameters, context, feedback): ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback) 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): fields = self.parameterAsSource(parameters, self.INPUT, context).fields() ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback) 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()) 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, ','.join(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, ','.join(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)]
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) self.setOutputValue(self.OUTPUT, outFile) 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 [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) fields = source.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.parameterAsBoolean(parameters, self.DISSOLVE, context) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) 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 = ',*' 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.parameterAsBoolean(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): inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context) if inLayer is None: raise QgsProcessingException(self.invalidRasterError(parameters, self.INPUT)) fieldName = self.parameterAsString(parameters, self.FIELD_NAME, context) if self.NODATA in parameters and parameters[self.NODATA] is not None: nodata = self.parameterAsDouble(parameters, self.NODATA, context) else: nodata = None offset = self.parameterAsDouble(parameters, self.OFFSET, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) output, outFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) arguments = [] arguments.append('-b') arguments.append(str(self.parameterAsInt(parameters, self.BAND, context))) if fieldName: arguments.append('-a') arguments.append(fieldName) arguments.append('-i') arguments.append(str(self.parameterAsDouble(parameters, self.INTERVAL, context))) if self.parameterAsBoolean(parameters, self.CREATE_3D, context): arguments.append('-3d') if self.parameterAsBoolean(parameters, self.IGNORE_NODATA, context): arguments.append('-inodata') if nodata is not None: arguments.append('-snodata {}'.format(nodata)) if offset: arguments.append('-off {}'.format(offset)) options = self.parameterAsString(parameters, self.OPTIONS, context) if options: arguments.append(options) if outFormat: arguments.append('-f {}'.format(outFormat)) arguments.append(inLayer.source()) arguments.append(output) 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) 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_Buffer({}, {})) AS {}{} FROM '{}'".format(geometry, distance, geometry, other_fields, layerName) else: sql = "SELECT ST_Buffer({}, {}) AS {}{} FROM '{}'".format(geometry, distance, 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): 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) self.setOutputValue(self.OUTPUT, outFile) 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.formats[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): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) fields = source.fields() ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing) distance = self.parameterAsDouble(parameters, self.DISTANCE, context) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) options = self.parameterAsString(parameters, self.OPTIONS, 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 = ',*' else: other_fields = '' arguments = [] arguments.append(output) arguments.append(ogrLayer) arguments.append('-dialect') arguments.append('sqlite') arguments.append('-sql') sql = "SELECT ST_Line_Interpolate_Point({}, {}) 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): 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) self.setOutputValue(self.OUTPUT, outFile) output, outFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) 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.formats[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) # Always write input files to a text file in case there are many of them and the # length of the command will be longer then allowed in command prompt list_file = GdalUtils.writeLayerParameterToTextFile(filename='tile_index_files.txt', alg=self, parameters=parameters, parameter_name=self.LAYERS, context=context, quote=True, executing=executing) arguments.append('--optfile') arguments.append(list_file) return [self.commandName(), 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) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) 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 [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback): inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context) fieldName = self.parameterAsString(parameters, self.FIELD_NAME, context) nodata = self.parameterAsDouble(parameters, self.NODATA, context) offset = self.parameterAsDouble(parameters, self.OFFSET, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) arguments = [] arguments.append('-b') arguments.append(str(self.parameterAsInt(parameters, self.BAND, context))) if fieldName: arguments.append('-a') arguments.append(fieldName) arguments.append('-i') arguments.append(str(self.parameterAsDouble(parameters, self.INTERVAL, context))) if self.parameterAsBool(parameters, self.CREATE_3D, context): arguments.append('-3d') if self.parameterAsBool(parameters, self.IGNORE_NODATA, context): arguments.append('-inodata') if nodata: arguments.append('-snodata {}'.format(nodata)) if offset: arguments.append('-off {}'.format(offset)) if outFormat: arguments.append('-f {}'.format(outFormat)) arguments.append(inLayer.source()) arguments.append(output) return ['gdal_contour', GdalUtils.escapeAndJoin(arguments)]
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 [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context) fieldName = self.parameterAsString(parameters, self.FIELD_NAME, context) nodata = self.parameterAsDouble(parameters, self.NODATA, context) offset = self.parameterAsDouble(parameters, self.OFFSET, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output, outFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) arguments = [] arguments.append('-b') arguments.append(str(self.parameterAsInt(parameters, self.BAND, context))) if fieldName: arguments.append('-a') arguments.append(fieldName) arguments.append('-i') arguments.append(str(self.parameterAsDouble(parameters, self.INTERVAL, context))) if self.parameterAsBool(parameters, self.CREATE_3D, context): arguments.append('-3d') if self.parameterAsBool(parameters, self.IGNORE_NODATA, context): arguments.append('-inodata') if nodata: arguments.append('-snodata {}'.format(nodata)) if offset: arguments.append('-off {}'.format(offset)) if outFormat: arguments.append('-f {}'.format(outFormat)) arguments.append(inLayer.source()) arguments.append(output) return ['gdal_contour', GdalUtils.escapeAndJoin(arguments)]
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 in ('SQLite', 'GPKG') and os.path.isfile(output): raise QgsProcessingException(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): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) fields = source.fields() ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) distance = self.parameterAsDouble(parameters, self.DISTANCE, context) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) options = self.parameterAsString(parameters, self.OPTIONS, context) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) other_fields_exist = any(f for f in fields if f.name() != geometry) other_fields = ',*' if other_fields_exist else '' arguments = [ output, ogrLayer, '-dialect', 'sqlite', '-sql', f'SELECT ST_Line_Interpolate_Point({geometry}, {distance}) AS {geometry}{other_fields} FROM "{layerName}"' ] if options: arguments.append(options) if outputFormat: arguments.append(f'-f {outputFormat}') return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback): fields = self.parameterAsSource(parameters, self.INPUT, context).fields() ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback) distance = self.parameterAsDouble(parameters, self.DISTANCE, context) geometry = self.parameterAsString(parameters, self.GEOMETRY, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) options = self.parameterAsString(parameters, self.OPTIONS, 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_Line_Interpolate_Point({}, {}) 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): ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing) options = self.parameterAsString(parameters, self.OPTIONS, context) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) if outputFormat in ('SQLite', 'GPKG') and os.path.isfile(output): raise QgsProcessingException(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): 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): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) fields = source.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 = ',*' 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): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) fields = source.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 [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) if outputFormat in ('SQLite', 'GPKG') and os.path.isfile(output): raise QgsProcessingException('Output file "{}" already exists.'.format(output)) direction = self.parameterAsEnum(parameters, self.TRANSF, context) crs = self.parameterAsEnum(parameters, self.CRS, context) grid = self.parameterAsEnum(parameters, self.GRID, context) arguments = [] if direction == 0: # Direct transformation arguments.append('-t_srs') if crs == 0: arguments.append('EPSG:4258') gridFile = os.path.join(pluginPath, 'grids', 'chenyx06etrs.gsb') arguments.append('-s_srs') arguments.append('+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +nadgrids={} +wktext +units=m +no_defs'.format(gridFile)) arguments.append('-f {}'.format(outputFormat)) arguments.append('-lco') arguments.append('ENCODING=UTF-8') arguments.append(output) arguments.append(ogrLayer) arguments.append(layerName) else: arguments.append('+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +nadgrids=@null +wktext +units=m') gridFile = os.path.join(pluginPath, 'grids', 'CHENYX06a.gsb') arguments.append('-s_srs') arguments.append('+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +nadgrids={} +wktext +units=m +no_defs'.format(gridFile)) arguments.append('-f') arguments.append('Geojson') arguments.append('/vsistdout/') arguments.append(ogrLayer) arguments.append(layerName) arguments.append('-lco') arguments.append('ENCODING=UTF-8') arguments.append('|') arguments.append('ogr2ogr') arguments.append('-f {}'.format(outputFormat)) arguments.append('-a_srs') arguments.append('EPSG:2056') arguments.append(output) arguments.append('/vsistdin/') else: # Inverse transformation arguments = ['-s_srs'] if crs == 0: arguments.append('EPSG:4258') gridFile = os.path.join(pluginPath, 'grids', 'chenyx06etrs.gsb') arguments.append('-t_srs') arguments.append('+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +nadgrids={} +wktext +units=m +no_defs'.format(gridFile)) arguments.append('-f') arguments.append('Geojson') arguments.append('/vsistdout/') arguments.append(ogrLayer) arguments.append(layerName) arguments.append('-lco') arguments.append('ENCODING=UTF-8') arguments.append('|') arguments.append('ogr2ogr') arguments.append('-f {}'.format(outputFormat)) arguments.append('-a_srs') arguments.append('EPSG:21781') arguments.append(output) arguments.append('/vsistdin/') else: gridFile = os.path.join(pluginPath, 'grids', 'CHENYX06a.gsb') arguments.append('+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +nadgrids=@null +wktext +units=m') arguments.append('-t_srs') arguments.append('+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +nadgrids={} +wktext +units=m +no_defs'.format(gridFile)) arguments.append('-f') arguments.append('Geojson') arguments.append('/vsistdout/') arguments.append(ogrLayer) arguments.append(layerName) arguments.append('-lco') arguments.append('ENCODING=UTF-8') arguments.append('|') arguments.append('ogr2ogr') arguments.append('-f {}'.format(outputFormat)) arguments.append('-a_srs') arguments.append('EPSG:21781') arguments.append(output) arguments.append('/vsistdin/') if not os.path.isfile(os.path.join(pluginPath, 'grids', 'CHENYX06a.gsb')): urlretrieve('http://www.naturalgis.pt/downloads/ntv2grids/ch/CHENYX06a.gsb', os.path.join(pluginPath, 'grids', 'CHENYX06a.gsb')) urlretrieve('http://www.naturalgis.pt/downloads/ntv2grids/ch/chenyx06etrs.gsb', os.path.join(pluginPath, 'grids', 'chenyx06etrs.gsb')) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) fields = source.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) self.setOutputValue(self.OUTPUT, outFile) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) other_fields_exist = any(True for f in fields if f.name() != geometry) other_fields = ',*' if other_fields_exist else '' arguments = [ output, ogrLayer, '-nlt PROMOTE_TO_MULTI', '-dialect', 'sqlite', '-sql', ] tokens = [] if self.parameterAsBoolean(parameters, self.COUNT_FEATURES, context): tokens.append('COUNT({}) AS count'.format(geometry)) if self.parameterAsBoolean(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.STATISTICS_ATTRIBUTE, context) if statsField and self.parameterAsBoolean( 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: params = ', ' + params group_by = '' if fieldName: group_by = ' GROUP BY "{}"'.format(fieldName) if self.parameterAsBoolean(parameters, self.KEEP_ATTRIBUTES, context): sql = 'SELECT ST_Union({}) AS {}{}{} FROM "{}"{}'.format( geometry, geometry, other_fields, params, layerName, group_by) else: sql = 'SELECT ST_Union({}) AS {}{}{} FROM "{}"{}'.format( geometry, geometry, ', "{}"'.format(fieldName) if fieldName else '', params, layerName, group_by) arguments.append(sql) if self.parameterAsBoolean(parameters, self.EXPLODE_COLLECTIONS, context): arguments.append('-explodecollections') if options: arguments.append(options) if outputFormat: arguments.append('-f {}'.format(outputFormat)) return [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def processAlgorithm(self, parameters, context, feedback): feedback = QgsProcessingMultiStepFeedback(1, feedback) results = {} outputs = {} parameters['Slope'] = self.parameterAsRasterLayer( parameters, self.INPUT1, context).source() if parameters['Slope'] is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT1)) source = self.parameterAsVectorLayer(parameters, self.INPUT, context) parameters['Inventory'] = source.source() if parameters['Inventory'] is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) parameters['poly'] = self.parameterAsExtent(parameters, self.EXTENT, context) if parameters['poly'] is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.EXTENT)) parameters['BufferRadiousInPxl'] = self.parameterAsInt( parameters, self.NUMBER, context) if parameters['BufferRadiousInPxl'] is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.NUMBER)) parameters['minSlopeAcceptable'] = self.parameterAsInt( parameters, self.NUMBER1, context) if parameters['minSlopeAcceptable'] is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.NUMBER1)) #(parameters['out'],id,a)=self.parameterAsSink(parameters,self.OUTPUT,context,source.fields(),source.wkbType(),source.sourceCrs()) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) #self.setOutputValue(self.OUTPUT, outFile) parameters[ 'out'], outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) #parameters['out']= self.parameterAsVectorLayer(parameters,self.OUTPUT,context) if parameters['out'] is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.OUTPUT)) # Intersectionpoly alg_params = { 'INPUT_RASTER_LAYER': parameters['Slope'], 'INPUT_EXTENT': parameters['Extension'], 'INPUT_VECTOR_LAYER': parameters['Inventory'], 'INPUT_INT': parameters['BufferRadiousInPxl'], 'INPUT_INT_1': parameters['minSlopeAcceptable'], 'OUTPUT': parameters['out'] } self.extent(alg_params) self.importingandcounting(alg_params) self.indexing(alg_params) self.vector() del self.oout outputs['cleaninventory'] = self.saveV(alg_params) #results['out'] = outputs['cleaninventory']['OUTPUT'] del self.raster feedback.setCurrentStep(1) if feedback.isCanceled(): return {} return results
def getConsoleCommands(self, parameters, context, feedback, executing=True): ogrLayer, layerName = self.getOgrCompatibleSource( self.INPUT, parameters, context, feedback, executing) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat( outFile, context) if outputFormat in ('SQLite', 'GPKG') and os.path.isfile(output): raise QgsProcessingException( 'Output file "{}" already exists.'.format(output)) direction = self.parameterAsEnum(parameters, self.TRANSF, context) epsg = self.datums[self.parameterAsEnum(parameters, self.CRS, context)][1] grid = self.grids[self.parameterAsEnum(parameters, self.GRID, context)][1] found, text = pt_transformation(epsg, grid) if not found: raise QgsProcessingException(text) arguments = [] if direction == 0: # Direct transformation arguments.append('-s_srs') arguments.append(text) arguments.append('-t_srs') arguments.append('EPSG:3763') arguments.append('-f {}'.format(outputFormat)) arguments.append('-lco') arguments.append('ENCODING=UTF-8') arguments.append(output) arguments.append(ogrLayer) arguments.append(layerName) else: # Inverse transformation arguments = ['-s_srs'] arguments.append('EPSG:3763') arguments.append('-t_srs') arguments.append(text) arguments.append('-f') arguments.append('Geojson') arguments.append('/vsistdout/') arguments.append(ogrLayer) arguments.append(layerName) arguments.append('-lco') arguments.append('ENCODING=UTF-8') arguments.append('|') arguments.append('ogr2ogr') arguments.append('-f {}'.format(outputFormat)) arguments.append('-a_srs') arguments.append('EPSG:{}'.format(epsg)) arguments.append(output) arguments.append('/vsistdin/') if not os.path.isfile(os.path.join(pluginPath, 'grids', 'pt73_e89.gsb')): urlretrieve( 'http://www.naturalgis.pt/downloads/ntv2grids/pt/pt73_e89.gsb', os.path.join(pluginPath, 'grids', 'pt73_e89.gsb')) urlretrieve( 'http://www.naturalgis.pt/downloads/ntv2grids/pt/ptED_e89.gsb', os.path.join(pluginPath, 'grids', 'ptED_e89.gsb')) urlretrieve( 'http://www.naturalgis.pt/downloads/ntv2grids/pt/ptLB_e89.gsb', os.path.join(pluginPath, 'grids', 'ptLB_e89.gsb')) urlretrieve( 'http://www.naturalgis.pt/downloads/ntv2grids/pt/ptLX_e89.gsb', os.path.join(pluginPath, 'grids', 'ptLX_e89.gsb')) urlretrieve( 'http://www.naturalgis.pt/downloads/ntv2grids/pt/D73_ETRS89_geo.gsb', os.path.join(pluginPath, 'grids', 'D73_ETRS89_geo.gsb')) urlretrieve( 'http://www.naturalgis.pt/downloads/ntv2grids/pt/DLX_ETRS89_geo.gsb', os.path.join(pluginPath, 'grids', 'DLX_ETRS89_geo.gsb')) return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback, executing) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) self.setOutputValue(self.OUTPUT, outFile) output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) if outputFormat in ('SQLite', 'GPKG') and os.path.isfile(output): raise QgsProcessingException('Output file "{}" already exists.'.format(output)) direction = self.parameterAsEnum(parameters, self.TRANSF, context) src_crs = self.src_datums[self.parameterAsEnum(parameters, self.SRC_CRS, context)][1] dst_crs = self.dst_datums[self.parameterAsEnum(parameters, self.DST_CRS, context)][1] v = self.parameterAsEnum(parameters, self.ZONE, context) zone = '' if v == 0 else self.zones[v] old, new = au_transformation_gda(src_crs, dst_crs, zone) arguments = [] if direction == 0: # Direct transformation arguments = ['-s_srs'] arguments.append(old[0]) arguments.append('-t_srs') arguments.append(new[0]) arguments.append('-f') arguments.append('Geojson') arguments.append('/vsistdout/') arguments.append(ogrLayer) arguments.append(layerName) arguments.append('|') arguments.append('ogr2ogr') arguments.append('-f {}'.format(outputFormat)) arguments.append('-a_srs') arguments.append(new[1]) arguments.append(output) arguments.append('/vsistdin/') arguments.append('-lco') arguments.append('ENCODING=UTF-8') else: # Inverse transformation arguments = ['-s_srs'] arguments.append(new[0]) arguments.append('-t_srs') arguments.append(old[0]) arguments.append('-f') arguments.append('Geojson') arguments.append('/vsistdout/') arguments.append(ogrLayer) arguments.append(layerName) arguments.append('|') arguments.append('ogr2ogr') arguments.append('-f {}'.format(outputFormat)) arguments.append('-a_srs') arguments.append(old[1]) arguments.append(output) arguments.append('/vsistdin/') arguments.append('-lco') arguments.append('ENCODING=UTF-8') if not os.path.isfile(os.path.join(pluginPath, 'grids', 'GDA94_GDA2020_conformal.gsb')): urlretrieve('http://www.naturalgis.pt/downloads/ntv2grids/au/GDA94_GDA2020_conformal.gsb', os.path.join(pluginPath, 'grids', 'GDA94_GDA2020_conformal.gsb')) urlretrieve('http://www.naturalgis.pt/downloads/ntv2grids/au/GDA94_GDA2020_conformal_and_distortion.gsb', os.path.join(pluginPath, 'grids', 'GDA94_GDA2020_conformal_and_distortion.gsb')) return ['gdalwarp', GdalUtils.escapeAndJoin(arguments)]
def getConsoleCommands(self, parameters, context, feedback, executing=True): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) fields = source.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 = ',*' 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.STATISTICS_ATTRIBUTE, 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: params = ', ' + params group_by = '' if fieldName: group_by = ' GROUP BY {}'.format(fieldName) if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context): sql = "SELECT ST_Union({}) AS {}{}{} FROM '{}'{}".format(geometry, geometry, other_fields, params, layerName, group_by) else: sql = "SELECT ST_Union({}) AS {}{}{} FROM '{}'{}".format(geometry, geometry, ', ' + fieldName if fieldName else '', params, layerName, group_by) 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 [self.commandName(), GdalUtils.escapeAndJoin(arguments)]
def processAlgorithm(self, parameters, context, model_feedback): feedback = QgsProcessingMultiStepFeedback(1, model_feedback) results = {} outputs = {} #parameters['Out']='/tmp/nasa_1km3857clean_r6s3SE250m_statr4.shp' parameters['Slope'] = self.parameterAsRasterLayer(parameters, self.INPUT1, context).source() if parameters['Slope'] is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT1)) parameters['Inventory'] = self.parameterAsVectorLayer(parameters, self.INPUT, context).source() if parameters['Inventory'] is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) parameters['poly'] = self.parameterAsVectorLayer(parameters, self.EXTENT, context).source() if parameters['poly'] is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.EXTENT)) parameters['BufferRadiousInPxl'] = self.parameterAsInt(parameters, self.RADIUS, context) if parameters['BufferRadiousInPxl'] is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.RADIUS)) #parameters['out1']=self.parameterAsSink(parameters,self.OUTPUT,context) #if parameters['out1'] is None: # raise QgsProcessingException(self.invalidSourceError(parameters, self.OUTPUT)) outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) parameters['Out'], outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context) if parameters['Out'] is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.OUTPUT)) #parameters['Out'] = self.parameterAsSink( # parameters, # self.OUTPUT, # context) print('importing') alg_params = { 'INPUT': parameters['poly'], 'INPUT2': parameters['Slope'], 'INPUT3' : parameters['Inventory'] } raster,ds1,XY=self.importing(alg_params) outputs['raster'] = raster outputs['ds1'] = ds1 outputs['XY'] = XY print('indexing') alg_params = { 'INPUT': parameters['BufferRadiousInPxl'], 'INPUT3': outputs['raster'], 'INPUT2': outputs['XY'], 'INPUT1': outputs['ds1'] } XYcoord,attributi=self.indexing(alg_params) outputs['XYcoord'] = XYcoord outputs['attributi'] = attributi print('save') alg_params = { 'OUTPUT': parameters['Out'], 'INPUT2': outputs['XYcoord'], 'INPUT': outputs['ds1'], 'INPUT3': outputs['attributi'] } self.saveV(alg_params) # vlayer = QgsVectorLayer(parameters['Out'], 'vector', "ogr") # QgsProject.instance().addMapLayer(vlayer) # # Join attributes by location # alg_params = { # 'DISCARD_NONMATCHING': False, # 'INPUT': parameters['Inventory'], # 'JOIN': parameters['Out'], # 'JOIN_FIELDS': [''], # 'METHOD': 1, # 'PREDICAT4E': [2], # 'PREFIX': '', # 'OUTPUT': parameters['Out1'] # } # outputs['JoinAttributesByLocation'] = processing.run('native:joinattributesbylocation', alg_params, context=context, feedback=feedback, is_child_algorithm=True) # results['Out'] = outputs['JoinAttributesByLocation']['OUTPUT'] # vlayer = QgsVectorLayer(parameters['Out1'], 'vector', "ogr") # QgsProject.instance().addMapLayer(vlayer) feedback.setCurrentStep(1) if feedback.isCanceled(): return {} return results