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
示例#3
0
    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
示例#4
0
    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