Ejemplo n.º 1
0
    def __init__(self, output_path, raster_path, cover_path):
        # paths and source data
        self.output_path = output_path
        self.raster_group = groups.Group(gdal.Open(raster_path))
        self.cover_group = groups.Group(gdal.Open(cover_path))

        # geospatial reference
        self.geo_transform = self.raster_group.geo_transform
        self.projection = self.raster_group.projection
Ejemplo n.º 2
0
    def __init__(self, direction_path, accumulation_path, target_path):
        # paths and source data
        self.direction_group = groups.Group(gdal.Open(direction_path))
        self.accumulation_group = groups.Group(gdal.Open(accumulation_path))
        self.target_path = target_path

        # geospatial reference
        self.geo_transform = self.direction_group.geo_transform
        self.projection = self.direction_group.projection
Ejemplo n.º 3
0
    def __init__(self, raster_paths, statistics):
        # raster group
        self.group = groups.Group(*map(gdal.Open, raster_paths))

        # prepare statistics gathering
        self.actions = {}  # column_name: func_name, args
        percentile = None
        pattern = re.compile('(p)([0-9]+)')
        for statistic in statistics:
            # allow for different column name
            if ':' in statistic:
                column, statistic = statistic.split(':')
            else:
                column = statistic

            # determine the action
            match = pattern.match(statistic)
            if pattern.match(statistic):
                percentile = int(match.groups()[1])
                self.actions[column] = 'percentile', [percentile]
            else:
                self.actions[column] = statistic, []

        # keep convenient group properties available
        self.geo_transform = self.group.geo_transform
        self.no_data_value = self.group.no_data_value.item()

        # these kwargs are constant for the whole group
        self.kwargs = {
            'projection': self.group.projection,
            'no_data_value': self.no_data_value
        }
Ejemplo n.º 4
0
    def __init__(self, raster_path, output_path):
        # see class.__doc__
        azimuth = 216
        elevation = 57

        # put the input raster(s) in a group
        if os.path.isdir(raster_path):
            datasets = [
                gdal.Open(os.path.join(raster_path, path))
                for path in sorted(os.listdir(raster_path))
            ]
        else:
            datasets = [gdal.Open(raster_path)]
        self.group = groups.Group(*datasets)

        slope = math.tan(math.radians(elevation))
        m_per_px = self.group.geo_transform[1]

        dx = math.sin(math.radians(azimuth))
        dy = -math.cos(math.radians(azimuth))

        # calculate shift and corresponding elevation change
        self.ds = 1 / max(abs(dx), abs(dy))  # pixels
        self.dz = self.ds * slope * m_per_px  # meters
        self.dx = dx * self.ds  # pixels
        self.dy = dy * self.ds  # pixels

        # calculate margin for input data
        self.mz = 367  # gerbrandy tower, in meters
        ms = self.mz / slope / m_per_px  # pixels
        self.mx = int(math.copysign(math.ceil(abs(dx * ms)), dx))  # pixels
        self.my = int(math.copysign(math.ceil(abs(dy * ms)), dy))  # pixels

        self.output_path = output_path
Ejemplo n.º 5
0
    def __init__(self, table, raster_path, output_path, floor, **kwargs):
        # postgis
        self.postgis_source = postgis.PostgisSource(**kwargs)
        self.table = table

        # raster
        if isdir(raster_path):
            raster_datasets = [gdal.Open(join(raster_path, path))
                               for path in sorted(os.listdir(raster_path))]
        else:
            raster_datasets = [gdal.Open(raster_path)]
        self.raster_group = groups.Group(*raster_datasets)

        # properties
        self.projection = self.raster_group.projection
        self.geo_transform = self.raster_group.geo_transform
        self.no_data_value = self.raster_group.no_data_value.item()

        self.kwargs = {
            'projection': self.projection,
            'no_data_value': self.no_data_value,
        }

        # output
        self.output_path = output_path
        self.floor = floor
Ejemplo n.º 6
0
def line_up(source_path, raster_path, target_path, **kwargs):
    """
    Take linestrings from source and create target with height added.

    Source and target are both shapefiles.
    """
    # target
    if os.path.exists(target_path):
        if kwargs.pop('overwrite'):
            DRIVER.DeleteDataSource(str(target_path))
        else:
            logger.info('"%s" already exists. Use --overwrite.', target_path)
            return
    target = DRIVER.CreateDataSource(str(target_path))

    # rasters
    if os.path.isdir(raster_path):
        datasets = [
            gdal.Open(os.path.join(raster_path, path))
            for path in sorted(os.listdir(raster_path))
        ]
    else:
        datasets = [gdal.Open(raster_path)]
    raster = groups.Group(*datasets)

    # source
    source = datasources.PartialDataSource(source_path)

    process(raster=raster, source=source, target=target, **kwargs)
Ejemplo n.º 7
0
    def __init__(self, output_path, raster_path, cover_path):
        # paths and source data
        self.output_path = output_path

        # rasters
        if os.path.isdir(raster_path):
            raster_datasets = [
                gdal.Open(os.path.join(raster_path, path))
                for path in sorted(os.listdir(raster_path))
            ]
        else:
            raster_datasets = [gdal.Open(raster_path)]
        self.raster_group = groups.Group(*raster_datasets)
        self.cover_group = groups.Group(gdal.Open(cover_path))

        # properties
        self.projection = self.raster_group.projection
        self.geo_transform = self.raster_group.geo_transform
        self.no_data_value = self.raster_group.no_data_value
Ejemplo n.º 8
0
    def __init__(self, source_path, target_path):
        """ Init group. """
        if os.path.isdir(source_path):
            raster_datasets = [gdal.Open(os.path.join(source_path, path))
                               for path in sorted(os.listdir(source_path))]
        else:
            raster_datasets = [gdal.Open(source_path)]

        self.group = groups.Group(*raster_datasets)
        self.projection = self.group.projection
        self.geo_transform = self.group.geo_transform
        self.no_data_value = self.group.no_data_value

        self.target_path = target_path
Ejemplo n.º 9
0
    def __init__(self, output_path, raster_path, iterations):
        # paths and source data
        self.iterations = iterations
        self.output_path = output_path

        # rasters
        if os.path.isdir(raster_path):
            datasets = [gdal.Open(os.path.join(raster_path, path))
                        for path in sorted(os.listdir(raster_path))]
        else:
            datasets = [gdal.Open(raster_path)]
        self.raster_group = groups.Group(*datasets)

        # geospatial reference
        self.geo_transform = self.raster_group.geo_transform
        self.projection = self.raster_group.projection

        # data settings
        self.no_data_value = self.raster_group.no_data_value
Ejemplo n.º 10
0
 def __init__(self, raster_path, output_path):
     self.group = groups.Group(gdal.Open(raster_path))
     self.output_path = output_path
Ejemplo n.º 11
0
 def __init__(self, paths):
     self.groups = [groups.Group(gdal.Open(path)) for path in paths]