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
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
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 }
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
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
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)
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
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
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
def __init__(self, raster_path, output_path): self.group = groups.Group(gdal.Open(raster_path)) self.output_path = output_path
def __init__(self, paths): self.groups = [groups.Group(gdal.Open(path)) for path in paths]