def set_median_predom(const: dict, layer: ogr.Layer, region: str, *unused):
    '''Set the Median Predominance burn-in value'''
    try:
        burn_field = const['burn_field']
        burn = ogr.FieldDefn(burn_field, ogr.OFTInteger)

        layer.CreateField(burn)

        # set burn-in values for each feature
        logging.info('setting median predominance')
        layer.ResetReading()
        for ft in layer:
            predominant = get_predom(const, ft)
            ft.SetField(burn_field, predominant)
            layer.SetFeature(ft)

    except Exception as e:
        raise baseException(
            f'could not set values in {layer.GetName()} for median predominance',
            baseException.ERR_CODE_LEVEL, e)
def set_median_ct(const: dict, layer: ogr.Layer, region: str, ice_type: str,
                  *unused):
    '''Set the Median Concentration burn-in value'''
    try:
        water, land, nodata = const['water'], const['land'], const['nodata']
        burn_field = const['burn_field']
        burn = ogr.FieldDefn(burn_field, ogr.OFTInteger)

        layer.CreateField(burn)

        # set burn-in values for each feature
        logging.info('setting median ct')
        layer.ResetReading()
        for ft in layer:
            fa = ft.GetField('FA')
            fb = ft.GetField('FB')
            fc = ft.GetField('FC')
            concn = ft.GetField(ice_type)

            if concn is None or concn == '':
                concn = water
            elif '08' in [fa, fb, fc] and concn in ['9.7', '10.0']:
                concn = '11.0'
            elif '07' in [fa, fb, fc] and concn == '10.0':
                concn = '10.0'
            ft.SetField(burn_field, int(float(concn)))

            pnt_type = ft.GetField('PNT_TYPE')
            if pnt_type in ['101', '115', '107']:
                ft.SetField(burn_field, water)
            elif pnt_type in ['400', '900']:
                ft.SetField(burn_field, land)
            elif pnt_type in ['123', '128', '133', '143']:
                ft.SetField(burn_field, nodata)

            layer.SetFeature(ft)

    except Exception as e:
        raise baseException(
            f'could not set values in {layer.GetName()} for median concentration',
            baseException.ERR_CODE_LEVEL, e)
Exemple #3
0
def set_frequency(const: dict,
                  layer: ogr.Layer,
                  region: str,
                  ice_type: str,
                  threshold: int = 1):
    '''Set the Frequency burn-in value'''
    try:
        water, nodata = const['water'], const['nodata']
        burn_field = const['burn_field']
        burn = ogr.FieldDefn(burn_field, ogr.OFTInteger)

        layer.CreateField(burn)

        # set burn-in values for each feature
        logging.info(f'setting frequency using threshold: {threshold}')
        layer.ResetReading()
        for ft in layer:
            pnt_type = ft.GetField('PNT_TYPE')
            concn = ft.GetField(ice_type)
            concn = 0.0 if not concn else float(concn)

            if pnt_type in ['101', '107', '115', '400', '900']:
                ft.SetField(burn_field, water)
            elif pnt_type in ['123', '128', '133', '143']:
                ft.SetField(burn_field, nodata)
            elif pnt_type in ['106', '117', '118', '120', '122', '144'
                              ] and concn >= float(threshold):
                ft.SetField(burn_field, 1)
            elif pnt_type in ['106', '117', '118', '120', '122', '144'
                              ] and concn < float(threshold):
                ft.SetField(burn_field, water)
            else:
                ft.SetField(burn_field, nodata)

            layer.SetFeature(ft)

    except Exception as e:
        raise baseException(
            f'could not set values in {layer.GetName()} for frequency',
            baseException.ERR_CODE_LEVEL, e)