finalfirevectors module¶
Module to project fire and ignition points to hexagon network. 1. user confirm whether there are multiple fires in each iteration: if yes, using spatialjoin_fire_iteration else, using spatialjoin_fire
- user confirm whether is processing spreading by day data: if yes, using module dailyfirevectors else, current module suffices
generate_fire_vectors(fireshp, ignition, hexagons, threshold=0, loopBy='fire', **kwargs)
¶
Generate fire spreading vectors from final fire spread perimeters
Parameters:
Name | Type | Description | Default |
---|---|---|---|
fireshp |
GeoDataFrame |
fire perimeter dataset with fire ID (and iteration ID) and geometry |
required |
ignition |
GeoDataFrame |
ignition point shapes with fire ID field in attributes |
required |
hexagons |
GeoDataFrame |
geometry of hexagonal patches with ID field |
required |
threshold |
float |
Value between 0 and 1. The proportion for classifying hexagon as intersecting with shp0. Defaults to 0. |
0 |
loopBy |
str |
loop by 'fire' of 'iteration'. Defaults to "fire". |
'fire' |
Returns:
Type | Description |
---|---|
DataFrame |
a dataframe table containing fire starting hexagon ID (i), destination hexagon ID (j), fire ID, and ignition hexagon ID |
Source code in postbp/finalfirevectors.py
def generate_fire_vectors(fireshp, ignition, hexagons, threshold = 0, loopBy = "fire", **kwargs):
"""Generate fire spreading vectors from final fire spread perimeters
Args:
fireshp (GeoDataFrame): fire perimeter dataset with fire ID (and iteration ID) and geometry
ignition (GeoDataFrame): ignition point shapes with fire ID field in attributes
hexagons (GeoDataFrame): geometry of hexagonal patches with ID field
threshold (float, optional): Value between 0 and 1. The proportion for classifying hexagon as intersecting with shp0. Defaults to 0.
loopBy (str, optional): loop by 'fire' of 'iteration'. Defaults to "fire".
Returns:
DataFrame: a dataframe table containing fire starting hexagon ID (i), destination hexagon ID (j), fire ID, and ignition hexagon ID
"""
hexagon = hexagons.copy()
if 'Node_ID' in kwargs:
hexagon = hexagon.rename(columns={kwargs["Node_ID"]: 'Node_ID'})
if loopBy == "iteration":
fire_vectors = _spatial_join(fireshp, ignition, hexagon, threshold, iteration=True)
if loopBy == "fire":
fire_vectors = _spatial_join(fireshp, ignition, hexagon, threshold, iteration=False)
fire_vectors = fire_vectors.reset_index(drop = True)
fire_vectors.drop(fire_vectors[fire_vectors['Node_ID_y'].isna()].index, inplace = True)
fire_vectors['Node_ID_x'] = fire_vectors['Node_ID_x'].astype(int)
fire_vectors['Node_ID_y'] = fire_vectors['Node_ID_y'].astype(int)
fire_vectors.columns = ['Node_ID_x', 'Node_ID_y', 'fire', 'iteration']
fire_vectors.rename(columns={'Node_ID_x':'column_j', 'Node_ID_y':'column_i'}, inplace=True)
return fire_vectors
pij_from_vectors(vectors, iterations)
¶
Group vector pair by i, j and calculate probability by dividing number of occurrence by number of iterations
Parameters:
Name | Type | Description | Default |
---|---|---|---|
vectors |
dataframe |
outputs from generate_fire_vectors function |
required |
iterations |
int |
number of iterations |
required |
Returns:
Type | Description |
---|---|
GeoDataFrame |
return a geodataframe with probability values for pairs of i, j on the landscape |
Source code in postbp/finalfirevectors.py
def pij_from_vectors(vectors, iterations):
"""Group vector pair by i, j and calculate probability by dividing number of occurrence by number of iterations
Args:
vectors (dataframe): outputs from generate_fire_vectors function
iterations (int): number of iterations
Returns:
GeoDataFrame: return a geodataframe with probability values for pairs of i, j on the landscape
"""
fire_pij = vectors.groupby(['column_j', 'column_i'])[['fire']].count()
fire_pij.reset_index(inplace = True)
fire_pij = fire_pij.drop(fire_pij[fire_pij['column_j'] == fire_pij['column_i']].index)
fire_pij['pij'] = fire_pij['fire'] / iterations
fire_pij['pij'] = fire_pij['pij'].round(7)
fire_pij['pij'] = fire_pij['pij'].apply(lambda x: '%.7f' % x)
fire_pij.rename(columns={'fire':'firecounts'},inplace=True)
fire_pij.sort_values(by = ['column_i', 'column_j'], inplace = True)
fire_pij.reset_index(drop=True, inplace=True)
return fire_pij