Translation of foliar cover and surficial features maps to categorical vegetation map for Alaska and adjacent Canada circa 2023
Author: Timm W. Nawrocki, Alaska Center for Conservation Science, University of Alaska Anchorage
Created On: 2026-06-26
Last Updated: 2026-08-26
Description: Scripts for data preparation, geospatial translation, performance testing, and web visualizations for the conversion of foliar cover and surficial features maps to a categorical map of vegetation types corresponding to the U.S. National Vegetation Classification at 10-m resolution.
This repository contains the processing scripts, workflows, and spatial algorithms to translate foliar cover and surficial features maps to a categorical map of vegetation types at 10-m resolution for Alaska and adjacent Canada. These data are part of the Alaska Vegetation (AKVEG) Map and relate to groups and alliances in the U.S. National Vegetation Classification (USNVC). For a schema of the mapped types and relationships to USNVC groups and alliances, please see our class-descriptions repository.
This workflow is a core component of the AKVEG Map, which parses spatial distributions of vegetation types from continuous foliar cover maps and maps of surficial features, including abiotic surfaces, disturbance regimes, and ecological settings. This approach mirrors the conceptual relationship between ecological gradients and discrete types in vegetation classifications (i.e., non-spatial typologies). Our map class schema aligns with the USNVC. The raster attribute table of the vegetation map provides the USNVC groups and macrogroups corresponding to each mapped type to enable assessments at multiple ecological scales. The methods that we present are largely automated to facilitate repeat mapping at regular intervals for change detection. By uniting continuous maps with categorical classification, this suite of maps promotes flexibility for multiple applications, including quantitative statistical analyses, conservation planning, and natural resource management.
These instructions will enable you to run scripts to parse a categorical map from diagnostic species continuous foliar cover and surficial features maps. The scripts in this repository depend on finished geospatial products from other related repositories for foliar cover and surficial features map development. Some manually delineated data, such as a map domain, may need to be created or updated in GIS software. Reproducing the results will require creating comparable processing environments; however, we suggest that all software and packages be updated to the most recent available version. Field data used to train the models are queried from the publicly available AKVEG Database. For more information on the AKVEG Map, see the project website at https://akveg.org.
To execute the code successfully, you will need a Python geospatial processing environment. We recommend setting up a Python environment using a MiniForge installation. This workflow also requires a valid user account and project within Google Earth Engine to ingest and visualize maps within a web application. Software versions provided are the minimum tested versions for this workflow, but we suggest updating to the most recent available versions.
- numpy (v2.3.5) — Foundational array and matrix manipulation.
- pandas (v2.3.3) — Tabular data manipulation and reading/writing map class schemas.
- google-cloud-storage (v2.14.1) — Python interface to Google Cloud Storage to download/upload data.
- requests (v2.31.0) — HTTP client to programmatically download C-CAP impervious surface data.
- dbf (v0.99.3) — Interface to dBase database files to generate raster attribute tables.
- tqdm (v4.66.2) — Extensible progress bar for tracking loops and downloads.
- akutils (v1.2.4) — Utilities to simplify processing scripts.
- geopandas (v1.1.1) — Vector data processing and coordinate reference system management.
- gdal (v3.10.3) — Raster data processing in C++ with streaming to and from disk.
- rasterio (v1.4.4) — Raster manipulation, masking, and block processing.
- earthengine-api (v1.7.4) — Python interface to Google Earth Engine to programmatically ingest maps.
This repository contains the scripted workflow to translate continuous foliar cover and surficial feature maps into a discrete categorical vegetation map aligned with the groups and alliances of the USNVC. Folders and scripts are numbered to indicate the order of operations necessary for the successful execution of the workflow. The technical methods describe the flow of the numbered scripts:
The script 00_Convert_Domain.py establishes a raster valid data region, spatial extent, grid alignment, projection, and cell size for the categorical vegetation map. A manually created vector map domain (AlaskaYukon_CategoricalDomain_v2p1_3338.shp) is required as an input to this script so that the user can define the target domain. To guarantee alignment and prevent pixel offsets, the script snaps the vector bounding box to a 10 m reference grid derived from a project domain raster (AlaskaYukon_MapDomain_v2p1_10m_3338.tif). Alternatively, this script could be modified to snap to the (0,0) origin of the projection if there is no project domain raster. The result is a snapped, compressed, cloud-optimized geotiff (COG) map domain.
The script 01_Calculate_Vegetation_Summaries.py reads 10-m continuous foliar cover maps of diagnostic species sets representing coniferous trees, broadleaf trees, shrubs, dwarf shrubs, herbaceous species, mosses, and lichens. It calculates summary vegetation indicators as combinations of the inputs, including total tree cover, deciduous tree ratio, white spruce ratio, total shrub cover, non-dwarf shrub cover, ericaceous shrub cover, ericaceous dwarf shrub cover, wetland indicators, tussock ratio, and total herbaceous cover. These summaries are written as COG rasters matching the map domain and are referenced in the programmatic keys to distinguish the mapped types.
The script 02_Download_CCAP_Impervious.py programmatically downloads the National Oceanic and Atmospheric Administration (NOAA) Coastal Change Analysis Program (C-CAP) high-resolution impervious surface tiles for Alaska (Office for Coastal Management 2026) from Azure blob storage. Each tile is resampled to the target 10-m grid, aligned, and merged into a seamless Virtual Raster (VRT). The script then applies manual corrections using an infrastructure delete shapefile (override_infra_delete_3338.shp) to remove false detections (e.g., natural barrens or beach ridges falsely classified as impervious), generates a post-processed COG raster, and uploads the results to Google Cloud Storage (GCS) for further use.
A suite of 03_Prepare_*.py scripts processes ancillary topographic, physiographic, soil, climate, and disturbance datasets, aligning and resampling each to the target 10-m Alaska Albers Equal Area Conic raster grid as a COG:
- 03_Prepare_Alkaline.py: Extracts alkaline soil units from a manual alkaline shapefile, rasterizes them, and merges them to identify alkaline substrates. Future development of this script is required to evaluate and include more extensive alkaline soils across the map domain.
- 03_Prepare_Aspect.py: Subsets the solar radiation aspect raster to the categorical map domain.
- 03_Prepare_Dynamic_World.py: Extracts class percentages (water, flooded, barren, snow) from Dynamic World land cover composites as individual COG rasters.
- 03_Prepare_FireYear.py: Warps the historical fire burn year dataset to represent the most recent burn year (yyyy) per pixel. Values of 0 indicate no documented burn within the temporal coverage.
- 03_Prepare_Floodplain_Exclusion.py: Converts floodplain exclusion vector boundaries to raster to mask out areas incompatible with alluvial vegetation.
- 03_Prepare_Glacier_Correction.py: Rasterizes glaciated zones from manual correction polygons to enforce snow and ice classes where barren is incorrectly predicted.
- 03_Prepare_Infrastructure.py: Overlays and merges NSSI infrastructure vectors, LANDFIRE 2023 EVT, and the processed C-CAP impervious raster, applying deletion overrides to produce a seamless, multi-source 10-m infrastructure raster.
- 03_Prepare_Peat.py: Subsets a continuous peatland probability map (Jelinski et al. 2026) to the map domain.
- 03_Prepare_Polygonal_Range.py: Converts a polygon feature class of manually defined range of polygonal complexes to raster to define zones where patterned-ground complexes are expected to appear.
- 03_Prepare_Regions.py: Converts a vector feature class of USNVC vegetation regions (Nawrocki et al. 2026) to a raster by mapping region names to integer codes based on a lookup dictionary.
- 03_Prepare_Slope.py: Subsets a slope raster to the map domain.
- 03_Prepare_Snow_Exclusion.py: Converts manually digitized snow/ice exclusion polygons to a raster.
- 03_Prepare_Soil_Order.py: Subsets a dominant soil order raster from the Alaska Soil Data Bank (Jelinski et al. 2026) to the map domain.
- 03_Prepare_Subzone_C.py: Converts a manually adjusted Circumarctic Subzone C boundary to raster to constrain the extent of Arctic tussock tundra classes or complex.
- 03_Prepare_Water_Correction.py: Converts manually delineated water override polygons to raster to correct false land (e.g., barren) predictions over water bodies.
The script 04_Parse_Types.py is the core programmatic key to assign type labels to ranges of continuous ecological variation based on assignment rules. It divides the map domain into spatial processing grids to enable parallel processing across multiple virtual machines. For each tile grid, all input datasets are read into memory and processed to discrete types. The main programmatic key distinguishes broad ecological types based on vegetation structure and physiognomy as well as a subset of unique types or abiotic classes. The script relies on a series of sub-keys imported from the programmatic_keys/ folder to arrive at the final type assignments:
key_needleleaf.py: Rules for needleleaf forest and woodland types.key_broadleaf.py: Rules for broadleaf forest and woodland types.key_mixed.py: Rules for mixed needleleaf-broadleaf forest and woodland types.key_shrub.py: Rules for shrub- and dwarf shrub-dominated types.key_tussock.py: Rules for tussock and lichen tundra types.key_herbaceous.py: Rules for graminoid and forb meadows, herbaceous wetlands, and halophytic/beach vegetation.
After the types have been assigned in the tile, the type distributions are smoothed and a 0.75 acre (3,000 sq m) minimum mapping unit is applied.
The script 05_Postprocess_Types.py compiles individual gridded prediction tiles, merges them into a seamless map, and translates the output to a COG (types_10m_3338.tif). The script calculates a pixel value histogram using incremental block processing and writes a dBASE Value Attribute Table (types_10m_3338.tif.vat.dbf). The attribute table incorporates fields from the schema of mapped types, including relationships to USNVC groups and macrogroups. A .cpg file is written to force UTF-8 text encoding. Finally, the seamless raster, VAT, and CPG files are programmatically uploaded to GCS.
The script 06_Create_Colormap.py reads the pixel values in the raster attribute table DBF and the RGB hex colors specified in the schema of mapped types. It converts hex codes to RGB integers and writes a colormap file (types_10m_3338.clr) to apply default color styles to the categorical raster when viewed in a Geographic Information System (GIS) software.
Within the web_app/ subdirectory, scripts enable ingestion and cloud-based interactive visualization:
web_app/00_Ingest_Types_GEE.py: Uses the Google Earth Engine Python API to programmatically ingest the seamless map from Google Cloud Storage to an Earth Engine Asset.web_app/01_Create_Web_Viewer.js: A JavaScript-based GEE Web Application script. It loads the categorical map asset, styles it dynamically using a color palette evaluate-loaded from the schema of mapped types, and creates a dual-panel interface containing an Inspector Panel (interactive pixel-click query of raster attributes) and a scrolling AKVEG Type Legend.
This section describes the input datasets necessary to parse the categorical vegetation map and references the scripts that process them:
- Alaska-Yukon Map Domain: Vector shapefile (
AlaskaYukon_CategoricalDomain_v2p1_3338.shp) and reference raster (AlaskaYukon_MapDomain_v2p1_10m_3338.tif) defining the spatial extent and valid data area of the categorical map. Processed in00_Convert_Domain.py. - Continuous Foliar Cover Maps: 33 diagnostic species set foliar cover rasters and 6 diagnostic species set distribution rasters at 10 m resolution mapping continuous cover. Derived from statistical modeling in the foliar-cover repository. Processed in
01_Calculate_Vegetation_Summaries.pyand04_Parse_Types.py. - C-CAP High-Resolution Land Cover (NOAA): High-resolution impervious surface data for Alaska (Office of Coastal Management 2026), used to extract a footprint for developed areas. Processed in
02_Download_CCAP_Impervious.py. - gSSURGO Database (USDA NRCS): Gridded Soil Survey Geographic database for Alaska, queried for soil map units with alkaline characteristics. These data are mentioned in
03_Prepare_Alkaline.pybut not yet integrated into the output. - Dynamic World (Google/WRI): Derived snow-free season percentage summaries of near-real-time 10-m resolution global land cover dataset. Bands for water, flooded vegetation, barren, and snow percentages are extracted. Processed in
03_Prepare_Dynamic_World.py. - Alaska-Yukon Burn Year: Burn history records compiled across Alaska and adjacent Canada to extract the most recent wildfire burn year. Processed in
03_Prepare_FireYear.py. - North Slope Infrastructure Database (NSSI): Line and polygon geospatial records of gravel pads, pipelines, roads, and structures. Processed in
03_Prepare_Infrastructure.py. - LANDFIRE Existing Vegetation Type (EVT): National spatial dataset for vegetation and land cover (La Puma 2023), used for initial infrastructure masking. Processed in
03_Prepare_Infrastructure.py. - Alaska Soil Data Bank (AKSDB): Pre-processed products including Peat Probability (
Peat_Probability_Alaska_rf11.tif) and Dominant Soil Order (Dominant_Soil_Order_Alaska_rf11.tif; Jelinski et al. 2026). Processed in03_Prepare_Peat.pyand03_Prepare_Soil_Order.py. - USNVC Vegetation Regions: Geospatial feature class defining the 10 vegetation regions (Nawrocki et al. 2026) corresponding to geographies used to define macrogroups and groups in the USNVC. Processed in
03_Prepare_Regions.py. - Topography (Slope & Aspect): Topographic covariates generated from the 10-m elevation composite (see initial development scripts in the foliar-cover repository). Processed in
03_Prepare_Slope.pyand03_Prepare_Aspect.py. - Correction Overrides: Vector shapefiles representing manually delineated correction polygons to enforce proper assignment for glaciers, water, floodplain, snow/ice, and infrastructure. Processed across the respective
03_Prepare_*.pyscripts. - Map Class Schema CSV:
AKVEG_MapClass_Schema.csv(see class-descriptions repository) containing class codes, names, hierarchy, NVC relationships, and RGB hex codes. Processed in05_Postprocess_Types.pyand06_Create_Colormap.py.
If you use these scripts to process data for your research, you can cite this software repository:
Nawrocki, T.W. 2026. Categorical Vegetation Map for Alaska and Adjacent Canada. Available: [insert DOI]
If you use the foliar cover map data, please instead cite the data archive on NSF Arctic Data Center.
Funding support to complete this work was provided by the U.S. Fish and Wildlife Service (grant number F23AC02253) and Bureau of Land Management (grant numbers L22AC00519, L23AC00710). University of Alaska Anchorage provided funding to cover the costs associated with manuscript and data publication. The AKVEG Map is coordinated by the Alaska Vegetation Working Group of the Alaska Geospatial Council.
All scripts and configuration files in this repository are licensed under the MIT License. You are free to copy, modify, distribute, and use this software, including for private and commercial purposes. If you wish to re-distribute this code, please include the original copyright notice and permission notice in your code package.
We provide the following references to software and packages that we used to develop the AKVEG categorical map. Please refer to the "Prerequisites" section for a complete list of software and versions.
den Bossche, J.V., K. Jordahl, M. Fleischmann, M. Richards, J. McBride, J. Wasserman, A.G. Badaracco, A.D. Snow, P. Roggemans, B. Ward, et al. 2025. geopandas. Python package. Available: https://doi.org/10.5281/zenodo.2585848
Gillies, S., C. van der Well, J.V. den Bossche, M.W. Taves, J. Arnott, B.C. Ward, et al. 2025. shapely: Manipulation and analysis of geometric objects in the Cartesian plane. Python package. Available: https://doi.org/10.5281/zenodo.5597138
Gillies, S., et al. 2025. rasterio: geospatial raster I/O for Python programmers. Python package. Available: https://github.com/rasterio/rasterio
Google. 2026. Google API Client Library for Python (Version 2.x). Python package. Available: https://github.com/googleapis/google-api-python-client
Gorelick, N., M. Hancher, M. Dixon, S. Ilyushchenko, D. Thau, and R. Moore. 2017. Google earth engine: planetary-scale geospatial analysis for everyone. Remote Sensing of Environment 202:18–27.
Harris, C.R., K.J. Millman, S.J. van der Walt, R. Gommers, P. Virtanen, D. Cournapeau, E. Wieser, J. Taylor, S. Berg, N.J. Smith, et al. 2020. Array programming with NumPy. Nature. 585:357–362.
McKinney, W. 2010. Data Structures for Statistical Computing in Python. Proceedings of the 9th Python in Science Conference. 56–61.
Nawrocki, T.W. 2026a. akutils. Python package. Available: https://github.com/accs-uaa/akutils
Rouault, E., F. Warmerdam, K. Schwehr, A. Kiselev, H. Butler, M. Łoskot, T. Szekeres, E. Tourigny, M. Landa, I. Miara, et al. 2025. Geospatial Data Abstraction Library. Python package. Open Source Geospatial Foundation. Available: https://doi.org/10.5281/zenodo.5884351
Jelinski, N.A., T. Chen, Y. Lin, C.W. Brungard, S. Grunwald, S.L. Ives, M.J. Macander. T.W. Nawrocki, and Y. Chiang. 2026. Alaska Soil Data Bank v1-1 [dataset]. Available: https://aksoildatabank.org/
La Puma, I. (ed.). 2023. LANDFIRE Technical Documentation. Open-File Report 2023-1045. U.S. Geological Survey, U.S. Department of the Interior. Reston, Virginia. 103 pp. Available: https://doi.org/10.3133/ofr20231045
Nawrocki, T.W., L.A. Flagstad, A.F. Wells, G.V. Frost, M.T. Jorgenson, M.J. Macander, and T.V. Boucher. 2026. Bioclimatic zones and vegetation regions of Alaska and adjacent Canada for U.S. National Vegetation Classification [dataset]. NSF Arctic Data Center. Available: https://doi.org/10.18739/A2NP1WM5K
Office for Coastal Management. 2026. 2020-2023 C-CAP High-Resolution Impervious Cover [dataset]. Produced by Ecopia for National Oceanic and Atmospheric Administration (NOAA). Available: https://www.fisheries.noaa.gov/inport/item/70563.
