/landfire-python

A simple (unofficial) lib for interacting with the Landfire API

Primary LanguagePythonMIT LicenseMIT

landfire-python

PyPI Status Python Version License

Read the documentation at https://landfire-python.firesci.io/ Tests Codecov

pre-commit Black

Features

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!

Supported LANDFIRE functionality

  • 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

Additional functionality

  • 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

Planned but not currently supported

  • 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

Requirements

Installation

pip install landfire

To use the geospatial tools found in geospatial.py, you'll need to install the extra dependencies:

pip install "landfire[geospatial]"

Usage

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!

Contributing

Contributions are very welcome! To learn more, see the contributor guide.

License

Distributed under the terms of the MIT license, landfire-python is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description!