def fig_fire_propagation(fire_prop: FirePropagation,
                         original_ignition: ty.Sequence[TimedPoint],
                         max_time: float = np.inf) -> display.GeoDataDisplay:
    """Reference fire display
    Figure terrain + ignition contour + ignition point"""
    gdd = display.GeoDataDisplay.pyplot_figure(
        fire_prop.environment.raster.combine(fire_prop.ignitions().slice(
            ["ignition"])),
        frame=(0., 0.))
    # gdd.draw_elevation_shade(with_colorbar=False, cmap=matplotlib.cm.terrain)
    # gdd.draw_wind_quiver()
    gdd.draw_ignition_shade(time_range=(0, max_time))
    gdd.draw_ignition_contour(with_labels=True,
                              cmap=matplotlib.cm.plasma,
                              time_range=(0, max_time))
    for o in original_ignition:
        gdd.draw_ignition_points(o)
    return gdd
now = datetime.datetime(2020, 1, 1, 0, 0).timestamp()
ignitionpoint1 = TimedPoint(482000, 6212000.0, now)
ignitionpoint2 = TimedPoint(482000 - 250, 6212000.0 + 1800, now)
ignitionpoint3 = TimedPoint(482000 + 2000, 6212000.0 + 2000, now)

fire_prop.set_ignition_point(ignitionpoint1)
fire_prop.set_ignition_point(ignitionpoint2)
fire_prop.set_ignition_point(ignitionpoint3)
# fire_prop.set_ignition_point(TimedPoint(575000.0, 6200000.0, 0))

propagation_end_time = now + 60 * 60 * 4
export_front = (7000, 7100)

fire_prop.propagate(propagation_end_time)

fire_prop.ignitions().write_to_file("demo_propagation_highres_firemap.tif")

filt_fire = fire_prop.ignitions().clone()
filt_fire.data["ignition"][filt_fire.data["ignition"] < export_front[0]] = 0
filt_fire.data["ignition"][filt_fire.data["ignition"] > export_front[1]] = 0
filt_fire.data["ignition"][filt_fire.data["ignition"].nonzero()] = 65535
filt_fire.write_to_image_file("demo_propagation_highres_firemap_" +
                              str(export_front[0]) + "-" +
                              str(export_front[1]) + ".png",
                              layer_name="ignition")

fire_env.raster.write_to_file("demo_propagation_highres_dem.tif", "elevation")

# Figure terrain + ignition contour + ignition point
gdd = display.GeoDataDisplay.pyplot_figure(fire_env.raster.combine(
    fire_prop.ignitions().slice(["ignition"])),
# Reference fire propagation
fire_env = Environment(area, 2., 3 * np.pi / 4, the_world)

fire_prop = FirePropagation(fire_env)
fire_prop.set_ignition_point(ignition)

propagation_end_time = 60 * 60 * 60
propagation_end_time = np.inf

fire_prop.propagate(propagation_end_time)

################################################################################
# Reference fire display
# Figure terrain + ignition contour + ignition point
gdd = display.GeoDataDisplay.pyplot_figure(
    fire_env.raster.combine(fire_prop.ignitions().slice(["ignition"])), frame=(0., 0.))
# gdd.draw_elevation_shade(with_colorbar=False, cmap=matplotlib.cm.terrain)
# gdd.draw_wind_quiver()
gdd.draw_ignition_contour(with_labels=True, cmap=matplotlib.cm.plasma)
gdd.draw_ignition_shade()
gdd.draw_ignition_points(ignition)
gdd.figure.show()

################################################################################
# Contour extraction
firemap = fire_prop.ignitions()

fire_image = np.ones(firemap.data.shape, dtype=np.float64) * np.NaN
firepoints = {}
# The ignition point is knwon
firepoints[fire_prop.ignitions().array_index((ignition[0], ignition[1]))] = ignition[2]
    # 6km by 6km around seganosa. Wind: 3m/s W->E

    # FIRE PROPAGATION
    ## Fire started 6 hours ago. Predict until 2 hours in the future
    fire_prop = FirePropagation(seganosa_fire_env)
    four_hours_ago = (datetime.datetime.now() - datetime.timedelta(hours=6)).timestamp()
    now = datetime.datetime.now().timestamp()
    four_hours_from_now = (datetime.datetime.now() + datetime.timedelta(hours=2)).timestamp()
    fire_start = TimedPoint(2802134.0 - 1500.0, 2299388.0, four_hours_ago)
    fire_prop.set_ignition_point(fire_start)

    fire_prop.propagate(until=four_hours_from_now)

    ## Figure terrain + ignition contour + ignition point
    gdd = display.GeoDataDisplay.pyplot_figure(
        seganosa_fire_env.raster.combine(fire_prop.ignitions().slice(["ignition"])),
        frame=(0., 0.))
    gdd.draw_elevation_shade(with_colorbar=False, cmap=matplotlib.cm.terrain)
    gdd.draw_wind_quiver()
    gdd.draw_ignition_contour(with_labels=True, cmap=matplotlib.cm.plasma)
    gdd.draw_ignition_points(fire_start)

    # gdd.figure.show()
    gdd.figure.savefig(".".join(("demo_seganosa_propagation", "svg")), dpi=150, bbox_inches='tight')

    # PLANNING
    ## Define the initial plan
    ## Takie off and landing at the same location: maximum flight time 45 minutes

    ## Utility map depen
    f_data = planning.make_fire_data(fire_prop.ignitions(), seganosa_fire_env.raster)
    elevation_path=FIRERS_DEM_DATA,
    wind_path=FIRERS_WIND_DATA,
    landcover_path=FIRERS_LANDCOVER_DATA,
    wind_mesh_resolution='fine',
    landcover_to_fuel_remap=g_environment.CONSTANT_FUELMODEL_REMAP)
the_world.dem_wind_tile_split = 1

area = ((2776825.0 - 1500, 2776825.0 + 1500), (2212175.0 - 500,
                                               2212175.0 + 500))
ignition = TimedPoint(2776825.0, 2212175.0, 0)

fire_env = Environment(area, 0., 0, the_world)

fire_prop = FirePropagation(fire_env)
fire_prop.set_ignition_point(ignition)

propagation_end_time = 20 * 60 * 60

fire_prop.propagate(propagation_end_time)

# Figure terrain + ignition contour + ignition point
gdd = display.GeoDataDisplay.pyplot_figure(fire_env.raster.combine(
    fire_prop.ignitions().slice(["ignition"])),
                                           frame=(0., 0.))
gdd.draw_elevation_shade(with_colorbar=False, cmap=matplotlib.cm.terrain)
gdd.draw_wind_quiver()
gdd.draw_ignition_contour(with_labels=True, cmap=matplotlib.cm.plasma)
gdd.draw_ignition_points(ignition)

gdd.figure.show()
print("THE END")