def __add_dummy(self, ds: ogr.DataSource): '''Adds a dummy layer if needed''' if (ds.GetLayerCount() % 2 == 0 and self.chart in ['ctmed', 'cpmed', 'oimed']): self.need_dummy = True params = (self.const['burn_field'], self.const['land']) ds_dummy = make_dummy(self.aoi, 'LAND_DUMMY', params) layer = ds_dummy.GetLayer() ds.CopyLayer(layer, layer.GetName(), ['OVERWRITE=YES']) ds_dummy = None else: self.need_dummy = False
def __rasterize(self, ds: ogr.DataSource) -> gdal.Dataset: '''Rasterize and reprojects all layers into bands''' num_bands = 1 tif = create_tif('/vsimem/rasters.tif', self.extent, self.srs, self.pixel_size, ds.GetLayerCount()) set_nodata(tif, self.const['nodata']) for layer in ds: reproject(layer, self.srs) rasterize(layer, tif, num_bands, self.const['burn_field']) num_bands += 1 return tif
def is_datasource_valid(self, ds: ogr.DataSource) -> bool: layer_count = ds.GetLayerCount() if layer_count == 1: layer = ds.GetLayer(0) # Only one layer else: # TODO: add support return False defn = layer.GetLayerDefn() for i in range(defn.GetFieldCount()): field_name = defn.GetFieldDefn(i).GetName() if field_name.lower() == self.temporal_field: field_type_code = defn.GetFieldDefn(i).GetType() return field_type_code in self.DATETIME_TYPES return False
def update_from_ogr_data_source(self, ds: ogr.DataSource) -> None: layer_count = ds.GetLayerCount() if layer_count == 1: layer = ds.GetLayer(0) # Only one layer else: # TODO: add support return defn = layer.GetLayerDefn() self.layer_name = layer.GetName() fields = [] for i in range(defn.GetFieldCount()): field_name = defn.GetFieldDefn(i).GetName() field_type_code = defn.GetFieldDefn(i).GetType() fields.append(field_name) if field_name.lower() in self.DATETIME_FIELDS: if field_type_code not in self.DATETIME_TYPES: self.time_field_idx = i self.fields = fields