landfire-python
is a wrapper around the LANDFIRE Products Service API, allowing users to obtain any of the available LANDFIRE data layers with just a few lines of code. This library was initially built to faciliate automated data ingest for wildfire modeling and analysis internally at FireSci. However, we're happy to open-source and maintain this tool to enable broader user of LANDFIRE data across the wildfire community!
- Clipping requested data to a specific bounding box
- Reprojection of output data coordinate system to user-specified well-known integer ID format
- Specifying a list of data product layers and obtaining a multi-band .tif output
- Modifying the resampling resolution
- Search functionality to allow users to search for products by LANDFIRE version, name, product theme, product code, or availability regions (US, AK, HI). If you're a highly visual person, take a look at the LANDFIRE product availability table to find your layer(s) of interest.
- Geospatial helpers to obtain suitable bounding box from a GeoJSON polygon or file (GeoJSON, ESRI Shapefile, ESRIJSON, CSV, FlatGeobuf, SQLite)
- Robust model and enumerations of LANDFIRE products
- User input validation to reduce potential failed API jobs and server load
- Specifying edit rules for fuels data (requires a great deal of user-input validation)
- Specifying an edit mask for edit rules (requires more LANDFIRE API i/o implementation)
- Note the LANDFIRE API does not currently provide support for insular regions
- We will add new products here as they become available
- python >=3.8, <3.12
- attrs, pydantic, and requests will be installed when you install the lib
- Optional dependencies included in the
geospatial
extra are fiona, geojson and geopandas
pip install landfire
To use the geospatial tools found in geospatial.py
, you'll need to install the extra dependencies:
pip install "landfire[geospatial]"
The simplest possible example requires simply initializing a Landfire()
object for a bounding box of interest and then submitting a request for data with request_data()
, specifying the layers of interest and file location to download to (note that the file does not need to exist yet, but the path to the file should be valid).
This example downloads the minimum required layers to construct a landscape (.lcp) file for FlamMap.
import landfire
# Obtain required layers for FlamMap landscape file
lf = landfire.Landfire(bbox="-107.70894965 46.56799094 -106.02718124 47.34869094")
lf.request_data(layers=["ELEV2020", # elevation
"SLPD2020", # slope degrees
"ASP2020", # aspect
"220F40_22", # fuel models
"220CC_22", # canopy cover
"220CH_22", # canopy height
"220CBH_22", # canopy base height
"220CBD_22"], # canopy bulk density
output_path="./test_flammap.zip")
Please see the documentation for further information on possible options, geospatial utilities, and searching for products!
Contributions are very welcome! To learn more, see the contributor guide.
Distributed under the terms of the MIT license, landfire-python is free and open source software.
If you encounter any problems, please file an issue along with a detailed description!