Exemplo n.º 1
0
    def processAlgorithm(self, parameters, context, feedback):
        source_lyr = self.parameterAsVectorLayer(parameters, self.INPUT, context)
        line_lyr = self.parameterAsVectorLayer(parameters, self.LINE, context)
        cell_size = self.parameterAsDouble(parameters, self.CELL_SIZE, context)
        search_radius = self.parameterAsDouble(parameters,
                                               self.SEARCH_RADIUS,
                                               context)
        area_unit = self.area_unit[self.parameterAsEnum(parameters,
                                                        self.AREA_UNIT,
                                                        context)][0]
        output_clm = self.parameterAsString(parameters, self.OUTPUT_COLUMN, context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        source_gdf = LUCISOpenQGISUtils.vector_to_gdf(source_lyr)
        line_gdf = LUCISOpenQGISUtils.vector_to_gdf(line_lyr)
        
        if search_radius:
            search_radius = (
                f'{search_radius} '
                f'{base.GeoDataFrameManager(source_gdf).geom_unit_name}'
            )

        source_gdf[output_clm] = density.of_line(source_gdf, line_gdf, cell_size,
                                                 search_radius, area_unit)
        source_gdf.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 2
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        point_lyr = self.parameterAsVectorLayer(parameters, self.POINT,
                                                context)
        pop_clm = parameters[self.POP_COLUMN]
        search_radius = self.parameterAsDouble(parameters, self.SEARCH_RADIUS,
                                               context)
        area_unit = self.area_unit[self.parameterAsEnum(
            parameters, self.AREA_UNIT, context)][0]
        output_clm = self.parameterAsString(parameters, self.OUTPUT_COLUMN,
                                            context)
        output_shp = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                 context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        point_gdf = LUCISOpenQGISUtils.vector_to_gdf(point_lyr)
        if search_radius:
            search_radius = (
                f'{search_radius} '
                f'{base.GeoDataFrameManager(input_gdf).geom_unit_name}')
        input_gdf[output_clm] = density.of_point(input_gdf, point_gdf, pop_clm,
                                                 search_radius, area_unit)
        input_gdf.to_file(output_shp)
        return {self.OUTPUT: output_shp}
Exemplo n.º 3
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        line_lyr = self.parameterAsVectorLayer(parameters, self.LINE, context)
        cell_size = self.parameterAsDouble(parameters, self.CELL_SIZE, context)
        method = self.method[self.parameterAsEnum(parameters, self.METHOD,
                                                  context)][0]
        data_type = self.parameterAsEnum(parameters, self.DATA_TYPE, context)
        output_clm = self.parameterAsString(parameters, self.OUTPUT_COLUMN,
                                            context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)
        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        line_gdf = LUCISOpenQGISUtils.vector_to_gdf(line_lyr)
        data_type = int if data_type == 0 else float

        input_gdf[output_clm] = distance.to_line(input_gdf, line_gdf,
                                                 cell_size,
                                                 method).astype(data_type)

        input_gdf.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 4
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT, context)
        interpolate_lyr = self.parameterAsVectorLayer(parameters,
                                                      self.INTERPOLATE,
                                                      context)
        interpolate_clm = self.parameterAsString(parameters,
                                                 self.INTERPOLATE_FIELD,
                                                 context)
        power = self.parameterAsDouble(parameters, self.POWER, context)
        n_neighbor = self.parameterAsInt(parameters, self.NUMBER_NEIGHBOR,
                                         context)
        search_radius = self.parameterAsDouble(parameters, self.SEARCH_RADIUS,
                                               context)
        data_type = self.parameterAsEnum(parameters, self.DATA_TYPE, context)
        output_clm = self.parameterAsString(parameters, self.OUTPUT_FIELD, context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        feedback.pushInfo(str(search_radius))

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        interpolate_gdf = LUCISOpenQGISUtils.vector_to_gdf(interpolate_lyr)
        data_type = int if data_type == 0 else float
        input_gdf[output_clm] = interpolate.idw(input_gdf, interpolate_gdf,
                                                interpolate_clm, power,
                                                n_neighbor, search_radius,
                                                dtype=data_type)
        input_gdf.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 5
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(
            parameters, self.INPUT, context
        )
        raster_lyr = self.parameterAsRasterLayer(
            parameters, self.RASTER, context
        )
        value = self.parameterAsInt(parameters, self.VALUE, context)
        nodata = parameters[self.NODATA]
        method = self.method[self.parameterAsEnum(
            parameters, self.METHOD, context)
        ][0]
        data_type = self.parameterAsEnum(
            parameters, self.DATA_TYPE, context
        )
        output_clm = self.parameterAsString(
            parameters, self.OUTPUT_COLUMN, context
        )
        output_file = self.parameterAsOutputLayer(
            parameters, self.OUTPUT, context
        )

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        raster_path = raster_lyr.dataProvider().dataSourceUri()
        data_type = int if data_type == 0 else float

        input_gdf[output_clm] = distance.to_cell(
            input_gdf, raster_path, value, nodata, method, data_type
        )
        output = input_gdf.to_file(output_file)
        return {self.OUTPUT: output}
Exemplo n.º 6
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        erase_lyr = self.parameterAsVectorLayer(parameters, self.ERASE,
                                                context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        erase_gdf = LUCISOpenQGISUtils.vector_to_gdf(erase_lyr)
        output = geotools.erase(input_gdf, erase_gdf)

        output.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 7
0
    def processAlgorithm(self, parameters, context, feedback):
        target = self.parameterAsVectorLayer(parameters, self.TARGET, context)
        join = self.parameterAsVectorLayer(parameters, self.JOIN, context)
        op = self.op[self.parameterAsEnum(parameters, self.OP, context)][0]
        columns_agg = self.parameterAsString(parameters, self.COLUMNS_AGG,
                                             context)
        how = self.how[self.parameterAsEnum(parameters, self.HOW, context)][0]
        keep_all = self.parameterAsBoolean(parameters, self.KEEP_ALL, context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        process_util = LUCISOpenQGISUtils()

        aggs = (tuple(item.strip().split()) for item in columns_agg.split(";"))

        for column, statistic in aggs:
            process_util.to_agg_dict(column, statistic)

        target_gdf = LUCISOpenQGISUtils.vector_to_gdf(target)
        join_gdf = LUCISOpenQGISUtils.vector_to_gdf(join)
        output = geotools.spatial_join(target_gdf, join_gdf, op,
                                       process_util.agg_dict, how, keep_all)
        output.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 8
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        select_lyr = self.parameterAsVectorLayer(parameters, self.SELECT,
                                                 context)
        op = self.op_option[self.parameterAsEnum(parameters, self.OP,
                                                 context)][0].lower()
        within_dist = self.parameterAsDouble(parameters, self.DIST, context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        select_gdf = LUCISOpenQGISUtils.vector_to_gdf(select_lyr)
        output = geotools.select_by_location(input_gdf, select_gdf, op,
                                             within_dist)
        if not output.empty:
            output.to_file(output_file)
            return {self.OUTPUT: output_file}
        else:
            feedback.pushInfo('No features in input layer met the specified '
                              'spatial relationship. No output generated.')
Exemplo n.º 9
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        point_lyr = self.parameterAsVectorLayer(parameters, self.POINT,
                                                context)
        method = self.method[self.parameterAsEnum(parameters, self.METHOD,
                                                  context)][0]
        data_type = self.parameterAsEnum(parameters, self.DATA_TYPE, context)
        output_clm = self.parameterAsString(parameters, self.OUTPUT_COLUMN,
                                            context)
        output_shp = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                 context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        point_gdf = LUCISOpenQGISUtils.vector_to_gdf(point_lyr)
        data_type = int if data_type == 0 else float

        input_gdf[output_clm] = distance.to_point(input_gdf, point_gdf, method,
                                                  data_type)
        input_gdf.to_file(output_shp)
        return {self.OUTPUT: output_shp}
Exemplo n.º 10
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT, context)
        input_clm = self.parameterAsString(parameters, self.INPUT_FIELD, context)
        old_val = self.parameterAsString(parameters, self.OLD_VALUE, context)
        new_val = self.parameterAsString(parameters, self.NEW_VALUE, context)
        nodata = parameters[self.NODATA]
        output_clm = self.parameterAsString(parameters, self.OUTPUT_COLUMN, context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import (LUCISOpenQGISUtils,
                            StringParameterNumberList,
                            StringParameterIntervalList,
                            StringParameterCategoryList)

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)

        try:
            re_key = StringParameterIntervalList(input_clm,
                                                 old_val).as_tuple_list
        except ValueError:
            try:
                re_key = StringParameterNumberList(input_clm,
                                                   old_val).as_number_list
            except ValueError:
                re_key = StringParameterCategoryList(input_clm,
                                                     old_val).as_category_list

        try:
            re_val = StringParameterNumberList(input_clm,
                                               new_val).as_number_list
        except ValueError:
            re_val = StringParameterCategoryList(input_clm,
                                                 new_val).as_category_list
        re_dict = dict(zip(re_key, re_val))
        if nodata:
            nodata = float(nodata)

        output = rescale.reclassify(input_gdf, input_clm, re_dict,
                                    output_clm, nodata)
        output.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 11
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        fields = self.parameterAsFields(parameters, self.FIELDS, context)
        weights = self.parameterAsString(parameters, self.WEIGHTS, context)
        output_clm = self.parameterAsString(parameters, self.OUTPUT_COLUMN,
                                            context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils, StringParameterNumberList

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        weights = StringParameterNumberList('weights', weights).as_number_list
        if len(fields) != len(weights):
            raise ValueError('Number of fields does not match the number of '
                             'weights provided.')
        fields_weights = dict(zip(fields, weights))

        input_gdf[output_clm] = utils.weighted_sum(input_gdf, fields_weights)
        input_gdf.to_file(output_file)
        return {self.OUTPUT: output_file}
Exemplo n.º 12
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        raster_lyr = self.parameterAsRasterLayer(parameters, self.RASTER,
                                                 context)
        stats = self.parameterAsString(parameters, self.STATS, context)
        output_clm_prefix = self.parameterAsString(parameters,
                                                   self.OUTPUT_COLUMN_PREFIX,
                                                   context)
        nodata = parameters[self.NODATA]
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        raster_path = raster_lyr.dataProvider().dataSourceUri()

        output = zonal.zonal_stats_raster(input_gdf, raster_path, stats,
                                          output_clm_prefix, nodata)
        output.to_file(output_file, driver="GPKG")
        return {self.OUTPUT: output_file}
Exemplo n.º 13
0
    def processAlgorithm(self, parameters, context, feedback):
        input_lyr = self.parameterAsVectorLayer(parameters, self.INPUT,
                                                context)
        input_clm = self.parameterAsString(parameters, self.INPUT_FIELD,
                                           context)
        start = parameters[self.START]
        end = parameters[self.END]
        output_min = self.parameterAsDouble(parameters, self.NEW_MIN, context)
        output_max = self.parameterAsDouble(parameters, self.NEW_MAX, context)
        output_clm = self.parameterAsString(parameters, self.OUTPUT_FIELD,
                                            context)
        output_file = self.parameterAsOutputLayer(parameters, self.OUTPUT,
                                                  context)

        sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
        from loqlib import LUCISOpenQGISUtils

        input_gdf = LUCISOpenQGISUtils.vector_to_gdf(input_lyr)
        output = rescale.linear(input_gdf, input_clm, output_clm, start, end,
                                output_min, output_max)

        output.to_file(output_file)
        return {self.OUTPUT: output_file}