Beispiel #1
0
 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"')
Beispiel #2
0
    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)]
Beispiel #3
0
    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)]
Beispiel #4
0
    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)]
Beispiel #5
0
    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
Beispiel #6
0
    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
Beispiel #7
0
    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)]
Beispiel #8
0
    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)]
Beispiel #9
0
    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)]
Beispiel #10
0
    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)]
Beispiel #11
0
    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)]
Beispiel #12
0
    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)]
Beispiel #13
0
    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)]
Beispiel #14
0
    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)]
Beispiel #15
0
    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)]
Beispiel #16
0
    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)]
Beispiel #17
0
    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)]
Beispiel #18
0
    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)]
Beispiel #19
0
    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)]
Beispiel #20
0
    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)]
Beispiel #21
0
    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)]
Beispiel #22
0
    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)]
Beispiel #23
0
    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)]
Beispiel #24
0
    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
Beispiel #25
0
    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)]
Beispiel #26
0
    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)]
Beispiel #28
0
    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)]
Beispiel #29
0
    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
Beispiel #30
0
    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)]
Beispiel #31
0
    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)]
Beispiel #32
0
    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