diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..1e6ad455
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,30 @@
+**/__pycache__
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+
+**/docs
+.github
+.venv
+PUBLIC
+Workspaces
diff --git a/.github/workflows/docs_publish.yml b/.github/workflows/docs_publish.yml
index a9d1ae25..02c6a272 100644
--- a/.github/workflows/docs_publish.yml
+++ b/.github/workflows/docs_publish.yml
@@ -22,21 +22,35 @@ jobs:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- # Runs a single command using the runners shell
- - name: Run a one-line script
- run: echo Hello, world!
-
- # Runs a set of commands using the runners shell
- - name: Run a multi-line script
- run: |
- echo Add other actions to build,
- echo test, and deploy your project.
-
-
- # Use GitHub Actions' cache to shorten build times and decrease load on servers
+ # Use GitHub Actions' cache to shorten build times and decrease load on servers
- uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
- ${{ runner.os }}-gems-
+ ${{ runner.os }}-gems-
+
+ - name: Set up Ruby 2.6
+ uses: actions/setup-ruby@v1
+ with:
+ ruby-version: 2.6
+
+
+ # Build each site
+ - name: Bundle install dependencies
+ run: sh scripts/docs-bundler.sh
+
+ - name: Publish sites
+ run: sh scripts/docs-publish.sh
+
+ # Custom Jekyll
+ - name: Deploy to GitHub Pages
+ if: success()
+ uses: crazy-max/ghaction-github-pages@v2
+ with:
+ target_branch: gh-pages
+ build_dir: PUBLIC
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+
diff --git a/.gitignore b/.gitignore
index f0b88636..901528ba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,8 @@ __pycache__/
# PUBLIC is where the GH pages branch gets built
PUBLIC
-
+# Ruby gems installed using bundler
+.vendor
# C extensions
*.so
_site
@@ -105,6 +106,7 @@ celerybeat.pid
# Environments
.env
+.env.*
.venv
env/
venv/
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..7e6ca868
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,126 @@
+############################################################################
+# RSTools Dockerbox
+# Author: Matt Reimer
+# Description: A working linux box that can run our riverscapes-tools
+############################################################################
+
+# We use OSGEO's ubuntu box as a base so we don't need to compile GDAL ourselves
+FROM osgeo/gdal:ubuntu-full-3.1.2 AS WORKER
+ARG DEBIAN_FRONTEND=noninteractive
+ARG CACHEBUST=1
+RUN apt-get update
+
+# Installing Prerequisite Packages
+# =======================================================================================
+RUN apt-get update && apt-get install vim git awscli curl locales -y
+
+# Our python scripts use UTF-8 so let's make sure we're in the right locale
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8
+ENV LANGUAGE en_US:en
+ENV LC_ALL en_US.UTF-8
+
+
+################################################################################################
+# TauDEM as a multi-stage install: DO all our compiling on a multi-stage build
+# Method borrowed from: https://github.com/NOAA-OWP/cahaba/blob/dev/Dockerfile.prod
+# https://hub.docker.com/r/osgeo/gdal/tags?page=1&ordering=last_updated&name=ubuntu-full-3.2.1
+################################################################################################
+
+FROM WORKER AS BUILDER
+WORKDIR /opt/builder
+ARG dataDir=/data
+ARG projectDir=/foss_fim
+ARG depDir=/dependencies
+ARG taudemVersion=bf9417172225a9ce2462f11138c72c569c253a1a
+ARG taudemVersion2=81f7a07cdd3721617a30ee4e087804fddbcffa88
+ENV DEBIAN_FRONTEND noninteractive
+ENV taudemDir=$depDir/taudem/bin
+ENV taudemDir2=$depDir/taudem_accelerated_flowDirections/taudem/build/bin
+
+RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
+
+RUN git clone https://github.com/dtarb/taudem.git
+RUN git clone https://github.com/fernandoa123/cybergis-toolkit.git taudem_accelerated_flowDirections
+
+RUN apt-get update && apt-get install -y cmake mpich \
+ libgtest-dev libboost-test-dev libnetcdf-dev && rm -rf /var/lib/apt/lists/*
+
+## Compile Main taudem repo ##
+RUN mkdir -p taudem/bin
+RUN cd taudem \
+ && git checkout $taudemVersion \
+ && cd src \
+ && make
+
+## Compile taudem repo with accelerated flow directions ##
+RUN cd taudem_accelerated_flowDirections/taudem \
+ && git checkout $taudemVersion2 \
+ && mkdir build \
+ && cd build \
+ && cmake .. \
+ && make
+
+RUN mkdir -p $taudemDir
+RUN mkdir -p $taudemDir2
+
+## Move needed binaries to the next stage of the image
+RUN cd taudem/bin && mv -t $taudemDir flowdircond aread8 threshold streamnet gagewatershed catchhydrogeo dinfdistdown pitremove
+RUN cd taudem_accelerated_flowDirections/taudem/build/bin && mv -t $taudemDir2 d8flowdir dinfflowdir
+
+
+################################################################################################
+# Now switch back to the worker and Copy the builder's scripts over
+################################################################################################
+FROM WORKER
+
+ARG depDir=/dependencies
+ARG taudemDir=$depDir/taudem/bin
+ARG taudemDir2=$depDir/taudem_accelerated_flowDirections/taudem/build/bin
+RUN mkdir -p $depDir
+COPY --from=builder $depDir $depDir
+
+# Add TauDEM to the path so we have access to those methods
+ENV PATH="${taudemDir}:${taudemDir2}:${PATH}"
+
+# Let's try adding gdal this way
+# RUN add-apt-repository ppa:ubuntugis/ppa && apt-get update
+RUN apt update --fix-missing
+RUN apt install -y p7zip-full python3-pip time mpich=3.3.2-2build1 parallel=20161222-1.1 libgeos-dev=3.8.0-1build1 expect=5.45.4-2build1 libspatialindex-dev
+RUN apt auto-remove
+
+# https://launchpad.net/~ubuntugis/+archive/ppa/
+# Install node please. Order matters here so it should come after all other apt-get update steps or it may be removed by a cleanup process
+RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
+RUN apt-get install -y nodejs
+RUN npm install -g npm
+RUN node --version
+RUN npm --version
+
+# Add in the right version of pip and modules
+# =======================================================================================
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install virtualenv
+
+# Now install riverscapes CLI
+ARG CACHEBREAKER3=121
+RUN npm -v
+RUN npm install -g @riverscapes/cli
+
+# Never run as root
+ARG GroupName=nar
+RUN addgroup $GroupName
+
+## Set user:group for running docker in detached mode
+USER root:$GroupName
+
+
+# Pull in the python libraries. We build it in a different stage to keep the id_rsa private
+# =======================================================================================
+COPY . /usr/local/riverscapes-tools
+WORKDIR /usr/local/riverscapes-tools
+RUN ./scripts/bootstrap.sh
+
+WORKDIR /shared
+
+ENTRYPOINT [ "sh", "/usr/local/riverscapes-tools/bin/run.sh"]
\ No newline at end of file
diff --git a/README.md b/README.md
index 17cf89b4..131ba9b5 100644
--- a/README.md
+++ b/README.md
@@ -13,4 +13,14 @@ Both `./lib` and `./packages` contain pep8-compliant python packages.
* `./lib` is for anything that can be shared between tools
* `./packages` is for the tools themselves. They cannot depend on one another.
-If you find that your tools have code they need to share you can either pull it into the `./lib/commons` package or, if there's enough code, create a new `./lib/whatever` package.
\ No newline at end of file
+If you find that your tools have code they need to share you can either pull it into the `./lib/commons` package or, if there's enough code, create a new `./lib/whatever` package.
+
+## Repo guidelines:
+
+We're pretty much using the [Gitflow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)
+
+1. All work ***MUST*** happen on branches.
+2. Make sure your pull requests merge onto `dev` and not `master`.
+3. Hotfixes may be applied directly to `master`... carefully and after lots of testing.
+4. Add your issue and/or pull request to a milestone to make sure it will be included.
+5. Attach your commits to issues and pull requests by [referencing them in commit messages](https://docs.github.com/en/enterprise/2.16/user/github/managing-your-work-on-github/closing-issues-using-keywords)
\ No newline at end of file
diff --git a/bin/requirements.txt b/bin/requirements.txt
new file mode 100644
index 00000000..951c4f77
--- /dev/null
+++ b/bin/requirements.txt
@@ -0,0 +1,55 @@
+affine==2.3.0
+appdirs==1.4.4
+astroid==2.4.2
+attrs==20.1.0
+autopep8==1.5.4
+awscli==1.18.97
+botocore==1.17.20
+click==7.1.2
+click-plugins==1.1.1
+cligj==0.5.0
+colorama==0.4.3
+Cython==0.29.7
+decorator==4.4.2
+distlib==0.3.1
+docutils==0.15.2
+filelock==3.0.12
+GDAL>=3.0
+html5print==0.1.2
+isort==5.4.2
+Jinja2==2.11.2
+jmespath==0.10.0
+lazy-object-proxy==1.4.3
+matplotlib==3.3.1
+mccabe==0.6.1
+networkx==2.5
+numpy==1.19.0
+postgis==1.0.4
+prompt-toolkit==1.0.14
+psycopg2-binary==2.8.5
+pyasn1==0.4.8
+pycodestyle==2.6.0
+pygeoprocessing==2.1.0
+Pygments==2.6.1
+PyInquirer==1.0.3
+pylint==2.6.0
+pyparsing==2.4.7
+python-dateutil==2.8.1
+PyYAML==5.3.1
+rasterio==1.1.5
+regex==2020.7.14
+rsa==4.5
+Rtree==0.9.4
+s3transfer==0.3.3
+scikit-fuzzy==0.4.2
+scipy==1.5.1
+semver==2.10.2
+Shapely==1.7.1
+six==1.15.0
+snuggs==1.4.7
+termcolor==1.1.0
+toml==0.10.1
+urllib3==1.25.9
+virtualenv==20.0.26
+wcwidth==0.2.5
+wrapt==1.12.1
diff --git a/bin/run.sh b/bin/run.sh
new file mode 100644
index 00000000..406fd2b0
--- /dev/null
+++ b/bin/run.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+set -eu
+IFS=$'\n\t'
+
+echo "$SHELL_SCRIPT" > /usr/local/runner.sh
+chmod +x /usr/local/runner.sh
+
+( exec "/usr/local/runner.sh" )
\ No newline at end of file
diff --git a/docs/CNAME b/docs/CNAME
new file mode 100644
index 00000000..0e58013c
--- /dev/null
+++ b/docs/CNAME
@@ -0,0 +1 @@
+tools.riverscapes.xyz
\ No newline at end of file
diff --git a/docs/_config.yml b/docs/_config.yml
index eca205f5..fbfbcf8d 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -26,6 +26,7 @@ defaults:
# Files/Folders to exclude from publishing
exclude:
+ - vendor
- src
- LICENSE
- README.md
diff --git a/docs/developing/Docker.md b/docs/developing/Docker.md
new file mode 100644
index 00000000..dcec00d1
--- /dev/null
+++ b/docs/developing/Docker.md
@@ -0,0 +1,12 @@
+---
+title: Running with Docker
+---
+
+This repo comes with a Dockerfile that you should be able to use to run these tools without any prerequisites (except docker of course)
+
+### building
+
+1. Run `./scripts/dockerBuild.sh`
+2. Make a script to run (i.e. `./scripts/testscript.sh`)
+3. Create an `.env`
+4. `./scripts/dockerRun.sh ~/Work/data/bratDockerShare ./scripts/testscript.sh `
\ No newline at end of file
diff --git a/docs/developing/Release_Checklist.md b/docs/developing/Release_Checklist.md
new file mode 100644
index 00000000..d62eb594
--- /dev/null
+++ b/docs/developing/Release_Checklist.md
@@ -0,0 +1,17 @@
+---
+title: Release Checklist
+---
+
+We're moving to monthly releases.
+
+1. [ ] resolve any `branch` -> `dev` pull requests
+1. [ ] Increment version numbers if necessary
+1. [ ] Create a pull request to merge dev --> master
+1. [ ] Run every tool once through cybercastor staging on `dev`
+1. [ ] Quick code review
+1. [ ] Merge the PR `dev` --> `master`
+
+-----------
+
+Out of order:
+
diff --git a/docs/index.md b/docs/index.md
index c19e6e3d..0f26023b 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -6,4 +6,6 @@ Tools:
* [VBET]({{ site.baseurl }}/vbet)
* [RSContext]({{ site.baseurl }}/rscontext)
-* [BRAT]({{ site.baseurl }}/brat)
\ No newline at end of file
+* [BRAT]({{ site.baseurl }}/brat)
+* [RVD]({{ site.baseurl }}/rvd)
+* [GNAT]({{ site.baseurl }}/gnat)
diff --git a/lib/commons/rscommons/__version__.py b/lib/commons/rscommons/__version__.py
index 5becc17c..6849410a 100644
--- a/lib/commons/rscommons/__version__.py
+++ b/lib/commons/rscommons/__version__.py
@@ -1 +1 @@
-__version__ = "1.0.0"
+__version__ = "1.1.0"
diff --git a/lib/commons/rscommons/build_network.py b/lib/commons/rscommons/build_network.py
index 9a74175b..df012345 100644
--- a/lib/commons/rscommons/build_network.py
+++ b/lib/commons/rscommons/build_network.py
@@ -12,12 +12,10 @@
#
# Date: 15 May 2019
# -------------------------------------------------------------------------------
-import os
-from osgeo import ogr, osr
-from rscommons import ProgressBar, Logger, get_shp_or_gpkg, VectorBase
-from rscommons.shapefile import get_geometry_union, get_transform_from_epsg
-from rscommons.vector_ops import get_geometry_unary_union as get_geometry_unary_union_NEW
-from typing import List, Dict
+from typing import List
+from osgeo import ogr
+from rscommons import Logger, get_shp_or_gpkg, VectorBase
+from rscommons.vector_ops import get_geometry_unary_union
# https://nhd.usgs.gov/userGuide/Robohelpfiles/NHD_User_Guide/Feature_Catalog/Hydrography_Dataset/Complete_FCode_List.htm
FCodeValues = {
@@ -32,159 +30,47 @@
55800: "artificial"
}
-artifical_reaches = '55800'
-
-
-def build_network(flowlines, flowareas, waterbodies, outpath, epsg,
- reach_codes, waterbody_max_size):
- """Copy a polyline feature class and filter out features that are
- not needed.
-
- Arguments:
- flowlines {str} -- Path to original NHD flow lines polyline ShapeFile
- flowareas {str} -- Path to polygon ShapeFile of large river channels
- waterbodies {str} -- Path to waterbodies polygon ShapeFile
- outpath {str} -- Path where the output polyline ShapeFile will be created
- epsg {int} -- Spatial reference of the output ShapeFile
- perennial {bool} -- True retains perennial channels. False discards them.
- intermittent {bool} -- True retians intermittent channels. False discards them.
- ephemeral {bool} -- True retains ephemeral channels. False discards them.
- waterbody_max_size {float} -- Maximum size of waterbodies that will have their
- flow lines retained.
+ARTIFICIAL_REACHES = '55800'
+
+
+def build_network(flowlines_path: str,
+ flowareas_path: str,
+ out_path: str,
+ epsg: int = None,
+ reach_codes: List[int] = None,
+ waterbodies_path: str = None,
+ waterbody_max_size=None,
+ create_layer: bool = True):
+ """[summary]
+
+ Args:
+ flowlines_path (str): [description]
+ flowareas_path (str): [description]
+ out_path (str): [description]
+ epsg (int, optional): [description]. Defaults to None.
+ reach_codes (List[int], optional): [description]. Defaults to None.
+ waterbodies_path (str, optional): [description]. Defaults to None.
+ waterbody_max_size ([type], optional): [description]. Defaults to None.
+ create_layer (bool, optional): [description]. Defaults to True.
+
+ Returns:
+ [type]: [description]
"""
log = Logger('Build Network')
- if os.path.isfile(outpath):
- log.info('Skipping building network because output exists {}'.format(outpath))
- return None
-
- log.info("Building network from flow lines {0}".format(flowlines))
-
- if reach_codes:
- [log.info('Retaining {} reaches with code {}'.format(FCodeValues[int(r)], r)) for r in reach_codes]
- else:
- log.info('Retaining all reaches. No reach filtering.')
-
- # Get the input flow lines layer
- driver = ogr.GetDriverByName("ESRI Shapefile")
- inDataSource = driver.Open(flowlines, 0)
- inLayer = inDataSource.GetLayer()
- inSpatialRef = inLayer.GetSpatialRef()
-
- # Get the transformation required to convert to the target spatial reference
- outSpatialRef, transform = get_transform_from_epsg(inSpatialRef, epsg)
-
- # Remove output shapefile if it already exists
- if os.path.exists(outpath):
- driver.DeleteDataSource(outpath)
-
- # Make sure the output folder exists
- resultsFolder = os.path.dirname(outpath)
- if not os.path.isdir(resultsFolder):
- os.mkdir(resultsFolder)
-
- # Create the output shapefile
- outDataSource = driver.CreateDataSource(outpath)
- outLayer = outDataSource.CreateLayer('network', outSpatialRef, geom_type=ogr.wkbMultiLineString)
-
- # Add input Layer Fields to the output Layer if it is the one we want
- inLayerDefn = inLayer.GetLayerDefn()
- for i in range(0, inLayerDefn.GetFieldCount()):
- fieldDefn = inLayerDefn.GetFieldDefn(i)
- outLayer.CreateField(fieldDefn)
-
- # Process all perennial/intermittment/ephemeral reaches first
- if reach_codes and len(reach_codes) > 0:
- [log.info("{0} {1} network features (FCode {2})".format('Retaining', FCodeValues[int(key)], key)) for key in reach_codes]
- inLayer.SetAttributeFilter("FCode IN ({0})".format(','.join([key for key in reach_codes])))
- inLayer.SetSpatialFilter(None)
-
- log.info('Processing all reaches')
- process_reaches(inLayer, outLayer, transform)
-
- # Process artifical paths through small waterbodies
- if waterbodies and waterbody_max_size:
- small_waterbodies = get_geometry_union(waterbodies, epsg, 'AreaSqKm <= ({0})'.format(waterbody_max_size))
- log.info('Retaining artificial features within waterbody features smaller than {0}km2'.format(waterbody_max_size))
- inLayer.SetAttributeFilter('FCode = {0}'.format(artifical_reaches))
- inLayer.SetSpatialFilter(VectorBase.shapely2ogr(small_waterbodies))
- process_reaches(inLayer, outLayer, transform)
-
- # Retain artifical paths through flow areas
- if flowareas:
- flow_polygons = get_geometry_union(flowareas, epsg)
- if flow_polygons:
- log.info('Retaining artificial features within flow area features')
- inLayer.SetAttributeFilter('FCode = {0}'.format(artifical_reaches))
- inLayer.SetSpatialFilter(VectorBase.shapely2ogr(flow_polygons))
- process_reaches(inLayer, outLayer, transform)
- else:
- log.info('Zero artifical paths to be retained.')
-
- log.info(('{:,} features written to {:}'.format(outLayer.GetFeatureCount(), outpath)))
- log.info('Process completed successfully.')
-
- # Save and close DataSources
- inDataSource = None
- outDataSource = None
-
-
-def process_reaches(inLayer, outLayer, transform):
- log = Logger('Process Reaches')
- # Get the output Layer's Feature Definition
- outLayerDefn = outLayer.GetLayerDefn()
-
- # Add features to the ouput Layer
- progbar = ProgressBar(inLayer.GetFeatureCount(), 50, "Processing Reaches")
- counter = 0
- progbar.update(counter)
- for inFeature in inLayer:
- counter += 1
- progbar.update(counter)
-
- # get the input geometry and reproject the coordinates
- geom = inFeature.GetGeometryRef()
- geom.Transform(transform)
-
- # Create output Feature
- outFeature = ogr.Feature(outLayerDefn)
-
- # Add field values from input Layer
- for i in range(0, outLayerDefn.GetFieldCount()):
- outFeature.SetField(outLayerDefn.GetFieldDefn(i).GetNameRef(), inFeature.GetField(i))
-
- # Add new feature to output Layer
- outFeature.SetGeometry(geom)
- outLayer.CreateFeature(outFeature)
- outFeature = None
-
- progbar.finish()
-
-# TODO: replace the above with this when BRAT no longer needs it
-
-
-def build_network_NEW(flowlines_path: str,
- flowareas_path: str,
- out_path: str,
- epsg: int = None,
- reach_codes: List[int] = None,
- waterbodies_path: str = None,
- waterbody_max_size=None):
-
- log = Logger('Build Network')
-
log.info("Building network from flow lines {0}".format(flowlines_path))
if reach_codes:
- [log.info('Retaining {} reaches with code {}'.format(FCodeValues[int(r)], r)) for r in reach_codes]
+ for r in reach_codes:
+ log.info('Retaining {} reaches with code {}'.format(FCodeValues[int(r)], r))
else:
log.info('Retaining all reaches. No reach filtering.')
# Get the transformation required to convert to the target spatial reference
- if (epsg is not None):
+ if epsg is not None:
with get_shp_or_gpkg(flowareas_path) as flowareas_lyr:
- out_spatial_ref, transform = flowareas_lyr.get_transform_from_epsg(epsg)
+ out_spatial_ref, transform = VectorBase.get_transform_from_epsg(flowareas_lyr.spatial_ref, epsg)
# Process all perennial/intermittment/ephemeral reaches first
attribute_filter = None
@@ -192,34 +78,35 @@ def build_network_NEW(flowlines_path: str,
[log.info("{0} {1} network features (FCode {2})".format('Retaining', FCodeValues[int(key)], key)) for key in reach_codes]
attribute_filter = "FCode IN ({0})".format(','.join([key for key in reach_codes]))
- with get_shp_or_gpkg(flowlines_path) as flowlines_lyr, get_shp_or_gpkg(out_path, write=True) as out_lyr:
- out_lyr.create_layer_from_ref(flowlines_lyr)
+ if create_layer is True:
+ with get_shp_or_gpkg(flowlines_path) as flowlines_lyr, get_shp_or_gpkg(out_path, write=True) as out_lyr:
+ out_lyr.create_layer_from_ref(flowlines_lyr)
log.info('Processing all reaches')
- process_reaches_NEW(flowlines_path, out_path, attribute_filter=attribute_filter)
+ process_reaches(flowlines_path, out_path, attribute_filter=attribute_filter)
# Process artifical paths through small waterbodies
if waterbodies_path is not None and waterbody_max_size is not None:
- small_waterbodies = get_geometry_unary_union_NEW(waterbodies_path, epsg, 'AreaSqKm <= ({0})'.format(waterbody_max_size))
+ small_waterbodies = get_geometry_unary_union(waterbodies_path, epsg, 'AreaSqKm <= ({0})'.format(waterbody_max_size))
log.info('Retaining artificial features within waterbody features smaller than {0}km2'.format(waterbody_max_size))
- process_reaches_NEW(flowlines_path,
- out_path,
- transform=transform,
- attribute_filter='FCode = {0}'.format(artifical_reaches),
- clip_shape=small_waterbodies
- )
+ process_reaches(flowlines_path,
+ out_path,
+ transform=transform,
+ attribute_filter='FCode = {0}'.format(ARTIFICIAL_REACHES),
+ clip_shape=small_waterbodies
+ )
# Retain artifical paths through flow areas
if flowareas_path:
- flow_polygons = get_geometry_unary_union_NEW(flowareas_path, epsg)
+ flow_polygons = get_geometry_unary_union(flowareas_path, epsg)
if flow_polygons:
log.info('Retaining artificial features within flow area features')
- process_reaches_NEW(flowlines_path,
- out_path,
- transform=transform,
- attribute_filter='FCode = {0}'.format(artifical_reaches),
- clip_shape=flow_polygons
- )
+ process_reaches(flowlines_path,
+ out_path,
+ transform=transform,
+ attribute_filter='FCode = {0}'.format(ARTIFICIAL_REACHES),
+ clip_shape=flow_polygons
+ )
else:
log.info('Zero artifical paths to be retained.')
@@ -228,9 +115,19 @@ def build_network_NEW(flowlines_path: str,
log.info(('{:,} features written to {:}'.format(out_lyr.ogr_layer.GetFeatureCount(), out_path)))
log.info('Process completed successfully.')
+ return out_spatial_ref
+
+def process_reaches(in_path: str, out_path: str, attribute_filter=None, transform=None, clip_shape=None):
+ """[summary]
-def process_reaches_NEW(in_path: str, out_path: str, attribute_filter=None, transform=None, clip_shape=None):
+ Args:
+ in_path (str): [description]
+ out_path (str): [description]
+ attribute_filter ([type], optional): [description]. Defaults to None.
+ transform ([type], optional): [description]. Defaults to None.
+ clip_shape ([type], optional): [description]. Defaults to None.
+ """
with get_shp_or_gpkg(in_path) as in_lyr, get_shp_or_gpkg(out_path, write=True) as out_lyr:
for feature, _counter, _progbar in in_lyr.iterate_features("Processing reaches", attribute_filter=attribute_filter, clip_shape=clip_shape):
# get the input geometry and reproject the coordinates
@@ -243,7 +140,10 @@ def process_reaches_NEW(in_path: str, out_path: str, attribute_filter=None, tran
# Add field values from input Layer
for i in range(0, out_lyr.ogr_layer_def.GetFieldCount()):
- out_feature.SetField(out_lyr.ogr_layer_def.GetFieldDefn(i).GetNameRef(), feature.GetField(i))
+ field_name = out_lyr.ogr_layer_def.GetFieldDefn(i).GetNameRef()
+ output_field_index = feature.GetFieldIndex(field_name)
+ if output_field_index >= 0:
+ out_feature.SetField(field_name, feature.GetField(output_field_index))
# Add new feature to output Layer
out_feature.SetGeometry(geom)
diff --git a/lib/commons/rscommons/classes/progress_bar.py b/lib/commons/rscommons/classes/progress_bar.py
index b73a4064..15dc1c1a 100644
--- a/lib/commons/rscommons/classes/progress_bar.py
+++ b/lib/commons/rscommons/classes/progress_bar.py
@@ -1,13 +1,9 @@
import sys
import time
-import gc
-import sys
-import glob
import shutil
import os
-from math import cos, sin, asin, sqrt, radians
from rscommons import Logger
-from rscommons.util import sizeof_fmt
+from rscommons.util import sizeof_fmt, pretty_duration
# Set if this environment variable is set don't show any UI
NO_UI = os.environ.get('NO_UI') is not None
@@ -18,7 +14,6 @@ class ProgressBar:
"""
def __init__(self, total, char_size=50, text=None, timer=500, byteFormat=False):
- self.log = Logger('ProgressBar')
self.char_size = char_size
self.text = text
self.byteFormat = byteFormat
@@ -42,13 +37,16 @@ def erase(self):
self.visible = False
def finish(self):
- self.erase()
+ if (self.start_time is None):
+ duration = "0s"
+ else:
+ duration = pretty_duration(int(time.time() - self.start_time))
if self.byteFormat:
- writestr = "Finished: {} {} \n".format(sizeof_fmt(self.total), self.text)
+ writestr = "Completed: {} Total Time: {} \n".format(sizeof_fmt(self.total), duration)
else:
- writestr = "Finished: {:,} {} \n".format(self.total, self.text)
- sys.stdout.write(writestr)
- sys.stdout.flush()
+ writestr = "Completed {:,} operations. Total Time: {} \n".format(self.total, duration)
+ log = Logger(self.text)
+ log.info(writestr)
def output(self):
first_time = False
@@ -56,17 +54,19 @@ def output(self):
first_time = True
self.start_time = time.time()
elapsed_time = 1000 * (time.time() - self.lastupdate)
+ dur_s = int(time.time() - self.start_time)
+ duration = pretty_duration(dur_s)
# For NO_UI we still want a keepalive signal but we don't want the quick-update progress bars
if NO_UI:
if first_time or elapsed_time > self.timer:
self.lastupdate = time.time()
writestr = ""
- time_since_begun = int(time.time() - self.start_time)
+
if self.byteFormat:
- writestr = " PROGRESS: {} / {} {} Ellapsed: {:n}s\n".format(sizeof_fmt(self.progress), sizeof_fmt(self.total), self.text, time_since_begun)
+ writestr = " PROGRESS: {} / {} {} (Ellapsed: {})\n".format(sizeof_fmt(self.progress), sizeof_fmt(self.total), self.text, duration)
else:
pct_done = int(100 * (self.progress / self.total))
- writestr = " PROGRESS: {:,} / {:,} ({}%) {} Ellapsed: {:n}s\n".format(self.progress, self.total, pct_done, self.text, time_since_begun)
+ writestr = " PROGRESS: {:,} / {:,} ({}%) {} (Ellapsed: {})\n".format(self.progress, self.total, pct_done, self.text, duration)
sys.stdout.write(writestr)
sys.stdout.flush()
return
@@ -79,9 +79,9 @@ def output(self):
self.erase()
writestr = ""
if self.byteFormat:
- writestr = "\r[{}{}] {} / {} {} \n".format('=' * done, ' ' * (50 - done), sizeof_fmt(self.progress), sizeof_fmt(self.total), self.text)
+ writestr = "\r[{}{}] {} / {} {} (Ellapsed: {}) \n".format('=' * done, ' ' * (50 - done), sizeof_fmt(self.progress), sizeof_fmt(self.total), self.text, duration)
else:
- writestr = "\r[{}{}] {:,} / {:,} {} \n".format('=' * done, ' ' * (50 - done), self.progress, self.total, self.text)
+ writestr = "\r[{}{}] {:,} / {:,} {} (Ellapsed: {}) \n".format('=' * done, ' ' * (50 - done), self.progress, self.total, self.text, duration)
if len(writestr) > tSize.columns - 1:
writestr = writestr[0:tSize.columns - 4] + ' \n'
diff --git a/lib/commons/rscommons/classes/raster.py b/lib/commons/rscommons/classes/raster.py
index acb78a45..c0de5ac1 100644
--- a/lib/commons/rscommons/classes/raster.py
+++ b/lib/commons/rscommons/classes/raster.py
@@ -1,12 +1,11 @@
+from __future__ import annotations
+from os import path
+import copy
+from affine import Affine
from osgeo import ogr, osr, gdal
import numpy as np
-import rasterio
from shapely.geometry import Polygon
-from os import path
from rscommons import Logger
-import copy
-import math
-from affine import Affine
class Raster:
@@ -70,6 +69,16 @@ def __init__(self, sfilename):
print('Could not retrieve meta Data for %s' % self.filename, e)
raise e
+ def __enter__(self) -> Raster:
+ """Behaviour on open when using the "with VectorBase():" Syntax
+ """
+ return self
+
+ def __exit__(self, _type, _value, _traceback):
+ """Behaviour on close when using the "with VectorBase():" Syntax
+ """
+ print('hi')
+
def getBottom(self):
return self.top + (self.cellHeight * self.rows)
diff --git a/lib/commons/rscommons/classes/rs_project.py b/lib/commons/rscommons/classes/rs_project.py
index 13f4338b..4271e28f 100644
--- a/lib/commons/rscommons/classes/rs_project.py
+++ b/lib/commons/rscommons/classes/rs_project.py
@@ -18,7 +18,7 @@
from rscommons import Logger
from rscommons.classes.xml_builder import XMLBuilder
from rscommons.util import safe_makedirs
-from rscommons.shapefile import copy_feature_class
+from rscommons.vector_ops import copy_feature_class
_folder_inputs = '01_Inputs'
@@ -290,6 +290,19 @@ def add_dataset(self, parent_node, path_val, rs_lyr, default_tag, replace=False,
return nod_dataset
def add_project_vector(self, parent_node, rs_lyr, copy_path=None, replace=False, att_filter=None):
+ """NOTE: this is for shapefiles only and we might be phasing it out. Ask yourself "Should I really
+ have shapefiles in my project?"
+
+ Args:
+ parent_node ([type]): The Eltree XML node to use as the parent
+ rs_lyr ([type]): The Layer object to use as an input
+ copy_path ([type], optional): Copy this layer to a shapefile. Defaults to None.
+ replace (bool, optional): [description]. Defaults to False.
+ att_filter ([type], optional): [description]. Defaults to None.
+
+ Returns:
+ [type]: [description]
+ """
log = Logger('add_project_vector')
file_path = os.path.join(os.path.dirname(self.xml_path), rs_lyr.rel_path)
@@ -306,12 +319,13 @@ def add_project_vector(self, parent_node, rs_lyr, copy_path=None, replace=False,
driver.DeleteDataSource(file_path)
if copy_path is not None:
- if not os.path.exists(copy_path):
- log.error('Could not find mandatory input "{}" shapefile at path "{}"'.format(rs_lyr.name, copy_path))
+ # TODO: need a good "layer exists" that covers both ShapeFile and GeoPackages
+ # if not os.path.exists(copy_path):
+ # log.error('Could not find mandatory input "{}" shapefile at path "{}"'.format(rs_lyr.name, copy_path))
log.info('Copying dataset: {}'.format(rs_lyr.name))
# Rasterio copies datasets efficiently
- copy_feature_class(copy_path, self.settings.OUTPUT_EPSG, file_path, attribute_filter=att_filter)
+ copy_feature_class(copy_path, file_path, self.settings.OUTPUT_EPSG, attribute_filter=att_filter)
log.debug('Shapefile Copied {} to {}'.format(copy_path, file_path))
nod_dataset = self.add_dataset(parent_node, file_path, rs_lyr, 'Vector', replace)
diff --git a/lib/commons/rscommons/classes/timer.py b/lib/commons/rscommons/classes/timer.py
index 54decb5e..5f05bf58 100644
--- a/lib/commons/rscommons/classes/timer.py
+++ b/lib/commons/rscommons/classes/timer.py
@@ -1,15 +1,21 @@
import time
+from rscommons.util import pretty_duration
class Timer:
def __init__(self):
+ self._start_time = None
+ self._stop_time = None
self.reset()
def reset(self):
self._start_time = time.perf_counter()
self._stop_time = None
- def ellapsed(self):
+ def toString(self) -> str:
+ return pretty_duration(self.ellapsed())
+
+ def ellapsed(self) -> int:
self._stop_time = time.perf_counter()
return self._stop_time - self._start_time
diff --git a/lib/commons/rscommons/classes/vector_base.py b/lib/commons/rscommons/classes/vector_base.py
index 9ebed67c..c33ea27f 100644
--- a/lib/commons/rscommons/classes/vector_base.py
+++ b/lib/commons/rscommons/classes/vector_base.py
@@ -267,7 +267,7 @@ def create_layer(self, ogr_geom_type: int, epsg: int = None, spatial_ref: osr.Sp
self.spatial_ref = spatial_ref
# Throw a warning if our axis mapping strategy is wrong
- self.check_axis_mapping()
+ VectorBase.check_axis_mapping(self.spatial_ref)
self.ogr_layer = self.ogr_ds.CreateLayer(self.ogr_layer_name, self.spatial_ref, geom_type=ogr_geom_type, options=options)
@@ -332,9 +332,10 @@ def _open_layer(self):
self.ogr_geom_type = self.ogr_layer.GetGeomType()
self.spatial_ref = self.ogr_layer.GetSpatialRef()
- self.check_axis_mapping()
+ VectorBase.check_axis_mapping(self.spatial_ref)
- def check_axis_mapping(self):
+ @staticmethod
+ def check_axis_mapping(spatial_ref: osr.SpatialReference):
"""Make sure our Axis Mapping strategy is correct (according to our arbitrary convention)
We set this in opposition to what GDAL3 Thinks is the default because that's what
most of our old Geodatabases and Shapefiles seem to use.
@@ -342,11 +343,11 @@ def check_axis_mapping(self):
Raises:
VectorBaseException: [description]
"""
- if self.spatial_ref is None:
- raise VectorBaseException('Layer not initialized. No spatial_ref found')
- if self.spatial_ref.GetAxisMappingStrategy() != osr.OAMS_TRADITIONAL_GIS_ORDER:
- _p4, axis_strat = self.get_srs_debug(self.spatial_ref)
- self.log.warning('Axis mapping strategy is: "{}". This may cause axis flipping problems'.format(axis_strat))
+ if spatial_ref is None:
+ raise VectorBaseException('No spatial_ref found to verify')
+ if spatial_ref.GetAxisMappingStrategy() != osr.OAMS_TRADITIONAL_GIS_ORDER:
+ _p4, axis_strat = VectorBase.get_srs_debug(spatial_ref)
+ VectorBase.log.warning('Axis mapping strategy is: "{}". This may cause axis flipping problems'.format(axis_strat))
def create_fields(self, fields: dict):
"""Add fields to a layer
@@ -360,7 +361,12 @@ def create_fields(self, fields: dict):
if fields is None or not isinstance(fields, dict):
raise VectorBaseException('create_fields: Fields must be specified in the form: {\'MyInteger\': ogr.OFTInteger}')
for fname, ftype in fields.items():
- self.create_field(fname, ftype)
+ # If it's a simple integer that's fine
+ if isinstance(ftype, int):
+ self.create_field(fname, field_type=ftype)
+ # Otherwise it's an OGR field type object
+ else:
+ self.create_field(fname, field_def=ftype)
def get_fields(self) -> dict:
""" Get a layer's fields as a simple dictionary
@@ -610,20 +616,18 @@ def get_transform_from_srs(self, out_srs: osr.SpatialReference) -> osr.Coordinat
return VectorBase.get_transform(self.spatial_ref, out_srs)
@staticmethod
- def get_transform(in_srs, out_srs):
+ def get_transform(in_srs: osr.SpatialReference, out_srs: osr.SpatialReference) -> osr.CoordinateTransformation:
"""[summary]
Args:
- in_srs ([type]): [description]
- out_srs ([type]): [description]
+ in_srs ([type]): input SRS
+ out_srs ([type]): output SRS
Raises:
VectorBaseException: [description]
- VectorBaseException: [description]
- VectorBaseException: [description]
Returns:
- [type]: [description]
+ [osr.CoordinateTransformation]: Transform
"""
if in_srs is None:
raise VectorBaseException('No input spatial ref found. Has this layer been created or loaded?')
@@ -643,34 +647,73 @@ def get_transform(in_srs, out_srs):
return transform
- def get_transform_from_epsg(self, epsg: int) -> (osr.SpatialReference, osr.CoordinateTransformation):
+ @staticmethod
+ def get_transform_from_epsg(in_srs: osr.SpatialReference, epsg: int) -> (osr.SpatialReference, osr.CoordinateTransformation):
"""Transform a spatial ref using an epsg code provided
This is done explicitly and includes a GetAxisMappingStrategy check to
account for GDAL3's projection differences.
Args:
- in_spatial_ref ([type]): [description]
+ in_srs ([type]): input SRS
epsg ([type]): [description]
Returns:
[type]: [description]
"""
- if self.spatial_ref is None:
+ if in_srs is None:
raise VectorBaseException('No input spatial ref found. Has this layer been created or loaded?')
out_spatial_ref = VectorBase.get_srs_from_epsg(epsg)
# https://github.com/OSGeo/gdal/issues/1546
- out_spatial_ref.SetAxisMappingStrategy(self.spatial_ref.GetAxisMappingStrategy())
+ # Set the axis mapping to be the same as the input. This might prove problematic in cases where the input is
+ out_spatial_ref.SetAxisMappingStrategy(in_srs.GetAxisMappingStrategy())
+
+ in_proj4, in_ax_strategy = VectorBase.get_srs_debug(in_srs)
+ out_proj4, out_ax_strategy = VectorBase.get_srs_debug(out_spatial_ref)
+
+ VectorBase.log.debug('Input spatial reference is "{}" Axis Strategy: "{}"'.format(in_proj4, in_ax_strategy))
+ VectorBase.log.debug('Output spatial reference is "{}" Axis Strategy: "{}"'.format(out_proj4, out_ax_strategy))
+
+ transform = VectorBase.get_transform(in_srs, out_spatial_ref)
+ return out_spatial_ref, transform
+
+ @staticmethod
+ def get_transform_from_raster(in_srs: osr.SpatialReference, raster_path: str) -> (osr.SpatialReference, osr.CoordinateTransformation):
+ """Get a transform between a given SRS and the SRS from a raster
+
+ Args:
+ in_srs ([type]): input SRS
+ osr ([type]): [description]
+
+ Raises:
+ VectorBaseException: [description]
+
+ Returns:
+ [type]: [description]
+ """
+
+ if in_srs is None:
+ raise VectorBaseException('No input spatial ref found. Has this layer been created or loaded?')
+
+ out_ds = gdal.Open(raster_path)
+ out_spatial_ref = osr.SpatialReference()
+ out_spatial_ref.ImportFromWkt(out_ds.GetProjectionRef())
+
+ in_proj4, in_ax_strategy = VectorBase.get_srs_debug(in_srs)
+ out_proj4, out_ax_strategy = VectorBase.get_srs_debug(out_spatial_ref)
+
+ # https://github.com/OSGeo/gdal/issues/1546
+ out_spatial_ref.SetAxisMappingStrategy(in_srs.GetAxisMappingStrategy())
- in_proj4, in_ax_strategy = self.get_srs_debug(self.spatial_ref)
- out_proj4, out_ax_strategy = self.get_srs_debug(out_spatial_ref)
+ VectorBase.log.debug('Input spatial reference is "{}" Axis Strategy: "{}"'.format(in_proj4, in_ax_strategy))
+ VectorBase.log.debug('Output spatial reference is "{}" Axis Strategy: "{}"'.format(out_proj4, out_ax_strategy))
- self.log.debug('Input spatial reference is "{}" Axis Strategy: "{}"'.format(in_proj4, in_ax_strategy))
- self.log.debug('Output spatial reference is "{}" Axis Strategy: "{}"'.format(out_proj4, out_ax_strategy))
+ # This check will throw a warning into the log if we've got anything but TRADITIONAL axis strategy
+ VectorBase.check_axis_mapping(in_srs)
- transform = VectorBase.get_transform(self.spatial_ref, out_spatial_ref)
+ transform = VectorBase.get_transform(in_srs, out_spatial_ref)
return out_spatial_ref, transform
@staticmethod
diff --git a/lib/commons/rscommons/classes/vector_classes.py b/lib/commons/rscommons/classes/vector_classes.py
index 751aa0b3..09239ca2 100644
--- a/lib/commons/rscommons/classes/vector_classes.py
+++ b/lib/commons/rscommons/classes/vector_classes.py
@@ -30,7 +30,7 @@ def __init__(self, filepath: str, delete=False, write: bool = False):
# layer name isn't important so we hardcode 'layer'
super(ShapefileLayer, self).__init__(filepath, VectorBase.Drivers.Shapefile, 'layer', replace_ds_on_open=delete, allow_write=write)
if delete is True:
- self.delete()
+ self.delete(filepath)
def create(self, geom_type: int, epsg: int = None, spatial_ref: osr.SpatialReference = None, fields: dict = None):
"""Create a shapefile and associated layer
diff --git a/lib/commons/rscommons/clean_nhd_data.py b/lib/commons/rscommons/clean_nhd_data.py
index 7f915da1..c4b21904 100644
--- a/lib/commons/rscommons/clean_nhd_data.py
+++ b/lib/commons/rscommons/clean_nhd_data.py
@@ -4,7 +4,7 @@
from rscommons.science_base import get_nhdhr_url
from rscommons.download import download_unzip
from rscommons.filegdb import export_feature_class, copy_attributes, export_table
-from rscommons.util import safe_makedirs, safe_remove_dir
+from rscommons.util import safe_makedirs
from rscommons.shapefile import get_geometry_union
# NHDPlus HR Value Added Attributes (VAA) to be copied to the NHDFlowline feature class
@@ -19,7 +19,7 @@
def clean_nhd_data(huc, download_folder, unzip_folder, out_dir, out_epsg, force_download):
- filegdb, nhd_url = download_unzip_nhd(huc, download_folder, unzip_folder, out_epsg, force_download)
+ filegdb, nhd_url = download_unzip_nhd(huc, download_folder, unzip_folder, force_download)
# This is the dictionary of cleaned feature classes produced by this processed
featureclasses = {}
@@ -59,7 +59,7 @@ def clean_nhd_data(huc, download_folder, unzip_folder, out_dir, out_epsg, force_
return featureclasses, db_path, huc_name, nhd_url
-def download_unzip_nhd(huc, download_folder, unzip_folder, out_epsg, force_download):
+def download_unzip_nhd(huc, download_folder, unzip_folder, force_download):
try:
nhd_url = get_nhdhr_url(huc[:4])
diff --git a/lib/commons/rscommons/database.py b/lib/commons/rscommons/database.py
index bbd24a12..9a8f4914 100644
--- a/lib/commons/rscommons/database.py
+++ b/lib/commons/rscommons/database.py
@@ -1,18 +1,68 @@
+'''
+Database Methods
+'''
+from __future__ import annotations
import os
import glob
import csv
-from typing import List, Dict
+from typing import Dict
import sqlite3
-import argparse
from osgeo import ogr, osr
-from rscommons import ProgressBar, Logger, ModelConfig, dotenv, get_shp_or_gpkg, VectorBase
-from rscommons.shapefile import create_field
-from rscommons.build_network import FCodeValues
+from rscommons import Logger, VectorBase
-perennial_reach_code = 46006
+class SQLiteCon():
+ """This is just a loose mapping class to allow us to use Python's 'with' keyword.
-def create_database(huc, db_path, metadata, epsg, schema_path):
+ Raises:
+ VectorBaseException: Various
+ """
+ log = Logger('SQLite')
+
+ def __init__(self, filepath: str):
+ self.filepath = filepath
+ self.conn = None
+ self.curs = None
+
+ def __enter__(self) -> SQLiteCon:
+ """Behaviour on open when using the "with VectorBase():" Syntax
+ """
+
+ self.conn = sqlite3.connect(self.filepath)
+
+ # turn on foreign key constraints. Does not happen by default
+ self.conn.execute('PRAGMA foreign_keys = ON;')
+
+ self.conn.row_factory = dict_factory
+ self.curs = self.conn.cursor()
+ return self
+
+ def __exit__(self, _type, _value, _traceback):
+ """Behaviour on close when using the "with VectorBase():" Syntax
+ """
+ self.curs.close()
+ self.conn.close()
+ self.curs = None
+ self.conn = None
+
+
+def create_database(huc: str, db_path: str, metadata: Dict[str, str], epsg: int, schema_path: str, delete: bool = False):
+ """[summary]
+
+ Args:
+ huc (str): [description]
+ db_path (str): [description]
+ metadata (Dict[str, str]): [description]
+ epsg (int): [description]
+ schema_path (str): [description]
+ delete (bool, optional): [description]. Defaults to False.
+
+ Raises:
+ Exception: [description]
+
+ Returns:
+ [type]: [description]
+ """
# We need to create a projection for this DB
db_srs = osr.SpatialReference()
@@ -24,14 +74,15 @@ def create_database(huc, db_path, metadata, epsg, schema_path):
raise Exception('Unable to find database schema file at {}'.format(schema_path))
log = Logger('Database')
- if os.path.isfile(db_path):
+ if os.path.isfile(db_path) and delete is True:
log.info('Removing existing SQLite database at {0}'.format(db_path))
os.remove(db_path)
- log.info('Creating SQLite database at {0}'.format(db_path))
+ log.info('Creating database schema at {0}'.format(db_path))
qry = open(schema_path, 'r').read()
sqlite3.complete_statement(qry)
conn = sqlite3.connect(db_path)
+ conn.execute('PRAGMA foreign_keys = ON;')
curs = conn.cursor()
curs.executescript(qry)
@@ -79,11 +130,12 @@ def update_database(db_path, csv_path):
log.info('Updating SQLite database at {0}'.format(db_path))
conn = sqlite3.connect(db_path)
+ conn.execute('PRAGMA foreign_keys = ON;')
conn.row_factory = dict_factory
curs = conn.cursor()
try:
- huc = conn.execute('SELECT WatershedID FROM Reaches GROUP BY WatershedID').fetchall()[0]['WatershedID']
+ huc = conn.execute('SELECT WatershedID FROM vwReaches GROUP BY WatershedID').fetchall()[0]['WatershedID']
except Exception as e:
log.error('Error retrieving HUC from DB')
raise e
@@ -141,190 +193,6 @@ def get_db_srs(database):
return dbRef
-def populate_database(database, network, huc):
-
- driver = ogr.GetDriverByName('ESRI Shapefile')
- dataset = driver.Open(network, 1)
- layer = dataset.GetLayer()
- in_spatial_ref = layer.GetSpatialRef()
- db_spatial_ref = get_db_srs(database)
- transform = osr.CoordinateTransformation(in_spatial_ref, db_spatial_ref)
-
- log = Logger('Database')
- log.info('Populating SQLite database with {0:,} features'.format(layer.GetFeatureCount()))
-
- # Determine the transformation if user provides an EPSG
- create_field(layer, 'ReachID', ogr.OFTInteger)
-
- conn = sqlite3.connect(database)
- curs = conn.cursor()
-
- progbar = ProgressBar(layer.GetFeatureCount(), 50, "Populating features")
- counter = 0
- progbar.update(counter)
- for feature in layer:
- counter += 1
- progbar.update(counter)
-
- geom = feature.GetGeometryRef()
- if transform:
- geom.Transform(transform)
- geojson = geom.ExportToJson()
-
- reach_code = feature.GetField('FCode')
- if not reach_code:
- raise Exception('Missing reach code')
-
- # perennial = 1 if reach_code == '46006' else 0
- name = feature.GetField('GNIS_Name')
-
- drainage_area = feature.GetField('TotDASqKm')
-
- # Store the feature in the SQLite database
- curs.execute('INSERT INTO Reaches (WatershedID, Geometry, ReachCode, StreamName, iGeo_DA, Orig_DA) VALUES (?, ?, ?, ?, ?, ?)', [huc, geojson, reach_code, name, drainage_area, drainage_area])
-
- # Update the feature in the ShapeFile with the SQLite database ReachID
- feature.SetField('ReachID', curs.lastrowid)
- layer.SetFeature(feature)
-
- # Commit geometry every hundred rows so the memory buffer doesn't fill
- if counter % 10000 == 0:
- conn.commit()
-
- # Store whether each reach is Perennial or not
- curs.execute('UPDATE Reaches SET IsPeren = 1 WHERE (ReachCode = ?)', [perennial_reach_code])
- conn.commit()
-
- # Update reaches with NULL zero drainage area to have zero drainage area
- curs.execute('UPDATE Reaches SET iGeo_DA = 0 WHERE iGeo_DA IS NULL')
- conn.commit()
-
- progbar.finish()
-
- curs.execute('SELECT Count(*) FROM Reaches')
- reach_count = curs.fetchone()[0]
- log.info('{:,} reaches inserted into database'.format(reach_count))
- if reach_count < 1:
- raise Exception('Zero reaches in watershed. Unable to continue. Aborting.')
-
- for name, fcode in FCodeValues.items():
- curs.execute('SELECT Count(*) FROM Reaches WHERE ReachCode = ?', [str(fcode)])
- log.info('{:,} {} reaches (FCode {}) inserted into database'.format(curs.fetchone()[0], name, fcode))
-
- log.info('Database creation complete')
-
-# TODO: CLEAN UP AFTER MIGRATING BRAT
-
-
-def create_database_NEW(huc: str, db_path: str, metadata: Dict[str, str], epsg: int, schema_path: str, delete: bool = False):
-
- # We need to create a projection for this DB
- db_srs = osr.SpatialReference()
- db_srs.ImportFromEPSG(int(epsg))
- metadata['gdal_srs_proj4'] = db_srs.ExportToProj4()
- metadata['gdal_srs_axis_mapping_strategy'] = osr.OAMS_TRADITIONAL_GIS_ORDER
-
- if not os.path.isfile(schema_path):
- raise Exception('Unable to find database schema file at {}'.format(schema_path))
-
- log = Logger('Database')
- if os.path.isfile(db_path) and delete is True:
- log.info('Removing existing SQLite database at {0}'.format(db_path))
- os.remove(db_path)
-
- log.info('Creating database schema at {0}'.format(db_path))
- qry = open(schema_path, 'r').read()
- sqlite3.complete_statement(qry)
- conn = sqlite3.connect(db_path)
- curs = conn.cursor()
- curs.executescript(qry)
-
- load_lookup_data(db_path, os.path.dirname(schema_path))
-
- # Keep only the designated watershed
- curs.execute('DELETE FROM Watersheds WHERE WatershedID <> ?', [huc])
-
- # Retrieve the name of the watershed so it can be stored in riverscapes project
- curs.execute('SELECT Name FROM Watersheds WHERE WatershedID = ?', [huc])
- row = curs.fetchone()
- watershed_name = row[0] if row else None
-
- conn.commit()
- conn.execute("VACUUM")
-
- # Write the metadata to the database
- if metadata:
- [store_metadata(db_path, key, value) for key, value in metadata.items()]
-
- return watershed_name
-
-
-def populate_database_NEW(database, network_path, huc):
-
- conn = sqlite3.connect(database)
- curs = conn.cursor()
-
- with get_shp_or_gpkg(network_path, write=True) as net_lyr:
- db_spatial_ref = get_db_srs(database)
- feature_count = net_lyr.ogr_layer.GetFeatureCount()
- transform = net_lyr.get_transform_from_srs(db_spatial_ref)
-
- log = Logger('Database')
- log.info('Populating SQLite database with {0:,} features'.format(feature_count))
-
- # Determine the transformation if user provides an EPSG
- net_lyr.create_field('ReachID', ogr.OFTInteger)
-
- for feature, counter, _progbar in net_lyr.iterate_features('Populating features', write_layers=[net_lyr]):
- geom = feature.GetGeometryRef()
- if transform:
- geom.Transform(transform)
- geojson = geom.ExportToJson()
-
- reach_code = feature.GetField('FCode')
- if not reach_code:
- raise Exception('Missing reach code')
-
- # perennial = 1 if reach_code == '46006' else 0
- name = feature.GetField('GNIS_Name')
-
- drainage_area = feature.GetField('TotDASqKm')
-
- # Store the feature in the SQLite database
- curs.execute(
- 'INSERT INTO Reaches (WatershedID, Geometry, ReachCode, StreamName, iGeo_DA, Orig_DA) VALUES (?, ?, ?, ?, ?, ?)',
- [huc, geojson, reach_code, name, drainage_area, drainage_area]
- )
-
- # Update the feature in the ShapeFile with the SQLite database ReachID
- feature.SetField('ReachID', curs.lastrowid)
- net_lyr.ogr_layer.SetFeature(feature)
-
- # Commit geometry every hundred rows so the memory buffer doesn't fill
- if counter % 10000 == 0:
- conn.commit()
-
- # Store whether each reach is Perennial or not
- curs.execute('UPDATE Reaches SET IsPeren = 1 WHERE (ReachCode = ?)', [perennial_reach_code])
- conn.commit()
-
- # Update reaches with NULL zero drainage area to have zero drainage area
- curs.execute('UPDATE Reaches SET iGeo_DA = 0 WHERE iGeo_DA IS NULL')
- conn.commit()
-
- curs.execute('SELECT Count(*) FROM Reaches')
- reach_count = curs.fetchone()[0]
- log.info('{:,} reaches inserted into database'.format(reach_count))
- if reach_count < 1:
- raise Exception('Zero reaches in watershed. Unable to continue. Aborting.')
-
- for name, fcode in FCodeValues.items():
- curs.execute('SELECT Count(*) FROM Reaches WHERE ReachCode = ?', [str(fcode)])
- log.info('{:,} {} reaches (FCode {}) inserted into database'.format(curs.fetchone()[0], name, fcode))
-
- log.info('Database creation complete')
-
-
def load_geometries(database, target_srs=None, where_clause=None):
transform = None
@@ -360,7 +228,7 @@ def load_attributes(database, fields, where_clause=None):
return reaches
-def write_attributes(database, reaches, fields, set_null_first=True, summarize=True):
+def write_db_attributes(database, reaches, fields, set_null_first=True, summarize=True):
if len(reaches) < 1:
return
@@ -371,14 +239,14 @@ def write_attributes(database, reaches, fields, set_null_first=True, summarize=T
# Optionally clear all the values in the fields first
if set_null_first is True:
- [curs.execute('UPDATE Reaches SET {} = NULL'.format(field)) for field in fields]
+ [curs.execute('UPDATE ReachAttributes SET {} = NULL'.format(field)) for field in fields]
results = []
for reachid, values in reaches.items():
results.append([values[field] if field in values else None for field in fields])
results[-1].append(reachid)
- sql = 'UPDATE Reaches SET {} WHERE ReachID = ?'.format(','.join(['{}=?'.format(field) for field in fields]))
+ sql = 'UPDATE ReachAttributes SET {} WHERE ReachID = ?'.format(','.join(['{}=?'.format(field) for field in fields]))
curs.executemany(sql, results)
conn.commit()
@@ -392,14 +260,14 @@ def summarize_reaches(database, field):
conn = sqlite3.connect(database)
curs = conn.cursor()
- curs.execute('SELECT Max({0}), Min({0}), Avg({0}), Count({0}) FROM Reaches WHERE ({0} IS NOT NULL)'.format(field))
+ curs.execute('SELECT Max({0}), Min({0}), Avg({0}), Count({0}) FROM ReachAttributes WHERE ({0} IS NOT NULL)'.format(field))
row = curs.fetchone()
if row and row[3] > 0:
msg = '{}, max: {:.2f}, min: {:.2f}, avg: {:.2f}'.format(field, row[0], row[1], row[2])
else:
msg = "0 non null values"
- curs.execute('SELECT Count(*) FROM Reaches WHERE {0} IS NULL'.format(field))
+ curs.execute('SELECT Count(*) FROM ReachAttributes WHERE {0} IS NULL'.format(field))
row = curs.fetchone()
msg += ', nulls: {:,}'.format(row[0])
@@ -411,7 +279,8 @@ def set_reach_fields_null(database, fields):
log = Logger('Database')
log.info('Setting {} reach fields to NULL'.format(len(fields)))
conn = sqlite3.connect(database)
- conn.execute('UPDATE Reaches SET {}'.format(','.join(['{} = NULL'.format(field) for field in fields])))
+ conn.execute('PRAGMA foreign_keys = ON')
+ conn.execute('UPDATE ReachAttributes SET {}'.format(','.join(['{} = NULL'.format(field) for field in fields])))
conn.commit()
conn.close()
@@ -462,20 +331,3 @@ def store_metadata(database, key, value):
curs = conn.cursor()
curs.execute('INSERT OR REPLACE INTO MetaData (KeyInfo, ValueInfo) VALUES (?, ?)', [key, formatted_value])
conn.commit()
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('network', help='Input ShapeFile network', type=str)
- parser.add_argument('huc', help='HUC identifier', type=str)
- parser.add_argument('database', help='Path to the output SQLite database ', type=str)
- parser.add_argument('--epsg', help='EPSG for storing geometries in the database', default=4326, type=float)
- args = dotenv.parse_args_env(parser)
-
- cfg = ModelConfig('', '0.0.1')
- create_database(args.huc, args.database, {'MyMeta': 2000}, cfg.OUTPUT_EPSG)
- populate_database(args.database, args.network, args.huc)
-
-
-if __name__ == '__main__':
- main()
diff --git a/lib/commons/rscommons/download.py b/lib/commons/rscommons/download.py
index 86e7cc14..2e800c55 100644
--- a/lib/commons/rscommons/download.py
+++ b/lib/commons/rscommons/download.py
@@ -9,8 +9,9 @@
from rscommons.util import safe_makedirs, safe_remove_dir, safe_remove_file, file_compare
from rscommons import Logger, ProgressBar, Timer
-MAX_ATTEMPTS = 3 # Number of attempts for things like downloading and copying
-PENDING_TIMEOUT = 60 # number of seconds before pending files are deemed stale
+MAX_ATTEMPTS = 3 # Number of attempts for things like downloading and copying
+PENDING_TIMEOUT = 60 # number of seconds before pending files are deemed stale
+
def download_unzip(url, download_folder, unzip_folder=None, force_download=False, retries=3):
"""
@@ -84,17 +85,17 @@ def pending_check(file_path_pending, timeout):
"""
pending_exists = os.path.isfile(file_path_pending)
if not pending_exists:
- return False
+ return False
pf_stats = os.stat(file_path_pending)
- # If the pending file is older than the timeout
+ # If the pending file is older than the timeout
# then we need to delete the file and keep going
if time.time() - pf_stats.st_mtime > timeout:
safe_remove_file(file_path_pending)
return False
else:
return True
-
+
def download_file(s3_url, download_folder, force_download=False):
"""
@@ -114,7 +115,7 @@ def download_file(s3_url, download_folder, force_download=False):
# If file already exists and forcing download then ensure unique file name
file_path = os.path.join(download_folder, os.path.basename(result.group(2)))
- file_path_pending = os.path.join(download_folder, os.path.basename(result.group(2))+ '.pending')
+ file_path_pending = os.path.join(download_folder, os.path.basename(result.group(2)) + '.pending')
if os.path.isfile(file_path) and force_download:
safe_remove_file(file_path)
@@ -149,7 +150,7 @@ def download_cleanup():
# Actual file download
for download_retries in range(MAX_ATTEMPTS):
- if download_retries> 0:
+ if download_retries > 0:
log.warning('Download file retry: {}'.format(download_retries))
try:
dl = 0
@@ -179,14 +180,14 @@ def download_cleanup():
except Exception as e:
log.debug('Error downloading file from s3 {}: \n{}'.format(s3_url, str(e)))
# if this is our last chance then the function must fail [0,1,2]
- if download_retries == MAX_ATTEMPTS -1:
- download_cleanup() # Always clean up
+ if download_retries == MAX_ATTEMPTS - 1:
+ download_cleanup() # Always clean up
raise e
# Now copy the temporary file (retry 3 times)
for copy_retries in range(MAX_ATTEMPTS):
- if copy_retries> 0:
- log.warning('Copy file retry: {}'.format(copy_retries))
+ if copy_retries > 0:
+ log.warning('Copy file retry: {}'.format(copy_retries))
try:
shutil.copy(tmpfilepath, file_path)
# Make sure to clean up so the next process doesn't encounter a broken file
@@ -197,12 +198,12 @@ def download_cleanup():
except Exception as e:
log.debug('Error copying file from temporary location {}: \n{}'.format(tmpfilepath, str(e)))
# if this is our last chance then the function must fail [0,1,2]
- if copy_retries == MAX_ATTEMPTS -1:
- download_cleanup() # Always clean up
+ if copy_retries == MAX_ATTEMPTS - 1:
+ download_cleanup() # Always clean up
raise e
- download_cleanup() # Always clean up
-
+ download_cleanup() # Always clean up
+
return file_path
@@ -269,11 +270,11 @@ def unzip(file_path, destination_folder, force_overwrite=False, retries=3):
except zipfile.BadZipFile as e:
# If the zip file is bad then we have to remove it.
- log.error('BadZipFile. Cleaning up zip file and output folder')
+ log.error('BadZipFile. Cleaning up zip file and output folder')
safe_remove_file(file_path)
safe_remove_dir(destination_folder)
raise Exception('Unzip error: BadZipFile')
except Exception as e:
- log.error('Error unzipping. Cleaning up output folder')
+ log.error('Error unzipping. Cleaning up output folder')
safe_remove_dir(destination_folder)
raise Exception('Unzip error: file could not be unzipped')
diff --git a/lib/commons/rscommons/download_hand.py b/lib/commons/rscommons/download_hand.py
index 7cd2e2fa..50be2287 100644
--- a/lib/commons/rscommons/download_hand.py
+++ b/lib/commons/rscommons/download_hand.py
@@ -21,7 +21,7 @@
base_url = 'https://web.corral.tacc.utexas.edu/nfiedata/HAND'
-def download_hand(huc6, epsg, download_folder, boundary, raster_path, force_download=False):
+def download_hand(huc6, epsg, download_folder, boundary, raster_path, force_download=False, warp_options: dict = {}):
"""
Identify rasters within HUC8, download them and mosaic into single GeoTIF
:param vector_path: Path to bounding polygon ShapeFile
@@ -29,6 +29,7 @@ def download_hand(huc6, epsg, download_folder, boundary, raster_path, force_down
:param buffer_dist: Distance in DEGREES to buffer the bounding polygon
:param output_folder: Temporary folder where downloaded rasters will be saved
:param force_download: The download will always be performed if this is true.
+ :param warp_options: Extra options to pass to raster warp
:return:
"""
@@ -48,7 +49,7 @@ def download_hand(huc6, epsg, download_folder, boundary, raster_path, force_down
temp_path = download_file(raster_url, download_folder)
# Reproject to the desired SRS and clip to the watershed boundary
- raster_warp(temp_path, raster_path, epsg, boundary)
+ raster_warp(temp_path, raster_path, epsg, clip=boundary, warp_options=warp_options)
return raster_path, raster_url
diff --git a/lib/commons/rscommons/raster_warp.py b/lib/commons/rscommons/raster_warp.py
index 53efcb1e..ee470b94 100644
--- a/lib/commons/rscommons/raster_warp.py
+++ b/lib/commons/rscommons/raster_warp.py
@@ -21,10 +21,10 @@
from osgeo import gdal
from rscommons.download import get_unique_file_path
from rscommons.util import safe_remove_file
-from rscommons import Logger
+from rscommons import Logger, VectorBase
-def raster_vrt_stitch(inrasters, outraster, epsg, clip=None, clean=False):
+def raster_vrt_stitch(inrasters, outraster, epsg, clip=None, clean=False, warp_options: dict = {}):
"""[summary]
https://gdal.org/python/osgeo.gdal-module.html#BuildVRT
Keyword arguments are :
@@ -67,7 +67,7 @@ def raster_vrt_stitch(inrasters, outraster, epsg, clip=None, clean=False):
vrt_options = gdal.BuildVRTOptions()
gdal.BuildVRT(path_vrt, inrasters, options=vrt_options)
- raster_warp(path_vrt, outraster, epsg, clip)
+ raster_warp(path_vrt, outraster, epsg, clip, warp_options)
if clean:
for rpath in inrasters:
@@ -79,7 +79,7 @@ def raster_vrt_stitch(inrasters, outraster, epsg, clip=None, clean=False):
# os.remove(path_vrt)
-def raster_warp(inraster, outraster, epsg, clip=None, cutlineBlend=None):
+def raster_warp(inraster: str, outraster: str, epsg, clip=None, warp_options: dict = {}):
"""
Reproject a raster to a different coordinate system.
:param inraster: Input dataset
@@ -87,7 +87,10 @@ def raster_warp(inraster, outraster, epsg, clip=None, cutlineBlend=None):
:param epsg: Output spatial reference EPSG identifier
:param log: Log file object
:param clip: Optional Polygon dataset to clip the output.
+ :param warp_options: Extra GDALWarpOptions.
:return: None
+
+ https://gdal.org/python/osgeo.gdal-module.html#WarpOptions
"""
log = Logger('Raster Warp')
@@ -106,12 +109,20 @@ def raster_warp(inraster, outraster, epsg, clip=None, cutlineBlend=None):
warpvrt = os.path.join(os.path.dirname(outraster), 'temp_gdal_warp_output.vrt')
log.info('Performing GDAL warp to temporary VRT file.')
- warp_options = gdal.WarpOptions(dstSRS='EPSG:{}'.format(epsg), format='vrt')
+
if clip:
log.info('Clipping to polygons using {}'.format(clip))
- warp_options = gdal.WarpOptions(dstSRS='EPSG:{}'.format(epsg), format='vrt', cutlineDSName=clip, cropToCutline=True, cutlineBlend=cutlineBlend)
+ clip_ds, clip_layer = VectorBase.path_sorter(clip)
+ warp_options_obj = gdal.WarpOptions(
+ dstSRS='EPSG:{}'.format(epsg), format='vrt',
+ cutlineDSName=clip_ds,
+ cutlineLayer=clip_layer,
+ cropToCutline=True, **warp_options
+ )
+ else:
+ warp_options_obj = gdal.WarpOptions(dstSRS='EPSG:{}'.format(epsg), format='vrt', **warp_options)
- ds = gdal.Warp(warpvrt, inraster, options=warp_options)
+ ds = gdal.Warp(warpvrt, inraster, options=warp_options_obj)
log.info('Using GDAL translate to convert VRT to compressed raster format.')
translateoptions = gdal.TranslateOptions(gdal.ParseCommandLine("-of Gtiff -co COMPRESS=DEFLATE"))
diff --git a/lib/commons/rscommons/segment_network.py b/lib/commons/rscommons/segment_network.py
index ea98b782..05050648 100644
--- a/lib/commons/rscommons/segment_network.py
+++ b/lib/commons/rscommons/segment_network.py
@@ -18,13 +18,15 @@
import traceback
from osgeo import ogr, osr
from shapely.geometry import LineString, Point
-from rscommons import Logger, ProgressBar, initGDALOGRErrors, dotenv, get_shp_or_gpkg
-from rscommons.shapefile import create_field, get_transform_from_epsg, get_utm_zone_epsg
+from rscommons import Logger, ProgressBar, initGDALOGRErrors, dotenv, get_shp_or_gpkg, VectorBase
+from rscommons.classes.vector_base import get_utm_zone_epsg
initGDALOGRErrors()
class SegmentFeature:
+ '''
+ '''
def __init__(self, feature, transform):
self.name = feature.GetField('GNIS_NAME')
@@ -52,212 +54,7 @@ def __init__(self, feature, transform):
self.length_m = georef.Length()
-def segment_network(inpath, outpath, interval, minimum, tolerance=0.1):
- """
- Chop the lines in a polyline feature class at the specified interval unless
- this would create a line less than the minimum in which case the line is not segmented.
- :param inpath: Original network feature class
- :param outpath: Output segmented network feature class
- :param interval: Distance at which to segment each line feature (map units)
- :param minimum: Minimum length below which lines are not segmented (map units)
- :param tolerance: Distance below which points are assumed to coincide (map units)
- :return: None
- """
-
- log = Logger('Segment Network')
-
- if os.path.isfile(outpath):
- log.info('Skipping network segmentation because output exists {}'.format(outpath))
- return None
-
- if interval <= 0:
- log.info('Skipping segmentation.')
- else:
- log.info('Segmenting network to {}m, with minimum feature length of {}m'.format(interval, minimum))
- log.info('Segmenting network from {0}'.format(inpath))
-
- driver = ogr.GetDriverByName('ESRI Shapefile')
-
- # Get the input NHD flow lines layer
- inDataSource = driver.Open(inpath, 0)
- inLayer = inDataSource.GetLayer()
-
- log.info('Input feature count {:,}'.format(inLayer.GetFeatureCount()))
-
- # Get the closest EPSG possible to calculate length
- in_spatial_ref = inLayer.GetSpatialRef()
- extent_poly = ogr.Geometry(ogr.wkbPolygon)
- extent_centroid = extent_poly.Centroid()
- utm_epsg = get_utm_zone_epsg(extent_centroid.GetX())
- transform_ref, transform = get_transform_from_epsg(in_spatial_ref, utm_epsg)
-
- # IN order to get accurate lengths we are going to need to project into some coordinate system
- transform_back = osr.CoordinateTransformation(transform_ref, in_spatial_ref)
-
- # Omit pipelines with FCode 428**
- attfilter = 'FCode < 42800 OR FCode > 42899'
- inLayer.SetAttributeFilter(attfilter)
- log.info('Filtering out pipelines ({})'.format(attfilter))
-
- # Remove output shapefile if it already exists
- if os.path.exists(outpath):
- driver.DeleteDataSource(outpath)
-
- # Make sure the output folder exists
- resultsFolder = os.path.dirname(outpath)
- if not os.path.isdir(resultsFolder):
- os.mkdir(resultsFolder)
-
- # Create the output shapefile
- outDataSource = driver.CreateDataSource(outpath)
- outLayer = outDataSource.CreateLayer('Segmented', inLayer.GetSpatialRef(), geom_type=ogr.wkbMultiLineString)
- create_field(outLayer, 'GNIS_NAME', ogr.OFTString)
- create_field(outLayer, 'FCode', ogr.OFTString)
- create_field(outLayer, 'TotDASqKm', ogr.OFTReal)
- create_field(outLayer, 'NHDPlusID', ogr.OFTReal)
- create_field(outLayer, 'ReachID', ogr.OFTInteger)
-
- # Get the output Layer's Feature Definition
- outLayerDefn = outLayer.GetLayerDefn()
-
- # Retrieve all input features keeping track of which ones have GNIS names or not
- namedFeatures = {}
- allFeatures = []
- junctions = []
- log.info('Loading {:,} original features.'.format(inLayer.GetFeatureCount()))
-
- progbarLoad = ProgressBar(inLayer.GetFeatureCount(), 50, "Loading Network")
- counterLoad = 0
-
- for inFeature in inLayer:
- counterLoad += 1
- progbarLoad.update(counterLoad)
-
- # Store relevant items as a tuple:
- # (name, FID, StartPt, EndPt, Length, FCode)
- sFeat = SegmentFeature(inFeature, transform)
-
- # Add the end points of all lines to a single list
- junctions.extend([sFeat.start, sFeat.end])
-
- if not sFeat.name or len(sFeat.name) < 1 or interval <= 0:
- # Add features without a GNIS name to list. Also add to list if not segmenting
- allFeatures.append(sFeat)
- else:
- # Build separate lists for each unique GNIS name
- if sFeat.name not in namedFeatures:
- namedFeatures[sFeat.name] = [sFeat]
- else:
- namedFeatures[sFeat.name].append(sFeat)
- progbarLoad.finish()
-
- # Loop over all features with the same GNIS name.
- # Only merge them if they meet at a junction where no other lines meet.
- log.info('Merging simple features with the same GNIS name...')
- for name, features in namedFeatures.items():
- log.debug(' {} x{}'.format(name.encode('utf-8'), len(features)))
- allFeatures.extend(features)
-
- log.info('{:,} features after merging. Starting segmentation...'.format(len(allFeatures)))
-
- # Segment the features at the desired interval
- rid = 0
- log.info('Segmenting Network...')
- progbar = ProgressBar(inLayer.GetFeatureCount(), 50, "Segmenting")
- counter = 0
-
- for origFeat in allFeatures:
- counter += 1
- progbar.update(counter)
-
- oldFeat = inLayer.GetFeature(origFeat.fid)
- oldGeom = oldFeat.GetGeometryRef()
- # Anything that produces reach shorter than the minimum just gets added. Also just add features if not segmenting
- if origFeat.length_m < (interval + minimum) or interval <= 0:
- newOGRFeat = ogr.Feature(outLayerDefn)
- # Set the attributes using the values from the delimited text file
- newOGRFeat.SetField("GNIS_NAME", origFeat.name)
- newOGRFeat.SetField("ReachID", rid)
- newOGRFeat.SetField("FCode", origFeat.FCode)
- newOGRFeat.SetField("TotDASqKm", origFeat.TotDASqKm)
- newOGRFeat.SetField("NHDPlusID", origFeat.NHDPlusID)
- newOGRFeat.SetGeometry(oldGeom)
- outLayer.CreateFeature(newOGRFeat)
- rid += 1
- else:
- # From here on out we use shapely and project to UTM. We'll transform back before writing to disk.
- newGeom = oldGeom.Clone()
- newGeom.Transform(transform)
- remaining = LineString(newGeom.GetPoints())
- while remaining and remaining.length >= (interval + minimum):
- part1shply, part2shply = cut(remaining, interval)
- remaining = part2shply
-
- newOGRFeat = ogr.Feature(outLayerDefn)
- # Set the attributes using the values from the delimited text file
- newOGRFeat.SetField("GNIS_NAME", origFeat.name)
- newOGRFeat.SetField("ReachID", rid)
- newOGRFeat.SetField("FCode", origFeat.FCode)
- newOGRFeat.SetField("TotDASqKm", origFeat.TotDASqKm)
- newOGRFeat.SetField("NHDPlusID", origFeat.NHDPlusID)
- geo = ogr.CreateGeometryFromWkt(part1shply.wkt)
- geo.Transform(transform_back)
- newOGRFeat.SetGeometry(geo)
- outLayer.CreateFeature(newOGRFeat)
- rid += 1
-
- # Add any remaining line to outGeometries
- if remaining:
- newOGRFeat = ogr.Feature(outLayerDefn)
- # Set the attributes using the values from the delimited text file
- newOGRFeat.SetField("GNIS_NAME", origFeat.name)
- newOGRFeat.SetField("ReachID", rid)
- newOGRFeat.SetField("FCode", origFeat.FCode)
- newOGRFeat.SetField("TotDASqKm", origFeat.TotDASqKm)
- newOGRFeat.SetField("NHDPlusID", origFeat.NHDPlusID)
- geo = ogr.CreateGeometryFromWkt(remaining.wkt)
- geo.Transform(transform_back)
- newOGRFeat.SetGeometry(geo)
- outLayer.CreateFeature(newOGRFeat)
- rid += 1
-
- progbarLoad.finish()
-
- log.info(('{:,} features written to {:}'.format(outLayer.GetFeatureCount(), outpath)))
- log.info('Process completed successfully.')
-
- inDataSource = None
- outDataSource = None
-
-
-def cut(line, distance):
- """
- Cuts a line in two at a distance from its starting point
- :param line: line geometry
- :param distance: distance at which to cut the liner
- :return: List where the first item is the first part of the line
- and the second is the remaining part of the line (if there is any)
- """
-
- if distance <= 0.0 or distance >= line.length:
- return (line)
-
- for i, p in enumerate(line.coords):
- pd = line.project(Point(p))
- if pd == distance:
- return (
- LineString(line.coords[:i + 1]),
- LineString(line.coords[i:])
- )
- if pd > distance:
- cp = line.interpolate(distance)
- return (
- LineString(line.coords[:i] + [cp]),
- LineString([cp] + line.coords[i:])
- )
-
-
-def segment_network_NEW(inpath: str, outpath: str, interval: float, minimum: float, watershed_id: str, create_layer=False):
+def segment_network(inpath: str, outpath: str, interval: float, minimum: float, watershed_id: str, create_layer=False):
"""
Chop the lines in a polyline feature class at the specified interval unless
this would create a line less than the minimum in which case the line is not segmented.
@@ -289,7 +86,7 @@ def segment_network_NEW(inpath: str, outpath: str, interval: float, minimum: flo
extent_poly = ogr.Geometry(ogr.wkbPolygon)
extent_centroid = extent_poly.Centroid()
utm_epsg = get_utm_zone_epsg(extent_centroid.GetX())
- transform_ref, transform = in_lyr.get_transform_from_epsg(utm_epsg)
+ transform_ref, transform = VectorBase.get_transform_from_epsg(in_lyr.spatial_ref, utm_epsg)
# IN order to get accurate lengths we are going to need to project into some coordinate system
transform_back = osr.CoordinateTransformation(transform_ref, srs)
@@ -404,6 +201,33 @@ def segment_network_NEW(inpath: str, outpath: str, interval: float, minimum: flo
log.info('Process completed successfully.')
+def cut(line, distance):
+ """
+ Cuts a line in two at a distance from its starting point
+ :param line: line geometry
+ :param distance: distance at which to cut the liner
+ :return: List where the first item is the first part of the line
+ and the second is the remaining part of the line (if there is any)
+ """
+
+ if distance <= 0.0 or distance >= line.length:
+ return (line)
+
+ for i, p in enumerate(line.coords):
+ pd = line.project(Point(p))
+ if pd == distance:
+ return (
+ LineString(line.coords[:i + 1]),
+ LineString(line.coords[i:])
+ )
+ if pd > distance:
+ cp = line.interpolate(distance)
+ return (
+ LineString(line.coords[:i] + [cp]),
+ LineString([cp] + line.coords[i:])
+ )
+
+
def copy_fields(in_feature, out_feature, in_layer_def, out_layer_def):
# Add field values from input Layer
for i in range(0, in_layer_def.GetFieldCount()):
diff --git a/lib/commons/rscommons/util.py b/lib/commons/rscommons/util.py
index f2ec6dbb..2a6a45ac 100644
--- a/lib/commons/rscommons/util.py
+++ b/lib/commons/rscommons/util.py
@@ -1,12 +1,10 @@
import sys
-import time
import gc
-import sys
-import glob
import shutil
import hashlib
import os
-from math import cos, sin, asin, sqrt, radians
+from datetime import datetime
+from math import floor
from rscommons import Logger
# Set if this environment variable is set don't show any UI
@@ -186,6 +184,71 @@ def get_obj_size(obj):
return sz
+def pretty_date(time=False):
+ """
+ Get a datetime object or a int() Epoch timestamp and return a
+ pretty string like 'an hour ago', 'Yesterday', '3 months ago',
+ 'just now', etc
+ """
+ now = datetime.now()
+ if isinstance(time, int):
+ diff = now - datetime.fromtimestamp(time)
+ elif isinstance(time, datetime):
+ diff = now - time
+ elif not time:
+ diff = now - now
+ second_diff = diff.seconds
+ day_diff = diff.days
+
+ if day_diff < 0:
+ return ''
+
+ if day_diff == 0:
+ if second_diff < 10:
+ return "just now"
+ if second_diff < 60:
+ return str(second_diff) + " seconds ago"
+ if second_diff < 120:
+ return "a minute ago"
+ if second_diff < 3600:
+ return str(second_diff / 60) + " minutes ago"
+ if second_diff < 7200:
+ return "an hour ago"
+ if second_diff < 86400:
+ return str(second_diff / 3600) + " hours ago"
+ if day_diff == 1:
+ return "Yesterday"
+ if day_diff < 7:
+ return str(day_diff) + " days ago"
+ if day_diff < 31:
+ return str(day_diff / 7) + " weeks ago"
+ if day_diff < 365:
+ return str(day_diff / 30) + " months ago"
+ return str(day_diff / 365) + " years ago"
+
+
+def pretty_duration(time_s=False):
+ """
+ Get a datetime object or a int() Epoch timestamp and return a
+ pretty string like 'an hour ago', 'Yesterday', '3 months ago',
+ 'just now', etc
+ """
+ if not time_s >= 0:
+ return '???'
+ seconds = time_s % 60
+ minutes = floor(time_s / 60)
+ hours = floor(time_s / 3600)
+ if time_s < 60:
+ return "{0:.1f} seconds".format(seconds)
+ elif time_s < 3600:
+ return "{}:{:02}".format(minutes, seconds)
+ elif time_s < 86400:
+ return "{}:{:02}:{:02}".format(hours, minutes, seconds)
+ else:
+ days = floor(time_s / 86400)
+ return "{} days, {}:{:02}:{:02}".format(days, hours, minutes, seconds)
+
+
def parse_metadata(arg_string):
meta = {}
diff --git a/lib/commons/rscommons/vector_ops.py b/lib/commons/rscommons/vector_ops.py
index ce109690..b194baf2 100644
--- a/lib/commons/rscommons/vector_ops.py
+++ b/lib/commons/rscommons/vector_ops.py
@@ -14,9 +14,9 @@
from shapely.ops import unary_union
from shapely.geometry.base import BaseGeometry
from shapely.geometry import mapping, Point, MultiPoint, LineString, MultiLineString, GeometryCollection, Polygon, MultiPolygon
-from rscommons import Logger, ProgressBar, get_shp_or_gpkg, Timer
+from rscommons import Logger, ProgressBar, get_shp_or_gpkg, Timer, VectorBase
from rscommons.util import sizeof_fmt, get_obj_size
-from rscommons.classes.vector_base import VectorBase, VectorBaseException
+from rscommons.classes.vector_base import VectorBaseException
def print_geom_size(logger: Logger, geom_obj: BaseGeometry):
@@ -52,7 +52,7 @@ def get_geometry_union(in_layer_path: str, epsg: int = None,
transform = None
if epsg:
- _outref, transform = in_layer.get_transform_from_epsg(epsg)
+ _outref, transform = VectorBase.get_transform_from_epsg(in_layer.spatial_ref, epsg)
geom = None
@@ -101,7 +101,7 @@ def get_geometry_unary_union(in_layer_path: str, epsg: int = None, spatial_ref:
with get_shp_or_gpkg(in_layer_path) as in_layer:
transform = None
if epsg is not None:
- _outref, transform = in_layer.get_transform_from_epsg(epsg)
+ _outref, transform = VectorBase.get_transform_from_epsg(in_layer.spatial_ref, epsg)
elif spatial_ref is not None:
transform = in_layer.get_transform(in_layer.spatial_ref, spatial_ref)
@@ -167,7 +167,8 @@ def copy_feature_class(in_layer_path: str, out_layer_path: str,
epsg: int = None,
attribute_filter: str = None,
clip_shape: BaseGeometry = None,
- clip_rect: List[float] = None
+ clip_rect: List[float] = None,
+ buffer: float = 0,
) -> None:
"""Copy a Shapefile from one location to another
@@ -182,6 +183,7 @@ def copy_feature_class(in_layer_path: str, out_layer_path: str,
attribute_filter (str, optional): [description]. Defaults to None.
clip_shape (BaseGeometry, optional): [description]. Defaults to None.
clip_rect (List[double minx, double miny, double maxx, double maxy)]): Iterate over a subset by clipping to a Shapely-ish geometry. Defaults to None.
+ buffer (float): Buffer the output features (in meters).
"""
log = Logger('copy_feature_class')
@@ -195,14 +197,27 @@ def copy_feature_class(in_layer_path: str, out_layer_path: str,
transform = VectorBase.get_transform(in_layer.spatial_ref, out_layer.spatial_ref)
+ buffer_convert = 0
+ if buffer != 0:
+ buffer_convert = in_layer.rough_convert_metres_to_vector_units(buffer)
+
# This is the callback method that will be run on each feature
- for feature, _counter, progbar in in_layer.iterate_features("Copying features", write_layers=[out_layer], clip_shape=clip_shape, attribute_filter=attribute_filter):
+ for feature, _counter, progbar in in_layer.iterate_features("Copying features", write_layers=[out_layer], clip_shape=clip_shape, clip_rect=clip_rect, attribute_filter=attribute_filter):
geom = feature.GetGeometryRef()
if geom is None:
progbar.erase() # get around the progressbar
log.warning('Feature with FID={} has no geometry. Skipping'.format(feature.GetFID()))
continue
+ if geom.GetGeometryType() in VectorBase.LINE_TYPES:
+ if geom.Length() == 0.0:
+ progbar.erase() # get around the progressbar
+ log.warning('Feature with FID={} has no Length. Skipping'.format(feature.GetFID()))
+ continue
+
+ # Buffer the shape if we need to
+ if buffer_convert != 0:
+ geom = geom.Buffer(buffer_convert)
geom.Transform(transform)
@@ -354,20 +369,42 @@ def load_attributes(in_layer_path: str, id_field: str, fields: list) -> dict:
return feature_values
-def load_geometries(in_layer_path: str, id_field: str, epsg=None) -> dict:
+def load_geometries(in_layer_path: str, id_field: str = None, epsg: int = None, spatial_ref: osr.SpatialReference = None) -> dict:
+ """[summary]
+
+ Args:
+ in_layer_path (str): [description]
+ id_field (str, optional): [description]. Defaults to None.
+ epsg (int, optional): [description]. Defaults to None.
+ spatial_ref (osr.SpatialReference, optional): [description]. Defaults to None.
+
+ Raises:
+ VectorBaseException: [description]
+
+ Returns:
+ dict: [description]
+ """
log = Logger('load_geometries')
+ if epsg is not None and spatial_ref is not None:
+ raise VectorBaseException('Specify either an EPSG or a spatial_ref. Not both')
+
with get_shp_or_gpkg(in_layer_path) as in_layer:
# Determine the transformation if user provides an EPSG
transform = None
- if epsg:
- _outref, transform = in_layer.get_transform_from_epsg(epsg)
+ if epsg is not None:
+ _outref, transform = VectorBase.get_transform_from_epsg(in_layer.spatial_ref, epsg)
+ elif spatial_ref is not None:
+ transform = in_layer.get_transform(in_layer.spatial_ref, spatial_ref)
features = {}
for feature, _counter, progbar in in_layer.iterate_features("Loading features"):
- reach = feature.GetField(id_field)
+ if id_field is None:
+ reach = feature.GetFID()
+ else:
+ reach = feature.GetField(id_field)
geom = feature.GetGeometryRef()
geo_type = geom.GetGeometryType()
@@ -585,7 +622,7 @@ def intersect_geometry_with_feature_class(geometry: BaseGeometry, in_layer_path:
return geom_inter
-def buffer_by_field(in_layer_path: str, field: str, epsg: int = None, min_buffer=None) -> BaseGeometry:
+def buffer_by_field(in_layer_path: str, out_layer_path, field: str, epsg: int = None, min_buffer=None) -> None:
"""generate buffered polygons by value in field
Args:
@@ -597,21 +634,38 @@ def buffer_by_field(in_layer_path: str, field: str, epsg: int = None, min_buffer
Returns:
geometry: unioned polygon geometry of buffered lines
"""
+ log = Logger('buffer_by_field')
- outpolys = []
- with get_shp_or_gpkg(in_layer_path) as in_layer:
- _out_spatial_ref, transform = in_layer.get_transform_from_epsg(epsg)
+ with get_shp_or_gpkg(out_layer_path, write=True) as out_layer, get_shp_or_gpkg(in_layer_path) as in_layer:
conversion = in_layer.rough_convert_metres_to_vector_units(1)
- for feature, _counter, _progbar in in_layer.iterate_features('Buffering'):
+ # Add input Layer Fields to the output Layer if it is the one we want
+ out_layer.create_layer(ogr.wkbPolygon, epsg=epsg, fields=in_layer.get_fields())
+
+ transform = VectorBase.get_transform(in_layer.spatial_ref, out_layer.spatial_ref)
+
+ for feature, _counter, progbar in in_layer.iterate_features('Buffering features', write_layers=[out_layer]):
geom = feature.GetGeometryRef()
+
+ if geom is None:
+ progbar.erase() # get around the progressbar
+ log.warning('Feature with FID={} has no geometry. Skipping'.format(feature.GetFID()))
+ continue
+
buffer_dist = feature.GetField(field) * conversion
+ geom.Transform(transform)
geom_buffer = geom.Buffer(buffer_dist if buffer_dist > min_buffer else min_buffer)
- outpolys.append(VectorBase.ogr2shapely(geom_buffer))
- # unary union
- outpoly = unary_union(outpolys)
- return outpoly
+ # Create output Feature
+ out_feature = ogr.Feature(out_layer.ogr_layer_def)
+ out_feature.SetGeometry(geom_buffer)
+
+ # Add field values from input Layer
+ for i in range(0, out_layer.ogr_layer_def.GetFieldCount()):
+ out_feature.SetField(out_layer.ogr_layer_def.GetFieldDefn(i).GetNameRef(), feature.GetField(i))
+
+ out_layer.ogr_layer.CreateFeature(out_feature)
+ out_feature = None
def polygonize(raster_path: str, band: int, out_layer_path: str, epsg: int = None):
@@ -639,7 +693,7 @@ def polygonize(raster_path: str, band: int, out_layer_path: str, epsg: int = Non
progbar = ProgressBar(100, 50, "Polygonizing raster")
- def poly_progress(progress, _msg, data_):
+ def poly_progress(progress, _msg, _data):
# double dfProgress, char const * pszMessage=None, void * pData=None
progbar.update(int(progress * 100))
diff --git a/packages/brat/sqlbrat/utils/load_hucs.py b/lib/commons/scripts/load_hucs.py
similarity index 100%
rename from packages/brat/sqlbrat/utils/load_hucs.py
rename to lib/commons/scripts/load_hucs.py
diff --git a/packages/brat/.vscode/launch.json b/packages/brat/.vscode/launch.json
index c14302f5..dd2d62ff 100644
--- a/packages/brat/.vscode/launch.json
+++ b/packages/brat/.vscode/launch.json
@@ -22,31 +22,27 @@
"console": "integratedTerminal",
"args": [
"${input:HUC}",
- "300",
- "50",
"{env:DATA_ROOT}/rs_context/${input:HUC}/topography/dem.tif",
"{env:DATA_ROOT}/rs_context/${input:HUC}/topography/slope.tif",
"{env:DATA_ROOT}/rs_context/${input:HUC}/topography/dem_hillshade.tif",
- "{env:DATA_ROOT}/rs_context/${input:HUC}/topography/flow_accum.tif",
- "{env:DATA_ROOT}/rs_context/${input:HUC}/topography/drainarea_sqkm.tif",
- "{env:DATA_ROOT}/rs_context/${input:HUC}/hydrology/NHDFlowline.shp",
+ "{env:DATA_ROOT}/rs_context/${input:HUC}/hydrology/hydrology.gpkg/network_intersected_300m",
"{env:DATA_ROOT}/rs_context/${input:HUC}/vegetation/existing_veg.tif",
"{env:DATA_ROOT}/rs_context/${input:HUC}/vegetation/historic_veg.tif",
- "{env:DATA_ROOT}/vbet/${input:HUC}/outputs/vbet_50.shp", //VBET!!!!!
+ "{env:DATA_ROOT}/vbet/${input:HUC}/outputs/vbet.gpkg/vbet_50", // VBET!!!!!
"{env:DATA_ROOT}/rs_context/${input:HUC}/transportation/roads.shp",
"{env:DATA_ROOT}/rs_context/${input:HUC}/transportation/railways.shp",
"{env:DATA_ROOT}/rs_context/${input:HUC}/transportation/canals.shp",
"{env:DATA_ROOT}/rs_context/${input:HUC}/ownership/ownership.shp",
- "30", //streamside_buffer
- "100", //riparian_buffer
- "5407.46", //max_drainage_area
- "100", //elevation_buffer
+ "30", // streamside_buffer
+ "100", // riparian_buffer
+ "100", // elevation_buffer
"{env:DATA_ROOT}/brat/${input:HUC}", // output folder
"--reach_codes", "33400,33600,33601,33603,46000,46003,46006,46007,55800",
- "--canal_codes", "33600, 33601, 33603",
+ "--canal_codes", "33600,33601,33603",
+ "--peren_codes", "46006",
"--flow_areas", "{env:DATA_ROOT}/rs_context/${input:HUC}/hydrology/NHDArea.shp",
"--waterbodies", "{env:DATA_ROOT}/rs_context/${input:HUC}/hydrology/NHDWaterbody.shp",
- "--max_waterbody", "100", //max_waterbody
+ "--max_waterbody", "100", // max_waterbody
"--verbose"
]
},
diff --git a/packages/brat/.vscode/settings.json b/packages/brat/.vscode/settings.json
index 949fafdb..8438764a 100644
--- a/packages/brat/.vscode/settings.json
+++ b/packages/brat/.vscode/settings.json
@@ -5,7 +5,7 @@
"editor.formatOnSave": true,
},
"python.linting.pylintArgs": [
- "--extension-pkg-whitelist=scipy",
+ "--extension-pkg-whitelist=scipy,rasterio",
"--ignore=E501",
"--max-line-length=240"
],
diff --git a/packages/brat/database/brat_schema.sql b/packages/brat/database/brat_schema.sql
index 8c78f024..7d9e22c8 100644
--- a/packages/brat/database/brat_schema.sql
+++ b/packages/brat/database/brat_schema.sql
@@ -5,7 +5,7 @@ CREATE TABLE DamRisks (RiskID INTEGER PRIMARY KEY UNIQUE NOT NULL, Name TEXT UNI
CREATE TABLE DamCapacities (CapacityID INTEGER PRIMARY KEY NOT NULL, Name TEXT UNIQUE NOT NULL, MinCapacity REAL, MaxCapacity REAL);
CREATE TABLE Epochs (EpochID INTEGER PRIMARY KEY NOT NULL, Name TEXT NOT NULL UNIQUE, Metadata TEXT, Notes TEXT);
CREATE TABLE ReachCodes (ReachCode INTEGER PRIMARY KEY NOT NULL, Name TEXT NOT NULL, DisplayName TEXT, Description TEXT NOT NULL);
-CREATE TABLE ReachVegetation (ReachID INTEGER REFERENCES Reaches ON DELETE CASCADE NOT NULL, VegetationID INTEGER REFERENCES VegetationTypes (VegetationID) NOT NULL, Buffer REAL NOT NULL CONSTRAINT CHK_ReachVegetation_Buffer CHECK (Buffer > 0), Area REAL NOT NULL CONSTRAINT CHK_ReachVegetation_Area CHECK (Area > 0), CellCount REAL NOT NULL CONSTRAINT CHK_ReachVegetation_CellCount CHECK (CellCount > 0), PRIMARY KEY (ReachID, VegetationID, Buffer));
+CREATE TABLE ReachVegetation (ReachID INTEGER REFERENCES ReachAttributes ON DELETE CASCADE NOT NULL, VegetationID INTEGER REFERENCES VegetationTypes (VegetationID) NOT NULL, Buffer REAL NOT NULL CONSTRAINT CHK_ReachVegetation_Buffer CHECK (Buffer > 0), Area REAL NOT NULL CONSTRAINT CHK_ReachVegetation_Area CHECK (Area > 0), CellCount REAL NOT NULL CONSTRAINT CHK_ReachVegetation_CellCount CHECK (CellCount > 0), PRIMARY KEY (ReachID, VegetationID, Buffer));
CREATE TABLE MetaData (KeyInfo TEXT PRIMARY KEY NOT NULL, ValueInfo TEXT);
CREATE TABLE LandUses (LandUseID INTEGER PRIMARY KEY NOT NULL, Name TEXT UNIQUE NOT NULL, Intensity REAL NOT NULL CONSTRAINT CHK_LandUses_Itensity CHECK (Intensity >= 0 AND Intensity <= 1) DEFAULT (0));
CREATE TABLE Agencies (AgencyID INTEGER PRIMARY KEY NOT NULL UNIQUE, Name TEXT NOT NULL UNIQUE, Abbreviation TEXT NOT NULL UNIQUE);
@@ -14,7 +14,7 @@ CREATE TABLE VegetationOverrides (EcoregionID INTEGER REFERENCES Ecoregions (Eco
CREATE TABLE WatershedHydroParams (WatershedID TEXT REFERENCES Watersheds (WatershedID) ON DELETE CASCADE NOT NULL, ParamID INTEGER REFERENCES HydroParams (ParamID) NOT NULL, Value REAL NOT NULL, PRIMARY KEY (WatershedID, ParamID));
CREATE TABLE Watersheds (WatershedID TEXT PRIMARY KEY NOT NULL UNIQUE, Name TEXT NOT NULL, AreaSqKm REAL CONSTRAINT CHK_HUCs_Area CHECK (AreaSqKm >= 0), States TEXT, Geometry STRING, EcoregionID INTEGER REFERENCES Ecoregions (EcoregionID), QLow TEXT, Q2 TEXT, MaxDrainage REAL CHECK (MaxDrainage >= 0), Metadata TEXT, Notes TEXT);
CREATE TABLE VegetationTypes (VegetationID INTEGER PRIMARY KEY NOT NULL, EpochID INTEGER REFERENCES Epochs (EpochID) NOT NULL, Name TEXT NOT NULL, DefaultSuitability INTEGER CONSTRAINT CHK_VegetationTypes_DefaultSuitability CHECK (DefaultSuitability >= 0 AND DefaultSuitability <= 4) NOT NULL DEFAULT (0), LandUseID INTEGER REFERENCES LandUses (LandUseID), Physiognomy TEXT, Notes TEXT);
-CREATE TABLE Reaches (ReachID INTEGER PRIMARY KEY NOT NULL, WatershedID TEXT REFERENCES Watersheds (WatershedID) ON DELETE CASCADE, Geometry TEXT, ReachCode INTEGER REFERENCES ReachCodes (ReachCode), IsPeren INTEGER NOT NULL DEFAULT (0), StreamName TEXT, Orig_DA REAL, iGeo_Slope REAL, iGeo_ElMax REAL, iGeo_ElMin REAL, iGeo_Len REAL CONSTRAINT CHK_Reaches_LengthKm CHECK (iGeo_Len > 0), iGeo_DA REAL CONSTRAINT CK_Reaches_DrainageAreaSqKm CHECK (iGeo_DA >= 0), iVeg100EX REAL CONSTRAINT CHK_Reaches_ExistingVeg100 CHECK ((iVeg100EX >= 0) AND (iVeg100EX <= 4)), iVeg_30EX REAL CONSTRAINT CHK_Reaches_ExistingVeg30 CHECK ((iVeg_30EX >= 0) AND (iVeg_30EX <= 4)), iVeg100HPE REAL CONSTRAINT CHK_Reaches_HistoricVeg100 CHECK ((iVeg100HPE >= 0) AND (iVeg100HPE <= 4)), iVeg_30HPE REAL CONSTRAINT CH_Reaches_HistoricVeg30 CHECK ((iVeg_30HPE >= 0) AND (iVeg_30HPE <= 4)), iPC_Road REAL CONSTRAINT CHK_Reaches_RoadDist CHECK ((iPC_Road >= 0)), iPC_RoadX REAL CONSTRAINT CHK_Reaches_RoadCrossDist CHECK (iPC_RoadX >= 0), iPC_RoadVB REAL CONSTRAINT CGK_Reaches_RoadVBDist CHECK (iPC_RoadVB >= 0), iPC_Rail REAL CONSTRAINT CHK_Reaches_RailDist CHECK (iPC_Rail >= 0), iPC_RailVB REAL CONSTRAINT CHK_Reaches_RailVBDist CHECK (iPC_RailVB >= 0), iPC_LU REAL, iPC_VLowLU REAL, iPC_LowLU REAL, iPC_ModLU REAL, iPC_HighLU REAL, iHyd_QLow REAL CONSTRAINT CHK_Reaches_QLow CHECK (iHyd_QLow >= 0), iHyd_Q2 REAL CONSTRAINT CHK_Reaches_Q2 CHECK (iHyd_Q2 >= 0), iHyd_SPLow REAL CONSTRAINT CHK_Reaches_StreamPowerLow CHECK (iHyd_SPLow >= 0), iHyd_SP2 REAL CONSTRAINT CHK_Reaches_StreamPower2 CHECK (iHyd_SP2 >= 0), AgencyID INTEGER REFERENCES Agencies (AgencyID), oVC_HPE REAL, oVC_EX REAL, oCC_HPE REAL, mCC_HPE_CT REAL, oCC_EX REAL, mCC_EX_CT REAL, LimitationID INTEGER REFERENCES DamLimitations (LimitationID), RiskID INTEGER REFERENCES DamRisks (RiskID), OpportunityID INTEGER REFERENCES DamOpportunities (OpportunityID), iPC_Canal REAL, iPC_DivPts REAL, iPC_Privat REAL, oPC_Dist REAL, IsMainCh INTEGER, IsMultiCh INTEGER, mCC_HisDep REAL);
+CREATE TABLE ReachAttributes (ReachID INTEGER PRIMARY KEY NOT NULL, WatershedID TEXT REFERENCES Watersheds (WatershedID) ON DELETE CASCADE, ReachCode INTEGER REFERENCES ReachCodes (ReachCode), IsPeren INTEGER NOT NULL DEFAULT (0), StreamName TEXT, Orig_DA REAL, iGeo_Slope REAL, iGeo_ElMax REAL, iGeo_ElMin REAL, iGeo_Len REAL CONSTRAINT CHK_Reaches_LengthKm CHECK (iGeo_Len > 0), iGeo_DA REAL CONSTRAINT CK_Reaches_DrainageAreaSqKm CHECK (iGeo_DA >= 0), iVeg100EX REAL CONSTRAINT CHK_Reaches_ExistingVeg100 CHECK ((iVeg100EX >= 0) AND (iVeg100EX <= 4)), iVeg_30EX REAL CONSTRAINT CHK_Reaches_ExistingVeg30 CHECK ((iVeg_30EX >= 0) AND (iVeg_30EX <= 4)), iVeg100HPE REAL CONSTRAINT CHK_Reaches_HistoricVeg100 CHECK ((iVeg100HPE >= 0) AND (iVeg100HPE <= 4)), iVeg_30HPE REAL CONSTRAINT CH_Reaches_HistoricVeg30 CHECK ((iVeg_30HPE >= 0) AND (iVeg_30HPE <= 4)), iPC_Road REAL CONSTRAINT CHK_Reaches_RoadDist CHECK ((iPC_Road >= 0)), iPC_RoadX REAL CONSTRAINT CHK_Reaches_RoadCrossDist CHECK (iPC_RoadX >= 0), iPC_RoadVB REAL CONSTRAINT CGK_Reaches_RoadVBDist CHECK (iPC_RoadVB >= 0), iPC_Rail REAL CONSTRAINT CHK_Reaches_RailDist CHECK (iPC_Rail >= 0), iPC_RailVB REAL CONSTRAINT CHK_Reaches_RailVBDist CHECK (iPC_RailVB >= 0), iPC_LU REAL, iPC_VLowLU REAL, iPC_LowLU REAL, iPC_ModLU REAL, iPC_HighLU REAL, iHyd_QLow REAL CONSTRAINT CHK_Reaches_QLow CHECK (iHyd_QLow >= 0), iHyd_Q2 REAL CONSTRAINT CHK_Reaches_Q2 CHECK (iHyd_Q2 >= 0), iHyd_SPLow REAL CONSTRAINT CHK_Reaches_StreamPowerLow CHECK (iHyd_SPLow >= 0), iHyd_SP2 REAL CONSTRAINT CHK_Reaches_StreamPower2 CHECK (iHyd_SP2 >= 0), AgencyID INTEGER REFERENCES Agencies (AgencyID), oVC_HPE REAL, oVC_EX REAL, oCC_HPE REAL, mCC_HPE_CT REAL, oCC_EX REAL, mCC_EX_CT REAL, LimitationID INTEGER REFERENCES DamLimitations (LimitationID), RiskID INTEGER REFERENCES DamRisks (RiskID), OpportunityID INTEGER REFERENCES DamOpportunities (OpportunityID), iPC_Canal REAL, iPC_DivPts REAL, iPC_Privat REAL, oPC_Dist REAL, IsMainCh INTEGER, IsMultiCh INTEGER, mCC_HisDep REAL);
CREATE TABLE HydroParams (ParamID INTEGER PRIMARY KEY NOT NULL, Name TEXT UNIQUE NOT NULL, Description TEXT NOT NULL, Aliases TEXT, DataUnits TEXT NOT NULL, EquationUnits TEXT, Conversion REAL NOT NULL DEFAULT (1), Definition TEXT);
CREATE INDEX FK_ReachVegetation_ReachID ON ReachVegetation (ReachID);
CREATE INDEX FK_ReachVegetation_VegetationID ON ReachVegetation (VegetationID);
@@ -25,14 +25,35 @@ CREATE INDEX IX_Watersheds_States ON Watersheds (States);
CREATE INDEX FK_VegetationTypes_EpochID ON VegetationTypes (EpochID);
CREATE INDEX IX_VegetationTypes_DefaultSuitability ON VegetationTypes (DefaultSuitability DESC);
CREATE INDEX FK_VegetationTypes_LandUseID ON VegetationTypes (LandUseID);
-CREATE INDEX FX_Reaches_FCode ON Reaches (ReachCode);
-CREATE INDEX FX_Reaches_HUC ON Reaches (WatershedID);
-CREATE INDEX FX_Reaches_DamRiskID ON Reaches (RiskID);
-CREATE INDEX FX_Reaches_DamLimitationID ON Reaches (LimitationID);
-CREATE INDEX FX_Reaches_AgencyID ON Reaches (AgencyID);
-CREATE INDEX FX_Reaches_OpportunityID ON Reaches (OpportunityID);
-CREATE VIEW vwReaches AS SELECT R.*, W.Name Watershed, RC.DisplayName ReachType, A.Name Agency, DL.Name Limitation, DR.Name Risk, DD.Name Opportunity FROM Reaches R INNER JOIN Watersheds W ON R.WatershedID = W.WatershedID LEFT JOIN ReachCodes RC ON R.ReachCode = RC.ReachCode LEFT JOIN Agencies A ON R.AgencyID = A.AgencyID LEFT JOIN DamRisks DR ON R.RiskID = DR.RiskID LEFT JOIN DamLimitations DL ON R.LimitationID = DL.LimitationID LEFT JOIN DamOpportunities DD ON R.OpportunityID = DD.OpportunityID
-/* vwReaches(ReachID,WatershedID,Geometry,ReachCode,IsPeren,StreamName,Orig_DA,iGeo_Slope,iGeo_ElMax,iGeo_ElMin,iGeo_Len,iGeo_DA,iVeg100EX,iVeg_30EX,iVeg100HPE,iVeg_30HPE,iPC_Road,iPC_RoadX,iPC_RoadVB,iPC_Rail,iPC_RailVB,iPC_LU,iPC_VLowLU,iPC_LowLU,iPC_ModLU,iPC_HighLU,iHyd_QLow,iHyd_Q2,iHyd_SPLow,iHyd_SP2,AgencyID,oVC_HPE,oVC_EX,oCC_HPE,mCC_HPE_CT,oCC_EX,mCC_EX_CT,LimitationID,RiskID,OpportunityID,iPC_Canal,iPC_DivPts,iPC_Privat,oPC_Dist,IsMainCh,IsMultiCh,mCC_HisDep,Watershed,ReachType,Agency,Limitation,Risk,Opportunity) */;
+CREATE INDEX FX_Reaches_FCode ON ReachAttributes (ReachCode);
+CREATE INDEX FX_Reaches_HUC ON ReachAttributes (WatershedID);
+CREATE INDEX FX_Reaches_DamRiskID ON ReachAttributes (RiskID);
+CREATE INDEX FX_Reaches_DamLimitationID ON ReachAttributes (LimitationID);
+CREATE INDEX FX_Reaches_AgencyID ON ReachAttributes (AgencyID);
+CREATE INDEX FX_Reaches_OpportunityID ON ReachAttributes (OpportunityID);
+
+-- Non-spatial view of BRAT results with joins to the relevant tables
+CREATE VIEW vwReachAttributes AS
+SELECT R.*,
+ W.Name Watershed,
+ RC.DisplayName ReachType,
+ A.Name Agency,
+ DL.Name Limitation,
+ DR.Name Risk,
+ DD.Name Opportunity
+FROM ReachAttributes R
+ INNER JOIN Watersheds W ON R.WatershedID = W.WatershedID
+ LEFT JOIN ReachCodes RC ON R.ReachCode = RC.ReachCode
+ LEFT JOIN Agencies A ON R.AgencyID = A.AgencyID
+ LEFT JOIN DamRisks DR ON R.RiskID = DR.RiskID
+ LEFT JOIN DamLimitations DL ON R.LimitationID = DL.LimitationID
+ LEFT JOIN DamOpportunities DD ON R.OpportunityID = DD.OpportunityID;
+
+-- The main BRAT view that RAVE uses and end users should interact with
+CREATE VIEW vwReaches AS SELECT R.*, G.geom
+FROM vwReachAttributes R
+ INNER JOIN ReachGeometry G ON R.ReachID = G.ReachID;
+
CREATE VIEW vwHydroParams AS SELECT W.WatershedID,
W.Name AS Watershed,
W.States,
@@ -105,7 +126,7 @@ CREATE VIEW vwReachVegetationTypes AS SELECT E.EpochID,
INNER JOIN
Epochs E ON VT.EpochID = E.EpochID
INNER JOIN
- Reaches R ON RV.ReachID = R.ReachID
+ ReachAttributes R ON RV.ReachID = R.ReachID
INNER JOIN
Watersheds W ON R.WatershedID = W.WatershedID
INNER JOIN
@@ -115,5 +136,29 @@ CREATE VIEW vwReachVegetationTypes AS SELECT E.EpochID,
Buffer,
W.EcoregionID
ORDER BY E.Name,
- TotalArea DESC
+ TotalArea DESC;
/* vwReachVegetationTypes(EpochID,Epoch,VegetationID,Name,Buffer,TotalArea) */
+
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('Ecoregions', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('DamLimitations', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('DamOpportunities', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('DamRisks', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('DamCapacities', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('Epochs', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('ReachCodes', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('ReachVegetation', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('MetaData', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('LandUses', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('Agencies', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('LandUseIntensities', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('VegetationOverrides', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('WatershedHydroParams', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('Watersheds', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('VegetationTypes', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('ReachAttibutes', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('HydroParams', 'attributes');
+
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('vwReachAttributes', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('vwHydroParams', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('vwVegetationSuitability', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('vwReachVegetationTypes', 'attributes');
\ No newline at end of file
diff --git a/packages/brat/database/data/VegetationTypes.csv b/packages/brat/database/data/VegetationTypes.csv
index 35232294..c3f4266f 100644
--- a/packages/brat/database/data/VegetationTypes.csv
+++ b/packages/brat/database/data/VegetationTypes.csv
@@ -1,4 +1,5 @@
VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
+-9999,1,No Data,0,,,
11,2,Open Water,4,,,Test
12,2,PerennialIce/Snow,0,,,
31,2,Barren-Rock/Sand/Clay,0,,,
@@ -13,7 +14,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
390,2,Inter-Mountain Basins Big Sagebrush Steppe,2,,,
391,2,Rocky Mountain Lower Montane-Foothill Shrubland,3,,,
392,2,Apacherian-Chihuahuan Mesquite Upland Scrub,0,,,
-393,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,0,,,
+393,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,1,,,
394,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland,0,,,
395,2,Mojave Mid-Elevation Mixed Desert Scrub,0,,,
396,2,Southern Rocky Mountain Montane-Subalpine Grassland,1,,,
@@ -913,9 +914,9 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1290,2,Western Great Plains Wooded Draw and Ravine,3,,,
1291,2,Great Plains Prairie Pothole,1,,,
1292,2,Western Great Plains Depressional Wetland Systems,1,,,
-1293,2,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
+1293,2,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
1294,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,0,,,
-1295,2,Atlantic Coastal Plain Mesic Hardwood Forest,0,,,
+1295,2,Atlantic Coastal Plain Mesic Hardwood Forest,2,,,
1296,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,0,,,
1297,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland,0,,,
1298,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,0,,,
@@ -924,9 +925,9 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1301,2,East Gulf Coastal Plain Maritime Forest,0,,,
1302,2,Southern Atlantic Coastal Plain Maritime Forest,0,,,
1303,2,Florida Peninsula Inland Scrub,0,,,
-1304,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,0,,,
-1305,2,Central Florida Pine Flatwoods,0,,,
-1306,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,0,,,
+1304,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,1,,,
+1305,2,Central Florida Pine Flatwoods,1,,,
+1306,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,1,,,
1307,2,Southern Coastal Plain Nonriverine Cypress Dome,0,,,
1308,2,Southern Coastal Plain Seepage Swamp and Baygall,0,,,
1309,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,0,,,
@@ -936,8 +937,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1313,2,East Gulf Coastal Plain Savanna and Wet Prairie,1,,,
1314,2,Floridian Highlands Freshwater Marsh,0,,,
1315,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
-1316,2,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
-1317,2,South Florida Hardwood Hammock,0,,,
+1316,2,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
+1317,2,South Florida Hardwood Hammock,2,,,
1318,2,Southwest Florida Coastal Strand and Maritime Hammock,0,,,
1319,2,Southeast Florida Coastal Strand and Maritime Hammock,0,,,
1320,2,Florida Longleaf Pine Sandhill,0,,,
@@ -945,10 +946,10 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1322,2,Florida Peninsula Inland Scrub,0,,,
1323,2,Florida Dry Prairie,1,,,
1324,2,South Florida Dwarf Cypress Savanna,0,,,
-1325,2,South Florida Pine Flatwoods,0,,,
+1325,2,South Florida Pine Flatwoods,1,,,
1326,2,South Florida Cypress Dome,0,,,
-1327,2,Central Florida Pine Flatwoods,0,,,
-1328,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,0,,,
+1327,2,Central Florida Pine Flatwoods,1,,,
+1328,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,1,,,
1329,2,Southern Coastal Plain Nonriverine Cypress Dome,0,,,
1330,2,Southern Coastal Plain Seepage Swamp and Baygall,0,,,
1331,2,Caribbean Coastal Wetland Systems,0,,,
@@ -1004,7 +1005,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1381,2,Southern Rocky Mountain Pinyon-Juniper Woodland,2,,,
1382,2,Chihuahuan Creosotebush Desert Scrub,0,,,
1383,2,Chihuahuan Mixed Salt Desert Scrub,1,,,
-1384,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,0,,,
+1384,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,1,,,
1385,2,Chihuahuan Succulent Desert Scrub,0,,,
1386,2,Rocky Mountain Lower Montane-Foothill Shrubland,3,,,
1387,2,Western Great Plains Sandhill Steppe,0,,,
@@ -1055,33 +1056,33 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1432,2,Western Great Plains Depressional Wetland Systems - Saline,0,,,
1433,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Tobosa Grassland,1,,,
1434,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Alkali Sacaton,1,,,
-1435,2,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
+1435,2,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
1436,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,0,,,
1437,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,0,,,
-1438,2,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+1438,2,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
1439,2,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,0,,,
1440,2,Southern Blackland Tallgrass Prairie,1,,,
1441,2,West Gulf Coastal Plain Northern Calcareous Prairie,1,,,
1442,2,West Gulf Coastal Plain Southern Calcareous Prairie,1,,,
1443,2,Texas-Louisiana Coastal Prairie,1,,,
-1444,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,,,
-1445,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,0,,,
+1444,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
+1445,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,2,,,
1446,2,Gulf and Atlantic Coastal Plain Floodplain Systems,4,,,
1447,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,0,,,
1448,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1449,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
-1450,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,0,,,
+1450,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,2,,,
1451,2,East-Central Texas Plains Post Oak Savanna and Woodland,0,,,
1452,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,0,,,
-1453,2,Atlantic Coastal Plain Mesic Hardwood Forest,0,,,
+1453,2,Atlantic Coastal Plain Mesic Hardwood Forest,2,,,
1454,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,0,,,
1455,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland,0,,,
1456,2,Southern Coastal Plain Mesic Slope Forest,0,,,
1457,2,Central Atlantic Coastal Plain Maritime Forest,0,,,
1458,2,Southern Atlantic Coastal Plain Maritime Forest,0,,,
1459,2,Southern Atlantic Coastal Plain Dune and Maritime Grassland,1,,,
-1460,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,,,
-1461,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,0,,,
+1460,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
+1461,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,1,,,
1462,2,Atlantic Coastal Plain Peatland Pocosin and Canebrake,0,,,
1463,2,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland,0,,,
1464,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,0,,,
@@ -1089,7 +1090,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1466,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,0,,,
1467,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1468,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
-1469,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,0,,,
+1469,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,2,,,
1470,2,Inter-Mountain Basins Sparsely Vegetated Systems,0,,,
1471,2,Western Great Plains Sparsely Vegetated Systems,0,,,
1472,2,Rocky Mountain Aspen Forest and Woodland,2,,,
@@ -1124,44 +1125,44 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1501,2,Western Great Plains Depressional Wetland Systems,0,,,
1502,2,Chihuahuan Loamy Plains Desert Grassland,1,,,
1503,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,1,,,
-1504,2,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
+1504,2,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
1505,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,0,,,
1506,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,0,,,
-1507,2,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+1507,2,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
1508,2,Mississippi Delta Maritime Forest,0,,,
1509,2,Texas-Louisiana Coastal Prairie,1,,,
-1510,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,,,
-1511,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,0,,,
+1510,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
+1511,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,2,,,
1512,2,Gulf and Atlantic Coastal Plain Floodplain Systems,4,,,
1513,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,0,,,
1514,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1515,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
1516,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems,0,,,
1517,2,Southern Crowley`s Ridge Mesic Loess Slope Forest,0,,,
-1518,2,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
+1518,2,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
1519,2,East Gulf Coastal Plain Northern Loess Bluff Forest,0,,,
1520,2,East Gulf Coastal Plain Southern Loess Bluff Forest,0,,,
1521,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,0,,,
-1522,2,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+1522,2,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
1523,2,Lower Mississippi River Dune Woodland and Forest,0,,,
1524,2,West Gulf Coastal Plain Southern Calcareous Prairie,1,,,
1525,2,Lower Mississippi Alluvial Plain Grand Prairie,1,,,
-1526,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,0,,,
+1526,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,2,,,
1527,2,Gulf and Atlantic Coastal Plain Floodplain Systems,4,,,
1528,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,0,,,
1529,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1530,2,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,0,,,
1531,2,Northern Crowley`s Ridge Sand Forest,0,,,
-1532,2,Lower Mississippi River Flatwoods,0,,,
-1561,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
-1562,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,0,,,
+1532,2,Lower Mississippi River Flatwoods,1,,,
+1561,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
+1562,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,2,,,
1563,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
1564,2,North-Central Interior Dry Oak Forest and Woodland,0,,,
1565,2,North-Central Interior Beech-Maple Forest,0,,,
1566,2,North-Central Interior Maple-Basswood Forest,0,,,
1567,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
-1568,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,0,,,
-1569,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+1568,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,2,,,
+1569,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
1570,2,North-Central Interior Oak Savanna,0,,,
1571,2,North-Central Oak Barrens,0,,,
1572,2,Laurentian Pine-Oak Barrens,0,,,
@@ -1175,22 +1176,22 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1580,2,Laurentian-Acadian Floodplain Systems,4,,,
1581,2,Boreal Acidic Peatland Systems,0,,,
1582,2,Central Interior and Appalachian Swamp Systems,0,,,
-1583,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,0,,,
+1583,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,2,,,
1584,2,Great Lakes Coastal Marsh Systems,0,,,
1585,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,0,,,
1586,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,0,,,
1587,2,Paleozoic Plateau Bluff and Talus,0,,,
-1588,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
-1589,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,0,,,
+1588,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
+1589,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,2,,,
1590,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
1591,2,North-Central Interior Maple-Basswood Forest,0,,,
1592,2,Eastern Great Plains Tallgrass Aspen Parkland,0,,,
1593,2,Boreal Jack Pine-Black Spruce Forest,0,,,
1594,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
1595,2,Laurentian-Acadian Northern Pine Forest,0,,,
-1596,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,0,,,
-1597,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal,0,,,
-1598,2,Boreal White Spruce-Fir-Hardwood Forest - Aspen-Birch,0,,,
+1596,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,2,,,
+1597,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal,2,,,
+1598,2,Boreal White Spruce-Fir-Hardwood Forest - Aspen-Birch,2,,,
1599,2,North-Central Interior Oak Savanna,0,,,
1600,2,North-Central Oak Barrens,0,,,
1601,2,Laurentian Pine-Oak Barrens,0,,,
@@ -1202,22 +1203,22 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1607,2,Laurentian-Acadian Floodplain Systems,4,,,
1608,2,Boreal Acidic Peatland Systems,0,,,
1609,2,Central Interior and Appalachian Swamp Systems,0,,,
-1610,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,0,,,
+1610,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,2,,,
1611,2,Great Lakes Coastal Marsh Systems,0,,,
1612,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,0,,,
1613,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,0,,,
-1614,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
-1615,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,0,,,
+1614,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
+1615,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,2,,,
1616,2,Northern Sugar Maple-Basswood Forest,0,,,
1617,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
1618,2,North-Central Interior Dry Oak Forest and Woodland,0,,,
1619,2,North-Central Interior Beech-Maple Forest,0,,,
1620,2,Great Lakes Pine Barrens,0,,,
-1621,2,Great Lakes Spruce-Fir,0,,,
+1621,2,Great Lakes Spruce-Fir,2,,,
1622,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
-1623,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,0,,,
-1624,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal,0,,,
-1625,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+1623,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,2,,,
+1624,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal,2,,,
+1625,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
1626,2,North-Central Interior Oak Savanna,0,,,
1627,2,North-Central Oak Barrens,0,,,
1628,2,Laurentian Pine-Oak Barrens,0,,,
@@ -1231,7 +1232,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1636,2,Laurentian-Acadian Floodplain Systems,4,,,
1637,2,Boreal Acid Peatland Systems,0,,,
1638,2,Central Interior and Appalachian Swamp Systems,0,,,
-1639,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,0,,,
+1639,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,2,,,
1640,2,Great Lakes Coastal Marsh Systems,0,,,
1641,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,0,,,
1642,2,Western Great Plains Dry Bur Oak Forest and Woodland,0,,,
@@ -1239,10 +1240,10 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1644,2,Western Great Plains Tallgrass Prairie,1,,,
1645,2,Western Great Plains Floodplain Systems,4,,,
1646,2,Boreal Aspen-Birch Forest,0,,,
-1647,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
+1647,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
1648,2,North-Central Interior Maple-Basswood Forest,0,,,
1649,2,Eastern Great Plains Tallgrass Aspen Parkland,0,,,
-1650,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,0,,,
+1650,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,2,,,
1651,2,Western Great Plains Wooded Draw and Ravine,0,,,
1652,2,North-Central Interior Oak Savanna,0,,,
1653,2,North-Central Interior Sand and Gravel Tallgrass Prairie,1,,,
@@ -1291,11 +1292,11 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1696,2,Western Great Plains Floodplain Systems,4,,,
1697,2,Ozark-Ouachita Dry-Mesic Oak Forest,0,,,
1698,2,Crosstimbers Oak Forest and Woodland,0,,,
-1699,2,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
-1700,2,Ozark-Ouachita Mesic Hardwood Forest,0,,,
+1699,2,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
+1700,2,Ozark-Ouachita Mesic Hardwood Forest,2,,,
1701,2,Ozark-Ouachita Dry Oak Woodland,0,,,
1702,2,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,0,,,
-1703,2,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+1703,2,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
1704,2,Edwards Plateau Limestone Savanna and Woodland,0,,,
1705,2,Edwards Plateau Limestone Shrubland,0,,,
1706,2,Southern Blackland Tallgrass Prairie,1,,,
@@ -1332,11 +1333,11 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1737,2,Edwards Plateau Dry-Mesic Slope Forest and Woodland,0,,,
1738,2,Edwards Plateau Mesic Canyon,0,,,
1739,2,Edwards Plateau Riparian,0,,,
-1740,2,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
+1740,2,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
1741,2,Central and South Texas Coastal Fringe Forest and Woodland,0,,,
1742,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,0,,,
1743,2,East-Central Texas Plains Southern Pine Forest and Woodland,2,,,
-1744,2,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+1744,2,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
1745,2,Edwards Plateau Limestone Savanna and Woodland,0,,,
1746,2,Tamaulipan Mixed Deciduous Thornscrub,0,,,
1747,2,Tamaulipan Calcareous Thornscrub,0,,,
@@ -1356,19 +1357,19 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1761,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
1762,2,Western Great Plains Depressional Wetland Systems,0,,,
1763,2,East-Central Texas Plains Post Oak Savanna and Woodland,0,,,
-1764,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,0,,,
-1765,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,0,,,
+1764,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,2,,,
+1765,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,2,,,
1766,2,East Gulf Coastal Plain Northern Loess Bluff Forest,0,,,
1767,2,East Gulf Coastal Plain Limestone Forest,0,,,
1768,2,East Gulf Coastal Plain Southern Loess Bluff Forest,0,,,
-1769,2,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
+1769,2,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
1770,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,0,,,
1771,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
1772,2,Southern Coastal Plain Mesic Slope Forest,0,,,
1773,2,Southern Piedmont Dry Oak(-Pine) Forest,0,,,
1774,2,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest,0,,,
1775,2,Southern Coastal Plain Blackland Prairie and Woodland,2,,,
-1776,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,0,,,
+1776,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,2,,,
1777,2,Southern Coastal Plain Seepage Swamp and Baygall,0,,,
1778,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,0,,,
1779,2,Central Interior and Appalachian Riparian Systems,0,,,
@@ -1377,15 +1378,15 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1782,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1783,2,East Gulf Coastal Plain Limestone Forest,0,,,
1784,2,East Gulf Coastal Plain Southern Loess Bluff Forest,0,,,
-1785,2,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
+1785,2,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
1786,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,0,,,
1787,2,Florida Longleaf Pine Sandhill,0,,,
1788,2,Southern Coastal Plain Mesic Slope Forest,0,,,
1789,2,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest,0,,,
1790,2,East Gulf Coastal Plain Maritime Forest,0,,,
1791,2,East Gulf Coastal Plain Dune and Coastal Grassland,1,,,
-1792,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,0,,,
-1793,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,0,,,
+1792,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,1,,,
+1793,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,2,,,
1794,2,Southern Coastal Plain Nonriverine Cypress Dome,0,,,
1795,2,Southern Coastal Plain Seepage Swamp and Baygall,0,,,
1796,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,0,,,
@@ -1406,14 +1407,14 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1811,2,Southern Piedmont Dry Oak(-Pine) Forest,0,,,
1812,2,Central Interior and Appalachian Floodplain Systems,4,,,
1813,2,Central Interior and Appalachian Riparian Systems,0,,,
-1814,2,Southern Appalachian Northern Hardwood Forest,0,,,
+1814,2,Southern Appalachian Northern Hardwood Forest,2,,,
1815,2,Southern Appalachian Oak Forest,0,,,
1816,2,Southern Piedmont Mesic Forest,0,,,
1817,2,Allegheny-Cumberland Dry Oak Forest and Woodland,0,,,
1818,2,Southern and Central Appalachian Cove Forest,0,,,
1819,2,Central and Southern Appalachian Montane Oak Forest,0,,,
1820,2,South-Central Interior Mesophytic Forest,0,,,
-1821,2,Central and Southern Appalachian Spruce-Fir Forest,0,,,
+1821,2,Central and Southern Appalachian Spruce-Fir Forest,2,,,
1822,2,Southern Appalachian Montane Pine Forest and Woodland,0,,,
1823,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
1824,2,Southern Piedmont Dry Oak(-Pine) Forest,0,,,
@@ -1422,8 +1423,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1827,2,Central Interior and Appalachian Floodplain Systems,4,,,
1828,2,Central Interior and Appalachian Riparian Systems,0,,,
1829,2,Southern Piedmont Mesic Forest,0,,,
-1830,2,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
-1831,2,Atlantic Coastal Plain Mesic Hardwood Forest,0,,,
+1830,2,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
+1831,2,Atlantic Coastal Plain Mesic Hardwood Forest,2,,,
1832,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,0,,,
1833,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,0,,,
1834,2,Southeastern Interior Longleaf Pine Woodland,0,,,
@@ -1434,9 +1435,9 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1839,2,Central Interior and Appalachian Riparian Systems,0,,,
1840,2,Northeastern Interior Dry-Mesic Oak Forest,0,,,
1841,2,Southern Piedmont Mesic Forest,0,,,
-1842,2,Northern Atlantic Coastal Plain Hardwood Forest,0,,,
+1842,2,Northern Atlantic Coastal Plain Hardwood Forest,2,,,
1843,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,0,,,
-1844,2,Atlantic Coastal Plain Mesic Hardwood Forest,0,,,
+1844,2,Atlantic Coastal Plain Mesic Hardwood Forest,2,,,
1845,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland,0,,,
1846,2,Southern Appalachian Montane Pine Forest and Woodland,0,,,
1847,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
@@ -1444,13 +1445,13 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1849,2,Central Atlantic Coastal Plain Maritime Forest,0,,,
1850,2,Southern Piedmont Dry Oak(-Pine) Forest,0,,,
1851,2,Central Appalachian Dry Oak-Pine Forest,0,,,
-1852,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
+1852,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
1853,2,Eastern Serpentine Woodland,0,,,
1854,2,Central Appalachian Pine-Oak Rocky Woodland,0,,,
1855,2,Northern Atlantic Coastal Plain Maritime Forest,0,,,
1856,2,Central Appalachian Alkaline Glade and Woodland,0,,,
1857,2,Northern Atlantic Coastal Plain Dune and Swale,0,,,
-1858,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,,,
+1858,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
1859,2,Atlantic Coastal Plain Peatland Pocosin and Canebrake,0,,,
1860,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,0,,,
1861,2,Central Interior and Appalachian Floodplain Systems,4,,,
@@ -1461,7 +1462,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1866,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1867,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
1868,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems,0,,,
-1869,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,0,,,
+1869,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,2,,,
1870,2,Northeastern Interior Dry-Mesic Oak Forest,0,,,
1871,2,Southern Appalachian Oak Forest,0,,,
1872,2,Southern Piedmont Mesic Forest,0,,,
@@ -1470,26 +1471,26 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1875,2,Central and Southern Appalachian Montane Oak Forest,0,,,
1876,2,South-Central Interior Mesophytic Forest,0,,,
1877,2,Appalachian Shale Barrens,0,,,
-1878,2,Central and Southern Appalachian Spruce-Fir Forest,0,,,
+1878,2,Central and Southern Appalachian Spruce-Fir Forest,2,,,
1879,2,Southern Appalachian Montane Pine Forest and Woodland,0,,,
1880,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
1881,2,Southern Piedmont Dry Oak(-Pine) Forest,0,,,
1882,2,Central Appalachian Dry Oak-Pine Forest,0,,,
-1883,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
+1883,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
1884,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,0,,,
1885,2,Central Appalachian Pine-Oak Rocky Woodland,0,,,
1886,2,Central Appalachian Alkaline Glade and Woodland,0,,,
1887,2,Central Interior and Appalachian Floodplain Systems,4,,,
1888,2,Central Interior and Appalachian Riparian Systems,0,,,
1889,2,Central Interior and Appalachian Swamp Systems,0,,,
-1890,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
+1890,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
1891,2,Northeastern Interior Dry-Mesic Oak Forest,0,,,
1892,2,South-Central Interior Mesophytic Forest,0,,,
1893,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
-1894,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+1894,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
1895,2,Central Appalachian Dry Oak-Pine Forest,0,,,
-1896,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
-1897,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,0,,,
+1896,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
+1897,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,2,,,
1898,2,Central Appalachian Pine-Oak Rocky Woodland,0,,,
1899,2,Central Appalachian Alkaline Glade and Woodland,0,,,
1900,2,Central Interior and Appalachian Floodplain Systems,4,,,
@@ -1497,31 +1498,31 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1902,2,Laurentian-Acadian Floodplain Systems,4,,,
1903,2,Boreal Acidic Peatland Systems,0,,,
1904,2,Central Interior and Appalachian Swamp Systems,0,,,
-1905,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,0,,,
+1905,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,2,,,
1906,2,Great Lakes Coastal Marsh Systems,0,,,
1907,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,0,,,
-1908,2,North-Central Interior Wet Flatwoods,0,,,
+1908,2,North-Central Interior Wet Flatwoods,1,,,
1909,2,Northeastern Interior Dry-Mesic Oak Forest,0,,,
1910,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
1911,2,North-Central Interior Beech-Maple Forest,0,,,
1912,2,Allegheny-Cumberland Dry Oak Forest and Woodland,0,,,
1913,2,South-Central Interior Mesophytic Forest,0,,,
-1914,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
+1914,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
1915,2,Central Interior and Appalachian Floodplain Systems,4,,,
1916,2,Central Interior and Appalachian Riparian Systems,0,,,
1917,2,Central Interior and Appalachian Swamp Systems,0,,,
1918,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,0,,,
-1919,2,North-Central Interior Wet Flatwoods,0,,,
-1920,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
+1919,2,North-Central Interior Wet Flatwoods,1,,,
+1920,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
1921,2,Northeastern Interior Dry-Mesic Oak Forest,0,,,
-1922,2,Northern Atlantic Coastal Plain Hardwood Forest,0,,,
+1922,2,Northern Atlantic Coastal Plain Hardwood Forest,2,,,
1923,2,Northern Atlantic Coastal Plain Pitch Pine Barrens,0,,,
1924,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
-1925,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+1925,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
1926,2,Central Appalachian Dry Oak-Pine Forest,0,,,
-1927,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
-1928,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,0,,,
-1929,2,Acadian-Appalachian Montane Spruce-Fir Forest,0,,,
+1927,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
+1928,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,2,,,
+1929,2,Acadian-Appalachian Montane Spruce-Fir Forest,2,,,
1930,2,Central Appalachian Pine-Oak Rocky Woodland,0,,,
1931,2,Northern Atlantic Coastal Plain Maritime Forest,0,,,
1932,2,Northern Atlantic Coastal Plain Dune and Swale,0,,,
@@ -1533,17 +1534,17 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1938,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1939,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,0,,,
1940,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,0,,,
-1941,2,North-Central Interior Wet Flatwoods,0,,,
+1941,2,North-Central Interior Wet Flatwoods,1,,,
1942,2,Laurentian-Acadian Swamp Systems,0,,,
-1943,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
+1943,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
1944,2,Northeastern Interior Dry-Mesic Oak Forest,0,,,
1945,2,Northeastern Interior Pine Barrens,0,,,
1946,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
-1947,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+1947,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
1948,2,Central Appalachian Dry Oak-Pine Forest,0,,,
-1949,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
-1950,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,0,,,
-1951,2,Acadian-Appalachian Montane Spruce-Fir Forest,0,,,
+1949,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
+1950,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,2,,,
+1951,2,Acadian-Appalachian Montane Spruce-Fir Forest,2,,,
1952,2,Central Appalachian Pine-Oak Rocky Woodland,0,,,
1953,2,Acadian-Appalachian Subalpine Woodland and Heath-Krummholz,0,,,
1954,2,Central Appalachian Alkaline Glade and Woodland,0,,,
@@ -1555,7 +1556,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1960,2,Central Interior and Appalachian Swamp Systems,0,,,
1961,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
1962,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,0,,,
-1963,2,North-Central Interior Wet Flatwoods,0,,,
+1963,2,North-Central Interior Wet Flatwoods,1,,,
1964,2,Laurentian-Acadian Swamp Systems,0,,,
1965,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
1966,2,North-Central Interior Dry Oak Forest and Woodland,0,,,
@@ -1569,17 +1570,17 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1974,2,Central Interior and Appalachian Swamp Systems,0,,,
1975,2,Great Lakes Coastal Marsh Systems,1,,,
1976,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,0,,,
-1977,2,North-Central Interior Wet Flatwoods,0,,,
-1978,2,Laurentian-Acadian Northern Hardwoods Forest,0,,,
-1979,2,Northern Atlantic Coastal Plain Hardwood Forest,0,,,
+1977,2,North-Central Interior Wet Flatwoods,1,,,
+1978,2,Laurentian-Acadian Northern Hardwoods Forest,2,,,
+1979,2,Northern Atlantic Coastal Plain Hardwood Forest,2,,,
1980,2,Boreal Jack Pine-Black Spruce Forest,0,,,
1981,2,Northeastern Interior Pine Barrens,0,,,
1982,2,Laurentian-Acadian Northern Pine(-Oak) Forest,0,,,
-1983,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+1983,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
1984,2,Central Appalachian Dry Oak-Pine Forest,0,,,
-1985,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
-1986,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,0,,,
-1987,2,Acadian-Appalachian Montane Spruce-Fir Forest,0,,,
+1985,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
+1986,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,2,,,
+1987,2,Acadian-Appalachian Montane Spruce-Fir Forest,2,,,
1988,2,Central Appalachian Pine-Oak Rocky Woodland,0,,,
1989,2,Acadian-Appalachian Alpine Tundra,0,,,
1990,2,Acadian-Appalachian Subalpine Woodland and Heath-Krummholz,0,,,
@@ -1593,7 +1594,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
1998,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,1,,,
1999,2,Laurentian-Acadian Swamp Systems,2,,,
2000,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,0,,,
-2001,2,Southern Appalachian Northern Hardwood Forest,0,,,
+2001,2,Southern Appalachian Northern Hardwood Forest,2,,,
2002,2,Southern Appalachian Oak Forest,0,,,
2003,2,Allegheny-Cumberland Dry Oak Forest and Woodland,0,,,
2004,2,Southern and Central Appalachian Cove Forest,0,,,
@@ -1601,7 +1602,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2006,2,Southern Appalachian Montane Pine Forest and Woodland,0,,,
2007,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
2008,2,Central Interior Highlands Dry Acidic Glade and Barrens,0,,,
-2009,2,Appalachian (Hemlock-)Northern Hardwood Forest,0,,,
+2009,2,Appalachian (Hemlock-)Northern Hardwood Forest,2,,,
2010,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,0,,,
2011,2,Central Interior Highlands Calcareous Glade and Barrens,0,,,
2012,2,Central Interior and Appalachian Floodplain Systems,4,,,
@@ -1614,7 +1615,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2019,2,North-Central Interior Beech-Maple Forest,0,,,
2020,2,North-Central Interior Maple-Basswood Forest,0,,,
2021,2,South-Central Interior Mesophytic Forest,0,,,
-2022,2,South-Central Interior/Upper Coastal Plain Flatwoods,0,,,
+2022,2,South-Central Interior/Upper Coastal Plain Flatwoods,1,,,
2023,2,Ozark-Ouachita Dry Oak Woodland,0,,,
2024,2,North-Central Interior Oak Savanna,0,,,
2025,2,North-Central Oak Barrens,0,,,
@@ -1622,19 +1623,19 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2027,2,Great Lakes Wet-Mesic Lakeplain Prairie,1,,,
2028,2,North-Central Interior Sand and Gravel Tallgrass Prairie,1,,,
2029,2,Central Tallgrass Prairie,1,,,
-2030,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,0,,,
+2030,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,1,,,
2031,2,Great Lakes Wooded Dune and Swale,0,,,
2032,2,Eastern Great Plains Floodplain Systems,4,,,
2033,2,Central Interior and Appalachian Floodplain Systems,4,,,
2034,2,Central Interior and Appalachian Riparian Systems,0,,,
2035,2,Paleozoic Plateau Bluff and Talus,0,,,
-2036,2,North-Central Interior Wet Flatwoods,0,,,
+2036,2,North-Central Interior Wet Flatwoods,1,,,
2037,2,Ozark-Ouachita Dry-Mesic Oak Forest,0,,,
2038,2,Crosstimbers Oak Forest and Woodland,0,,,
2039,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
2040,2,North-Central Interior Dry Oak Forest and Woodland,0,,,
2041,2,North-Central Interior Maple-Basswood Forest,0,,,
-2042,2,Ozark-Ouachita Mesic Hardwood Forest,0,,,
+2042,2,Ozark-Ouachita Mesic Hardwood Forest,2,,,
2043,2,North-Central Oak Barrens,0,,,
2044,2,Central Interior Highlands Calcareous Glade and Barrens,0,,,
2045,2,North-Central Interior Sand and Gravel Tallgrass Prairie,1,,,
@@ -1643,7 +1644,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2048,2,Eastern Great Plains Floodplain Systems,4,,,
2049,2,Central Interior and Appalachian Floodplain Systems,4,,,
2050,2,Eastern Great Plains Wet Meadow-Prairie-Marsh,0,,,
-2051,2,North-Central Interior Wet Flatwoods,0,,,
+2051,2,North-Central Interior Wet Flatwoods,1,,,
2052,2,Western Great Plains Dry Bur Oak Forest and Woodland,0,,,
2053,2,Western Great Plains Sandhill Steppe,0,,,
2054,2,Central Mixedgrass Prairie,1,,,
@@ -1661,12 +1662,12 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2066,2,Western Great Plains Depressional Wetland Systems,1,,,
2067,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,0,,,
2068,2,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,0,,,
-2069,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,0,,,
+2069,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,2,,,
2070,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
2071,2,North-Central Interior Beech-Maple Forest,0,,,
2072,2,South-Central Interior Mesophytic Forest,0,,,
-2073,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,0,,,
-2074,2,South-Central Interior/Upper Coastal Plain Flatwoods,0,,,
+2073,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,2,,,
+2074,2,South-Central Interior/Upper Coastal Plain Flatwoods,1,,,
2075,2,East Gulf Coastal Plain Northern Loess Bluff Forest,0,,,
2076,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
2077,2,Southern Coastal Plain Mesic Slope Forest,0,,,
@@ -1675,7 +1676,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2080,2,Bluegrass Savanna and Woodland,0,,,
2081,2,Pennyroyal Karst Plain Prairie and Barrens,0,,,
2082,2,East Gulf Coastal Plain Jackson Plain Prairie and Barrens,0,,,
-2083,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,0,,,
+2083,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,1,,,
2084,2,Central Interior and Appalachian Floodplain Systems,4,,,
2085,2,Central Interior and Appalachian Riparian Systems,0,,,
2086,2,Gulf and Atlantic Coastal Plain Floodplain Systems,4,,,
@@ -1683,17 +1684,17 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2088,2,Central Interior and Appalachian Swamp Systems,0,,,
2089,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
2090,2,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,0,,,
-2091,2,North-Central Interior Wet Flatwoods,0,,,
+2091,2,North-Central Interior Wet Flatwoods,1,,,
2092,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,0,,,
2093,2,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,0,,,
-2094,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,0,,,
+2094,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,2,,,
2095,2,Southern Appalachian Oak Forest,0,,,
2096,2,Allegheny-Cumberland Dry Oak Forest and Woodland,0,,,
2097,2,Southern and Central Appalachian Cove Forest,0,,,
2098,2,Central and Southern Appalachian Montane Oak Forest,0,,,
2099,2,South-Central Interior Mesophytic Forest,0,,,
-2100,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,0,,,
-2101,2,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
+2100,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,2,,,
+2101,2,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
2102,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,0,,,
2103,2,Southeastern Interior Longleaf Pine Woodland,0,,,
2104,2,Southern Appalachian Low-Elevation Pine Forest,0,,,
@@ -1704,7 +1705,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2109,2,Alabama Ketona Glade and Woodland,0,,,
2110,2,Western Highland Rim Prairie and Barrens,0,,,
2111,2,Eastern Highland Rim Prairie and Barrens,0,,,
-2112,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,0,,,
+2112,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,1,,,
2113,2,Central Interior and Appalachian Floodplain Systems,4,,,
2114,2,Central Interior and Appalachian Riparian Systems,0,,,
2115,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,0,,,
@@ -1730,11 +1731,11 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2135,2,North-Central Interior Dry Oak Forest and Woodland,0,,,
2136,2,Ouachita Montane Oak Forest,0,,,
2137,2,North-Central Interior Maple-Basswood Forest,0,,,
-2138,2,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
-2139,2,Ozark-Ouachita Mesic Hardwood Forest,0,,,
+2138,2,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
+2139,2,Ozark-Ouachita Mesic Hardwood Forest,2,,,
2140,2,Ozark-Ouachita Dry Oak Woodland,0,,,
2141,2,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,0,,,
-2142,2,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+2142,2,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
2143,2,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,0,,,
2144,2,North-Central Interior Oak Savanna,0,,,
2145,2,Central Interior Highlands Calcareous Glade and Barrens,0,,,
@@ -1743,7 +1744,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2148,2,Central Tallgrass Prairie,1,,,
2149,2,Southeastern Great Plains Tallgrass Prairie,1,,,
2150,2,West Gulf Coastal Plain Northern Calcareous Prairie,1,,,
-2151,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,0,,,
+2151,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,2,,,
2152,2,Central Interior and Appalachian Floodplain Systems,4,,,
2153,2,South-Central Interior Large Floodplain,0,,,
2154,2,Central Interior and Appalachian Riparian Systems,4,,,
@@ -1751,11 +1752,11 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2156,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,4,,,
2157,2,Gulf and Atlantic Coastal Plain Swamp Systems,0,,,
2158,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,1,,,
-2159,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,0,,,
+2159,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,2,,,
2160,2,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland,0,,,
2161,2,Alaska Arctic Mesic Alder Shrubland,0,,,
2162,2,Alaska Arctic Mesic-Wet Willow Shrubland,0,,,
-2163,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire,0,,,
+2163,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire,2,,,
2164,2,Alaska Arctic Mesic Sedge-Willow Tundra,0,,,
2165,2,Alaska Arctic Mesic Sedge-Dryas Tundra,0,,,
2166,2,Alaska Arctic Acidic Sparse Tundra,0,,,
@@ -1763,8 +1764,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2168,2,Alaska Arctic Lichen Tundra,0,,,
2169,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland,0,,,
2170,2,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland,0,,,
-2171,2,Alaska Arctic Dwarf-Shrubland - Infrequent Fire,0,,,
-2172,2,Alaska Arctic Tussock Tundra - Infrequent Fire,0,,,
+2171,2,Alaska Arctic Dwarf-Shrubland - Infrequent Fire,2,,,
+2172,2,Alaska Arctic Tussock Tundra - Infrequent Fire,2,,,
2173,2,Alaska Arctic Pendantgrass Freshwater Marsh,0,,,
2174,2,Alaska Arctic Wet Sedge Meadow,0,,,
2175,2,Alaska Arctic Mesic Herbaceous Meadow,0,,,
@@ -1779,7 +1780,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2184,2,Alaska Arctic Coastal Brackish Meadow,0,,,
2185,2,Alaska Arctic Floodplain,0,,,
2186,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
-2187,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2187,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2188,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2189,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
2190,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland,0,,,
@@ -1791,8 +1792,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2196,2,Western North American Boreal Wet Black Spruce-Tussock Woodland,0,,,
2197,2,Alaska Arctic Mesic Alder Shrubland,0,,,
2198,2,Alaska Arctic Mesic-Wet Willow Shrubland,0,,,
-2199,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire,0,,,
-2200,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire,0,,,
+2199,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire,2,,,
+2200,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire,2,,,
2201,2,Alaska Arctic Mesic Sedge-Willow Tundra,0,,,
2202,2,Alaska Arctic Mesic Sedge-Dryas Tundra,0,,,
2203,2,Alaska Arctic Acidic Sparse Tundra,0,,,
@@ -1800,10 +1801,10 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2205,2,Alaska Arctic Lichen Tundra,0,,,
2206,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland,0,,,
2207,2,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland,0,,,
-2208,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,0,,,
-2209,2,Alaska Arctic Dwarf-Shrubland - Infrequent Fire,0,,,
-2210,2,Alaska Arctic Tussock Tundra - Frequent Fire,0,,,
-2211,2,Alaska Arctic Tussock Tundra - Infrequent Fire,0,,,
+2208,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,2,,,
+2209,2,Alaska Arctic Dwarf-Shrubland - Infrequent Fire,2,,,
+2210,2,Alaska Arctic Tussock Tundra - Frequent Fire,2,,,
+2211,2,Alaska Arctic Tussock Tundra - Infrequent Fire,2,,,
2212,2,Alaska Arctic Pendantgrass Freshwater Marsh,0,,,
2213,2,Alaska Arctic Wet Sedge Meadow,0,,,
2214,2,Alaska Arctic Mesic Herbaceous Meadow,0,,,
@@ -1820,7 +1821,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2225,2,Alaska Arctic Large River Floodplain,0,,,
2226,2,Alaska Arctic Floodplain,0,,,
2227,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
-2228,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2228,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2229,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2230,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
2231,2,Western North American Boreal Dry Aspen-Steppe Bluff - Higher Elevations,0,,,
@@ -1844,7 +1845,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2249,2,Western North American Boreal Alpine Floodplain - Higher Elevations,0,,,
2250,2,Alaska Arctic Mesic Alder Shrubland,0,,,
2251,2,Alaska Arctic Mesic-Wet Willow Shrubland,0,,,
-2252,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire,0,,,
+2252,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire,2,,,
2253,2,Alaska Arctic Mesic Sedge-Willow Tundra,0,,,
2254,2,Alaska Arctic Mesic Sedge-Dryas Tundra,0,,,
2255,2,Alaska Arctic Acidic Sparse Tundra,0,,,
@@ -1852,8 +1853,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2257,2,Alaska Arctic Lichen Tundra,0,,,
2258,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland,0,,,
2259,2,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland,0,,,
-2260,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,0,,,
-2261,2,Alaska Arctic Tussock Tundra - Frequent Fire,0,,,
+2260,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,2,,,
+2261,2,Alaska Arctic Tussock Tundra - Frequent Fire,2,,,
2262,2,Alaska Arctic Pendantgrass Freshwater Marsh,0,,,
2263,2,Alaska Arctic Wet Sedge Meadow,0,,,
2264,2,Alaska Arctic Mesic Herbaceous Meadow,0,,,
@@ -1862,7 +1863,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2267,2,Alaska Arctic Polygonal Ground Shrub-Tussock Tundra,0,,,
2268,2,Alaska Arctic Floodplain,0,,,
2269,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
-2270,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2270,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2271,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2272,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
2273,2,Western North American Boreal Dry Aspen-Steppe Bluff - Lower Elevations,0,,,
@@ -1888,7 +1889,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2294,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex,0,,,
2295,2,Western North American Boreal Alpine Floodplain - Higher Elevations,0,,,
2296,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
-2297,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2297,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2298,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2299,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
2300,2,Western North American Boreal Dry Aspen-Steppe Bluff - Lower Elevations,0,,,
@@ -1914,7 +1915,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2320,2,Western North American Boreal Alpine Floodplain - Lower Elevations,0,,,
2321,2,Western North American Boreal Alpine Floodplain - Higher Elevations,0,,,
2322,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
-2323,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2323,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2324,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2325,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
2326,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland,0,,,
@@ -1936,13 +1937,13 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2342,2,Alaska Arctic Mesic Alder Shrubland,0,,,
2343,2,Alaska Arctic Mesic-Wet Willow Shrubland,0,,,
2344,2,Alaskan Pacific Maritime Mesic Herbaceous Meadow,0,,,
-2345,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire,0,,,
+2345,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire,2,,,
2346,2,Alaska Arctic Mesic Sedge-Willow Tundra,0,,,
2347,2,Alaska Arctic Acidic Sparse Tundra,0,,,
2348,2,Alaska Arctic Lichen Tundra,0,,,
2349,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland,0,,,
-2350,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,0,,,
-2351,2,Alaska Arctic Tussock Tundra - Frequent Fire,0,,,
+2350,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,2,,,
+2351,2,Alaska Arctic Tussock Tundra - Frequent Fire,2,,,
2352,2,Alaska Arctic Pendantgrass Freshwater Marsh,0,,,
2353,2,Alaska Arctic Wet Sedge Meadow,0,,,
2354,2,Alaska Arctic Mesic Herbaceous Meadow,0,,,
@@ -1962,7 +1963,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2368,2,Aleutian Volcanic Rock and Talus,0,,,
2369,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
2370,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal,0,,,
-2371,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2371,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2372,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2373,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal,0,,,
2374,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
@@ -1999,10 +2000,10 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2406,2,Alaskan Pacific Maritime Sitka Spruce Forest,0,,,
2407,2,Alaskan Pacific Maritime Western Hemlock Forest,2,,,
2408,2,Alaskan Pacific Maritime Mountain Hemlock Forest - Southeast,2,,,
-2409,2,Alaska Sub-boreal White Spruce-Hardwood Forest,0,,,
+2409,2,Alaska Sub-boreal White Spruce-Hardwood Forest,2,,,
2410,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
2411,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal,0,,,
-2412,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2412,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2413,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2414,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal,0,,,
2415,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
@@ -2035,9 +2036,9 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2443,2,Western North American Boreal Alpine Floodplain - Lower Elevations,0,,,
2444,2,Western North American Boreal Alpine Floodplain - Higher Elevations,0,,,
2445,2,Alaskan Pacific Maritime Western Hemlock Forest,2,,,
-2446,2,Alaska Sub-boreal White Spruce-Hardwood Forest,0,,,
+2446,2,Alaska Sub-boreal White Spruce-Hardwood Forest,2,,,
2447,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
-2448,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2448,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2449,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal,0,,,
2450,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland,0,,,
2451,2,Alaska Sub-boreal Avalanche Slope Shrubland,0,,,
@@ -2067,11 +2068,11 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2477,2,Alaskan Pacific Maritime Alpine Wet Meadow,0,,,
2478,2,Alaskan Pacific Maritime Alpine Floodplain,0,,,
2479,2,Alaska Sub-boreal Mountain Hemlock-White Spruce Forest,0,,,
-2480,2,Alaska Sub-boreal White Spruce-Hardwood Forest,0,,,
+2480,2,Alaska Sub-boreal White Spruce-Hardwood Forest,2,,,
2481,2,North Pacific Alpine and Subalpine Bedrock and Scree,0,,,
2482,2,Western North American Boreal Treeline White Spruce Woodland - Boreal,0,,,
2483,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal,0,,,
-2484,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2484,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2485,2,Western North American Boreal Mesic Black Spruce Forest - Boreal,0,,,
2486,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal,0,,,
2487,2,Western North American Boreal Mesic Birch-Aspen Forest,0,,,
@@ -2098,13 +2099,13 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2509,2,Temperate Pacific Tidal Salt and Brackish Marsh,0,,,
2510,2,North Pacific Maritime Eelgrass Bed,0,,,
2511,2,Aleutian American Dunegrass Grassland,1,,,
-2512,2,Alaska Sub-boreal White Spruce-Hardwood Forest,0,,,
-2513,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire,0,,,
+2512,2,Alaska Sub-boreal White Spruce-Hardwood Forest,2,,,
+2513,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire,2,,,
2514,2,Alaska Arctic Mesic Sedge-Willow Tundra,0,,,
2515,2,Alaska Arctic Acidic Sparse Tundra,0,,,
2516,2,Alaska Arctic Lichen Tundra,0,,,
-2517,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,0,,,
-2518,2,Alaska Arctic Tussock Tundra - Infrequent Fire,0,,,
+2517,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire,2,,,
+2518,2,Alaska Arctic Tussock Tundra - Infrequent Fire,2,,,
2519,2,Alaska Arctic Wet Sedge Meadow,0,,,
2520,2,Alaska Arctic Mesic Herbaceous Meadow,0,,,
2521,2,Alaska Arctic Coastal Sedge-Dwarf-Shrubland,0,,,
@@ -2129,7 +2130,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2540,2,Aleutian Oval-leaf Blueberry Shrubland,0,,,
2541,2,Aleutian Volcanic Rock and Talus,0,,,
2542,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal,0,,,
-2543,2,Western North American Boreal White Spruce-Hardwood Forest,0,,,
+2543,2,Western North American Boreal White Spruce-Hardwood Forest,2,,,
2544,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal,0,,,
2545,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland,0,,,
2546,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Alaska Sub-boreal,0,,,
@@ -2152,7 +2153,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2564,2,Temperate Pacific Tidal Salt and Brackish Marsh,0,,,
2565,2,Alaskan Pacific Maritime Alpine Wet Meadow,0,,,
2566,2,Alaskan Pacific Maritime Alpine Floodplain,0,,,
-2567,2,Alaska Sub-boreal White Spruce-Hardwood Forest,0,,,
+2567,2,Alaska Sub-boreal White Spruce-Hardwood Forest,2,,,
2568,2,Alaskan Pacific Maritime Avalanche Slope Shrubland,0,,,
2569,2,Alaskan Pacific Maritime Poorly Drained Conifer Woodland,0,,,
2570,2,Alaskan Pacific Maritime Alpine Dwarf-Shrubland,0,,,
@@ -2202,6 +2203,33 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
2615,2,Hawaii Dry Coastal Strand,0,,,
2616,2,Hawaii Wet-Mesic Coastal Strand,0,,,
2617,2,Hawaii Subalpine Mesic Shrubland,0,,,
+2700,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2701,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2702,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2703,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2704,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2705,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2706,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2707,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2708,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2709,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2710,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2711,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2712,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2713,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2714,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2715,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2716,2,Inter-Mountain Basins Big Sagebrush Shrubland-Semi-Desert,0,,,
+2717,2,Inter-Mountain Basins Big Sagebrush Shrubland-Upland,0,,,
+2718,2,Inter-Mountain Basins Mixed Salt Desert Scrub,1,,,
+2719,2,Mediterranean California Mixed Evergreen Forest-Coastal,2,,,
+2720,2,Mediterranean California Mixed Evergreen Forest-Interior,2,,,
+2721,2,Mediterranean California Mixed Evergreen Forest-Coastal,2,,,
+2722,2,Mediterranean California Mixed Evergreen Forest-Interior,2,,,
+2723,2,Laurentian-Acadian Northern Pine(-Oak) Forest,2,,,
+2724,2,Laurentian-Acadian Northern Pine(-Oak) Forest-Pine Dominated,2,,,
+2725,2,Laurentian-Acadian Northern Pine(-Oak) Forest,2,,,
+2726,2,Laurentian-Acadian Northern Pine(-Oak) Forest-Pine Dominated,2,,,
3001,1,Inter-Mountain Basins Sparsely Vegetated Systems,0,,,
3002,1,Mediterranean California Sparsely Vegetated Systems,0,,,
3003,1,North Pacific Sparsely Vegetated Systems,0,,,
@@ -2272,7 +2300,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3072,1,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe,2,,,
3074,1,Chihuahuan Creosotebush Desert Scrub,0,,,
3075,1,Chihuahuan Mixed Salt Desert Scrub,1,,,
-3076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,0,,,
+3076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,1,,,
3077,1,Chihuahuan Succulent Desert Scrub,0,,,
3078,1,Colorado Plateau Blackbrush-Mormon-tea Shrubland,0,,,
3079,1,Great Basin Xeric Mixed Sagebrush Shrubland,1,,,
@@ -2424,12 +2452,12 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3237,1,Mesic Montane Western Larch Forest,0,,,
3238,1,Laurentian-Acadian Northern Oak Forest,0,,,
3239,1,Laurentian-Acadian Northern Pine-Oak Forest,0,,,
-3240,1,Laurentian-Acadian Hardwood Forest,0,,,
-3241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,,,
+3240,1,Laurentian-Acadian Hardwood Forest,2,,,
+3241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,,,
3242,1,Laurentian Oak Barrens,0,,,
3243,1,Laurentian Pine-Oak Barrens,0,,,
-3244,1,Boreal Hardwood Forest,0,,,
-3245,1,Boreal White Spruce-Fir-Hardwood Forest,0,,,
+3244,1,Boreal Hardwood Forest,2,,,
+3245,1,Boreal White Spruce-Fir-Hardwood Forest,2,,,
3247,1,Southern Appalachian Grass Bald,0,,,
3248,1,Northern Atlantic Coastal Plain Dune and Swale Grassland,1,,,
3249,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Shrubland,0,,,
@@ -2464,7 +2492,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3278,1,Boreal Acidic Peatland Herbaceous,0,,,
3279,1,Boreal Acidic Peatland Shrubland,0,,,
3280,1,Central Interior and Appalachian Swamp Shrubland,0,,,
-3281,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp Shrubland,0,,,
+3281,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp Shrubland,2,,,
3282,1,Great Lakes Coastal Marsh Shrubland,0,,,
3283,1,Central Interior and Appalachian Shrub Wetlands,0,,,
3284,1,Laurentian-Acadian Herbaceous Wetlands,0,,,
@@ -2485,14 +2513,14 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3299,1,Developed-Roads,0,,,
3300,1,Central Interior and Appalachian Riparian Herbaceous,4,,,
3301,1,Boreal Aspen-Birch Forest,0,,,
-3302,1,Laurentian-Acadian Northern Hardwoods Forest,0,,,
+3302,1,Laurentian-Acadian Northern Hardwoods Forest,2,,,
3303,1,Northeastern Interior Dry-Mesic Oak Forest,0,,,
3304,1,Ozark-Ouachita Dry-Mesic Oak Forest,0,,,
3305,1,Southern Interior Low Plateau Dry-Mesic Oak Forest,0,,,
3306,1,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,0,,,
-3307,1,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,0,,,
+3307,1,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,2,,,
3308,1,Crosstimbers Oak Forest and Woodland,0,,,
-3309,1,Southern Appalachian Northern Hardwood Forest,0,,,
+3309,1,Southern Appalachian Northern Hardwood Forest,2,,,
3310,1,North-Central Interior Dry-Mesic Oak Forest and Woodland,0,,,
3311,1,North-Central Interior Dry Oak Forest and Woodland,0,,,
3312,1,Ouachita Montane Oak Forest,0,,,
@@ -2506,18 +2534,18 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3320,1,Central and Southern Appalachian Montane Oak Forest,0,,,
3321,1,South-Central Interior Mesophytic Forest,0,,,
3322,1,Crowley's Ridge Mesic Loess Slope Forest,0,,,
-3323,1,West Gulf Coastal Plain Mesic Hardwood Forest,0,,,
-3324,1,Northern Atlantic Coastal Plain Hardwood Forest,0,,,
-3325,1,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,0,,,
-3326,1,South-Central Interior/Upper Coastal Plain Flatwoods,0,,,
+3323,1,West Gulf Coastal Plain Mesic Hardwood Forest,2,,,
+3324,1,Northern Atlantic Coastal Plain Hardwood Forest,2,,,
+3325,1,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,2,,,
+3326,1,South-Central Interior/Upper Coastal Plain Flatwoods,1,,,
3327,1,East Gulf Coastal Plain Northern Loess Bluff Forest,0,,,
3328,1,Southern Coastal Plain Limestone Forest,0,,,
3329,1,East Gulf Coastal Plain Southern Loess Bluff Forest,0,,,
-3330,1,Southern Coastal Plain Dry Upland Hardwood Forest,0,,,
+3330,1,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
3331,1,Eastern Great Plains Tallgrass Aspen Forest and Woodland,4,,,
3332,1,Gulf and Atlantic Coastal Plain Floodplain Herbaceous,3,,,
-3333,1,South Florida Hardwood Hammock,0,,,
-3334,1,Ozark-Ouachita Mesic Hardwood Forest,0,,,
+3333,1,South Florida Hardwood Hammock,2,,,
+3334,1,Ozark-Ouachita Mesic Hardwood Forest,2,,,
3335,1,Southern Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,0,,,
3336,1,Southwest Florida Coastal Strand and Maritime Hammock,0,,,
3337,1,Southeast Florida Coastal Strand and Maritime Hammock,0,,,
@@ -2525,13 +2553,13 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3339,1,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,0,,,
3340,1,Appalachian Shale Barrens,0,,,
3342,1,Piedmont Hardpan Woodland and Forest,0,,,
-3343,1,Southern Atlantic Coastal Plain Mesic Hardwood Forest,0,,,
+3343,1,Southern Atlantic Coastal Plain Mesic Hardwood Forest,2,,,
3344,1,Boreal Jack Pine-Black Spruce Forest,2,,,
3346,1,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,2,,,
3347,1,Atlantic Coastal Plain Upland Longleaf Pine Woodland,2,,,
3348,1,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,0,,,
3349,1,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,2,,,
-3350,1,Central and Southern Appalachian Spruce-Fir Forest,0,,,
+3350,1,Central and Southern Appalachian Spruce-Fir Forest,2,,,
3351,1,Southeastern Interior Longleaf Pine Woodland,2,,,
3352,1,Southern Appalachian Montane Pine Forest and Woodland,2,,,
3353,1,Southern Appalachian Low-Elevation Pine Forest,0,,,
@@ -2545,7 +2573,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3362,1,Laurentian-Acadian Northern Pine Forest,0,,,
3363,1,Central Interior Highlands Dry Acidic Glade and Barrens,0,,,
3364,1,Ozark-Ouachita Dry Oak Woodland,0,,,
-3365,1,Boreal White Spruce-Fir Forest,0,,,
+3365,1,Boreal White Spruce-Fir Forest,2,,,
3366,1,Laurentian-Acadian Pine-Hemlock Forest,2,,,
3367,1,Ozark-Ouachita Shortleaf Pine Forest and Woodland,0,,,
3368,1,Southern Piedmont Dry Pine Forest,1,,,
@@ -2553,8 +2581,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3370,1,Appalachian Hemlock Forest,2,,,
3371,1,West Gulf Coastal Plain Pine Forest,0,,,
3372,1,East Gulf Coastal Plain Interior Shortleaf Pine Forest,0,,,
-3373,1,Acadian Low-Elevation Spruce-Fir Forest,0,,,
-3374,1,Acadian-Appalachian Montane Spruce-Fir Forest,0,,,
+3373,1,Acadian Low-Elevation Spruce-Fir Forest,2,,,
+3374,1,Acadian-Appalachian Montane Spruce-Fir Forest,2,,,
3375,1,Eastern Serpentine Woodland,2,,,
3376,1,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,0,,,
3377,1,Central Appalachian Rocky Pine Woodland,2,,,
@@ -2618,19 +2646,19 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3442,1,South Texas Sand Sheet Grassland,1,,,
3443,1,South Texas Dune and Coastal Grassland,1,,,
3444,1,Eastern Boreal Floodplain Woodland,0,,,
-3446,1,South Florida Pine Flatwoods,0,,,
+3446,1,South Florida Pine Flatwoods,1,,,
3447,1,South Florida Cypress Dome,0,,,
3448,1,Southern Piedmont Dry Oak-Pine Forest,0,,,
-3449,1,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,,,
-3450,1,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,0,,,
-3451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,,,
+3449,1,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
+3450,1,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,1,,,
+3451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
3452,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Woodland,0,,,
-3453,1,Central Florida Pine Flatwoods,0,,,
-3454,1,East Gulf Coastal Plain Near-Coast Pine Flatwoods,0,,,
-3455,1,East Gulf Coastal Plain Southern Loblolly Flatwoods,0,,,
+3453,1,Central Florida Pine Flatwoods,1,,,
+3454,1,East Gulf Coastal Plain Near-Coast Pine Flatwoods,1,,,
+3455,1,East Gulf Coastal Plain Southern Loblolly Flatwoods,1,,,
3456,1,Northern Atlantic Coastal Plain Pitch Pine Lowland,0,,,
-3457,1,South-Central Interior/Upper Coastal Plain Wet Flatwoods,0,,,
-3458,1,West Gulf Coastal Plain Pine Flatwoods,0,,,
+3457,1,South-Central Interior/Upper Coastal Plain Wet Flatwoods,1,,,
+3458,1,West Gulf Coastal Plain Pine Flatwoods,1,,,
3459,1,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland,0,,,
3460,1,Southern Coastal Plain Nonriverine Cypress Dome Woodland,0,,,
3461,1,Southern Coastal Plain Seepage Swamp and Baygall Woodland,0,,,
@@ -2652,7 +2680,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3478,1,Caribbean Forested Swamp,0,,,
3479,1,Central Interior and Appalachian Swamp Forest,0,,,
3480,1,Gulf and Atlantic Coastal Plain Swamp Systems,2,,,
-3481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp Forest,0,,,
+3481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp Forest,2,,,
3482,1,Great Plains Prairie Pothole,0,,,
3483,1,South Florida Everglades Sawgrass Marsh,0,,,
3485,1,East Gulf Coastal Plain Savanna and Wet Prairie,1,,,
@@ -2660,7 +2688,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3488,1,Eastern Great Plains Wet Meadow-Prairie-Marsh,0,,,
3489,1,Floridian Highlands Freshwater Marsh Herbaceous,0,,,
3490,1,Gulf and Atlantic Coastal Plain Tidal Marsh Shrubland,0,,,
-3491,1,Acadian Salt Marsh and Estuary Systems,0,,,
+3491,1,Acadian Salt Marsh and Estuary Systems,1,,,
3492,1,Great Lakes Coastal Marsh Herbaceous,0,,,
3493,1,Central Interior and Appalachian Herbaceous Wetlands,0,,,
3494,1,Laurentian-Acadian Forested Wetlands,0,,,
@@ -2668,19 +2696,19 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3497,1,Central Interior and Appalachian Sparsely Vegetated Systems,0,,,
3498,1,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems,0,,,
3499,1,Laurentian-Acadian Sparsely Vegetated Systems,0,,,
-3501,1,Southern Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,0,,,
+3501,1,Southern Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,2,,,
3502,1,Central Appalachian Dry Oak-Pine Forest,0,,,
3503,1,Chihuahuan Loamy Plains Desert Grassland,1,,,
3504,1,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,1,,,
-3506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,0,,,
+3506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,2,,,
3507,1,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland,0,,,
3509,1,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,0,,,
3510,1,Crowley's Ridge Sand Forest,0,,,
-3511,1,Appalachian Northern Hardwood Forest,0,,,
-3512,1,Appalachian Hemlock-Northern Hardwood Forest,0,,,
-3513,1,Lower Mississippi River Flatwoods,0,,,
+3511,1,Appalachian Northern Hardwood Forest,2,,,
+3512,1,Appalachian Hemlock-Northern Hardwood Forest,2,,,
+3513,1,Lower Mississippi River Flatwoods,1,,,
3517,1,Paleozoic Plateau Bluff and Talus Woodland,0,,,
-3518,1,North-Central Interior Wet Flatwoods,0,,,
+3518,1,North-Central Interior Wet Flatwoods,1,,,
3519,1,East-Central Texas Plains Post Oak Savanna and Woodland,0,,,
3522,1,Northern Atlantic Coastal Plain Heathland,0,,,
3523,1,Edwards Plateau Dry-Mesic Slope Forest and Woodland,0,,,
@@ -2691,10 +2719,10 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3528,1,Ruderal Upland Shrubland,0,,,
3529,1,Ruderal Upland Herbaceous,0,,,
3531,1,Ruderal Upland Forest,0,,,
-3532,1,Ruderal Forest-Northern and Central Hardwood and Conifer,0,,,
-3533,1,Ruderal Forest-Southeast Hardwood and Conifer,0,,,
-3534,1,Managed Tree Plantation-Northern and Central Hardwood and Conifer Plantation Group,0,,,
-3535,1,Managed Tree Plantation-Southeast Conifer and Hardwood Plantation Group,0,,,
+3532,1,Ruderal Forest-Northern and Central Hardwood and Conifer,2,,,
+3533,1,Ruderal Forest-Southeast Hardwood and Conifer,2,,,
+3534,1,Managed Tree Plantation-Northern and Central Hardwood and Conifer Plantation Group,2,,,
+3535,1,Managed Tree Plantation-Southeast Conifer and Hardwood Plantation Group,2,,,
3536,1,Introduced Wetland Vegetation-Tree,0,,,
3538,1,Introduced Wetland Vegetation-Herbaceous,0,,,
3539,1,Modified/Managed Northern Tallgrass Grassland,1,,,
@@ -2704,8 +2732,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3551,1,Pinus elliottii Saturated Temperate Woodland Alliance,2,,,
3552,1,Pinus palustris-Pinus elliottii Forest Alliance,2,,,
3553,1,Mixed Loblolly-Slash Pine,0,,,
-3554,1,Acadian Low-Elevation Hardwood Forest,0,,,
-3555,1,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,0,,,
+3554,1,Acadian Low-Elevation Hardwood Forest,2,,,
+3555,1,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,2,,,
3556,1,Central Appalachian Rocky Oak Woodland,2,,,
3557,1,Central Appalachian Rocky Pine-Oak Woodland,0,,,
3558,1,Edwards Plateau Limestone Grassland,1,,,
@@ -2734,14 +2762,14 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3581,1,South Florida Everglades Shrubland,0,,,
3582,1,Ozark-Ouachita Oak Forest and Woodland,0,,,
3583,1,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,0,,,
-3584,1,West Gulf Coastal Plain Hardwood Forest,0,,,
-3585,1,West Gulf Coastal Plain Pine-Hardwood Forest,0,,,
+3584,1,West Gulf Coastal Plain Hardwood Forest,2,,,
+3585,1,West Gulf Coastal Plain Pine-Hardwood Forest,2,,,
3586,1,West Gulf Coastal Plain Sandhill Oak Forest and Woodland,0,,,
3587,1,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,0,,,
-3588,1,East Gulf Coastal Plain Southern Hardwood Flatwoods,0,,,
-3589,1,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,0,,,
-3590,1,West Gulf Coastal Plain Hardwood Flatwoods,0,,,
-3591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods,0,,,
+3588,1,East Gulf Coastal Plain Southern Hardwood Flatwoods,2,,,
+3589,1,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,2,,,
+3590,1,West Gulf Coastal Plain Hardwood Flatwoods,2,,,
+3591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods,2,,,
3600,1,Western North American Boreal White Spruce Forest,2,,,
3601,1,Western North American Boreal Treeline White Spruce Woodland,2,,,
3602,1,Western North American Boreal Spruce-Lichen Woodland,0,,,
@@ -2809,7 +2837,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3739,1,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest,2,,,
3740,1,Boreal Aquatic Beds,0,,,
3741,1,Polar Tidal Marshes and Aquatic Beds,0,,,
-3742,1,"Temperate Pacific Tidal Marshes, Aquatic Beds, and Intertidal Flats",0,,,
+3742,1,"Temperate Pacific Tidal Marshes, Aquatic Beds, and Intertidal Flats",1,,,
3743,1,Aleutian Herbaceous Wetlands,0,,,
3744,1,Arctic Herbaceous Wetlands,0,,,
3745,1,Boreal Herbaceous Wetlands,0,,,
@@ -2817,7 +2845,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3747,1,Arctic Sedge Meadows,0,,,
3748,1,Aleutian Shrub-Herbaceous Wetlands,0,,,
3749,1,Pacific Maritime Coastal Meadows and Slough-Levee,0,,,
-3750,1,Alaska Sub-boreal Hardwood Forest,0,,,
+3750,1,Alaska Sub-boreal Hardwood Forest,2,,,
3751,1,Boreal Coniferous Woody Wetland,0,,,
3752,1,Pacific Maritime Coniferous Woody Wetland,0,,,
3753,1,Boreal Coniferous-Deciduous Woody Wetland,0,,,
@@ -2846,8 +2874,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3776,1,Boreal Riparian Stringer Forest and Shrubland,4,,,
3777,1,Boreal Shrub Swamp,0,,,
3778,1,Pacific Maritime Shrub Swamp,0,,,
-3779,1,Alaska Boreal Hardwood Forest,0,,,
-3780,1,Alaska Boreal White Spruce-Hardwood Forest,0,,,
+3779,1,Alaska Boreal Hardwood Forest,2,,,
+3780,1,Alaska Boreal White Spruce-Hardwood Forest,2,,,
3781,1,Arctic Shrub Sedge-Tussock-Lichen Tundra,0,,,
3782,1,Boreal Tussock Tundra,0,,,
3783,1,Arctic Shrub Tussock Tundra,0,,,
@@ -2856,7 +2884,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3786,1,Boreal Shrub-Tussock Tundra,0,,,
3787,1,Boreal Herbaceous Floodplains,0,,,
3788,1,Boreal Shrub Floodplains,0,,,
-3789,1,Alaska Sub-boreal White Spruce-Hardwood Forest,0,,,
+3789,1,Alaska Sub-boreal White Spruce-Hardwood Forest,2,,,
3790,1,Pacific Maritime Shrub Floodplains,0,,,
3791,1,Aleutian Sparsely Vegetated,0,,,
3792,1,Arctic Sparsely Vegetated,0,,,
@@ -3051,6 +3079,30 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
3997,1,Eastern Warm Temperate Pasture and Hayland,0,,,
3998,1,Eastern Warm Temperate Wheat,0,,,
3999,1,Eastern Warm Temperate Aquaculture,0,,,
+4601,1,Micronesian Dry Cliff,0,,,
+4602,1,Micronesian Dry-Site Lava Flow,0,,,
+4603,1,Micronesian Dry Coastal Strand,0,,,
+4604,1,Micronesian Lowland Rain Forest,3,,,
+4605,1,Micronesian Lowland Limestone Forest,2,,,
+4606,1,Central and Southern Polynesian Montane Rainforest,3,,,
+4609,1,Micronesian Ravine and Riparian Forest,3,,,
+4610,1,Polynesian Freshwater Marsh,0,,,
+4611,1,Micronesian Swamp Forest,3,,,
+4612,1,Western Pacific Mangrove,0,,,
+4614,1,Central and Southern Polynesian Coastal Wooded Strand,1,,,
+4615,1,Central and Southern Polynesian Cliff,0,,,
+4616,1,Central and Southern Polynesian Lava Flow,0,,,
+4617,1,Central and Southern Polynesian Dry Coastal Strand,0,,,
+4618,1,Central and Southern Polynesian Lowland Rain Forest,3,,,
+4620,1,Central and Southern Polynesian Cloud Forest,2,,,
+4621,1,Central and Southern Polynesian Littoral Forest,3,,,
+4622,1,Central and Southern Polynesian Ravine and Riparian Forest,3,,,
+4623,1,Central and Southern Polynesian Swamp Forest,3,,,
+4624,1,Micronesian Ravine and Riparian Shrubland,1,,,
+4627,1,Central and Southern Polynesian Dry Coastal Strand Shrubland,1,,,
+4628,1,Central and Southern Polynesian Dry Coastal Strand Herbaceous,1,,,
+4629,1,Micronesian Dry Coastal Strand Shrubland,1,,,
+4630,1,Micronesian Dry Coastal Strand Herbaceous,1,,,
7008,1,North Pacific Oak Woodland,2,189,Hardwood,
7009,1,Northwestern Great Plains Aspen Forest and Parkland,3,16,Hardwood,
7010,1,Northern Rocky Mountain Western Larch Savanna,2,188,Conifer,
@@ -3118,7 +3170,7 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
7073,1,Baja Semi-Desert Coastal Succulent Scrub,0,125,Shrubland,
7074,1,Chihuahuan Creosotebush Desert Scrub,1,49,Shrubland,
7075,1,Chihuahuan Mixed Salt Desert Scrub,1,153,Shrubland,
-7076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,0,53,Shrubland,
+7076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,1,53,Shrubland,
7077,1,Chihuahuan Succulent Desert Scrub,1,174,Shrubland,
7078,1,Colorado Plateau Blackbrush-Mormon-tea Shrubland,0,34,Shrubland,
7079,1,Great Basin Xeric Mixed Sagebrush Shrubland,1,112,Shrubland,
@@ -3225,10 +3277,13 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
7234,1,Mediterranean California Mesic Serpentine Chaparral,1,44,Shrubland,
7238,1,Laurentian-Acadian Northern Oak Forest,0,149,Hardwood,
7239,1,Laurentian-Acadian Northern Pine-(Oak) Forest,0,149,Conifer-Hardwood,
-7240,1,Laurentian-Acadian Hardwood Forest,0,139,Hardwood,
-7241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,0,139,Conifer-Hardwood,
+7240,1,Laurentian-Acadian Hardwood Forest,2,139,Hardwood,
+7241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,2,139,Conifer-Hardwood,
7242,1,Laurentian Oak Barrens,0,104,Hardwood,
7243,1,Laurentian Pine-Oak Barrens,0,104,Conifer-Hardwood,
+7247,1,Southern Appalachian Grass Bald,0,,,
+7248,1,Northern Atlantic Coastal Plain Dune and Swale Grassland,1,,,
+7249,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Shrubland,1,,,
7250,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Shrubland,2,121,Shrubland,
7256,1,Apacherian-Chihuahuan Semi-Desert Grassland,1,80,Grassland,
7260,1,Mediterranean California Lower Montane Black Oak Forest and Woodland,2,48,Hardwood,
@@ -3241,6 +3296,8 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
7270,1,Klamath-Siskiyou Xeromorphic Serpentine Chaparral,1,44,Shrubland,
7272,1,Eastern Boreal Floodplain Shrubland,4,73,Riparian,
7286,1,Paleozoic Plateau Bluff and Talus Herbaceous,0,32,Hardwood,
+7288,1,Acadian-Appalachian Alpine Tundra Meadow,1,,,
+7289,1,Acadian-Appalachian Subalpine Heath-Krummholz,1,,,
7290,1,North-Central Oak Barrens Herbaceous,0,32,Hardwood,
7291,1,Central Interior Highlands Calcareous Glade and Barrens Herbaceous,0,78,Conifer-Hardwood,
7292,1,Open Water,4,123,Open Water,
@@ -3249,39 +3306,88 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
7297,1,Developed-Medium Intensity,0,57,Developed-Medium Intensity,
7298,1,Developed-High Intensity,0,55,Developed-High Intensity,
7299,1,Developed-Roads,0,59,Developed-Roads,
+7300,1,Developed-Open Space,0,,,
7301,1,Laurentian-Acadian Sub-boreal Aspen-Birch Forest,0,17,Hardwood,
-7302,1,Laurentian-Acadian Northern Hardwoods Forest,0,198,Hardwood,
+7302,1,Laurentian-Acadian Northern Hardwoods Forest,2,198,Hardwood,
+7303,1,Northeastern Interior Dry-Mesic Oak Forest,3,,,
7304,1,Ozark-Ouachita Dry-Mesic Oak Forest,0,194,Hardwood,
7305,1,Southern Interior Low Plateau Dry-Mesic Oak Forest,0,45,Hardwood,
+7306,1,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,1,,,
+7307,1,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,2,,,
7308,1,Crosstimbers Oak Forest and Woodland,2,144,Hardwood,
+7309,1,Southern Appalachian Northern Hardwood Forest,2,,,
7310,1,North-Central Interior Dry-Mesic Oak Forest and Woodland,2,194,Hardwood,
7311,1,North-Central Interior Dry Oak Forest and Woodland,2,32,Hardwood,
7312,1,Ouachita Montane Oak Forest,0,119,Hardwood,
7313,1,North-Central Interior Beech-Maple Forest,0,27,Hardwood,
7314,1,North-Central Interior Maple-Basswood Forest,0,27,Hardwood,
+7315,1,Southern Appalachian Oak Forest,3,,,
+7316,1,Southern Piedmont Mesic Forest,2,,,
7317,1,Allegheny-Cumberland Dry Oak Forest and Woodland,2,45,Hardwood,
+7318,1,Southern and Central Appalachian Cove Forest,2,,,
+7320,1,Central and Southern Appalachian Montane Oak Forest,3,,,
7321,1,South-Central Interior Mesophytic Forest,0,27,Hardwood,
-7323,1,West Gulf Coastal Plain Mesic Hardwood Forest,0,175,Hardwood,
-7326,1,South-Central Interior / Upper Coastal Plain Flatwoods,0,84,Hardwood,
+7322,1,Crowley's Ridge Mesic Loess Slope Forest,1,,,
+7323,1,West Gulf Coastal Plain Mesic Hardwood Forest,2,175,Hardwood,
+7324,1,Northern Atlantic Coastal Plain Hardwood Forest,2,,,
+7325,1,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,2,,,
+7326,1,South-Central Interior / Upper Coastal Plain Flatwoods,1,84,Hardwood,
+7327,1,East Gulf Coastal Plain Northern Loess Bluff Forest,2,,,
+7328,1,Southern Coastal Plain Limestone Forest,2,,,
+7329,1,East Gulf Coastal Plain Southern Loess Bluff Forest,2,,,
+7330,1,Southern Coastal Plain Dry Upland Hardwood Forest,2,,,
7331,1,Eastern Great Plains Tallgrass Aspen Forest and Woodland,2,16,Hardwood,
-7334,1,Ozark-Ouachita Mesic Hardwood Forest,0,27,Hardwood,
+7333,1,South Florida Hardwood Hammock,2,,,
+7334,1,Ozark-Ouachita Mesic Hardwood Forest,2,27,Hardwood,
+7335,1,Southern Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,3,,,
+7336,1,Southwest Florida Maritime Hammock,0,,,
+7337,1,Southeast Florida Maritime Hammock,0,,,
7338,1,Central and South Texas Coastal Fringe Forest and Woodland,2,177,Hardwood,
7339,1,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,2,177,Hardwood,
+7340,1,Appalachian Shale Barrens,0,,,
+7342,1,Piedmont Hardpan Woodland and Forest,3,,,
+7343,1,Southern Atlantic Coastal Plain Mesic Hardwood Forest,2,,,
+7346,1,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,2,,,
+7347,1,Atlantic Coastal Plain Upland Longleaf Pine Woodland,2,,,
7348,1,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,2,111,Conifer,
+7349,1,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,2,,,
+7350,1,Central and Southern Appalachian Spruce-Fir Forest,2,,,
+7351,1,Southeastern Interior Longleaf Pine Woodland,2,,,
+7352,1,Southern Appalachian Montane Pine Forest and Woodland,2,,,
7353,1,Southern Appalachian Low-Elevation Pine Forest,1,184,Conifer,
+7354,1,Northeastern Interior Pine Barrens,0,,,
+7355,1,Northern Atlantic Coastal Plain Pitch Pine Barrens,0,,,
+7356,1,Florida Longleaf Pine Sandhill,0,,,
+7357,1,Southern Coastal Plain Mesic Slope Forest,2,,,
7358,1,Bastrop Lost Pines Forest and Woodland,2,157,Conifer,
+7360,1,South Florida Pine Rockland,0,,,
+7361,1,Central Atlantic Coastal Plain Maritime Forest,2,,,
7362,1,Laurentian-Acadian Northern Pine Forest,1,149,Conifer,
7363,1,Central Interior Highlands Dry Acidic Glade and Barrens,0,78,Conifer-Hardwood,
7364,1,Ozark-Ouachita Dry Oak Woodland,2,144,Hardwood,
7366,1,Laurentian-Acadian Pine-Hemlock Forest,2,139,Conifer,
7367,1,Ozark-Ouachita Shortleaf Pine Forest and Woodland,2,158,Conifer-Hardwood,
+7368,1,Southern Piedmont Dry Pine Forest,2,,,
+7369,1,Central Appalachian Dry Pine Forest,2,,,
7370,1,Appalachian Hemlock Forest,2,139,Conifer,
7371,1,West Gulf Coastal Plain Pine Forest,1,157,Conifer,
7372,1,East Gulf Coastal Plain Interior Shortleaf Pine Forest,1,158,Conifer-Hardwood,
+7373,1,Acadian Low-Elevation Spruce-Fir Forest,2,,,
+7374,1,Acadian-Appalachian Montane Spruce-Fir Forest,2,,,
+7375,1,Eastern Serpentine Woodland,2,,,
7376,1,Southern Ridge and Valley / Cumberland Dry Calcareous Forest,0,194,Hardwood,
+7377,1,Central Appalachian Pine Rocky Woodland,1,,,
7378,1,West Gulf Coastal Plain Sandhill Shortleaf Pine Forest and Woodland,2,157,Conifer,
+7379,1,Northern Atlantic Coastal Plain Maritime Forest,2,,,
+7380,1,East Gulf Coastal Plain Maritime Forest,3,,,
+7381,1,Lower Mississippi River Dune Woodland and Forest,2,,,
+7382,1,Southern Atlantic Coastal Plain Maritime Forest,2,,,
7383,1,Edwards Plateau Limestone Savanna and Woodland,2,144,Hardwood,
+7384,1,Mississippi Delta Maritime Forest,2,,,
7385,1,Great Plains Wooded Draw and Ravine Woodland,3,191,Riparian,
+7386,1,Acadian-Appalachian Alpine Tundra Shrubland,1,,,
+7387,1,Florida Peninsula Inland Scrub Shrubland,1,,,
+7389,1,Acadian-Appalachian Subalpine Woodland,2,,,
7390,1,Tamaulipan Mixed Deciduous Thornscrub,0,53,Shrubland,
7391,1,Tamaulipan Mesquite Upland Woodland,0,116,Shrubland,
7392,1,Tamaulipan Calcareous Thornscrub,0,53,Shrubland,
@@ -3290,82 +3396,211 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
7395,1,North-Central Oak Barrens Woodland,0,32,Hardwood,
7396,1,Great Plains Wooded Draw and Ravine Shrubland,0,191,Riparian,
7397,1,Nashville Basin Limestone Glade and Woodland,2,78,Conifer-Hardwood,
+7398,1,Cumberland Sandstone Glade and Barrens,0,,,
+7399,1,Northern Atlantic Coastal Plain Grassland,1,,,
+7400,1,Central Appalachian Alkaline Glade and Woodland,2,,,
7401,1,Central Interior Highlands Calcareous Glade and Barrens Woodland,0,78,Conifer-Hardwood,
7403,1,West Gulf Coastal Plain Catahoula Barrens,0,78,Conifer-Hardwood,
7405,1,West Gulf Coastal Plain Nepheline Syenite Glade,0,78,Conifer-Hardwood,
+7406,1,Southern Piedmont Dry Oak Forest,3,,,
7407,1,Laurentian Pine Barrens,0,104,Conifer,
+7408,1,Alabama Ketona Glade and Woodland,2,,,
7409,1,Great Lakes Alvar,0,82,Shrubland,
7410,1,Llano Uplift Acidic Forest and Woodland,2,78,Conifer-Hardwood,
7411,1,Great Lakes Wet-Mesic Lakeplain Prairie,1,94,Riparian,
7412,1,North-Central Interior Sand and Gravel Tallgrass Prairie,1,176,Grassland,
7413,1,Bluegrass Savanna and Woodland Prairie,1,145,Grassland,
+7414,1,Southern Appalachian Shrub Bald,0,,,
7415,1,Arkansas Valley Prairie,1,145,Grassland,
7416,1,Western Highland Rim Prairie and Barrens,0,145,Grassland,
7417,1,Eastern Highland Rim Prairie and Barrens,0,145,Grassland,
7418,1,Pennyroyal Karst Plain Prairie and Barrens,0,145,Grassland,
+7419,1,Southern Ridge and Valley Patch Prairie,0,,,
7420,1,Northern Tallgrass Prairie,1,176,Grassland,
7421,1,Central Tallgrass Prairie,1,176,Grassland,
7422,1,Texas Blackland Tallgrass Prairie,1,176,Grassland,
7423,1,Southeastern Great Plains Tallgrass Prairie,1,176,Grassland,
7424,1,East-Central Texas Plains Xeric Sandyland,0,145,Grassland,
+7425,1,Florida Dry Prairie Grassland,1,,,
+7426,1,Southern Atlantic Coastal Plain Dune and Maritime Grassland,1,,,
7428,1,West Gulf Coastal Plain Northern Calcareous Prairie,1,145,Grassland,
7429,1,West Gulf Coastal Plain Southern Calcareous Prairie,1,145,Grassland,
+7430,1,Southern Coastal Plain Blackland Prairie,0,,,
+7431,1,Southwest Florida Dune and Coastal Grassland,1,,,
7434,1,Texas-Louisiana Coastal Prairie,1,94,Riparian,
+7435,1,East Gulf Coastal Plain Dune and Coastal Grassland,1,,,
+7436,1,Northern Atlantic Coastal Plain Dune and Swale Shrubland,1,,,
7437,1,Texas Coast Dune and Coastal Grassland,1,20,Grassland,
7438,1,Tamaulipan Savanna Grassland,1,79,Grassland,
7439,1,Tamaulipan Lomas,0,79,Grassland,
7441,1,Bluegrass Savanna and Woodland,2,145,Grassland,
7442,1,Arkansas Valley Prairie and Woodland,2,145,Grassland,
7444,1,Eastern Boreal Floodplain Woodland,0,73,Riparian,
-7451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,0,138,Conifer,
-7457,1,South-Central Interior / Upper Coastal Plain Wet Flatwoods,0,84,Hardwood,
-7458,1,West Gulf Coastal Plain Pine Flatwoods,0,138,Conifer,
+7445,1,South Florida Dwarf Cypress Savanna,0,,,
+7446,1,South Florida Pine Flatwoods,1,,,
+7447,1,South Florida Cypress Dome,0,,,
+7448,1,Southern Piedmont Dry Oak-(Pine) Forest,3,,,
+7449,1,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,,,
+7450,1,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,1,,,
+7451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,1,138,Conifer,
+7452,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Woodland,2,,,
+7453,1,Central Florida Pine Flatwoods,1,,,
+7454,1,East Gulf Coastal Plain Near-Coast Pine Flatwoods,1,,,
+7455,1,East Gulf Coastal Plain Southern Loblolly Flatwoods,1,,,
+7456,1,Northern Atlantic Coastal Plain Pitch Pine Lowland,0,,,
+7457,1,South-Central Interior / Upper Coastal Plain Wet Flatwoods,1,84,Hardwood,
+7458,1,West Gulf Coastal Plain Pine Flatwoods,1,138,Conifer,
+7459,1,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland,1,,,
+7460,1,Southern Coastal Plain Nonriverine Cypress Dome,0,,,
7461,1,Southern Coastal Plain Seepage Swamp and Baygall Woodland,0,21,Riparian,
7462,1,West Gulf Coastal Plain Seepage Swamp and Baygall Woodland,0,21,Riparian,
+7463,1,Central Appalachian Dry Oak Forest,3,,,
+7464,1,Acadian Sub-Boreal Spruce Barrens,0,,,
+7465,1,Acadian Sub-Boreal Spruce Flat,1,,,
7466,1,Great Lakes Wooded Dune and Swale,0,94,Riparian,
7467,1,Tamaulipan Floodplain Woodland,0,73,Riparian,
+7468,1,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall Woodland,2,,,
+7469,1,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall Shrubland,1,,,
+7471,1,Southwest Florida Coastal Strand Shrubland,1,,,
+7472,1,Southeast Florida Coastal Strand Shrubland,1,,,
7473,1,West Gulf Coastal Plain Seepage Swamp and Baygall Shrubland,0,21,Riparian,
7474,1,Tamaulipan Floodplain Shrubland,4,73,Riparian,
7475,1,Tamaulipan Floodplain Herbaceous,3,73,Riparian,
7476,1,Tamaulipan Riparian Woodland,4,74,Riparian,
-7481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,0,21,Riparian,
+7481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,2,21,Riparian,
7482,1,Great Plains Prairie Pothole,1,52,Riparian,
+7483,1,South Florida Everglades Sawgrass Marsh,1,,,
+7484,1,South Florida Wet Marl Prairie,1,,,
+7485,1,East Gulf Coastal Plain Wet Prairie,1,,,
7486,1,Texas Saline Coastal Prairie,1,94,Riparian,
7487,1,Texas-Louisiana Coastal Prairie Pondshore,0,94,Riparian,
7488,1,Eastern Great Plains Wet Meadow-Prairie-Marsh,0,52,Riparian,
-7500,1,South Texas Salt and Brackish Tidal Flat,0,168,Sparsely Vegetated,
+7489,1,Floridian Highlands Freshwater Marsh,0,,,
+7500,1,South Texas Salt and Brackish Tidal Flat,1,168,Sparsely Vegetated,
+7501,1,Southern Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,2,,,
+7502,1,Central Appalachian Dry Oak-Pine Forest,3,,,
7503,1,Chihuahuan Loamy Plains Desert Grassland,1,79,Grassland,
7504,1,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,1,52,Riparian,
7505,1,Ouachita Novaculite Glade and Woodland,2,144,Hardwood,
-7506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,0,84,Hardwood,
+7506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,2,84,Hardwood,
7507,1,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland,0,157,Conifer,
+7509,1,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,2,,,
+7510,1,Crowley's Ridge Sand Forest,1,,,
+7511,1,Appalachian Northern Hardwood Forest,2,,,
+7512,1,Appalachian (Hemlock)-Northern Hardwood Forest,2,,,
+7513,1,Lower Mississippi River Flatwoods,1,,,
+7514,1,Central Florida Herbaceous Pondshore,0,,,
+7515,1,Southern Coastal Plain Herbaceous Seep and Bog,0,,,
+7516,1,Atlantic Coastal Plain Sandhill Seep,0,,,
7517,1,Paleozoic Plateau Bluff and Talus Woodland,0,32,Hardwood,
-7518,1,North-Central Interior Wet Flatwoods,0,84,Hardwood,
+7518,1,North-Central Interior Wet Flatwoods,1,84,Hardwood,
7519,1,East-Central Texas Plains Post Oak Savanna and Woodland,2,144,Hardwood,
+7522,1,Northern Atlantic Coastal Plain Heathland,1,,,
7523,1,Edwards Plateau Dry-Mesic Slope Forest and Woodland,2,106,Conifer-Hardwood,
7524,1,Edwards Plateau Mesic Canyon,0,29,Hardwood,
7525,1,Edwards Plateau Riparian Forest and Woodland,2,74,Riparian,
+7527,1,East Gulf Coastal Plain Interior Oak Forest,3,,,
+7545,1,East Gulf Coastal Plain Near-Coast Pine Wet Flatwoods,1,,,
+7546,1,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest,3,,,
+7547,1,Central Florida Pine Wet Flatwoods,1,,,
+7548,1,South Florida Pine Wet Flatwoods,1,,,
+7554,1,Acadian Low-Elevation Hardwood Forest,2,,,
+7555,1,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,2,,,
+7556,1,Central Appalachian Oak Rocky Woodland,1,,,
+7557,1,Central Appalachian Pine-Oak Rocky Woodland,1,,,
7560,1,Tamaulipan Mesquite Upland Scrub,0,53,Shrubland,
7561,1,Llano Uplift Acidic Herbaceous Glade,0,78,Conifer-Hardwood,
7562,1,Tamaulipan Riparian Shrubland,4,74,Riparian,
7563,1,Edwards Plateau Riparian Shrubland,4,74,Riparian,
7564,1,Edwards Plateau Riparian Herbaceous,4,74,Riparian,
+7565,1,Florida Peninsula Inland Scrub Woodland,2,,,
+7566,1,Florida Dry Prairie Shrubland,1,,,
+7567,1,Southern Coastal Plain Blackland Prairie Woodland,2,,,
7571,1,Southern Coastal Plain Seepage Swamp and Baygall Shrubland,0,21,Riparian,
7573,1,Tamaulipan Riparian Herbaceous,4,74,Riparian,
+7578,1,East Gulf Coastal Plain Wet Savanna,1,,,
7582,1,Ozark-Ouachita Oak Forest and Woodland,2,158,Conifer-Hardwood,
7583,1,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,2,158,Conifer-Hardwood,
-7584,1,West Gulf Coastal Plain Hardwood Forest,0,157,Conifer,
-7585,1,West Gulf Coastal Plain Pine-Hardwood Forest,0,157,Conifer,
+7584,1,West Gulf Coastal Plain Hardwood Forest,2,157,Conifer,
+7585,1,West Gulf Coastal Plain Pine-Hardwood Forest,2,157,Conifer,
7586,1,West Gulf Coastal Plain Sandhill Oak Forest and Woodland,2,157,Conifer,
7587,1,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,2,157,Conifer,
-7590,1,West Gulf Coastal Plain Hardwood Flatwoods,0,138,Conifer,
-7591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods,0,138,Conifer,
+7588,1,East Gulf Coastal Plain Southern Hardwood Flatwoods,2,,,
+7589,1,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,2,,,
+7590,1,West Gulf Coastal Plain Hardwood Flatwoods,2,138,Conifer,
+7591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods,2,138,Conifer,
7662,1,Temperate Pacific Freshwater Emergent Marsh,3,77,Riparian,
7663,1,North Pacific Shrub Swamp,0,159,Shrubland,
7668,1,Temperate Pacific Tidal Salt and Brackish Marsh,0,179,Riparian,
7733,1,North Pacific Montane Massive Bedrock-Cliff and Talus,0,168,Sparsely Vegetated,
7734,1,North Pacific Alpine and Subalpine Bedrock and Scree,0,168,Sparsely Vegetated,
7735,1,North American Glacier and Ice Field,0,164,Snow-Ice,
+7754,1,Agriculture-Pasture and Hay,0,,,
+7755,1,Agriculture-Cultivated Crops and Irrigated Agriculture,0,,,
+7800,1,Hawai'i Floodplain Forest,2,,,
+7802,1,Hawai'i Riparian Forest,3,,,
+7804,1,Hawai'i Freshwater Marsh,1,,,
+7806,1,Hawai'i Bog,0,,,
+7807,1,Northern Polynesia Tidal Salt Marsh,0,,,
+7808,1,Hawai'i Lowland Rainforest,3,,,
+7809,1,Hawai'i Montane Cloud Forest,3,,,
+7810,1,Hawai'i Montane Rainforest,3,,,
+7811,1,Hawai'i Wet Cliff and Ridge Crest Shrubland,1,,,
+7812,1,Hawai'i Mesic Coastal Forest,3,,,
+7813,1,Hawai'i Lowland Dry Forest,2,,,
+7814,1,Hawai'i Lowland Mesic Forest,2,,,
+7815,1,Hawai'i Montane-Subalpine Dry Forest and Woodland,2,,,
+7816,1,Hawai'i Montane-Subalpine Mesic Forest,3,,,
+7817,1,Hawai'i Lowland Dry Shrubland,1,,,
+7818,1,Hawai'i Lowland Mesic Shrubland,1,,,
+7819,1,Hawai'i Lowland Dry Grassland,1,,,
+7820,1,Hawai'i Lowland Mesic Grassland,1,,,
+7821,1,Hawai'i Montane-Subalpine Dry Shrubland,1,,,
+7822,1,Hawai'i Montane-Subalpine Dry Grassland,1,,,
+7823,1,Hawai'i Montane-Subalpine Mesic Grassland,1,,,
+7824,1,Hawai'i Alpine Dwarf-Shrubland,1,,,
+7826,1,Hawai'i Dry Coastal Strand Shrubland,1,,,
+7827,1,Hawai'i Wet-Mesic Coastal Strand,0,,,
+7828,1,Hawai'i Subalpine Mesic Shrubland,1,,,
+7829,1,Hawai'i Alpine Bedrock and Scree,0,,,
+7830,1,Hawai'i Dry Coastal Strand Sparse Vegetation,0,,,
+7831,1,Hawai'i Dry-Site Lava Flow,0,,,
+7832,1,Hawai'i Floodplain Shrubland,1,,,
+7833,1,Hawai'i Riparian Shrubland,1,,,
+7834,1,Tropical Pacific Orchard,1,,,
+7835,1,Tropical Pacific Bush fruit and Berries,1,,,
+7836,1,Tropical Pacific Aquaculture,0,,,
+7837,1,Sugar Cane,0,,,
+7838,1,Caribbean Bush fruit and berries,1,,,
+7860,1,Caribbean Coastal Dry Evergreen Forest,2,,,
+7861,1,Caribbean Coastal Mangrove,1,,,
+7862,1,Caribbean Coastal Rocky Shore,0,,,
+7863,1,Caribbean Coastal Thornscrub,1,,,
+7864,1,Caribbean Dry Karst Shrubland,1,,,
+7865,1,"Caribbean Edapho-Xerophilous ""Mogote"" Complex",1,,,
+7866,1,Caribbean Emergent Herbaceous Estuary,1,,,
+7867,1,Caribbean Estuary Mangrove,0,,,
+7868,1,Caribbean Floodplain Forest,2,,,
+7869,1,Caribbean Freshwater Marsh,1,,,
+7870,1,Caribbean Lowland Moist Serpentine Woodland,2,,,
+7871,1,Caribbean Montane Meadow,1,,,
+7872,1,Caribbean Montane Wet Elfin Forest,2,,,
+7873,1,Caribbean Montane Wet Serpentine Woodland,2,,,
+7874,1,Caribbean Montane Wet Short Shrubland,1,,,
+7875,1,Caribbean Riparian Forest,2,,,
+7876,1,Caribbean Salt Flat and Pond,1,,,
+7877,1,Caribbean Sand Beach Vegetation,0,,,
+7878,1,Caribbean Sand Savanna,0,,,
+7879,1,Caribbean Seasonal Evergreen Lowland Forest,2,,,
+7880,1,Caribbean Seasonal Evergreen Submontane/Lowland Forest,2,,,
+7881,1,Caribbean Semi-deciduous Lowland Forest,2,,,
+7882,1,Caribbean Serpentine Dry Scrub,1,,,
+7883,1,Caribbean Submontane/Montane Karstic Forest,2,,,
+7884,1,Caribbean Wet Montane Forest,2,,,
+7885,1,Caribbean Wet Submontane/Lowland Forest,2,,,
+7886,1,Stabilized Caribbean Dunes,0,,,
+7887,1,Caribbean Floodplain Shrubland,1,,,
+7888,1,Caribbean Riparian Shrubland,1,,,
7900,1,Western Cool Temperate Urban Deciduous Forest,3,60,Developed,
7901,1,Western Cool Temperate Urban Evergreen Forest,2,61,Developed,
7902,1,Western Cool Temperate Urban Mixed Forest,2,63,Developed,
@@ -3496,21 +3731,49 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9033,1,Inter-Mountain Basins Volcanic Rock and Cinder Land,0,168,Sparsely Vegetated,
9034,1,North American Warm Desert Riparian Woodland,4,191,Riparian,
9035,1,North American Warm Desert Lower Montane Riparian Woodland,4,191,Riparian,
+9036,1,Acadian Coastal Salt Marsh,0,,,
+9037,1,Acadian Estuary Marsh,0,,,
+9038,1,Acadian Maritime Bog,0,,,
+9039,1,Acadian-Appalachian Conifer Seepage Forest,2,,,
+9040,1,Acadian-North Atlantic Rocky Coast,0,,,
+9041,1,Atlantic Coastal Plain Blackwater Stream Floodplain Forest,2,,,
+9042,1,Atlantic Coastal Plain Brownwater Stream Floodplain Forest,2,,,
+9044,1,Atlantic Coastal Plain Embayed Region Tidal Freshwater Marsh,0,,,
+9045,1,Atlantic Coastal Plain Embayed Region Tidal Salt and Brackish Marsh,0,,,
+9047,1,Atlantic Coastal Plain Indian River Lagoon Tidal Marsh,0,,,
+9048,1,Atlantic Coastal Plain Northern Bog,0,,,
+9050,1,Atlantic Coastal Plain Small Blackwater River Floodplain Forest,2,,,
+9051,1,Atlantic Coastal Plain Small Brownwater River Floodplain Forest,2,,,
9055,1,Boreal-Laurentian Bog,0,136,Riparian,
9056,1,Boreal-Laurentian Conifer Acidic Swamp and Treed Poor Fen,0,136,Riparian,
9057,1,Boreal-Laurentian-Acadian Acidic Basin Fen,0,94,Riparian,
+9059,1,Central Appalachian River Floodplain Forest,2,,,
+9060,1,Central Appalachian Stream and Riparian Woodland,2,,,
+9061,1,Central Atlantic Coastal Plain Sandy Beach,0,,,
9062,1,Central California Coast Ranges Cliff and Canyon,0,168,Sparsely Vegetated,
+9063,1,Central Florida Wet Prairie and Herbaceous Seep,1,,,
9064,1,Central Interior Acidic Cliff and Talus,0,168,Sparsely Vegetated,
9065,1,Central Interior Calcareous Cliff and Talus,0,168,Sparsely Vegetated,
9066,1,Central Interior Highlands and Appalachian Sinkhole and Depression Pond,0,21,Riparian,
9068,1,Central Texas Coastal Prairie Riparian Forest,3,74,Riparian,
9069,1,Central Texas Coastal Prairie River Floodplain Forest,0,73,Riparian,
9071,1,Columbia Bottomlands Forest and Woodland,4,73,Riparian,
+9073,1,Cumberland Acidic Cliff and Rockhouse,0,,,
9074,1,Cumberland Riverscour,0,74,Riparian,
+9075,1,Cumberland Seepage Forest,1,,,
+9077,1,East Gulf Coastal Plain Depression Pondshore,0,,,
+9080,1,East Gulf Coastal Plain Freshwater Tidal Wooded Swamp,2,,,
+9082,1,East Gulf Coastal Plain Large River Floodplain Forest,3,,,
+9083,1,East Gulf Coastal Plain Northern Seepage Swamp,0,,,
+9085,1,East Gulf Coastal Plain Small Stream and River Floodplain Forest,3,,,
9088,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce Forest,2,104,Conifer,
-9089,1,Laurentian-Acadian Sub-boreal Mesic Balsam Fir-Spruce Forest,0,171,Conifer,
+9089,1,Laurentian-Acadian Sub-boreal Mesic Balsam Fir-Spruce Forest,2,171,Conifer,
9091,1,Edwards Plateau Cliff,0,168,Sparsely Vegetated,
9092,1,Edwards Plateau Floodplain Terrace Forest and Woodland,2,73,Riparian,
+9094,1,Florida Big Bend Fresh and Oligohaline Tidal Marsh,0,,,
+9095,1,Florida Big Bend Salt and Brackish Tidal Marsh,0,,,
+9097,1,Florida Panhandle Beach Vegetation,1,,,
+9098,1,Florida River Floodplain Marsh,0,,,
9099,1,Great Lakes Acidic Rocky Shore and Cliff,0,168,Sparsely Vegetated,
9100,1,Great Lakes Alkaline Rocky Shore and Cliff,0,168,Sparsely Vegetated,
9101,1,Great Lakes Dune,0,168,Sparsely Vegetated,
@@ -3518,12 +3781,14 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9103,1,Gulf Coast Chenier Plain Beach,0,168,Sparsely Vegetated,
9104,1,Gulf Coast Chenier Plain Fresh and Oligohaline Tidal Marsh,0,19,Riparian,
9105,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh,0,19,Riparian,
+9106,1,High Allegheny Wetland,0,,,
9110,1,Klamath-Siskiyou Cliff and Outcrop,0,168,Sparsely Vegetated,
9111,1,Laurentian Acidic Rocky Outcrop Woodland,0,104,Conifer,
9112,1,Laurentian Jack Pine-Red Pine Forest,1,104,Conifer,
9113,1,Laurentian-Acadian Acidic Cliff and Talus,0,168,Sparsely Vegetated,
9114,1,Laurentian-Acadian Alkaline Fen,0,94,Riparian,
9115,1,Laurentian-Acadian Calcareous Cliff and Talus,0,168,Sparsely Vegetated,
+9116,1,Laurentian-Acadian Calcareous Rocky Outcrop Woodland,2,,,
9117,1,Laurentian-Acadian Floodplain Forest,0,73,Riparian,
9118,1,Laurentian-Acadian Freshwater Marsh,0,94,Riparian,
9119,1,Laurentian-Acadian Lakeshore Beach,0,168,Sparsely Vegetated,
@@ -3536,6 +3801,14 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9130,1,Mediterranean California Northern Coastal Dune,0,168,Sparsely Vegetated,
9133,1,Mediterranean California Serpentine Foothill and Lower Montane Riparian Woodland and Seep,0,191,Riparian,
9134,1,Mediterranean California Southern Coastal Dune,0,168,Sparsely Vegetated,
+9136,1,Mississippi Delta Fresh and Oligohaline Tidal Marsh,0,,,
+9137,1,Mississippi Delta Salt and Brackish Tidal Marsh,0,,,
+9138,1,Mississippi River Bottomland Depression,0,,,
+9139,1,Mississippi River High Floodplain (Bottomland) Forest,2,,,
+9140,1,Mississippi River Low Floodplain (Bottomland) Forest,2,,,
+9141,1,Mississippi River Riparian Forest,3,,,
+9142,1,Mississippi Sound Fresh and Oligohaline Tidal Marsh,0,,,
+9143,1,Mississippi Sound Salt and Brackish Tidal Marsh,0,,,
9145,1,North American Warm Desert Active and Stabilized Dune,0,168,Sparsely Vegetated,
9146,1,North American Warm Desert Badland,0,168,Sparsely Vegetated,
9147,1,North American Warm Desert Bedrock Cliff and Outcrop,0,168,Sparsely Vegetated,
@@ -3546,11 +3819,15 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9153,1,North American Warm Desert Volcanic Rockland,0,168,Sparsely Vegetated,
9154,1,North American Warm Desert Wash Woodland,0,191,Riparian,
9160,1,North Pacific Active Volcanic Rock and Cinder Land,0,168,Sparsely Vegetated,
-9165,1,North Pacific Hardwood-Conifer Swamp,0,190,Riparian,
+9165,1,North Pacific Hardwood-Conifer Swamp,2,190,Riparian,
9166,1,North Pacific Herbaceous Bald and Bluff,0,145,Grassland,
9167,1,North Pacific Hypermaritime Herbaceous Headland,0,125,Shrubland,
9170,1,North Pacific Lowland Mixed Hardwood-Conifer Forest,2,48,Conifer-Hardwood,
9171,1,North Pacific Maritime Coastal Sand Dune and Strand,0,168,Sparsely Vegetated,
+9173,1,North-Central Appalachian Acidic Cliff and Talus,0,,,
+9174,1,North-Central Appalachian Acidic Swamp,0,,,
+9175,1,North-Central Appalachian Circumneutral Cliff and Talus,0,,,
+9176,1,North-Central Appalachian Seepage Fen,0,,,
9177,1,North-Central Interior and Appalachian Acidic Peatland Woodland,0,21,Riparian,
9178,1,North-Central Interior and Appalachian Rich Swamp,0,21,Riparian,
9179,1,North-Central Interior Floodplain Forest,0,73,Riparian,
@@ -3558,19 +3835,64 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9181,1,North-Central Interior Quartzite Glade,0,78,Conifer-Hardwood,
9182,1,North-Central Interior Shrub Alkaline Fen,0,94,Riparian,
9183,1,North-Central Interior Shrub Swamp,0,94,Riparian,
+9184,1,Northeastern Erosional Bluff,0,,,
+9185,1,Northern Appalachian-Acadian Conifer-Hardwood Acidic Swamp,2,,,
+9186,1,Northern Appalachian-Acadian Rocky Heath Outcrop Woodland,2,,,
+9187,1,Northern Atlantic Coastal Plain Basin Peat Swamp,0,,,
+9188,1,Northern Atlantic Coastal Plain Basin Swamp and Wet Hardwood Forest,2,,,
+9189,1,Northern Atlantic Coastal Plain Brackish Tidal Marsh,0,,,
+9190,1,Northern Atlantic Coastal Plain Calcareous Ravine,0,,,
+9191,1,Northern Atlantic Coastal Plain Fresh and Oligohaline Tidal Marsh,0,,,
9192,1,Northern Atlantic Coastal Plain Pond,0,74,Riparian,
+9193,1,Northern Atlantic Coastal Plain Sandy Beach,0,,,
+9195,1,Northern Atlantic Coastal Plain Riparian and Floodplain Forest,3,,,
+9197,1,Northern Atlantic Coastal Plain Tidal Salt Marsh,0,,,
+9198,1,Northern Atlantic Coastal Plain Tidal Swamp,0,,,
9202,1,Northern Great Lakes Coastal Marsh,0,94,Riparian,
9203,1,Northern Great Lakes Interdunal Wetland,0,94,Riparian,
9207,1,Ozark-Ouachita Riparian Forest,3,74,Riparian,
+9208,1,Panhandle Florida Limestone Glade,1,,,
+9209,1,Piedmont Seepage Wetland,0,,,
+9210,1,Piedmont Upland Depression Swamp,0,,,
9211,1,Red River Large Floodplain Forest,0,73,Riparian,
9213,1,Sierra Nevada Cliff and Canyon,0,168,Sparsely Vegetated,
+9216,1,South Florida Bayhead Swamp,0,,,
+9218,1,South Florida Hydric Hammock,0,,,
+9220,1,South Florida Pond-apple/Popash Slough,0,,,
+9221,1,South Florida Shell Hash Beach,0,,,
+9222,1,South Florida Slough Gator Hole and Willow Head Herbaceous,1,,,
9223,1,South-Central Interior Large Floodplain Forest,0,73,Riparian,
9224,1,South-Central Interior Small Stream and Riparian Forest,3,74,Riparian,
+9226,1,Southeast Florida Beach,0,,,
9227,1,Southeastern Coastal Plain Cliff,0,168,Sparsely Vegetated,
9228,1,Southeastern Coastal Plain Interdunal Wetland,0,94,Riparian,
+9229,1,Southeastern Coastal Plain Natural Lakeshore,0,,,
9230,1,Southeastern Great Plains Floodplain Forest and Woodland,2,73,Riparian,
9231,1,Southeastern Great Plains Riparian Forest and Woodland,2,73,Riparian,
+9232,1,Southern and Central Appalachian Bog and Fen,0,,,
+9233,1,Southern and Central Appalachian Mafic Glade and Barrens,0,,,
+9234,1,Southern Appalachian Granitic Dome,0,,,
+9237,1,Southern Appalachian Seepage Wetland,0,,,
+9239,1,Southern Atlantic Coastal Plain Depression Pondshore,0,,,
+9240,1,Southern Atlantic Coastal Plain Florida Beach,0,,,
+9241,1,Southern Atlantic Coastal Plain Fresh and Oligohaline Tidal Marsh,0,,,
+9242,1,Southern Atlantic Coastal Plain Large River Floodplain Forest,3,,,
+9243,1,Southern Atlantic Coastal Plain Salt and Brackish Tidal Marsh,0,,,
+9244,1,Southern Atlantic Coastal Plain Sea Island Beach,0,,,
+9245,1,Southern Atlantic Coastal Plain Tidal Wooded Swamp,1,,,
9246,1,Southern California Coast Ranges Cliff and Canyon,0,168,Sparsely Vegetated,
+9247,1,Southern Coastal Plain Blackwater River Floodplain Forest,3,,,
+9248,1,Southern Coastal Plain Hydric Hammock,0,,,
+9249,1,Southern Coastal Plain Nonriverine Basin Swamp,0,,,
+9250,1,Southern Coastal Plain Oak Dome and Hammock,1,,,
+9251,1,Southern Coastal Plain Sinkhole,0,,,
+9256,1,Southern Piedmont Glade and Barrens,0,,,
+9257,1,Southern Piedmont Granite Flatrock and Outcrop,0,,,
+9258,1,Southern Piedmont Large Floodplain Forest,3,,,
+9259,1,Southern Piedmont Small Floodplain and Riparian Forest,3,,,
+9260,1,Southern Ridge and Valley Calcareous Glade and Woodland,2,,,
+9261,1,Southern Ridge and Valley Seepage Fen,0,,,
+9262,1,Southwest Florida Beach,0,,,
9265,1,Southwestern Great Plains Canyon,0,168,Sparsely Vegetated,
9266,1,Tamaulipan Closed Depression Wetland Woodland,0,52,Riparian,
9268,1,Tamaulipan Ramadero,0,74,Riparian,
@@ -3582,11 +3904,15 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9282,1,West Gulf Coastal Plain Large River Floodplain Forest,0,73,Riparian,
9283,1,West Gulf Coastal Plain Near-Coast Large River Swamp,0,21,Riparian,
9284,1,West Gulf Coastal Plain Small Stream and River Forest,0,74,Riparian,
+9288,1,Northeastern Interior Calcareous Oak Forest,3,,,
9289,1,Madrean Mesic Canyon Forest and Woodland,2,48,Conifer-Hardwood,
9290,1,Southeastern Great Plains Cliff,0,168,Sparsely Vegetated,
-9295,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce-Hardwood Forest,0,104,Conifer-Hardwood,
+9295,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce-Hardwood Forest,2,104,Conifer-Hardwood,
9301,1,California Ruderal Grassland and Meadow,1,96,Exotic Herbaceous,
9302,1,Californian Ruderal Forest,0,101,Exotic Tree-Shrub,
+9303,1,Caribbean & Mesoamerican Lowland Ruderal Shrubland,1,,,
+9304,1,Caribbean Forest Plantation,2,,,
+9305,1,Caribbean Ruderal Dry Forest,1,,,
9307,1,Great Basin & Intermountain Introduced Annual and Biennial Forbland,1,96,Exotic Herbaceous,
9308,1,Great Basin & Intermountain Introduced Annual Grassland,1,95,Exotic Herbaceous,
9309,1,Great Basin & Intermountain Introduced Perennial Grassland and Forbland,1,98,Exotic Herbaceous,
@@ -3613,6 +3939,21 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9332,1,Southeastern Exotic Ruderal Flooded & Swamp Forest,0,103,Riparian,
9336,1,Great Basin & Intermountain Ruderal Shrubland,1,100,Exotic Tree-Shrub,
9337,1,California Ruderal Scrub,0,100,Exotic Tree-Shrub,
+9340,1,Caribbean Lowland Ruderal Rainforest,2,,,
+9341,1,Caribbean Montane Ruderal Forest,2,,,
+9343,1,Hawaiian Montane Ruderal Forest & Woodland,2,,,
+9344,1,Hawaiian Ruderal Coastal Salt Marsh,0,,,
+9345,1,Hawaiian Ruderal Flooded & Swamp Forest,2,,,
+9346,1,Hawaiian Ruderal Freshwater Wet Meadow & Marsh,0,,,
+9347,1,Hawaiian Ruderal Mangrove,1,,,
+9348,1,Polynesian Ruderal Dry Woodland,2,,,
+9349,1,Polynesian Ruderal Lowland Rainforest,3,,,
+9350,1,Polynesian Ruderal Lowland Shrubland,1,,,
+9351,1,Polynesian Ruderal Scrub Coastal Strand,1,,,
+9352,1,Polynesian Ruderal Subalpine-Montane Shrubland,1,,,
+9353,1,Tropical Pacific Forest Plantation,1,,,
+9354,1,Caribbean Ruderal Freshwater Wet Meadow & Marsh,0,,,
+9355,1,Tropical Agroforestry Plantation,0,,,
9502,1,Columbia Basin Foothill Riparian Shrubland,4,191,Riparian,
9503,1,Great Basin Foothill and Lower Montane Riparian Shrubland,4,191,Riparian,
9504,1,Columbia Basin Foothill Riparian Herbaceous,4,191,Riparian,
@@ -3630,20 +3971,35 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9533,1,North American Warm Desert Riparian Herbaceous,4,187,Riparian,
9534,1,North American Warm Desert Riparian Shrubland,4,191,Riparian,
9535,1,North American Warm Desert Lower Montane Riparian Shrubland,4,191,Riparian,
+9541,1,Atlantic Coastal Plain Blackwater Stream Floodplain Shrubland,1,,,
+9542,1,Atlantic Coastal Plain Blackwater Stream Floodplain Herbaceous,1,,,
+9559,1,Central Appalachian River Floodplain Shrubland,1,,,
+9560,1,Central Appalachian Stream and Riparian Shrubland,1,,,
+9561,1,Central Appalachian River Floodplain Herbaceous,1,,,
+9562,1,Central Appalachian Stream and Riparian Herbaceous,1,,,
9568,1,Central Texas Coastal Prairie Riparian Shrubland,4,74,Riparian,
9569,1,Central Texas Coastal Prairie River Floodplain Shrubland,4,73,Riparian,
9570,1,Central Texas Coastal Prairie Riparian Herbaceous,4,74,Riparian,
9571,1,Central Texas Coastal Prairie River Floodplain Herbaceous,3,73,Riparian,
+9582,1,East Gulf Coastal Plain Large River Floodplain Shrubland,1,,,
+9583,1,East Gulf Coastal Plain Large River Floodplain Herbaceous,1,,,
+9585,1,East Gulf Coastal Plain Small Stream and River Floodplain Shrubland,1,,,
+9586,1,East Gulf Coastal Plain Small Stream and River Floodplain Herbaceous,1,,,
9592,1,Edwards Plateau Floodplain Terrace Shrubland,0,73,Riparian,
9593,1,Edwards Plateau Floodplain Terrace Herbaceous,0,73,Riparian,
9601,1,Great Lakes Dune Grassland,1,20,Grassland,
9604,1,Gulf Coast Chenier Plain Fresh and Oligohaline Tidal Marsh Shrubland,0,19,Riparian,
-9605,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh Shrubland,0,19,Riparian,
+9605,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh Shrubland,1,19,Riparian,
9611,1,Laurentian Acidic Rocky Outcrop Shrubland,0,104,Conifer,
+9616,1,Laurentian-Acadian Calcareous Rocky Outcrop Shrubland,1,,,
9617,1,Laurentian-Acadian Floodplain Shrubland,4,73,Riparian,
9620,1,Laurentian-Acadian Shrub Swamp,0,94,Riparian,
9629,1,Mediterranean California Foothill and Lower Montane Riparian Shrubland,4,191,Riparian,
9633,1,Mediterranean California Serpentine Foothill and Lower Montane Riparian Shrubland and Seep,0,191,Riparian,
+9639,1,Mississippi River High Floodplain (Bottomland) Shrubland,1,,,
+9640,1,Mississippi River Low Floodplain (Bottomland) Shrubland,1,,,
+9641,1,Mississippi River High Floodplain (Bottomland) Herbaceous,1,,,
+9642,1,Mississippi River Low Floodplain (Bottomland) Herbaceous,1,,,
9652,1,North American Warm Desert Riparian Mesquite Bosque Shrubland,0,191,Riparian,
9654,1,North American Warm Desert Wash Shrubland,0,191,Riparian,
9667,1,North Pacific Hypermaritime Shrub Headland,0,125,Shrubland,
@@ -3651,8 +4007,12 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9679,1,North-Central Interior Floodplain Shrubland,4,73,Riparian,
9682,1,North-Central Interior Graminoid Alkaline Fen,0,94,Riparian,
9683,1,North-Central Interior Wet Meadow,4,94,Riparian,
+9686,1,Northern Appalachian-Acadian Rocky Heath Outcrop Shrubland,1,,,
+9695,1,Northern Atlantic Coastal Plain Riparian and Floodplain Shrubland,1,,,
+9696,1,Northern Atlantic Coastal Plain Riparian and Floodplain Herbaceous,1,,,
9707,1,Ozark-Ouachita Riparian Shrubland,4,74,Riparian,
9708,1,Ozark-Ouachita Riparian Herbaceous,4,74,Riparian,
+9722,1,South Florida Slough Gator Hole and Willow Head Woodland,2,,,
9723,1,South-Central Interior Large Floodplain Shrubland,4,73,Riparian,
9724,1,South-Central Interior Small Stream and Riparian Shrubland,4,74,Riparian,
9725,1,South-Central Interior Large Floodplain Herbaceous,3,73,Riparian,
@@ -3661,13 +4021,20 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9731,1,Southeastern Great Plains Riparian Shrubland,4,73,Riparian,
9732,1,Southeastern Great Plains Floodplain Herbaceous,3,73,Riparian,
9733,1,Southeastern Great Plains Riparian Herbaceous,4,73,Riparian,
+9742,1,Southern Atlantic Coastal Plain Large River Floodplain Shrubland,1,,,
+9743,1,Southern Atlantic Coastal Plain Large River Floodplain Herbaceous,1,,,
+9758,1,Southern Piedmont Large Floodplain Shrubland,1,,,
+9759,1,Southern Piedmont Small Floodplain and Riparian Shrubland,1,,,
+9760,1,Southern Piedmont Large Floodplain Herbaceous,1,,,
+9761,1,Southern Piedmont Small Floodplain and Riparian Herbaceous,1,,,
9766,1,Tamaulipan Closed Depression Wetland Shrubland,0,52,Riparian,
9774,1,Texas Coast Fresh and Oligohaline Tidal Marsh Shrubland,0,19,Riparian,
-9775,1,Texas Coast Salt and Brackish Tidal Marsh Shrubland,0,19,Riparian,
+9775,1,Texas Coast Salt and Brackish Tidal Marsh Shrubland,1,19,Riparian,
9782,1,West Gulf Coastal Plain Large River Floodplain Shrubland,4,73,Riparian,
9783,1,West Gulf Coastal Plain Large River Floodplain Herbaceous,3,73,Riparian,
9784,1,West Gulf Coastal Plain Small Stream and River Shrubland,0,74,Riparian,
9785,1,West Gulf Coastal Plain Small Stream and River Herbaceous,0,74,Riparian,
+9803,1,Caribbean & Mesoamerican Lowland Ruderal Grassland,1,,,
9810,1,North American Warm Desert Ruderal & Planted Grassland,1,98,Exotic Herbaceous,
9811,1,North Pacific Maritime Coastal Sand Dune Ruderal Herb Vegetation,0,98,Exotic Herbaceous,
9816,1,Northern & Central Plains Ruderal & Planted Grassland,1,98,Exotic Herbaceous,
@@ -3678,5 +4045,9 @@ VegetationID,EpochID,Name,DefaultSuitability,LandUseID,Physiognomy,Notes
9827,1,Interior West Ruderal Riparian Scrub,3,99,Exotic Tree-Shrub,
9828,1,Interior Western North American Temperate Ruderal Grassland,1,98,Exotic Herbaceous,
9829,1,Western North American Ruderal Wet Meadow & Marsh,2,97,Riparian,
-9993,1,West Gulf Coastal Plain Flatwoods Pond,0,94,Riparian,
+9848,1,Polynesian Ruderal Dry Scrub,1,,,
+9850,1,Polynesian Ruderal Lowland Grassland,1,,,
+9851,1,Polynesian Ruderal Herb Coastal Strand,0,,,
+9852,1,Polynesian Ruderal Subalpine-Montane Grassland,1,,,
+9993,1,West Gulf Coastal Plain Flatwoods Pond,1,94,Riparian,
9994,1,West Gulf Coastal Plain Herbaceous Seep and Bog,0,94,Riparian,
diff --git a/packages/brat/database/data/Watersheds.csv b/packages/brat/database/data/Watersheds.csv
index e027a82c..10e50b5f 100644
--- a/packages/brat/database/data/Watersheds.csv
+++ b/packages/brat/database/data/Watersheds.csv
@@ -2062,9 +2062,9 @@ WatershedID,Name,EcoregionID,MaxDrainage,QLow,Q2,Notes,MetaData,AreaSqKm,States
18010108,Big-Navarro-Garcia,1,,,,,,4150.54,CA
18010109,Gualala-Salmon,1,,,,,,1436.05,CA
18010110,Russian,6,,,,,,3845.99,CA
-18010201,Williamson,9,,,,,,3725.91,OR
-18010202,Sprague,9,,,,,,4170.92,OR
-18010203,Upper Klamath Lake,9,,,,,,1875.15,OR
+18010201,Williamson,9,950.0,1.24091*(10**-4.9853)*(DRNAREA**1.1710)*(PRECIP**2.5811),0.003119*(DRNAREA**1.021)*(MEANSLOPE**0.8124)*(I24H2Y**2.050)*(JANMINT2K**3.541)*(JANMAXT2K**-1.867),,,3725.91,OR
+18010202,Sprague,9,1227.0,1.24091*(10**-4.9853)*(DRNAREA**1.1710)*(PRECIP**2.5811),0.003119*(DRNAREA**1.021)*(MEANSLOPE**0.8124)*(I24H2Y**2.050)*(JANMINT2K**3.541)*(JANMAXT2K**-1.867),,,4170.92,OR
+18010203,Upper Klamath Lake,9,700.0,1.24091*(10**-4.9853)*(DRNAREA**1.1710)*(PRECIP**2.5811),0.003119*(DRNAREA**1.021)*(MEANSLOPE**0.8124)*(I24H2Y**2.050)*(JANMINT2K**3.541)*(JANMAXT2K**-1.867),,,1875.15,OR
18010204,Lost,9,,,,,,7833.03,CA_OR
18010205,Butte,9,,,,,,1572.4,CA_OR
18010206,Upper Klamath,78,2901.0,1.20956*(10**-12.0355)*(DRNAREA**1.5711)*(PRECIP**3.0975)*(DRAINDENS**-3.6613)*(MINELEV**1.3091),9.136*(DRNAREA**0.9004)*(MEANSLOPE**0.4695)*(I24H2Y**0.8481),parameters copied from 17100308 for Chris Jordan at NOAA,,3686.68,CA_OR
diff --git a/packages/brat/database/data/intersect/WatershedHydroParams.csv b/packages/brat/database/data/intersect/WatershedHydroParams.csv
index 8ac904df..5fe1ba58 100644
--- a/packages/brat/database/data/intersect/WatershedHydroParams.csv
+++ b/packages/brat/database/data/intersect/WatershedHydroParams.csv
@@ -13,9 +13,9 @@ WatershedID,ParamID,Value
10020004,2,30.540903
10020004,4,578.5407
10020004,10,22.979202
-10020004,12,-8.18
+10020004,12,17.276
10020004,16,31.540903
-10020004,18,-8.18
+10020004,18,17.276
10020004,19,79.5301
10020005,2,17.360245
10020005,4,436.14017
@@ -26,9 +26,9 @@ WatershedID,ParamID,Value
10020007,2,12.093536
10020007,4,693.96765
10020007,10,47.860687
-10020007,12,-8.3
+10020007,12,17.06
10020007,16,13.093536
-10020007,18,-9.42
+10020007,18,15.044
10020007,19,188.87181
10020008,2,22.568787
10020008,4,705.5809
@@ -513,16 +513,16 @@ WatershedID,ParamID,Value
10180001,2,22.760607
10180001,4,675.52466
10180001,10,13.56034
-10180001,12,-6.34
+10180001,12,20.588
10180001,16,23.760607
-10180001,18,-11.89
+10180001,18,10.598
10180001,19,132.91402
10180002,2,15.099614
10180002,4,511.60214
10180002,10,29.06574
-10180002,12,-6.39
+10180002,12,20.498
10180002,16,16.099613
-10180002,18,-10.56
+10180002,18,12.992
10180002,19,100.63274
10180003,2,1.7583232
10180003,4,313.08948
@@ -548,9 +548,9 @@ WatershedID,ParamID,Value
10180010,2,9.884347
10180010,4,451.00412
10180010,10,25.66828
-10180010,12,-4.88
+10180010,12,23.216
10180010,16,10.884347
-10180010,18,-11.9
+10180010,18,10.58
10180010,19,79.22533
10180011,2,2.990454
10180011,4,408.2218
@@ -567,133 +567,133 @@ WatershedID,ParamID,Value
10190001,2,17.55314
10190001,4,445.09088
10190001,10,13.959572
-10190001,12,-3.33
+10190001,12,26.006
10190001,16,18.55314
-10190001,18,-13.72
+10190001,18,7.304
10190001,19,83.809265
10190002,2,29.986954
10190002,4,552.3831
10190002,10,27.656729
-10190002,12,0.42
+10190002,12,32.756
10190002,16,30.986954
-10190002,18,-13.14
+10190002,18,8.348
10190002,19,88.715294
10190002,23,2.8938522
10190003,2,0.46206096
10190003,4,429.2124
10190003,10,1.1148932
-10190003,12,0.42
+10190003,12,32.756
10190003,16,1.4620609
-10190003,18,-3.22
+10190003,18,26.204
10190003,19,165.10081
10190003,23,3.339317
10190004,2,27.919043
10190004,4,638.2713
10190004,10,26.595701
-10190004,12,0.31
+10190004,12,32.558
10190004,16,28.919043
-10190004,18,-13.39
+10190004,18,7.898
10190004,19,78.95973
10190004,23,2.8959444
10190005,2,26.402412
10190005,4,610.06824
10190005,10,20.638525
-10190005,12,0.76
+10190005,12,33.368
10190005,16,27.402412
-10190005,18,-12.51
+10190005,18,9.482
10190005,19,111.20779
10190005,23,3.3562715
10190006,2,22.711075
10190006,4,566.07196
10190006,10,21.301409
-10190006,12,0.44
+10190006,12,32.792
10190006,16,23.711075
-10190006,18,-12.82
+10190006,18,8.924
10190006,19,100.21685
10190007,2,13.801842
10190007,4,512.8879
10190007,10,15.327425
-10190007,12,-0.09
+10190007,12,31.838
10190007,16,14.801842
-10190007,18,-12.82
+10190007,18,8.924
10190007,19,109.996254
10190008,2,0.07137681
10190008,4,404.73074
10190008,10,0.011340635
-10190008,12,-1.97
+10190008,12,28.454
10190008,16,1.0713768
-10190008,18,-2.53
+10190008,18,27.446
10190008,19,164.15579
10190009,2,0.68275017
10190009,4,409.4289
10190009,10,0.017515464
-10190009,12,-1.88
+10190009,12,28.616
10190009,16,1.6827502
-10190009,18,-2.74
+10190009,18,27.068
10190009,19,171.63281
10190010,2,0.8254989
10190010,4,460.49335
10190010,10,1.7868047
-10190010,12,-0.65
+10190010,12,30.83
10190010,16,1.8254989
-10190010,18,-3.2
+10190010,18,26.24
10190010,19,181.52849
10190010,23,3.3039408
10190011,2,0.7676021
10190011,4,445.9356
10190011,10,0.7610132
-10190011,12,-1.0
+10190011,12,30.2
10190011,16,1.7676021
-10190011,18,-2.86
+10190011,18,26.852
10190011,19,173.8664
10190012,2,0.026139177
10190012,4,435.68884
10190012,10,0.034171738
-10190012,12,-1.87
+10190012,12,28.634
10190012,16,1.0261391
-10190012,18,-2.82
+10190012,18,26.924
10190012,19,164.69519
10190013,2,0.035261538
10190013,4,424.39594
10190013,10,0.062338762
-10190013,12,-1.9
+10190013,12,28.58
10190013,16,1.0352615
-10190013,18,-2.96
+10190013,18,26.672
10190013,19,202.56511
10190014,2,0.008960674
10190014,4,418.18008
10190014,10,0.009066631
-10190014,12,-2.07
+10190014,12,28.274
10190014,16,1.0089607
-10190014,18,-2.72
+10190014,18,27.104
10190014,19,183.33354
10190015,2,0.5161317
10190015,4,428.22052
10190015,10,0.029954992
-10190015,12,-2.13
+10190015,12,28.166
10190015,16,1.5161316
-10190015,18,-2.53
+10190015,18,27.446
10190015,19,210.95145
10190016,2,0.010535973
10190016,4,463.30362
10190016,10,0.004994463
-10190016,12,-2.31
+10190016,12,27.842
10190016,16,1.010536
-10190016,18,-2.61
+10190016,18,27.302
10190016,19,186.09657
10190017,2,0.0014878818
10190017,4,440.5042
10190017,10,0.001787121
-10190017,12,-2.35
+10190017,12,27.77
10190017,16,1.0014879
-10190017,18,-2.72
+10190017,18,27.104
10190017,19,176.23087
10190018,2,0.053428613
10190018,4,487.07437
10190018,10,0.053467073
-10190018,12,-2.26
+10190018,12,27.932
10190018,16,1.0534286
-10190018,18,-2.68
+10190018,18,27.176
10190018,19,175.83884
10200101,2,0.12511949
10200101,4,575.87805
@@ -818,23 +818,23 @@ WatershedID,ParamID,Value
10250001,2,0.017715806
10250001,4,428.6508
10250001,10,0.007576254
-10250001,12,-1.53
+10250001,12,29.246
10250001,16,1.0177158
-10250001,18,-2.39
+10250001,18,27.698
10250001,19,212.51138
10250002,2,0.0150039345
10250002,4,440.94965
10250002,10,0.004597753
-10250002,12,-1.61
+10250002,12,29.102
10250002,16,1.0150039
-10250002,18,-2.27
+10250002,18,27.914
10250002,19,174.18512
10250003,2,0.010636908
10250003,4,444.29416
10250003,10,0.01176447
-10250003,12,-1.24
+10250003,12,29.768
10250003,16,1.0106369
-10250003,18,-2.15
+10250003,18,28.13
10250003,19,242.03465
10250004,2,0.0103892265
10250004,4,507.64075
@@ -842,16 +842,16 @@ WatershedID,ParamID,Value
10250005,2,0.01110388
10250005,4,470.67352
10250005,10,0.005684812
-10250005,12,-1.94
+10250005,12,28.508
10250005,16,1.0111039
-10250005,18,-2.35
+10250005,18,27.77
10250005,19,207.66798
10250006,2,0.012024632
10250006,4,487.2273
10250006,10,0.003238882
-10250006,12,-2.14
+10250006,12,28.148
10250006,16,1.0120246
-10250006,18,-2.53
+10250006,18,27.446
10250006,19,224.4903
10250007,2,0.01714067
10250007,4,512.41705
@@ -871,16 +871,16 @@ WatershedID,ParamID,Value
10250012,2,0.0019790316
10250012,4,454.77814
10250012,10,0.00273349
-10250012,12,-1.3
+10250012,12,29.66
10250012,16,1.001979
-10250012,18,-1.47
+10250012,18,29.354
10250012,19,266.27008
10250013,2,0.0038603407
10250013,4,463.4269
10250013,10,0.00502532
-10250013,12,-1.35
+10250013,12,29.57
10250013,16,1.0038604
-10250013,18,-1.55
+10250013,18,29.21
10250013,19,271.9164
10250014,2,0.009153353
10250014,4,529.9568
@@ -897,16 +897,16 @@ WatershedID,ParamID,Value
10260001,2,0.009850738
10260001,4,436.6828
10260001,10,0.000214818
-10260001,12,-1.04
+10260001,12,30.128
10260001,16,1.0098507
-10260001,18,-1.51
+10260001,18,29.282
10260001,19,269.597
10260002,2,0.005454996
10260002,4,442.00482
10260002,10,0.000411714
-10260002,12,-1.22
+10260002,12,29.804
10260002,16,1.005455
-10260002,18,-1.67
+10260002,18,28.994
10260002,19,266.06003
10260003,2,0.02230939
10260003,4,474.5002
@@ -914,9 +914,9 @@ WatershedID,ParamID,Value
10260004,2,0.017395888
10260004,4,433.2726
10260004,10,0.000149609
-10260004,12,-1.03
+10260004,12,30.146
10260004,16,1.0173959
-10260004,18,-1.42
+10260004,18,29.444
10260004,19,287.3481
10260005,2,0.043353282
10260005,4,478.49542
@@ -1104,107 +1104,107 @@ WatershedID,ParamID,Value
11020001,2,18.091135
11020001,4,464.4297
11020001,10,21.03506
-11020001,12,1.08
+11020001,12,33.944
11020001,16,19.091135
-11020001,18,-13.51
+11020001,18,7.682
11020001,19,83.294174
11020002,2,16.274214
11020002,4,404.02722
11020002,10,15.22579
-11020002,12,1.2
+11020002,12,34.16
11020002,16,17.274214
-11020002,18,-12.49
+11020002,18,9.518
11020002,19,115.55644
11020003,2,12.701825
11020003,4,434.89368
11020003,10,13.529642
-11020003,12,-0.04
+11020003,12,31.928
11020003,16,13.701825
-11020003,18,-12.88
+11020003,18,8.816
11020003,19,111.87193
11020004,2,0.5794056
11020004,4,354.7118
11020004,10,0.49137393
-11020004,12,-0.23
+11020004,12,31.586
11020004,16,1.5794055
-11020004,18,-2.85
+11020004,18,26.87
11020004,19,140.67017
11020005,2,0.038161077
11020005,4,264.5354
11020005,10,0.35311908
-11020005,12,0.58
+11020005,12,33.044
11020005,16,1.038161
-11020005,18,-1.75
+11020005,18,28.85
11020005,19,172.64928
11020006,2,10.064856
11020006,4,398.88327
11020006,10,12.296254
-11020006,12,1.15
+11020006,12,34.07
11020006,16,11.064856
-11020006,18,-11.72
+11020006,18,10.904
11020006,19,146.56107
11020007,2,3.2431896
11020007,4,333.41068
11020007,10,6.3880277
-11020007,12,0.77
+11020007,12,33.386
11020007,16,4.2431893
-11020007,18,-10.67
+11020007,18,12.794
11020007,19,167.67984
11020008,2,0.0009391229
11020008,4,295.7324
11020008,10,0.01139185
-11020008,12,-0.82
+11020008,12,30.524
11020008,16,1.0009391
-11020008,18,-2.06
+11020008,18,28.292
11020008,19,181.49368
11020009,2,0.11494469
11020009,4,323.56378
11020009,10,0.52601045
-11020009,12,0.4
+11020009,12,32.72
11020009,16,1.1149447
-11020009,18,-1.73
+11020009,18,28.886
11020009,19,213.58812
11020010,2,7.7912097
11020010,4,355.63724
11020010,10,10.594489
-11020010,12,0.74
+11020010,12,33.332
11020010,16,8.791209
-11020010,18,-10.98
+11020010,18,12.236
11020010,19,149.27823
11020011,2,0.011657905
11020011,4,366.21628
11020011,10,0.02635548
-11020011,12,-1.17
+11020011,12,29.894
11020011,16,1.011658
-11020011,18,-2.38
+11020011,18,27.716
11020011,19,190.51852
11020012,2,0.00025703985
11020012,4,351.07904
11020012,10,0.005529305
-11020012,12,-1.23
+11020012,12,29.786
11020012,16,1.000257
-11020012,18,-2.19
+11020012,18,28.058
11020012,19,174.41844
11020013,2,0.047154646
11020013,4,349.71573
11020013,10,0.6195821
-11020013,12,0.61
+11020013,12,33.098
11020013,16,1.0471547
-11020013,18,-1.06
+11020013,18,30.092
11020013,19,219.21005
11030001,2,0.046924207
11030001,4,409.76474
11030001,10,0.000889777
-11030001,12,-0.61
+11030001,12,30.902
11030001,16,1.0469242
-11030001,18,-1.33
+11030001,18,29.606
11030001,19,247.95372
11030002,2,0.003461611
11030002,4,429.34348
11030002,10,0.0001844
-11030002,12,-1.13
+11030002,12,29.966
11030002,16,1.0034616
-11030002,18,-1.52
+11030002,18,29.264
11030002,19,288.0487
11030003,2,0.04876406
11030003,4,456.666
@@ -1257,37 +1257,37 @@ WatershedID,ParamID,Value
11040001,2,10.446686
11040001,4,377.55786
11040001,10,6.6253824
-11040001,12,1.11
+11040001,12,33.998
11040001,16,11.446686
-11040001,18,-0.14
+11040001,18,31.748
11040001,19,136.53018
11040002,2,0.016580867
11040002,4,382.7225
11040002,10,0.33151698
-11040002,12,1.04
+11040002,12,33.872
11040002,16,1.0165808
-11040002,18,0.51
+11040002,18,32.918
11040002,19,170.34552
11040003,2,0.025163105
11040003,4,385.67972
11040003,10,5.58454e-05
-11040003,12,0.72
+11040003,12,33.296
11040003,16,1.025163
-11040003,18,0.42
+11040003,18,32.756
11040003,19,237.8861
11040004,2,0.011747277
11040004,4,376.14676
11040004,10,0.001042223
-11040004,12,0.67
+11040004,12,33.206
11040004,16,1.0117472
-11040004,18,0.28
+11040004,18,32.504
11040004,19,223.72827
11040005,2,0.024660043
11040005,4,372.72052
11040005,10,0.001174727
-11040005,12,0.75
+11040005,12,33.35
11040005,16,1.02466
-11040005,18,-0.79
+11040005,18,30.578
11040005,19,270.68552
11040006,2,0.010752227
11040006,4,445.2569
@@ -1376,9 +1376,9 @@ WatershedID,ParamID,Value
11080001,2,17.340044
11080001,4,394.50946
11080001,10,27.798517
-11080001,12,-0.34
+11080001,12,31.388
11080001,16,18.340044
-11080001,18,-9.74
+11080001,18,14.468
11080001,19,108.356995
11080002,2,24.106318
11080002,4,441.61182
@@ -2031,51 +2031,51 @@ WatershedID,ParamID,Value
13010001,2,25.069153
13010001,4,655.9503
13010001,10,18.54276
-13010001,12,-6.24
+13010001,12,20.768
13010001,16,26.069153
-13010001,18,-11.38
+13010001,18,11.516
13010001,19,116.17077
13010002,2,12.328048
13010002,4,345.22595
13010002,10,11.0598135
-13010002,12,-2.54
+13010002,12,27.428
13010002,16,13.328048
-13010002,18,-11.58
+13010002,18,11.156
13010002,19,123.3773
13010003,2,7.7616186
13010003,4,320.05698
13010003,10,8.093625
-13010003,12,-3.52
+13010003,12,25.664
13010003,16,8.761619
-13010003,18,-11.95
+13010003,18,10.49
13010003,19,113.01553
13010004,2,18.941534
13010004,4,365.39163
13010004,10,13.496318
-13010004,12,-4.12
+13010004,12,24.584
13010004,16,19.941534
-13010004,18,-10.58
+13010004,18,12.956
13010004,19,120.17296
13010005,2,12.84488
13010005,4,583.60394
13010005,10,17.37629
-13010005,12,-3.83
+13010005,12,25.106
13010005,16,13.84488
-13010005,18,-9.82
+13010005,18,14.324
13010005,19,112.40346
13020101,2,18.474823
13020101,4,419.6899
13020101,10,3.7446473
-13020101,12,-3.08
+13020101,12,26.456
13020101,16,19.474823
-13020101,18,-8.59
+13020101,18,16.538
13020101,19,147.88213
13020102,2,29.013262
13020102,4,432.87946
13020102,10,31.02352
-13020102,12,-4.97
+13020102,12,23.054
13020102,16,30.013262
-13020102,18,-9.43
+13020102,18,15.026
13020102,19,154.54228
13020201,2,13.6889305
13020201,4,322.0051
@@ -2280,114 +2280,114 @@ WatershedID,ParamID,Value
14010001,2,25.34841
14010001,4,645.72955
14010001,10,23.306332
-14010001,12,-3.63
+14010001,12,25.466
14010001,16,26.34841
-14010001,18,-12.28
+14010001,18,9.896
14010001,19,133.00516
14010002,2,19.025192
14010002,4,644.7628
14010002,10,22.993845
-14010002,12,-6.22
+14010002,12,20.804
14010002,16,20.025192
-14010002,18,-13.57
+14010002,18,7.574
14010002,19,129.6124
14010003,2,31.34185
14010003,4,628.7995
14010003,10,28.777401
-14010003,12,-4.21
+14010003,12,24.422
14010003,16,32.34185
-14010003,18,-13.21
+14010003,18,8.222
14010003,19,124.545746
14010004,2,39.683777
14010004,4,722.7816
14010004,10,29.17273
-14010004,12,-3.47
+14010004,12,25.754
14010004,16,40.683777
-14010004,18,-12.77
+14010004,18,9.014
14010004,19,137.00287
14010005,2,34.561974
14010005,4,462.92392
14010005,10,18.379076
-14010005,12,-1.27
+14010005,12,29.714
14010005,16,35.561974
-14010005,18,-11.45
+14010005,18,11.39
14010005,19,137.09657
14020001,2,32.965225
14020001,4,692.3979
14020001,10,27.566149
-14020001,12,-5.96
+14020001,12,21.272
14020001,16,33.965225
-14020001,18,-12.2
+14020001,18,10.04
14020001,19,113.69165
14020002,2,31.265364
14020002,4,515.64
14020002,10,20.906977
-14020002,12,-0.87
+14020002,12,30.434
14020002,16,32.26536
-14020002,18,-11.17
+14020002,18,11.894
14020002,19,117.64652
14020003,2,24.891134
14020003,4,456.651
14020003,10,20.99557
-14020003,12,-5.49
+14020003,12,22.118
14020003,16,25.891134
-14020003,18,-11.53
+14020003,18,11.246
14020003,19,101.76188
14020004,2,40.886448
14020004,4,614.3621
14020004,10,29.14233
-14020004,12,-0.71
+14020004,12,30.722
14020004,16,41.886448
-14020004,18,-11.16
+14020004,18,11.912
14020004,19,149.27203
14020005,2,26.799725
14020005,4,439.63013
14020005,10,17.084759
-14020005,12,-0.94
+14020005,12,30.308
14020005,16,27.799725
-14020005,18,-11.0
+14020005,18,12.2
14020005,19,128.81215
14020006,2,26.79678
14020006,4,468.5653
14020006,10,15.2457
-14020006,12,-1.36
+14020006,12,29.552
14020006,16,27.79678
-14020006,18,-10.81
+14020006,18,12.542
14020006,19,139.62148
14030001,2,17.46832
14030001,4,322.26416
14030001,10,9.132689
-14030001,12,-1.28
+14030001,12,29.696
14030001,16,18.46832
-14030001,18,-6.6
+14030001,18,20.12
14030001,19,108.65706
14030002,2,25.133984
14030002,4,515.41113
14030002,10,20.617624
-14030002,12,-1.36
+14030002,12,29.552
14030002,16,26.133984
-14030002,18,-10.28
+14030002,18,13.496
14030002,19,155.96346
14030003,2,31.803684
14030003,4,525.4947
14030003,10,17.91868
-14030003,12,-1.45
+14030003,12,29.39
14030003,16,32.803684
-14030003,18,-10.31
+14030003,18,13.442
14030003,19,146.09062
14030004,2,42.87426
14030004,4,453.897
14030004,10,21.253626
-14030004,12,-0.82
+14030004,12,30.524
14030004,16,43.87426
-14030004,18,-8.38
+14030004,18,16.916
14030004,19,109.87519
14030005,2,12.13092
14030005,4,321.6569
14030005,10,7.2851715
-14030005,12,0.15
+14030005,12,32.27
14030005,16,13.13092
-14030005,18,-8.29
+14030005,18,17.078
14030005,19,91.01758
14040101,2,8.118297
14040101,4,486.16635
@@ -2407,30 +2407,30 @@ WatershedID,ParamID,Value
14040106,2,10.435122
14040106,4,374.69577
14040106,10,21.208515
-14040106,12,-3.65
+14040106,12,25.43
14040106,16,11.435122
-14040106,18,-11.53
+14040106,18,11.246
14040106,19,122.953766
14040107,2,4.4953103
14040107,4,341.15964
14040107,10,30.345755
-14040107,12,-6.54
+14040107,12,20.228
14040107,16,5.4953103
-14040107,18,-11.53
+14040107,18,11.246
14040107,19,155.46318
14040108,2,2.1955557
14040108,4,323.05774
14040108,10,38.133434
-14040108,12,-6.96
+14040108,12,19.472
14040108,16,3.1955557
-14040108,18,-7.71
+14040108,18,18.122
14040108,19,180.51459
14040109,2,2.3857715
14040109,4,301.88226
14040109,10,5.774485
-14040109,12,-3.82
+14040109,12,25.124
14040109,16,3.3857715
-14040109,18,-7.49
+14040109,18,18.518
14040109,19,108.43
14040200,2,0.07406801
14040200,4,251.9012
@@ -2438,26 +2438,26 @@ WatershedID,ParamID,Value
14050001,2,37.008602
14050001,4,715.0879
14050001,10,21.131283
-14050001,12,-4.99
+14050001,12,23.018
14050001,16,38.008602
14050001,17,57.427
-14050001,18,-11.18
+14050001,18,11.876
14050001,19,180.93372
14050002,2,9.237454
14050002,4,407.07257
14050002,10,6.684388
-14050002,12,-3.59
+14050002,12,25.538
14050002,16,10.237454
14050002,17,13.756
-14050002,18,-8.15
+14050002,18,17.33
14050002,19,146.57124
14050003,2,8.956805
14050003,4,444.57004
14050003,10,8.402854
-14050003,12,-4.27
+14050003,12,24.314
14050003,16,9.956805
14050003,17,25.098
-14050003,18,-9.36
+14050003,18,15.152
14050003,19,136.43489
14050004,2,0.35085696
14050004,4,330.2285
@@ -2465,142 +2465,142 @@ WatershedID,ParamID,Value
14050005,2,23.629305
14050005,4,607.45685
14050005,10,20.325142
-14050005,12,-4.11
+14050005,12,24.602
14050005,16,24.629305
-14050005,18,-10.81
+14050005,18,12.542
14050005,19,150.00902
14050006,2,30.331362
14050006,4,418.2541
14050006,10,15.8696
-14050006,12,-2.72
+14050006,12,27.104
14050006,16,31.331362
-14050006,18,-7.02
+14050006,18,19.364
14050006,19,75.25156
14050007,2,18.694553
14050007,4,315.28442
14050007,10,10.807324
-14050007,12,-3.1
+14050007,12,26.42
14050007,16,19.694553
-14050007,18,-9.04
+14050007,18,15.728
14050007,19,81.55432
14060003,2,20.2229
14060003,4,494.09744
14060003,10,16.583332
-14060003,12,-3.11
+14060003,12,26.402
14060003,16,21.2229
-14060003,18,-11.88
+14060003,18,10.616
14060003,19,116.31754
14060004,2,31.64254
14060004,4,504.58688
14060004,10,20.769558
-14060004,12,-3.33
+14060004,12,26.006
14060004,16,32.64254
-14060004,18,-7.82
+14060004,18,17.924
14060004,19,120.02658
14060005,2,16.789492
14060005,4,339.7694
14060005,10,13.632383
-14060005,12,-1.06
+14060005,12,30.092
14060005,16,17.789492
-14060005,18,-9.1
+14060005,18,15.62
14060005,19,81.46832
14060006,2,20.01724
14060006,4,383.66205
14060006,10,15.34775
-14060006,12,-3.4
+14060006,12,25.88
14060006,16,21.01724
-14060006,18,-8.95
+14060006,18,15.89
14060006,19,81.706856
14060007,2,14.191084
14060007,4,359.2675
14060007,10,11.417011
-14060007,12,-1.34
+14060007,12,29.588
14060007,16,15.191084
-14060007,18,-8.45
+14060007,18,16.79
14060007,19,117.49825
14060008,2,3.5439925
14060008,4,243.592
14060008,10,3.1680865
-14060008,12,0.2
+14060008,12,32.36
14060008,16,4.5439925
-14060008,18,-5.28
+14060008,18,22.496
14060008,19,83.54795
14060009,2,5.223797
14060009,4,331.23438
14060009,10,6.293983
-14060009,12,-0.63
+14060009,12,30.866
14060009,16,6.223797
-14060009,18,-8.97
+14060009,18,15.854
14060009,19,105.81626
14060010,2,16.668804
14060010,4,355.60333
14060010,10,11.527238
-14060010,12,-3.68
+14060010,12,25.376
14060010,16,17.668804
-14060010,18,-10.57
+14060010,18,12.974
14060010,19,127.53719
14070001,2,9.0429735
14070001,4,272.3934
14070001,10,5.4061756
-14070001,12,2.96
+14070001,12,37.328
14070001,16,10.0429735
-14070001,18,-7.01
+14070001,18,19.382
14070001,19,63.1306
14070002,2,6.854242
14070002,4,301.6684
14070002,10,5.2339196
-14070002,12,-0.29
+14070002,12,31.478
14070002,16,7.854242
-14070002,18,-7.31
+14070002,18,18.842
14070002,19,102.11182
14070003,2,12.096188
14070003,4,389.33255
14070003,10,9.810232
-14070003,12,-0.15
+14070003,12,31.73
14070003,16,13.096188
-14070003,18,-8.36
+14070003,18,16.952
14070003,19,90.34341
14070004,2,2.018242
14070004,4,248.22418
14070004,10,1.6193812
-14070004,12,2.81
+14070004,12,37.058
14070004,16,3.018242
-14070004,18,-6.89
+14070004,18,19.598
14070004,19,101.280846
14070005,2,13.844315
14070005,4,358.24014
14070005,10,11.558146
-14070005,12,2.56
+14070005,12,36.608
14070005,16,14.844315
-14070005,18,-8.61
+14070005,18,16.502
14070005,19,78.14745
14070006,2,1.8118674
14070006,4,245.00175
14070006,10,4.1650968
-14070006,12,3.44
+14070006,12,38.192
14070006,16,2.8118672
-14070006,18,-5.1
+14070006,18,22.82
14070006,19,59.530594
14070007,2,8.249344
14070007,4,321.85132
14070007,10,8.587814
-14070007,12,1.67
+14070007,12,35.006
14070007,16,9.249344
-14070007,18,-6.19
+14070007,18,20.858
14070007,19,91.50453
14080101,2,14.500884
14080101,4,473.30673
14080101,10,23.159304
-14080101,12,-2.14
+14080101,12,28.148
14080101,16,15.500884
-14080101,18,-10.04
+14080101,18,13.928
14080101,19,139.53792
14080102,2,37.125404
14080102,4,628.08777
14080102,10,30.265455
-14080102,12,-2.35
+14080102,12,27.77
14080102,16,38.125404
-14080102,18,-9.13
+14080102,18,15.566
14080102,19,150.73143
14080103,2,10.137604
14080103,4,307.82718
@@ -2608,16 +2608,16 @@ WatershedID,ParamID,Value
14080104,2,17.637514
14080104,4,635.7865
14080104,10,22.64761
-14080104,12,-1.94
+14080104,12,28.508
14080104,16,18.637514
-14080104,18,-10.49
+14080104,18,13.118
14080104,19,104.1093
14080105,2,5.659144
14080105,4,283.2273
14080105,10,11.2725935
-14080105,12,-1.34
+14080105,12,29.588
14080105,16,6.659144
-14080105,18,-8.66
+14080105,18,16.412
14080105,19,145.77979
14080106,2,3.8782697
14080106,4,240.62453
@@ -2625,44 +2625,44 @@ WatershedID,ParamID,Value
14080107,2,11.981658
14080107,4,383.93063
14080107,10,11.047129
-14080107,12,0.07
+14080107,12,32.126
14080107,16,12.981658
-14080107,18,-9.48
+14080107,18,14.936
14080107,19,129.14378
14080201,2,7.4549427
14080201,4,272.74106
14080201,10,5.7057853
-14080201,12,0.71
+14080201,12,33.278
14080201,16,8.454943
-14080201,18,-5.95
+14080201,18,21.29
14080201,19,129.87415
14080202,2,16.302456
14080202,4,342.19012
14080202,10,7.008595
-14080202,12,0.3
+14080202,12,32.54
14080202,16,17.302456
-14080202,18,-3.62
+14080202,18,25.484
14080202,19,150.66193
14080203,2,18.021574
14080203,4,358.31177
14080203,10,7.7342753
-14080203,12,0.49
+14080203,12,32.882
14080203,16,19.021574
-14080203,18,-6.76
+14080203,18,19.832
14080203,19,145.97124
14080204,2,7.8899345
14080204,4,250.5166
14080204,10,0.014698195
-14080204,12,0.87
+14080204,12,33.566
14080204,16,8.889935
-14080204,18,-0.33
+14080204,18,31.406
14080204,19,85.30239
14080205,2,3.36599
14080205,4,216.48515
14080205,10,2.4491878
-14080205,12,2.9
+14080205,12,37.22
14080205,16,4.3659897
-14080205,18,-5.49
+14080205,18,22.118
14080205,19,73.85171
15010001,2,11.045213
15010001,4,307.6444
@@ -2673,9 +2673,9 @@ WatershedID,ParamID,Value
15010003,2,13.030769
15010003,4,371.79172
15010003,10,9.204675
-15010003,12,1.92
+15010003,12,35.456
15010003,16,14.030769
-15010003,18,-4.39
+15010003,18,24.098
15010003,19,120.038605
15010004,2,10.172544
15010004,4,350.1486
@@ -2692,23 +2692,23 @@ WatershedID,ParamID,Value
15010008,2,27.999039
15010008,4,437.4325
15010008,10,14.98047
-15010008,12,6.28
+15010008,12,43.304
15010008,16,28.999039
-15010008,18,-5.84
+15010008,18,21.488
15010008,19,112.58265
15010009,2,4.068695
15010009,4,319.83438
15010009,10,2.632776
-15010009,12,6.27
+15010009,12,43.286
15010009,16,5.068695
-15010009,18,-0.73
+15010009,18,30.686
15010009,19,131.79895
15010010,2,5.203606
15010010,4,253.18669
15010010,10,5.6141987
-15010010,12,7.73
+15010010,12,45.914
15010010,16,6.203606
-15010010,18,-0.82
+15010010,18,30.524
15010010,19,44.73051
15010011,2,5.525516
15010011,4,250.40968
@@ -2719,9 +2719,9 @@ WatershedID,ParamID,Value
15010013,2,10.74912
15010013,4,282.99902
15010013,10,25.901134
-15010013,12,0.08
+15010013,12,32.144
15010013,16,11.74912
-15010013,18,-2.34
+15010013,18,27.788
15010013,19,91.96524
15010014,2,1.6977037
15010014,4,164.72437
@@ -2942,9 +2942,9 @@ WatershedID,ParamID,Value
16010101,2,6.473325
16010101,4,448.17783
16010101,10,9.849352
-16010101,12,-4.61
+16010101,12,23.702
16010101,16,7.473325
-16010101,18,-10.48
+16010101,18,13.136
16010101,19,156.66957
16010102,1,2184.401
16010102,2,10.874087
@@ -2954,10 +2954,10 @@ WatershedID,ParamID,Value
16010102,7,1826.89
16010102,8,12.0349655
16010102,10,3.2868533
-16010102,12,-5.28
+16010102,12,22.496
16010102,15,2184.401
16010102,16,11.874087
-16010102,18,-8.57
+16010102,18,16.574
16010102,19,166.1204
16010201,1,2047.5917
16010201,2,14.026343
@@ -2967,10 +2967,10 @@ WatershedID,ParamID,Value
16010201,7,1742.5485
16010201,8,9.019277
16010201,10,11.997358
-16010201,12,-4.74
+16010201,12,23.468
16010201,15,2047.5917
16010201,16,15.026343
-16010201,18,-8.23
+16010201,18,17.186
16010201,19,183.55461
16010202,1,1735.3254
16010202,2,11.9792185
@@ -2980,10 +2980,10 @@ WatershedID,ParamID,Value
16010202,7,1334.1968
16010202,8,10.095674
16010202,10,11.001307
-16010202,12,-3.22
+16010202,12,26.204
16010202,15,1735.3254
16010202,16,12.9792185
-16010202,18,-7.49
+16010202,18,18.518
16010202,19,195.04816
16010203,1,2042.337
16010203,2,27.591072
@@ -2993,10 +2993,10 @@ WatershedID,ParamID,Value
16010203,7,1343.9314
16010203,8,14.099749
16010203,10,24.00495
-16010203,12,-2.93
+16010203,12,26.726
16010203,15,2042.337
16010203,16,28.591072
-16010203,18,-7.38
+16010203,18,18.716
16010203,19,146.84215
16010204,1,1570.3413
16010204,2,4.0103197
@@ -3006,108 +3006,108 @@ WatershedID,ParamID,Value
16010204,7,1280.63
16010204,8,8.515173
16010204,10,3.9740515
-16010204,12,-2.7
+16010204,12,27.14
16010204,15,1570.3413
16010204,16,5.0103197
-16010204,18,-6.47
+16010204,18,20.354
16010204,19,166.17632
16020101,2,31.046265
16020101,4,582.4863
16020101,10,21.3085
-16020101,12,-2.9
+16020101,12,26.78
16020101,16,32.046265
-16020101,18,-9.01
+16020101,18,15.782
16020101,19,166.07944
16020102,2,18.945665
16020102,4,658.597
16020102,10,19.556873
-16020102,12,-1.06
+16020102,12,30.092
16020102,16,19.945665
-16020102,18,-6.27
+16020102,18,20.714
16020102,19,143.31319
16020201,2,10.85676
16020201,4,443.65134
16020201,10,9.350544
-16020201,12,-1.12
+16020201,12,29.984
16020201,16,11.85676
-16020201,18,-9.57
+16020201,18,14.774
16020201,19,139.40584
16020202,2,39.349396
16020202,4,563.6138
16020202,10,25.251606
-16020202,12,-1.08
+16020202,12,30.056
16020202,16,40.349396
-16020202,18,-7.29
+16020202,18,18.878
16020202,19,148.65564
16020203,2,31.5514
16020203,4,678.8389
16020203,10,28.223103
-16020203,12,-0.87
+16020203,12,30.434
16020203,16,32.5514
-16020203,18,-8.88
+16020203,18,16.016
16020203,19,137.2896
16020204,2,16.13432
16020204,4,602.1269
16020204,10,12.5137615
-16020204,12,-0.97
+16020204,12,30.254
16020204,16,17.13432
-16020204,18,-8.11
+16020204,18,17.402
16020204,19,136.9402
16020301,2,10.175288
16020301,4,300.21152
16020301,10,4.719393
-16020301,12,0.11
+16020301,12,32.198
16020301,16,11.175288
-16020301,18,-5.86
+16020301,18,21.452
16020301,19,95.38312
16020302,2,20.125784
16020302,4,325.40503
16020302,10,9.946137
-16020302,12,0.84
+16020302,12,33.512
16020302,16,21.125784
-16020302,18,-4.2
+16020302,18,24.44
16020302,19,99.61301
16020303,2,2.726704
16020303,4,252.86502
16020303,10,1.5228571
-16020303,12,-0.23
+16020303,12,31.586
16020303,16,3.726704
-16020303,18,-4.39
+16020303,18,24.098
16020303,19,81.66416
16020304,2,8.934208
16020304,4,431.74963
16020304,10,5.8395405
-16020304,12,-1.02
+16020304,12,30.164
16020304,16,9.934208
-16020304,18,-7.12
+16020304,18,19.184
16020304,19,135.92169
16020305,2,2.5113547
16020305,4,362.19296
16020305,10,2.474845
-16020305,12,-1.6
+16020305,12,29.12
16020305,16,3.5113547
-16020305,18,-8.26
+16020305,18,17.132
16020305,19,124.78063
16020306,2,2.600172
16020306,4,242.01672
16020306,10,1.4742383
-16020306,12,-0.59
+16020306,12,30.938
16020306,16,3.600172
-16020306,18,-9.49
+16020306,18,14.918
16020306,19,161.46298
16020307,2,4.1303644
16020307,4,297.9666
16020307,10,4.3325844
-16020307,12,-2.3
+16020307,12,27.86
16020307,16,5.1303644
-16020307,18,-4.14
+16020307,18,24.548
16020307,19,77.18922
16020308,2,1.4979947
16020308,4,260.30902
16020308,10,0.74323094
-16020308,12,-1.34
+16020308,12,29.588
16020308,16,2.4979947
-16020308,18,-7.13
+16020308,18,19.166
16020308,19,119.479355
16020309,1,1526.5743
16020309,2,1.3537073
@@ -3117,80 +3117,80 @@ WatershedID,ParamID,Value
16020309,7,1278.4264
16020309,8,6.0468593
16020309,10,1.2130319
-16020309,12,-2.21
+16020309,12,28.022
16020309,15,1526.5743
16020309,16,2.3537073
-16020309,18,-6.35
+16020309,18,20.57
16020309,19,165.81674
16020310,2,0.00016506421
16020310,4,338.20416
16020310,10,0.007210627
-16020310,12,-1.08
+16020310,12,30.056
16020310,16,1.0001651
-16020310,18,-3.46
+16020310,18,25.772
16020310,19,110.49322
16030001,2,22.626667
16030001,4,522.7041
16030001,10,21.819332
-16030001,12,-1.59
+16030001,12,29.138
16030001,16,23.626667
-16030001,18,-7.71
+16030001,18,18.122
16030001,19,128.4008
16030002,2,14.244088
16030002,4,500.97095
16030002,10,19.481398
-16030002,12,-1.92
+16030002,12,28.544
16030002,16,15.244088
-16030002,18,-7.99
+16030002,18,17.618
16030002,19,126.76095
16030003,2,18.470154
16030003,4,448.0866
16030003,10,17.027075
-16030003,12,-0.85
+16030003,12,30.47
16030003,16,19.470154
-16030003,18,-8.83
+16030003,18,16.106
16030003,19,117.91612
16030004,2,20.894728
16030004,4,490.6463
16030004,10,16.580818
-16030004,12,-1.78
+16030004,12,28.796
16030004,16,21.894728
-16030004,18,-7.55
+16030004,18,18.41
16030004,19,160.73256
16030005,2,7.07149
16030005,4,332.35043
16030005,10,4.7276073
-16030005,12,-0.36
+16030005,12,31.352
16030005,16,8.07149
-16030005,18,-5.97
+16030005,18,21.254
16030005,19,115.29084
16030006,2,19.60791
16030006,4,392.89526
16030006,10,12.952115
-16030006,12,0.91
+16030006,12,33.638
16030006,16,20.60791
-16030006,18,-6.65
+16030006,18,20.03
16030006,19,133.76576
16030007,2,15.684472
16030007,4,396.2726
16030007,10,9.896308
-16030007,12,-0.09
+16030007,12,31.838
16030007,16,16.684471
-16030007,18,-9.08
+16030007,18,15.656
16030007,19,141.3859
16030008,2,4.187005
16030008,4,314.0629
16030008,10,1.8169458
-16030008,12,-0.46
+16030008,12,31.172
16030008,16,5.187005
-16030008,18,-3.09
+16030008,18,26.438
16030008,19,126.271866
16030009,2,3.59299
16030009,4,265.7407
16030009,10,3.219852
-16030009,12,0.14
+16030009,12,32.252
16030009,16,4.59299
-16030009,18,-4.73
+16030009,18,23.486
16030009,19,86.44691
16040101,2,1.6420786
16040101,4,356.84415
@@ -3229,11 +3229,11 @@ WatershedID,ParamID,Value
16040201,2,0.38978285
16040201,4,307.46912
16040201,10,0.11628719
-16040201,12,0.32
+16040201,12,32.576
16040201,13,120521.02
16040201,15,1515.3945
16040201,16,1.3897828
-16040201,18,-4.65
+16040201,18,23.63
16040201,19,113.835396
16040202,2,0.29409057
16040202,4,246.45192
@@ -3248,9 +3248,9 @@ WatershedID,ParamID,Value
16040205,2,0.29045272
16040205,4,257.34915
16040205,10,0.006238882
-16040205,12,-0.19
+16040205,12,31.658
16040205,16,1.2904527
-16040205,18,-4.51
+16040205,18,23.882
16040205,19,73.208786
16050101,2,21.592386
16050101,4,761.0011
@@ -6678,10 +6678,10 @@ WatershedID,ParamID,Value
18010101,2,30.215988
18010101,4,2489.987
18010101,10,39.09488
-18010101,12,6.93
+18010101,12,44.474
18010101,13,626159.06
18010101,16,31.215988
-18010101,18,3.18
+18010101,18,32.0
18010101,19,105.460464
18010102,2,13.930586
18010102,4,1626.5737
@@ -6712,42 +6712,45 @@ WatershedID,ParamID,Value
18010110,16,23.278395
18010201,2,37.03706
18010201,4,704.94995
+18010201,8,1.6411002
18010201,10,38.4411
-18010201,12,-0.68
+18010201,12,30.776
18010201,13,189936.8
18010201,16,38.03706
-18010201,18,-4.39
+18010201,18,24.098
18010201,19,291.47153
18010202,2,27.364737
18010202,4,520.47754
+18010202,8,1.9615712
18010202,10,31.136288
-18010202,12,-0.45
+18010202,12,31.19
18010202,13,156779.44
18010202,16,28.364737
-18010202,18,-4.34
+18010202,18,24.188
18010202,19,200.35234
18010203,2,28.581669
18010203,4,854.28516
+18010203,8,2.537524
18010203,10,34.62451
-18010203,12,-0.34
+18010203,12,31.388
18010203,13,230820.4
18010203,16,29.581669
-18010203,18,-3.93
+18010203,18,24.926
18010203,19,251.4323
18010204,2,13.297168
18010204,4,373.15607
18010204,10,14.33522
-18010204,12,0.59
+18010204,12,33.062
18010204,13,150157.5
18010204,16,14.297168
-18010204,18,-2.77
+18010204,18,27.014
18010204,19,146.4013
18010205,2,31.255379
18010205,4,461.0656
18010205,10,48.186
-18010205,12,0.68
+18010205,12,33.224
18010205,16,32.25538
-18010205,18,-1.72
+18010205,18,28.904
18010205,19,190.54439
18010206,1,730.53906
18010206,2,26.78607
@@ -6756,11 +6759,11 @@ WatershedID,ParamID,Value
18010206,8,8.491772
18010206,10,47.49458
18010206,11,1.6883109
-18010206,12,2.65
+18010206,12,36.77
18010206,13,241572.11
18010206,15,730.53906
18010206,16,27.78607
-18010206,18,-2.78
+18010206,18,26.996
18010206,19,173.41492
18010206,20,40.094807
18010206,21,2129.0
@@ -6774,9 +6777,9 @@ WatershedID,ParamID,Value
18010209,2,34.646038
18010209,4,2055.0518
18010209,10,64.83288
-18010209,12,2.88
+18010209,12,37.184
18010209,16,35.646038
-18010209,18,0.61
+18010209,18,33.098
18010209,19,71.27459
18010210,2,41.025314
18010210,4,1320.0404
@@ -6790,10 +6793,10 @@ WatershedID,ParamID,Value
18020001,2,20.87247
18020001,4,414.25565
18020001,10,20.543577
-18020001,12,-0.56
+18020001,12,30.992
18020001,13,143360.83
18020001,16,21.87247
-18020001,18,-4.76
+18020001,18,23.432
18020001,19,130.4719
18020002,2,24.816708
18020002,4,429.34726
diff --git a/packages/brat/docs/_config.yml b/packages/brat/docs/_config.yml
index 4c90b754..8fb3ed9f 100644
--- a/packages/brat/docs/_config.yml
+++ b/packages/brat/docs/_config.yml
@@ -27,6 +27,7 @@ defaults:
# Files/Folders to exclude from publishing
exclude:
+ - vendor
- src
- LICENSE
- README.md
diff --git a/packages/brat/docs/_includes/sidebar.html b/packages/brat/docs/_includes/sidebar.html
new file mode 100644
index 00000000..6754ec79
--- /dev/null
+++ b/packages/brat/docs/_includes/sidebar.html
@@ -0,0 +1,3 @@
+
+
+Back to riverscapes tools
\ No newline at end of file
diff --git a/packages/brat/scripts/build_topography.py b/packages/brat/scripts/build_topography.py
index 5800b695..60a5d70f 100644
--- a/packages/brat/scripts/build_topography.py
+++ b/packages/brat/scripts/build_topography.py
@@ -1,11 +1,9 @@
import os
import shutil
from rscommons import Logger
-from rscommons.raster_warp import raster_warp
from rscommons.science_base import get_dem_urls
from rscommons.download_dem import download_dem
from rscommons.geographic_raster import gdal_dem_geographic
-
from rscommons.raster_warp import raster_vrt_stitch
diff --git a/packages/brat/scripts/nwm_read.py b/packages/brat/scripts/nwm_read.py
index 478943d2..d5b35821 100644
--- a/packages/brat/scripts/nwm_read.py
+++ b/packages/brat/scripts/nwm_read.py
@@ -19,7 +19,6 @@
from sqlbrat.lib.flow_accumulation import flow_accum_to_drainage_area
from rscommons import Logger
-from rscommons.raster_warp import raster_warp
from rscommons.download_dem import download_dem
from rscommons.science_base import download_shapefile_collection
from rscommons.science_base import get_nhd_url
diff --git a/packages/brat/sqlbrat/__version__.py b/packages/brat/sqlbrat/__version__.py
index 70397087..0fd7811c 100644
--- a/packages/brat/sqlbrat/__version__.py
+++ b/packages/brat/sqlbrat/__version__.py
@@ -1 +1 @@
-__version__ = "4.1.0"
+__version__ = "4.2.0"
diff --git a/packages/brat/sqlbrat/brat_build.py b/packages/brat/sqlbrat/brat_build.py
index aceddd9c..924d26bd 100755
--- a/packages/brat/sqlbrat/brat_build.py
+++ b/packages/brat/sqlbrat/brat_build.py
@@ -1,13 +1,13 @@
-# Name: BRAT Build
-#
-# Build a BRAT project by segmenting a river network to a specified
-# length and then extract the input values required to run the
-# BRAT model for each reach segment from various GIS layers.
-#
-# Author: Philip Bailey
-#
-# Date: 30 May 2019
-# -------------------------------------------------------------------------------
+""" Build a BRAT project by segmenting a river network to a specified
+ length and then extract the input values required to run the
+ BRAT model for each reach segment from various GIS layers.
+
+ Philip Bailey
+ 30 May 2019
+
+ Returns:
+ [type]: [description]
+"""
import argparse
import os
import sys
@@ -15,72 +15,54 @@
import traceback
import datetime
import time
-import shutil
+from typing import List
from osgeo import ogr
-import rasterio.shutil
-from rscommons.shapefile import copy_feature_class
+from rscommons import GeopackageLayer
+from rscommons.vector_ops import copy_feature_class
from rscommons import Logger, initGDALOGRErrors, RSLayer, RSProject, ModelConfig, dotenv
-from rscommons.util import safe_makedirs
-from rscommons.segment_network import segment_network
from rscommons.build_network import build_network
-from rscommons.database import create_database
-from rscommons.database import populate_database
-from rscommons.reach_attributes import write_reach_attributes
+from rscommons.database import create_database, SQLiteCon
from sqlbrat.utils.vegetation_summary import vegetation_summary
from sqlbrat.utils.reach_geometry import reach_geometry
from sqlbrat.utils.conflict_attributes import conflict_attributes
from sqlbrat.__version__ import __version__
+Path = str
+
initGDALOGRErrors()
cfg = ModelConfig('http://xml.riverscapes.xyz/Projects/XSD/V1/BRAT.xsd', __version__)
LayerTypes = {
'DEM': RSLayer('NED 10m DEM', 'DEM', 'DEM', 'inputs/dem.tif'),
- 'FA': RSLayer('Flow Accumulation', 'FA', 'Raster', 'inputs/flow_accum.tif'),
- 'DA': RSLayer('Drainage Area in sqkm', 'DA', 'Raster', 'inputs/drainarea_sqkm.tif'),
'SLOPE': RSLayer('Slope Raster', 'SLOPE', 'Raster', 'inputs/slope.tif'),
'HILLSHADE': RSLayer('DEM Hillshade', 'HILLSHADE', 'Raster', 'inputs/dem_hillshade.tif'),
- 'VALLEY_BOTTOM': RSLayer('Valley Bottom', 'VALLEY_BOTTOM', 'Vector', 'inputs/valley_bottom.shp'),
-
'EXVEG': RSLayer('Existing Vegetation', 'EXVEG', 'Raster', 'inputs/existing_veg.tif'),
'HISTVEG': RSLayer('Historic Vegetation', 'HISTVEG', 'Raster', 'inputs/historic_veg.tif'),
-
- 'CLEANED': RSLayer('Cleaned Network', 'CLEANED', 'Vector', 'intermediates/intermediate_nhd_network.shp'),
- 'NETWORK': RSLayer('Network', 'NETWORK', 'Vector', 'intermediates/network.shp'),
-
- 'FLOWLINES': RSLayer('NHD Flowlines', 'FLOWLINES', 'Vector', 'inputs/NHDFlowline.shp'),
- 'FLOW_AREA': RSLayer('NHD Flow Area', 'FLOW_AREA', 'Vector', 'inputs/NHDArea.shp'),
- 'WATERBODIES': RSLayer('NHD Waterbody', 'WATERBODIES', 'Vector', 'inputs/NHDWaterbody.shp'),
-
- 'SEGMENTED': RSLayer('BRAT Network', 'SEGMENTED', 'Vector', 'outputs/brat.shp'),
- 'BRATDB': RSLayer('BRAT Database', 'BRATDB', 'SQLiteDB', 'outputs/brat.sqlite')
-}
-
-# Dictionary of fields that this process outputs, keyed by ShapeFile data type
-output_fields = {
- ogr.OFTString: ['Agency', 'WatershedID'],
- ogr.OFTInteger: ['AgencyID', 'ReachCode', 'IsPeren'],
- ogr.OFTReal: [
- 'iGeo_Slope', 'iGeo_ElMax', 'iGeo_ElMin', 'iGeo_Len', 'iPC_Road', 'iPC_RoadX',
- 'iPC_RoadVB', 'iPC_Rail', 'iPC_RailVB', 'iPC_Canal', 'iPC_DivPts', 'oPC_Dist', 'iPC_Privat',
- 'Orig_DA'
- ]
-}
-
-# This dictionary reassigns databae column names to 10 character limit for the ShapeFile
-shapefile_field_aliases = {
- 'WatershedID': 'HUC'
+ 'INPUTS': RSLayer('Confinement', 'INPUTS', 'Geopackage', 'inputs/inputs.gpkg', {
+ 'FLOWLINES': RSLayer('Segmented Flowlines', 'FLOWLINES', 'Vector', 'flowlines'),
+ 'FLOW_AREA': RSLayer('NHD Flow Area', 'FLOW_AREA', 'Vector', 'flowareas'),
+ 'WATERBODIES': RSLayer('NHD Waterbody', 'WATERBODIES', 'Vector', 'waterbodies'),
+ 'VALLEY_BOTTOM': RSLayer('Valley Bottom', 'VALLEY_BOTTOM', 'Vector', 'valley_bottom'),
+ 'ROADS': RSLayer('Roads', 'ROADS', 'Vector', 'roads'),
+ 'RAIL': RSLayer('Rail', 'RAIL', 'Vector', 'rail'),
+ 'CANALS': RSLayer('Canals', 'CANALS', 'Vector', 'canals')
+ }),
+ 'INTERMEDIATES': RSLayer('Intermediates', 'INTERMEDIATES', 'Geopackage', 'intermediates/intermediates.gpkg', {}),
+ 'OUTPUTS': RSLayer('BRAT', 'OUTPUTS', 'Geopackage', 'outputs/brat.gpkg', {
+ 'BRAT_GEOMETRY': RSLayer('BRAT Geometry', 'BRAT_GEOMETRY', 'Vector', 'ReachGeometry'),
+ 'BRAT': RSLayer('BRAT', 'BRAT_RESULTS', 'Vector', 'vwReaches')
+ })
}
-def brat_build(huc, flowlines, max_length, min_length,
- dem, slope, hillshade, flow_accum, drainarea_sqkm, existing_veg, historical_veg, output_folder,
- streamside_buffer, riparian_buffer, max_drainage_area,
- reach_codes, canal_codes,
- flow_areas, waterbodies, max_waterbody,
- valley_bottom, roads, rail, canals, ownership,
- elevation_buffer):
+def brat_build(huc: int, flowlines: Path, dem: Path, slope: Path, hillshade: Path,
+ existing_veg: Path, historical_veg: Path, output_folder: Path,
+ streamside_buffer: float, riparian_buffer: float,
+ reach_codes: List[str], canal_codes: List[str], peren_codes: List[str],
+ flow_areas: Path, waterbodies: Path, max_waterbody: float,
+ valley_bottom: Path, roads: Path, rail: Path, canals: Path, ownership: Path,
+ elevation_buffer: float):
"""Build a BRAT project by segmenting a reach network and copying
all the necessary layers into the resultant BRAT project
@@ -94,14 +76,11 @@ def brat_build(huc, flowlines, max_length, min_length,
dem {str} -- Path to the DEM raster for the watershed
slope {str} -- Path to the slope raster
hillshade {str} -- Path to the DEM hillshade raster
- flow_accum {str} -- Path to the flow accumulation raster
- drainarea_sqkm {str} -- Path to the drainage area raster
existing_veg {str} -- Path to the excisting vegetation raster
historical_veg {str} -- Path to the historical vegetation raster
output_folder {str} -- Output folder where the BRAT project will get created
streamside_buffer {float} -- Streamside vegetation buffer (meters)
riparian_buffer {float} -- Riparian vegetation buffer (meters)
- max_drainage_area {float} -- Maximum drainage area above which dam capacity will be zero
intermittent {bool} -- True to keep intermittent streams. False discard them.
ephemeral {bool} -- True to keep ephemeral streams. False to discard them.
max_waterbody {float} -- Area (sqm) of largest waterbody to be retained.
@@ -117,37 +96,54 @@ def brat_build(huc, flowlines, max_length, min_length,
log.info('HUC: {}'.format(huc))
log.info('EPSG: {}'.format(cfg.OUTPUT_EPSG))
- project, realization, proj_nodes = create_project(huc, output_folder)
+ project, _realization, proj_nodes = create_project(huc, output_folder)
log.info('Adding input rasters to project')
_dem_raster_path_node, dem_raster_path = project.add_project_raster(proj_nodes['Inputs'], LayerTypes['DEM'], dem)
_existing_path_node, prj_existing_path = project.add_project_raster(proj_nodes['Inputs'], LayerTypes['EXVEG'], existing_veg)
_historic_path_node, prj_historic_path = project.add_project_raster(proj_nodes['Inputs'], LayerTypes['HISTVEG'], historical_veg)
-
- # Copy in the rasters we need
project.add_project_raster(proj_nodes['Inputs'], LayerTypes['HILLSHADE'], hillshade)
- project.add_project_raster(proj_nodes['Inputs'], LayerTypes['FA'], flow_accum)
- project.add_project_raster(proj_nodes['Inputs'], LayerTypes['DA'], drainarea_sqkm)
project.add_project_raster(proj_nodes['Inputs'], LayerTypes['SLOPE'], slope)
+ project.add_project_geopackage(proj_nodes['Inputs'], LayerTypes['INPUTS'])
+ project.add_project_geopackage(proj_nodes['Outputs'], LayerTypes['OUTPUTS'])
+
+ inputs_gpkg_path = os.path.join(output_folder, LayerTypes['INPUTS'].rel_path)
+ intermediates_gpkg_path = os.path.join(output_folder, LayerTypes['INTERMEDIATES'].rel_path)
+ outputs_gpkg_path = os.path.join(output_folder, LayerTypes['OUTPUTS'].rel_path)
+
+ # Make sure we're starting with empty/fresh geopackages
+ GeopackageLayer.delete(inputs_gpkg_path)
+ GeopackageLayer.delete(intermediates_gpkg_path)
+ GeopackageLayer.delete(outputs_gpkg_path)
+
+ # Copy all the original vectors to the inputs geopackage. This will ensure on same spatial reference
+ source_layers = {
+ 'FLOWLINES': flowlines,
+ 'FLOW_AREA': flow_areas,
+ 'WATERBODIES': waterbodies,
+ 'VALLEY_BOTTOM': valley_bottom,
+ 'ROADS': roads,
+ 'RAIL': rail,
+ 'CANALS': canals
+ }
- # Copy in the vectors we need
- _flowlines_node, prj_flowlines = project.add_project_vector(proj_nodes['Inputs'], LayerTypes['FLOWLINES'], flowlines, att_filter="\"ReachCode\" Like '{}%'".format(huc))
- _flow_areas_node, prj_flow_areas = project.add_project_vector(proj_nodes['Inputs'], LayerTypes['FLOW_AREA'], flow_areas) if flow_areas else None
- _waterbodies_node, prj_waterbodies = project.add_project_vector(proj_nodes['Inputs'], LayerTypes['WATERBODIES'], waterbodies) if waterbodies else None
- _valley_bottom_node, prj_valley_bottom = project.add_project_vector(proj_nodes['Inputs'], LayerTypes['VALLEY_BOTTOM'], valley_bottom) if valley_bottom else None
-
- # Other layers we need
- _cleaned_path_node, cleaned_path = project.add_project_vector(proj_nodes['Intermediates'], LayerTypes['CLEANED'], replace=True)
- _segmented_path_node, segmented_path = project.add_project_vector(proj_nodes['Outputs'], LayerTypes['SEGMENTED'], replace=True)
-
- # Filter the flow lines to just the required features and then segment to desired length
- build_network(prj_flowlines, prj_flow_areas, prj_waterbodies, cleaned_path, cfg.OUTPUT_EPSG, reach_codes, max_waterbody)
- segment_network(cleaned_path, segmented_path, max_length, min_length)
+ input_layers = {}
+ for input_key, rslayer in LayerTypes['INPUTS'].sub_layers.items():
+ input_layers[input_key] = os.path.join(inputs_gpkg_path, rslayer.rel_path)
+ copy_feature_class(source_layers[input_key], input_layers[input_key], cfg.OUTPUT_EPSG)
+
+ # Create the output feature class fields. Only those listed here will get copied from the source
+ with GeopackageLayer(outputs_gpkg_path, layer_name=LayerTypes['OUTPUTS'].sub_layers['BRAT_GEOMETRY'].rel_path, delete_dataset=True) as out_lyr:
+ out_lyr.create_layer(ogr.wkbMultiLineString, epsg=cfg.OUTPUT_EPSG, options=['FID=ReachID'], fields={
+ 'WatershedID': ogr.OFTString,
+ 'FCode': ogr.OFTInteger,
+ 'TotDASqKm': ogr.OFTReal,
+ 'GNIS_Name': ogr.OFTString,
+ 'NHDPlusID': ogr.OFTReal
+ })
metadata = {
'BRAT_Build_DateTime': datetime.datetime.now().isoformat(),
- 'Max_Length': max_length,
- 'Min_Length': min_length,
'Streamside_Buffer': streamside_buffer,
'Riparian_Buffer': riparian_buffer,
'Reach_Codes': reach_codes,
@@ -156,32 +152,55 @@ def brat_build(huc, flowlines, max_length, min_length,
'Elevation_Buffer': elevation_buffer
}
- db_path = os.path.join(output_folder, LayerTypes['BRATDB'].rel_path)
- watesrhed_name = create_database(huc, db_path, metadata, cfg.OUTPUT_EPSG, os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'database', 'brat_schema.sql'))
- populate_database(db_path, segmented_path, huc)
- project.add_metadata({'Watershed': watesrhed_name})
+ # Execute the SQL to create the lookup tables in the output geopackage
+ watershed_name = create_database(huc, outputs_gpkg_path, metadata, cfg.OUTPUT_EPSG, os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'database', 'brat_schema.sql'))
+ project.add_metadata({'Watershed': watershed_name})
+
+ # Copy the reaches into the output feature class layer, filtering by reach codes
+ reach_geometry_path = os.path.join(outputs_gpkg_path, LayerTypes['OUTPUTS'].sub_layers['BRAT_GEOMETRY'].rel_path)
+ build_network(input_layers['FLOWLINES'], input_layers['FLOW_AREA'], reach_geometry_path, waterbodies_path=input_layers['WATERBODIES'], epsg=cfg.OUTPUT_EPSG, reach_codes=reach_codes, create_layer=False)
+
+ with SQLiteCon(outputs_gpkg_path) as database:
+ # Data preparation SQL statements to handle any weird attributes
+ database.curs.execute('INSERT INTO ReachAttributes (ReachID, Orig_DA, iGeo_DA, ReachCode, WatershedID, StreamName) SELECT ReachID, TotDASqKm, TotDASqKm, FCode, WatershedID, GNIS_NAME FROM ReachGeometry')
+ database.curs.execute('UPDATE ReachAttributes SET IsPeren = 1 WHERE (ReachCode IN ({}))'.format(','.join(peren_codes)))
+ database.curs.execute('UPDATE ReachAttributes SET iGeo_DA = 0 WHERE iGeo_DA IS NULL')
- # Add this to the project file
- project.add_dataset(proj_nodes['Outputs'], db_path, LayerTypes['BRATDB'], 'SQLiteDB')
+ # Register vwReaches as a feature layer as well as its geometry column
+ database.curs.execute("""INSERT INTO gpkg_contents (table_name, data_type, identifier, min_x, min_y, max_x, max_y, srs_id)
+ SELECT 'vwReaches', data_type, 'Reaches', min_x, min_y, max_x, max_y, srs_id FROM gpkg_contents WHERE table_name = 'ReachGeometry'""")
+
+ database.curs.execute("""INSERT INTO gpkg_geometry_columns (table_name, column_name, geometry_type_name, srs_id, z, m)
+ SELECT 'vwReaches', column_name, geometry_type_name, srs_id, z, m FROM gpkg_geometry_columns WHERE table_name = 'ReachGeometry'""")
+
+ database.conn.commit()
# Calculate the geophysical properties slope, min and max elevations
- reach_geometry(db_path, dem_raster_path, elevation_buffer, cfg.OUTPUT_EPSG)
+ reach_geometry(reach_geometry_path, dem_raster_path, elevation_buffer)
# Calculate the conflict attributes ready for conservation
- conflict_attributes(db_path, valley_bottom, roads, rail, canals, ownership, 30, 5, cfg.OUTPUT_EPSG)
+ conflict_attributes(outputs_gpkg_path, reach_geometry_path,
+ input_layers['VALLEY_BOTTOM'], input_layers['ROADS'], input_layers['RAIL'], input_layers['CANALS'],
+ ownership, 30, 5, cfg.OUTPUT_EPSG, canal_codes, intermediates_gpkg_path)
# Calculate the vegetation cell counts for each epoch and buffer
- for veg_raster in [prj_existing_path, prj_historic_path]:
- [vegetation_summary(db_path, veg_raster, buffer) for buffer in [streamside_buffer, riparian_buffer]]
-
- # Copy BRAT build output fields from SQLite to ShapeFile
- log.info('Copying values from SQLite to output ShapeFile')
- write_reach_attributes(segmented_path, db_path, output_fields, shapefile_field_aliases)
+ for label, veg_raster in [('Existing Veg', prj_existing_path), ('Historical Veg', prj_historic_path)]:
+ for buffer in [streamside_buffer, riparian_buffer]:
+ vegetation_summary(outputs_gpkg_path, '{} {}m'.format(label, buffer), veg_raster, buffer)
log.info('BRAT build completed successfully.')
def create_project(huc, output_dir):
+ """ Create riverscapes project XML
+
+ Args:
+ huc (str): Watershed HUC code
+ output_dir (str): Full absolute path to output folder
+
+ Returns:
+ tuple: (project XML object, realization node, dictionary of other nodes)
+ """
project_name = 'BRAT for HUC {}'.format(huc)
project = RSProject(cfg, output_dir)
@@ -214,19 +233,18 @@ def create_project(huc, output_dir):
def main():
+ """ Main BRAT Build routine
+ """
+
parser = argparse.ArgumentParser(
description='Build the inputs for an eventual brat_run:',
# epilog="This is an epilog"
)
parser.add_argument('huc', help='huc input', type=str)
- parser.add_argument('max_length', help='Maximum length of features when segmenting. Zero causes no segmentation.', type=float)
- parser.add_argument('min_length', help='min_length input', type=float)
parser.add_argument('dem', help='dem input', type=str)
parser.add_argument('slope', help='slope input', type=str)
parser.add_argument('hillshade', help='hillshade input', type=str)
- parser.add_argument('flow_accum', help='flow accumulation input', type=str)
- parser.add_argument('drainarea_sqkm', help='drainage area input', type=str)
parser.add_argument('flowlines', help='flowlines input', type=str)
parser.add_argument('existing_veg', help='existing_veg input', type=str)
@@ -240,24 +258,25 @@ def main():
parser.add_argument('streamside_buffer', help='streamside_buffer input', type=float)
parser.add_argument('riparian_buffer', help='riparian_buffer input', type=float)
- parser.add_argument('max_drainage_area', help='max_drainage_area input', type=float)
-
parser.add_argument('elevation_buffer', help='elevation_buffer input', type=float)
+
parser.add_argument('output_folder', help='output_folder input', type=str)
parser.add_argument('--reach_codes', help='Comma delimited reach codes (FCode) to retain when filtering features. Omitting this option retains all features.', type=str)
parser.add_argument('--canal_codes', help='Comma delimited reach codes (FCode) representing canals. Omitting this option retains all features.', type=str)
+ parser.add_argument('--peren_codes', help='Comma delimited reach codes (FCode) representing perennial features', type=str)
parser.add_argument('--flow_areas', help='(optional) path to the flow area polygon feature class containing artificial paths', type=str)
parser.add_argument('--waterbodies', help='(optional) waterbodies input', type=str)
parser.add_argument('--max_waterbody', help='(optional) maximum size of small waterbody artificial flows to be retained', type=float)
parser.add_argument('--verbose', help='(optional) a little extra logging ', action='store_true', default=False)
- # We can substitute patters for environment varaibles
+ # Substitute patterns for environment varaibles
args = dotenv.parse_args_env(parser)
reach_codes = args.reach_codes.split(',') if args.reach_codes else None
canal_codes = args.canal_codes.split(',') if args.canal_codes else None
+ peren_codes = args.peren_codes.split(',') if args.peren_codes else None
# Initiate the log file
log = Logger("BRAT Build")
@@ -265,19 +284,17 @@ def main():
log.title('BRAT Build Tool For HUC: {}'.format(args.huc))
try:
brat_build(
- args.huc, args.flowlines, args.max_length, args.min_length, args.dem, args.slope,
- args.hillshade, args.flow_accum, args.drainarea_sqkm, args.existing_veg, args.historical_veg, args.output_folder, args.streamside_buffer,
- args.riparian_buffer,
- args.max_drainage_area,
- reach_codes,
- canal_codes,
+ args.huc, args.flowlines, args.dem, args.slope, args.hillshade,
+ args.existing_veg, args.historical_veg, args.output_folder,
+ args.streamside_buffer, args.riparian_buffer,
+ reach_codes, canal_codes, peren_codes,
args.flow_areas, args.waterbodies, args.max_waterbody,
args.valley_bottom, args.roads, args.rail, args.canals, args.ownership,
args.elevation_buffer
)
- except Exception as e:
- log.error(e)
+ except Exception as ex:
+ log.error(ex)
traceback.print_exc(file=sys.stdout)
sys.exit(1)
diff --git a/packages/brat/sqlbrat/brat_report.py b/packages/brat/sqlbrat/brat_report.py
index daec0aea..fc4b5feb 100644
--- a/packages/brat/sqlbrat/brat_report.py
+++ b/packages/brat/sqlbrat/brat_report.py
@@ -20,6 +20,7 @@ class BratReport(RSReport):
"""In order to write a report we will extend the RSReport class from the rscommons
module which has useful styles and building blocks like Tables from lists etc.
"""
+
def __init__(self, database, report_path, rs_project):
# Need to call the constructor of the inherited class:
super().__init__(rs_project, report_path)
@@ -44,7 +45,7 @@ def __init__(self, database, report_path, rs_project):
self.conservation()
def report_intro(self):
- # Create a section node to start adding things to. Section nodes are added to the table of contents if
+ # Create a section node to start adding things to. Section nodes are added to the table of contents if
# they have a title. If you don't specify a el_parent argument these sections will simply be added
# to the report body in the order you call them.
section = self.section('ReportIntro', 'Introduction')
@@ -54,7 +55,7 @@ def report_intro(self):
conn.row_factory = _dict_factory
curs = conn.cursor()
- row = curs.execute('SELECT Sum(iGeo_Len) AS TotalLength, Count(ReachID) AS TotalReaches FROM Reaches').fetchone()
+ row = curs.execute('SELECT Sum(iGeo_Len) AS TotalLength, Count(ReachID) AS TotalReaches FROM vwReaches').fetchone()
values = {
'Number of reaches': '{0:,d}'.format(row['TotalReaches']),
'Total reach length (km)': '{0:,.0f}'.format(row['TotalLength'] / 1000),
@@ -78,7 +79,7 @@ def report_intro(self):
RSReport.create_table_from_sql(
['Reach Type', 'Total Length (km)', '% of Total'],
'SELECT ReachType, Sum(iGeo_Len) / 1000 As Length, 100 * Sum(iGeo_Len) / TotalLength AS TotalLength '
- 'FROM vwReaches INNER JOIN (SELECT Sum(iGeo_Len) AS TotalLength FROM Reaches) GROUP BY ReachType',
+ 'FROM vwReaches INNER JOIN (SELECT Sum(iGeo_Len) AS TotalLength FROM vwReaches) GROUP BY ReachType',
self.database, table_wrapper, attrib={'id': 'SummTable_sql'})
# Append my table_wrapper div (which now contains both tables above) to the section
@@ -92,20 +93,20 @@ def reach_attribute(self, attribute, units, parent_el):
curs = conn.cursor()
# Summary statistics (min, max etc) for the current attribute
- curs.execute('SELECT Count({0}) "Values", Max({0}) Maximum, Min({0}) Minimum, Avg({0}) Average FROM Reaches WHERE {0} IS NOT NULL'.format(attribute))
+ curs.execute('SELECT Count({0}) "Values", Max({0}) Maximum, Min({0}) Minimum, Avg({0}) Average FROM vwReaches WHERE {0} IS NOT NULL'.format(attribute))
values = curs.fetchone()
reach_wrapper_inner = ET.Element('div', attrib={'class': 'reachAtributeInner'})
section.append(reach_wrapper_inner)
# Add the number of NULL values
- curs.execute('SELECT Count({0}) "NULL Values" FROM Reaches WHERE {0} IS NULL'.format(attribute))
+ curs.execute('SELECT Count({0}) "NULL Values" FROM vwReaches WHERE {0} IS NULL'.format(attribute))
values.update(curs.fetchone())
RSReport.create_table_from_dict(values, reach_wrapper_inner)
# Box plot
image_path = os.path.join(self.images_dir, 'attribute_{}.png'.format(attribute))
- curs.execute('SELECT {0} FROM Reaches WHERE {0} IS NOT NULL'.format(attribute))
+ curs.execute('SELECT {0} FROM vwReaches WHERE {0} IS NOT NULL'.format(attribute))
values = [row[attribute] for row in curs.fetchall()]
box_plot(values, attribute, attribute, image_path)
@@ -129,7 +130,7 @@ def dam_capacity(self):
('Historic capacity', 'Sum((iGeo_len / 1000) * oCC_HPE)')
]
- curs.execute('SELECT {} FROM Reaches'.format(', '.join([field for label, field in fields])))
+ curs.execute('SELECT {} FROM vwReaches'.format(', '.join([field for label, field in fields])))
row = curs.fetchone()
table_dict = {fields[i][0]: row[fields[i][1]] for i in range(len(fields))}
@@ -145,14 +146,14 @@ def dam_capacity_lengths(self, capacity_field, elParent):
curs.execute('SELECT Name, MaxCapacity FROM DamCapacities ORDER BY MaxCapacity')
bins = [(row[0], row[1]) for row in curs.fetchall()]
- curs.execute('SELECT Sum(iGeo_Len) / 1000 FROM Reaches')
+ curs.execute('SELECT Sum(iGeo_Len) / 1000 FROM vwReaches')
total_length_km = curs.fetchone()[0]
data = []
last_bin = 0
cumulative_length_km = 0
for name, max_capacity in bins:
- curs.execute('SELECT Sum(iGeo_len) / 1000 FROM Reaches WHERE {} <= {}'.format(capacity_field, max_capacity))
+ curs.execute('SELECT Sum(iGeo_len) / 1000 FROM vwReaches WHERE {} <= {}'.format(capacity_field, max_capacity))
rowi = curs.fetchone()
if not rowi or rowi[0] is None:
bin_km = 0
@@ -206,7 +207,7 @@ def hydrology_plots(self):
self.log.info('Generating XY scatter for {} against drainage area.'.format(variable))
image_path = os.path.join(self.images_dir, 'drainage_area_{}.png'.format(variable.lower()))
- curs.execute('SELECT iGeo_DA, {} FROM Reaches'.format(variable))
+ curs.execute('SELECT iGeo_DA, {} FROM vwReaches'.format(variable))
values = [(row[0], row[1]) for row in curs.fetchall()]
xyscatter(values, 'Drainage Area (sqkm)', ylabel, variable, image_path)
@@ -240,7 +241,7 @@ def ownership(self):
RSReport.create_table_from_sql(
['Ownership Agency', 'Number of Reach Segments', 'Length (km)', '% of Total Length'],
'SELECT IFNULL(Agency, "None"), Count(ReachID), Sum(iGeo_Len) / 1000, 100* Sum(iGeo_Len) / TotalLength FROM vwReaches'
- ' INNER JOIN (SELECT Sum(iGeo_Len) AS TotalLength FROM Reaches) GROUP BY Agency',
+ ' INNER JOIN (SELECT Sum(iGeo_Len) AS TotalLength FROM vwReaches) GROUP BY Agency',
self.database, section, attrib={'class': 'fullwidth'})
def vegetation(self):
@@ -317,8 +318,8 @@ def conservation(self):
RSReport.create_table_from_sql(
[label, 'Total Length (km)', 'Reach Count', '%'],
'SELECT DR.Name, Sum(iGeo_Len) / 1000, Count(R.{1}), 100 * Sum(iGeo_Len) / TotalLength'
- ' FROM {0} DR LEFT JOIN Reaches R ON DR.{1} = R.{1}'
- ' JOIN (SELECT Sum(iGeo_Len) AS TotalLength FROM Reaches)'
+ ' FROM {0} DR LEFT JOIN vwReaches R ON DR.{1} = R.{1}'
+ ' JOIN (SELECT Sum(iGeo_Len) AS TotalLength FROM vwReaches)'
' GROUP BY DR.{1}'.format(table, idfield),
self.database, section)
diff --git a/packages/brat/sqlbrat/brat_run.py b/packages/brat/sqlbrat/brat_run.py
index 59c413e3..0d3351cf 100755
--- a/packages/brat/sqlbrat/brat_run.py
+++ b/packages/brat/sqlbrat/brat_run.py
@@ -1,24 +1,22 @@
-# Name: BRAT Run
-#
-# Run the BRAT model on an existing BRAT project that was built
-# using the brat_build.py script. The model calculates existing
-# and historic dam capacities as well as conservation and conflict.
-#
-# Author: Philip Bailey
-#
-# Date: 30 May 2019
-# -------------------------------------------------------------------------------
+""" Run the BRAT model on an existing BRAT project that was built
+ using the brat_build.py script. The model calculates existing
+ and historic dam capacities as well as conservation and conflict.
+
+ Philip Bailey
+ 30 May 2019
+
+ Returns:
+ None: None
+"""
import os
import sys
import traceback
import argparse
-import sqlite3
import time
import datetime
from osgeo import ogr
-from rscommons import Logger, initGDALOGRErrors, RSLayer, RSProject, ModelConfig, dotenv
-from rscommons.database import execute_query, update_database, store_metadata, set_reach_fields_null
-from rscommons.reach_attributes import write_reach_attributes
+from rscommons import Logger, RSLayer, RSProject, ModelConfig, dotenv
+from rscommons.database import update_database, store_metadata, set_reach_fields_null, SQLiteCon
from sqlbrat.utils.vegetation_suitability import vegetation_suitability, output_vegetation_raster
from sqlbrat.utils.vegetation_fis import vegetation_fis
from sqlbrat.utils.combined_fis import combined_fis
@@ -32,7 +30,6 @@
# Dictionary of fields that this process outputs, keyed by ShapeFile data type
output_fields = {
- ogr.OFTString: ['Risk', 'Limitation', 'Opportunity'],
ogr.OFTInteger: ['RiskID', 'LimitationID', 'OpportunityID'],
ogr.OFTReal: ['iVeg100EX', 'iVeg_30EX', 'iVeg100HPE', 'iVeg_30HPE', 'iPC_LU',
'iPC_VLowLU', 'iPC_LowLU', 'iPC_ModLU', 'iPC_HighLU', 'iHyd_QLow',
@@ -40,16 +37,6 @@
'mCC_HPE_CT', 'oCC_EX', 'mCC_EX_CT', 'mCC_HisDep']
}
-# This dictionary reassigns databae column names to 10 character limit for the ShapeFile
-shapefile_field_aliases = {
- 'Risk': 'oPBRC_UI',
- 'RiskID': 'oPBRC_UIID',
- 'Opportunity': 'oPBRC_CR',
- 'OpportunityID': 'oPBRC_CRID',
- 'Limitation': 'oPBRC_UD',
- 'LimitationID': 'oPBRC_UDID'
-}
-
LayerTypes = {
'EXVEG_SUIT': RSLayer('Existing Vegetation', 'EXVEG_SUIT', 'Raster', 'intermediates/existing_veg_suitability.tif'),
'HISTVEG_SUIT': RSLayer('Historic Vegetation', 'HISTVEG_SUIT', 'Raster', 'intermediates/historic_veg_suitability.tif'),
@@ -95,68 +82,61 @@ def brat_run(project_root, csv_dir):
outputs_node = r_node.find('Outputs')
# Get the filepaths for the DB and shapefile
- database = os.path.join(project.project_dir, r_node.find('Outputs/SQLiteDB[@id="BRATDB"]/Path').text)
- shapefile = os.path.join(project.project_dir, r_node.find('Outputs/Vector[@id="SEGMENTED"]/Path').text)
+ gpkg_path = os.path.join(project.project_dir, r_node.find('Outputs/Geopackage[@id="OUTPUTS"]/Path').text)
- if not os.path.isfile(database):
- raise Exception('BRAT SQLite database file missing at {}. You must run Brat Build first.'.format(database))
+ if not os.path.isfile(gpkg_path):
+ raise Exception('BRAT geopackage file missing at {}. You must run Brat Build first.'.format(gpkg_path))
# Update any of the lookup tables we need
- update_database(database, csv_dir)
+ update_database(gpkg_path, csv_dir)
# Store the BRAT Run date time to the database (for reporting)
- store_metadata(database, 'BRAT_Run_DateTime', datetime.datetime.now().isoformat())
+ store_metadata(gpkg_path, 'BRAT_Run_DateTime', datetime.datetime.now().isoformat())
- watershed, max_drainage_area, ecoregion = get_watershed_info(database)
+ watershed, max_drainage_area, ecoregion = get_watershed_info(gpkg_path)
# Set database output columns to NULL before processing (note omission of string lookup fields from view)
- set_reach_fields_null(database, output_fields[ogr.OFTReal])
- set_reach_fields_null(database, output_fields[ogr.OFTInteger])
+ set_reach_fields_null(gpkg_path, output_fields[ogr.OFTReal])
+ set_reach_fields_null(gpkg_path, output_fields[ogr.OFTInteger])
# Calculate the low and high flow using regional discharge equations
- hydrology(database, 'Low', watershed)
- hydrology(database, '2', watershed)
+ hydrology(gpkg_path, 'Low', watershed)
+ hydrology(gpkg_path, '2', watershed)
# Calculate the vegetation and combined FIS for the existing and historical vegetation epochs
for epoch, prefix, ltype, orig_id in Epochs:
# Calculate the vegetation suitability for each buffer
- [vegetation_suitability(database, buffer, epoch, prefix, ecoregion) for buffer in get_stream_buffers(database)]
+ [vegetation_suitability(gpkg_path, buffer, prefix, ecoregion) for buffer in get_stream_buffers(gpkg_path)]
# Run the vegetation and then combined FIS for this epoch
- vegetation_fis(database, epoch, prefix)
- combined_fis(database, epoch, prefix, max_drainage_area)
+ vegetation_fis(gpkg_path, epoch, prefix)
+ combined_fis(gpkg_path, epoch, prefix, max_drainage_area)
orig_raster = os.path.join(project.project_dir, input_node.find('Raster[@id="{}"]/Path'.format(orig_id)).text)
- veg_suit_raster_node, veg_suit_raster = project.add_project_raster(intermediate_node, LayerTypes[ltype], None, True)
- output_vegetation_raster(database, orig_raster, veg_suit_raster, epoch, prefix, ecoregion)
+ _veg_suit_raster_node, veg_suit_raster = project.add_project_raster(intermediate_node, LayerTypes[ltype], None, True)
+ output_vegetation_raster(gpkg_path, orig_raster, veg_suit_raster, epoch, prefix, ecoregion)
# Calculate departure from historical conditions
- execute_query(database, 'UPDATE Reaches SET mCC_HisDep = mCC_HPE_CT - mCC_EX_CT WHERE (mCC_EX_CT IS NOT NULL) AND (mCC_HPE_CT IS NOT NULL)',
- 'Calculating departure from historic conditions')
+ with SQLiteCon(gpkg_path) as database:
+ log.info('Calculating departure from historic conditions')
+ database.curs.execute('UPDATE ReachAttributes SET mCC_HisDep = mCC_HPE_CT - mCC_EX_CT WHERE (mCC_EX_CT IS NOT NULL) AND (mCC_HPE_CT IS NOT NULL)')
+ database.conn.commit()
# Land use intesity, conservation and restoration
- land_use(database, 100.0)
- conservation(database)
-
- # Copy BRAT build output fields from SQLite to ShapeFile in batches according to data type
- if shapefile:
- if not os.path.isfile(shapefile):
- raise Exception('BRAT ShapeFile file missing at {}'.format(shapefile))
-
- log.info('Copying values from SQLite to output ShapeFile')
- write_reach_attributes(shapefile, database, output_fields, shapefile_field_aliases)
+ land_use(gpkg_path, 100.0)
+ conservation(gpkg_path)
report_path = os.path.join(project.project_dir, LayerTypes['BRAT_RUN_REPORT'].rel_path)
project.add_report(outputs_node, LayerTypes['BRAT_RUN_REPORT'], replace=True)
- report = BratReport(database, report_path, project)
+ report = BratReport(gpkg_path, report_path, project)
report.write()
log.info('BRAT run complete')
-def get_watershed_info(database):
+def get_watershed_info(gpkg_path):
"""Query a BRAT database and get information about
the watershed being run. Assumes that all watersheds
except the one being run have been deleted.
@@ -169,10 +149,12 @@ def get_watershed_info(database):
the watershed is associated.
"""
- conn = sqlite3.connect(database)
- curs = conn.execute('SELECT WatershedID, MaxDrainage, EcoregionID FROM Watersheds')
- row = curs.fetchone()
- watershed, max_drainage, ecoregion = row
+ with SQLiteCon(gpkg_path) as database:
+ database.curs.execute('SELECT WatershedID, MaxDrainage, EcoregionID FROM Watersheds')
+ row = database.curs.fetchone()
+ watershed = row['WatershedID']
+ max_drainage = row['MaxDrainage']
+ ecoregion = row['EcoregionID']
log = Logger('BRAT Run')
@@ -188,7 +170,7 @@ def get_watershed_info(database):
return watershed, max_drainage, ecoregion
-def get_stream_buffers(database):
+def get_stream_buffers(gpkg_path):
"""Get the list of buffers used to sample the vegetation.
Assumes that the vegetation has already been sample and that
the streamside and riparian buffers are the only values in
@@ -201,12 +183,14 @@ def get_stream_buffers(database):
[list] -- all discrete vegetation buffers
"""
- conn = sqlite3.connect(database)
- curs = conn.execute('SELECT Buffer FROM ReachVegetation GROUP BY Buffer')
- return [row[0] for row in curs.fetchall()]
+ with SQLiteCon(gpkg_path) as database:
+ database.curs.execute('SELECT Buffer FROM ReachVegetation GROUP BY Buffer')
+ return [row['Buffer'] for row in database.curs.fetchall()]
def main():
+ """ Main BRAT Run
+ """
parser = argparse.ArgumentParser(
description='Run brat against a pre-existing sqlite db:',
# epilog="This is an epilog"
diff --git a/packages/brat/sqlbrat/utils/combined_fis.py b/packages/brat/sqlbrat/utils/combined_fis.py
index c9f8b192..9e7cdbde 100644
--- a/packages/brat/sqlbrat/utils/combined_fis.py
+++ b/packages/brat/sqlbrat/utils/combined_fis.py
@@ -1,13 +1,11 @@
-# Name: Combined FIS
-#
-# Purpose: Runs the combined FIS for the BRAT input table.
-# Adapted from Jordan Gilbert's original BRAT script.
-#
-# Author: Jordan Gilbert
-# Philip Bailey
-#
-# Created: 30 May 2019
-# -------------------------------------------------------------------------------
+""" Runs the combined FIS for the BRAT input table.
+ Adapted from Jordan Gilbert's original BRAT script.
+
+ Jordan Gilbert
+ Philip Bailey
+
+ 30 May 2019
+"""
import os
import sys
import argparse
@@ -15,11 +13,11 @@
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
-from rscommons.database import load_attributes, write_attributes
+from rscommons.database import load_attributes, write_db_attributes
from rscommons import ProgressBar, Logger, dotenv
-def combined_fis(database, label, veg_type, max_drainage_area):
+def combined_fis(database: str, label: str, veg_type: str, max_drainage_area: float):
"""
Combined beaver dam capacity FIS
:param network: Shapefile path containing necessary FIS inputs
@@ -30,7 +28,7 @@ def combined_fis(database, label, veg_type, max_drainage_area):
"""
log = Logger('Combined FIS')
- log.info('Processing {} vegetation'.format(veg_type))
+ log.info('Processing {} vegetation'.format(label))
veg_fis_field = 'oVC_{}'.format(veg_type)
capacity_field = 'oCC_{}'.format(veg_type)
@@ -40,12 +38,12 @@ def combined_fis(database, label, veg_type, max_drainage_area):
reaches = load_attributes(database, fields, ' AND '.join(['({} IS NOT NULL)'.format(f) for f in fields]))
calculate_combined_fis(reaches, veg_fis_field, capacity_field, dam_count_field, max_drainage_area)
- write_attributes(database, reaches, [capacity_field, dam_count_field], log)
+ write_db_attributes(database, reaches, [capacity_field, dam_count_field], log)
log.info('Process completed successfully.')
-def calculate_combined_fis(feature_values, veg_fis_field, capacity_field, dam_count_field, max_drainage_area):
+def calculate_combined_fis(feature_values: dict, veg_fis_field: str, capacity_field: str, dam_count_field: str, max_drainage_area: float):
"""
Calculate dam capacity and density using combined FIS
:param feature_values: Dictionary of features keyed by ReachID and values are dictionaries of attributes
@@ -72,8 +70,8 @@ def calculate_combined_fis(feature_values, veg_fis_field, capacity_field, dam_co
drain_array = np.zeros(feature_count, np.float64)
counter = 0
- for reachID, values in feature_values.items():
- reachid_array[counter] = reachID
+ for reach_id, values in feature_values.items():
+ reachid_array[counter] = reach_id
veg_array[counter] = values[veg_fis_field]
hydlow_array[counter] = values['iHyd_SPLow']
hydq2_array[counter] = values['iHyd_SP2']
@@ -82,9 +80,6 @@ def calculate_combined_fis(feature_values, veg_fis_field, capacity_field, dam_co
counter += 1
# Adjust inputs to be within FIS membership range
-
- # TODO: to improve the math handling we set 'nan' values to their lowest possible
- # I'm not sure this is valid. What should be done with 'nan' values
veg_array[veg_array < 0] = 0
veg_array[veg_array > 45] = 45
@@ -206,15 +201,15 @@ def calculate_combined_fis(feature_values, veg_fis_field, capacity_field, dam_co
# calculate defuzzified centroid value for density 'none' MF group
# this will be used to re-classify output values that fall in this group
# important: will need to update the array (x) and MF values (mfx) if the
- # density 'none' values are changed in the model
- x = np.arange(0, 45, 0.01)
- mfx = fuzz.trimf(x, [0, 0, 0.1])
- defuzz_centroid = round(fuzz.defuzz(x, mfx, 'centroid'), 6)
+ # density 'none' values are changed in the model
+ x_vals = np.arange(0, 45, 0.01)
+ mfx = fuzz.trimf(x_vals, [0, 0, 0.1])
+ defuzz_centroid = round(fuzz.defuzz(x_vals, mfx, 'centroid'), 6)
progbar = ProgressBar(len(reachid_array), 50, "Combined FIS")
counter = 0
- for i, reachID in enumerate(reachid_array):
+ for i, reach_id in enumerate(reachid_array):
capacity = 0.0
# Only compute FIS if the reach has less than user-defined max drainage area.
@@ -235,11 +230,11 @@ def calculate_combined_fis(feature_values, veg_fis_field, capacity_field, dam_co
if round(capacity, 6) == defuzz_centroid:
capacity = 0.0
- count = capacity * (feature_values[reachID]['iGeo_Len'] / 1000.0)
+ count = capacity * (feature_values[reach_id]['iGeo_Len'] / 1000.0)
count = 1.0 if 0 < count < 1 else count
- feature_values[reachID][capacity_field] = round(capacity, 2)
- feature_values[reachID][dam_count_field] = round(count, 2)
+ feature_values[reach_id][capacity_field] = round(capacity, 2)
+ feature_values[reach_id][dam_count_field] = round(count, 2)
counter += 1
progbar.update(counter)
@@ -249,6 +244,8 @@ def calculate_combined_fis(feature_values, veg_fis_field, capacity_field, dam_co
def main():
+ """ Combined FIS
+ """
parser = argparse.ArgumentParser()
parser.add_argument('database', help='BRAT SQLite database', type=argparse.FileType('r'))
parser.add_argument('maxdrainage', help='Maximum drainage area', type=float)
@@ -264,8 +261,8 @@ def main():
combined_fis(args.database.name, 'existing', 'EX', args.maxdrainage)
# combined_fis(args.network.name, 'historic', 'HPE', args.maxdrainage)
- except Exception as e:
- logg.error(e)
+ except Exception as ex:
+ logg.error(ex)
traceback.print_exc(file=sys.stdout)
sys.exit(1)
diff --git a/packages/brat/sqlbrat/utils/conflict_attributes.py b/packages/brat/sqlbrat/utils/conflict_attributes.py
index 0370e38d..1077ed50 100644
--- a/packages/brat/sqlbrat/utils/conflict_attributes.py
+++ b/packages/brat/sqlbrat/utils/conflict_attributes.py
@@ -6,37 +6,37 @@
#
# Date: 17 Oct 2019
#
-# Remarks:
-# BLM National Surface Management Agency Area Polygons
+# Remarks: BLM National Surface Management Agency Area Polygons
# https://catalog.data.gov/dataset/blm-national-surface-management-agency-area-polygons-national-geospatial-data-asset-ngda
# -------------------------------------------------------------------------------
-import argparse
import os
-import sys
-import traceback
-import json
-import time
-import sqlite3
import shutil
-from osgeo import ogr, osr, gdal
+from typing import List
+from osgeo import ogr, gdal
from pygeoprocessing import geoprocessing
-from shapely.ops import unary_union
-from shapely.geometry import shape, mapping
import rasterio.shutil
-
-from rscommons import ProgressBar, Logger, ModelConfig, dotenv, VectorBase
+from rscommons import ProgressBar, Logger
from rscommons.raster_buffer_stats import raster_buffer_stats2
-from rscommons.shapefile import _rough_convert_metres_to_shapefile_units
-from rscommons.shapefile import intersect_feature_classes
-from rscommons.shapefile import intersect_geometry_with_feature_class
-from rscommons.shapefile import delete_shapefile
-from rscommons.shapefile import get_transform_from_epsg
-from rscommons.shapefile import copy_feature_class
-from rscommons.util import safe_makedirs
-from rscommons.database import load_geometries, get_metadata, write_attributes
-
-
-def conflict_attributes(database, valley_bottom, roads, rail, canals, ownership, buffer_distance_metres, cell_size_meters, epsg):
+from rscommons.util import safe_makedirs, safe_remove_dir
+from rscommons.database import write_db_attributes
+from rscommons.vector_ops import intersect_feature_classes, get_geometry_unary_union, load_geometries, intersect_geometry_with_feature_class, copy_feature_class
+from rscommons.classes.vector_classes import get_shp_or_gpkg, GeopackageLayer
+from rscommons.database import SQLiteCon
+
+
+def conflict_attributes(
+ output_gpkg: str,
+ flowlines_path: str,
+ valley_bottom: str,
+ roads: str,
+ rail: str,
+ canals: str,
+ ownership: str,
+ buffer_distance_metres: float,
+ cell_size_meters: float,
+ epsg: int,
+ canal_codes: List[int],
+ intermediates_gpkg_path: str):
"""Calculate conflict attributes and write them back to a BRAT database
Arguments:
@@ -52,68 +52,53 @@ def conflict_attributes(database, valley_bottom, roads, rail, canals, ownership,
"""
# Calculate conflict attributes
- values = calc_conflict_attributes(database, valley_bottom, roads, rail, canals, ownership, buffer_distance_metres, cell_size_meters, epsg)
+ values = calc_conflict_attributes(flowlines_path, valley_bottom, roads, rail, canals, ownership, buffer_distance_metres, cell_size_meters, epsg, canal_codes, intermediates_gpkg_path)
- # Write float and string fields separately
- write_attributes(database, values, ['iPC_Road', 'iPC_RoadVB', 'iPC_Rail', 'iPC_RailVB', 'iPC_Canal', 'iPC_DivPts', 'iPC_RoadX', 'iPC_Privat', 'oPC_Dist'])
- write_attributes(database, values, ['AgencyID'], summarize=False)
+ # Write float and string fields separately with log summary enabled
+ write_db_attributes(output_gpkg, values, ['iPC_Road', 'iPC_RoadVB', 'iPC_Rail', 'iPC_RailVB', 'iPC_Canal', 'iPC_DivPts', 'iPC_RoadX', 'iPC_Privat', 'oPC_Dist'])
+ write_db_attributes(output_gpkg, values, ['AgencyID'], summarize=False)
-def calc_conflict_attributes(database, valley_bottom, roads, rail, canals, ownership, buffer_distance_metres, cell_size_meters, epsg):
+def calc_conflict_attributes(flowlines_path, valley_bottom, roads, rail, canals, ownership, buffer_distance_metres, cell_size_meters, epsg, canal_codes, intermediates_gpkg_path):
- start_time = time.time()
log = Logger('Conflict')
log.info('Calculating conflict attributes')
- # Load all the stream network polylines
- db_meta = get_metadata(database)
- reaches = load_geometries(database)
+ # Create union of all reaches and another of the reaches without any canals
+ reach_union = get_geometry_unary_union(flowlines_path)
+ if canal_codes is None:
+ reach_union_no_canals = reach_union
+ else:
+ reach_union_no_canals = get_geometry_unary_union(flowlines_path, attribute_filter='FCode NOT IN ({})'.format(','.join(canal_codes)))
- # Union all the reach geometries into a single geometry
- reach_union = unary_union(reaches.values())
- reach_union_no_canals = reach_union
-
- # If the user specified --canal_codes then we use them
- if 'Canal_Codes' in db_meta:
- reaches_no_canals = load_geometries(database, None, 'ReachCode NOT IN ({})'.format(db_meta['Canal_Codes']))
- reach_union_no_canals = unary_union(reaches_no_canals.values())
-
- # These files are temporary. We will clean them up afterwards
- tmp_folder = os.path.join(os.path.dirname(database), 'tmp_conflict')
- if os.path.isdir(tmp_folder):
- shutil.rmtree(tmp_folder)
- safe_makedirs(tmp_folder)
+ crossin = intersect_geometry_to_layer(intermediates_gpkg_path, 'road_crossings', ogr.wkbMultiPoint, reach_union, roads, epsg)
+ diverts = intersect_geometry_to_layer(intermediates_gpkg_path, 'diversions', ogr.wkbMultiPoint, reach_union_no_canals, canals, epsg)
- crossings = os.path.join(tmp_folder, 'road_crossings.shp')
- intersect_geometry_with_feature_class(reach_union, roads, epsg, crossings, ogr.wkbMultiPoint)
+ road_vb = intersect_to_layer(intermediates_gpkg_path, valley_bottom, roads, 'road_valleybottom', ogr.wkbMultiLineString, epsg)
+ rail_vb = intersect_to_layer(intermediates_gpkg_path, valley_bottom, rail, 'rail_valleybottom', ogr.wkbMultiLineString, epsg)
- roads_vb = os.path.join(tmp_folder, 'road_valleybottom.shp')
- intersect_feature_classes(valley_bottom, roads, epsg, roads_vb, ogr.wkbMultiLineString)
-
- rail_vb = os.path.join(tmp_folder, 'rail_valleybottom.shp')
- intersect_feature_classes(valley_bottom, rail, epsg, rail_vb, ogr.wkbMultiLineString)
-
- diversions = os.path.join(tmp_folder, 'diversions.shp')
- intersect_geometry_with_feature_class(reach_union_no_canals, canals, epsg, diversions, ogr.wkbMultiPoint)
-
- private = os.path.join(tmp_folder, 'private.shp')
- copy_feature_class(ownership, epsg, private, None, "ADMIN_AGEN = 'PVT' OR ADMIN_AGEN = 'UND'")
+ private = os.path.join(intermediates_gpkg_path, 'private_land')
+ copy_feature_class(ownership, private, epsg, "ADMIN_AGEN = 'PVT' OR ADMIN_AGEN = 'UND'")
# Buffer all reaches (being careful to use the units of the Shapefile)
- buffer_distance = _rough_convert_metres_to_shapefile_units(roads, buffer_distance_metres)
+ reaches = load_geometries(flowlines_path, epsg=epsg)
+ with get_shp_or_gpkg(flowlines_path) as lyr:
+ buffer_distance = lyr.rough_convert_metres_to_vector_units(buffer_distance_metres)
+ cell_size = lyr.rough_convert_metres_to_vector_units(cell_size_meters)
+ geopackage_path = lyr.filepath
+
polygons = {reach_id: polyline.buffer(buffer_distance) for reach_id, polyline in reaches.items()}
results = {}
-
- cell_size = _rough_convert_metres_to_shapefile_units(roads, cell_size_meters)
- distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, roads, 'Mean', 'iPC_Road')
- distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, roads_vb, 'Mean', 'iPC_RoadVB')
- distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, crossings, 'Mean', 'iPC_RoadX')
- distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, rail, 'Mean', 'iPC_Rail')
+ tmp_folder = os.path.join(os.path.dirname(intermediates_gpkg_path), 'tmp_conflict')
+ distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, road_vb, 'Mean', 'iPC_RoadVB')
+ distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, crossin, 'Mean', 'iPC_RoadX')
+ distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, diverts, 'Mean', 'iPC_DivPts')
+ distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, private, 'Mean', 'iPC_Privat')
distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, rail_vb, 'Mean', 'iPC_RailVB')
distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, canals, 'Mean', 'iPC_Canal')
- distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, diversions, 'Mean', 'iPC_DivPts')
- distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, private, 'Mean', 'iPC_Privat')
+ distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, roads, 'Mean', 'iPC_Road')
+ distance_from_features(polygons, tmp_folder, reach_union.bounds, cell_size_meters, cell_size, results, rail, 'Mean', 'iPC_Rail')
# Calculate minimum distance to conflict
min_keys = ['iPC_Road', 'iPC_RoadX', 'iPC_RoadVB', 'iPC_Rail', 'iPC_RailVB']
@@ -121,61 +106,80 @@ def calc_conflict_attributes(database, valley_bottom, roads, rail, canals, owner
values['oPC_Dist'] = min([values[x] for x in min_keys if x in values])
# Retrieve the agency responsible for administering the land at the midpoint of each reach
- admin_agency(database, reaches, ownership, epsg, results)
+ admin_agency(geopackage_path, reaches, ownership, results)
- log.info('Conflict attribute calculation complete in {:04}s.'.format(time.time() - start_time))
+ log.info('Conflict attribute calculation complete')
# Cleanup temporary feature classes
- if os.path.isdir(tmp_folder):
- log.info('Cleaning up temporary data')
- shutil.rmtree(tmp_folder)
+ safe_remove_dir(tmp_folder)
return results
-def admin_agency(database, reaches, ownership, epsg, results):
+def intersect_geometry_to_layer(gpkg_path, layer_name, geometry_type, geometry, feature_class, epsg):
+
+ geom = intersect_geometry_with_feature_class(geometry, feature_class, geometry_type, epsg)
+ if geom is None:
+ return None
+
+ with GeopackageLayer(gpkg_path, layer_name=layer_name, write=True) as out_lyr:
+ out_lyr.create_layer(geometry_type, epsg=epsg)
+ feature = ogr.Feature(out_lyr.ogr_layer_def)
+ feature.SetGeometry(GeopackageLayer.shapely2ogr(geom))
+ out_lyr.ogr_layer.CreateFeature(feature)
+
+ return os.path.join(gpkg_path, layer_name)
+
+
+def intersect_to_layer(gpkg_path, feature_class1, feature_class2, layer_name, geometry_type, epsg):
+
+ geom = intersect_feature_classes(feature_class1, feature_class2, geometry_type, epsg)
+ if geom is None:
+ return None
+
+ with GeopackageLayer(gpkg_path, layer_name=layer_name, write=True) as out_lyr:
+ out_lyr.create_layer(geometry_type, epsg=epsg)
+ feature = ogr.Feature(out_lyr.ogr_layer_def)
+ feature.SetGeometry(GeopackageLayer.shapely2ogr(geom))
+ out_lyr.ogr_layer.CreateFeature(feature)
+
+ return os.path.join(gpkg_path, layer_name)
+
+
+def admin_agency(database, reaches, ownership, results):
- start_time = time.time()
log = Logger('Conflict')
log.info('Calculating land ownership administrating agency for {:,} reach(es)'.format(len(reaches)))
- # Load the administration agency types and key by abbreviation
- conn = sqlite3.connect(database)
- curs = conn.cursor()
- curs.execute('SELECT AgencyID, Name, Abbreviation FROM Agencies')
- agencies = {row[2]: {'AgencyID': row[0], 'Name': row[1], 'RawGeometries': [], 'GeometryUnion': None} for row in curs.fetchall()}
+ # Load the agency lookups
+ with SQLiteCon(database) as database:
+ database.curs.execute('SELECT AgencyID, Name, Abbreviation FROM Agencies')
+ agencies = {row['Abbreviation']: {'AgencyID': row['AgencyID'], 'Name': row['Name'], 'RawGeometries': [], 'GeometryUnion': None} for row in database.curs.fetchall()}
- # Load and transform ownership polygons by adminstration agency
- driver = ogr.GetDriverByName("ESRI Shapefile")
- data_source = driver.Open(ownership, 0)
- layer = data_source.GetLayer()
- # data_srs = layer.GetSpatialRef()
- # output_srs, transform = get_transform_from_epsg(data_srs, epsg)
+ with get_shp_or_gpkg(ownership) as ownership_lyr:
- progbar = ProgressBar(len(reaches), 50, "Calc administration agency")
- counter = 0
+ progbar = ProgressBar(len(reaches), 50, "Calc administration agency")
+ counter = 0
- # Loop over stream reaches and assign agency
- for reach_id, polyline in reaches.items():
- counter += 1
- progbar.update(counter)
+ # Loop over stream reaches and assign agency
+ for reach_id, polyline in reaches.items():
+ counter += 1
+ progbar.update(counter)
- if reach_id not in results:
- results[reach_id] = {}
+ if reach_id not in results:
+ results[reach_id] = {}
- mid_point = polyline.interpolate(0.5, normalized=True)
- results[reach_id]['AgencyID'] = None
+ mid_point = polyline.interpolate(0.5, normalized=True)
+ results[reach_id]['AgencyID'] = None
- layer.SetSpatialFilter(VectorBase.shapely2ogr(mid_point))
- layer = data_source.GetLayer()
- for feature in layer:
- agency = feature.GetField('ADMIN_AGEN')
- if agency not in agencies:
- raise Exception('The ownership agency "{}" is not found in the BRAT SQLite database'.format(agency))
- results[reach_id]['AgencyID'] = agencies[agency]['AgencyID']
+ for feature, _counter, _progbar in ownership_lyr.iterate_features(clip_shape=mid_point):
+ agency = feature.GetField('ADMIN_AGEN')
+ if agency not in agencies:
+ raise Exception('The ownership agency "{}" is not found in the BRAT SQLite database'.format(agency))
+ results[reach_id]['AgencyID'] = agencies[agency]['AgencyID']
progbar.finish()
- log.info('Adminstration agency assignment complete in {:04}s'.format(time.time() - start_time))
+ log.info('Adminstration agency assignment complete')
def distance_from_features(polygons, tmp_folder, bounds, cell_size_meters, cell_size_degrees, output, features, statistic, field):
@@ -193,21 +197,18 @@ def distance_from_features(polygons, tmp_folder, bounds, cell_size_meters, cell_
temp_folder {[type]} -- [description]
"""
- start_time = time.time()
log = Logger('Conflict')
- if not features:
+ if features is None:
log.warning('Skipping distance calculation for {} because feature class does not exist.'.format(field))
return
- driver = ogr.GetDriverByName("ESRI Shapefile")
- data_source = driver.Open(features, 0)
- layer = data_source.GetLayer()
- if layer.GetFeatureCount() < 1:
- log.warning('Skipping distance calculation for {} because feature class is empty.'.format(field))
- data_source = None
- return
- data_source = None
+ with get_shp_or_gpkg(features) as lyr:
+ if lyr.ogr_layer.GetFeatureCount() < 1:
+ log.warning('Skipping distance calculation for {} because feature class is empty.'.format(field))
+ return
+
+ safe_makedirs(tmp_folder)
root_path = os.path.join(tmp_folder, os.path.splitext(os.path.basename(features))[0])
features_raster = root_path + '_features.tif'
@@ -221,15 +222,15 @@ def distance_from_features(polygons, tmp_folder, bounds, cell_size_meters, cell_
progbar = ProgressBar(100, 50, "Rasterizing ")
- def poly_progress(progress, msg, data):
- # double dfProgress, char const * pszMessage=None, void * pData=None
+ def poly_progress(progress, _msg, _data):
progbar.update(int(progress * 100))
# Rasterize the features (roads, rail etc) and calculate a raster of Euclidean distance from these features
log.info('Rasterizing {:,} features at {}m cell size for generating {} field using {} distance.'.format(len(polygons), cell_size_meters, field, statistic))
progbar.update(0)
gdal.Rasterize(
- features_raster, features,
+ features_raster, os.path.dirname(features),
+ layers=os.path.basename(features),
xRes=cell_size_degrees, yRes=cell_size_degrees,
burnValues=1, outputType=gdal.GDT_Int16,
creationOptions=['COMPRESS=LZW'],
@@ -263,39 +264,4 @@ def poly_progress(progress, msg, data):
rasterio.shutil.delete(features_raster)
rasterio.shutil.delete(distance_raster)
- log.info('{} distance calculation complete in {:04}s.'.format(field, time.time() - start_time))
-
-
-def main():
-
- parser = argparse.ArgumentParser()
- parser.add_argument('database', help='BRAT SQLite database', type=str)
- parser.add_argument('valley_bottom', help='Valley bottom shapefile', type=str)
- parser.add_argument('roads', help='road network shapefile', type=str)
- parser.add_argument('rail', help='rail network shapefile', type=str)
- parser.add_argument('canals', help='Canals network shapefile', type=str)
- parser.add_argument('ownership', help='Land ownership shapefile', type=str)
- parser.add_argument('--buffer', help='(optional) distance to buffer roads, canalas and rail (metres)', type=float, default=30)
- parser.add_argument('--cell_size', help='(optional) cell size (metres) to rasterize features for Euclidean distance', type=float, default=5)
- parser.add_argument('--epsg', help='(optional) EPSG of the reach geometries', type=str, default=4326)
- parser.add_argument('--verbose', help='(optional) verbose logging mode', action='store_true', default=False)
- args = dotenv.parse_args_env(parser)
-
- # Initiate the log file
- log = Logger("Conflict Attributes")
- logfile = os.path.join(os.path.dirname(args.database), "conflict_attributes.log")
- log.setup(logPath=logfile, verbose=args.verbose)
-
- try:
- conflict_attributes(args.database, args.valley_bottom, args.roads, args.rail, args.canals, args.ownership, args.buffer, args.cell_size, args.epsg)
-
- except Exception as e:
- log.error(e)
- traceback.print_exc(file=sys.stdout)
- sys.exit(1)
-
- sys.exit(0)
-
-
-if __name__ == '__main__':
- main()
+ log.info('{} distance calculation complete'.format(field))
diff --git a/packages/brat/sqlbrat/utils/conservation.py b/packages/brat/sqlbrat/utils/conservation.py
index 0e68b245..76f338fa 100644
--- a/packages/brat/sqlbrat/utils/conservation.py
+++ b/packages/brat/sqlbrat/utils/conservation.py
@@ -1,28 +1,17 @@
-# Name: Conservation Restoration
-#
-# Purpose: Adds the conservation and restoration model to the BRAT capacity output
-#
-# Author: Philip Bailey, adapted from pyBRAT3 script by Sara Bangen
-#
-# Created: 25 Oct 2019
-# -------------------------------------------------------------------------------
+""" dds the conservation and restoration model to the BRAT capacity output
+
+ Philip Bailey, adapted from pyBRAT3 script by Sara Bangen
+ 25 Oct 2019
+"""
import os
import sys
import traceback
import argparse
-import sqlite3
-from osgeo import ogr
from rscommons import Logger, dotenv
-from rscommons.database import load_attributes
-from rscommons.database import write_attributes
-import csv
-
+from rscommons.database import load_attributes, write_db_attributes, SQLiteCon
-input_fields = ['oVC_HPE', 'oVC_EX', 'oCC_HPE', 'oCC_EX', 'iGeo_Slope', 'mCC_HisDep', 'iPC_VLowLU', 'iPC_HighLU', 'iPC_LU', 'oPC_Dist', 'iHyd_SPLow', 'iHyd_SP2', 'iPC_Canal']
-output_fields = ['OpportunityID', 'LimitationID', 'RiskID']
-
-def conservation(database):
+def conservation(database: str):
"""Calculate conservation fields for an existing BRAT database
Assumes that conflict attributes and the dam capacity model
have already been run for the database
@@ -32,20 +21,31 @@ def conservation(database):
"""
results = calculate_conservation(database)
- write_attributes(database, results, output_fields)
+ write_db_attributes(database, results, ['OpportunityID', 'LimitationID', 'RiskID'])
+
+def calculate_conservation(database: str):
+ """ Perform conservation calculations
-def calculate_conservation(database):
+ Args:
+ database (str): path to BRAT geopackage
+
+ Returns:
+ dict: dictionary of conservation values keyed by Reach ID
+ """
log = Logger('Conservation')
# Verify all the input fields are present and load their values
- reaches = load_attributes(database, input_fields, '(oCC_EX IS NOT NULL) AND (mCC_HisDep IS NOT NULL)')
+ reaches = load_attributes(database,
+ ['oVC_HPE', 'oVC_EX', 'oCC_HPE', 'oCC_EX', 'iGeo_Slope', 'mCC_HisDep', 'iPC_VLowLU', 'iPC_HighLU', 'iPC_LU', 'oPC_Dist', 'iHyd_SPLow', 'iHyd_SP2', 'iPC_Canal'],
+ '(oCC_EX IS NOT NULL) AND (mCC_HisDep IS NOT NULL)')
+
log.info('Calculating conservation for {:,} reaches.'.format(len(reaches)))
- risks = load_lookup(database, 'SELECT Name, RiskID FROM DamRisks')
- limitations = load_lookup(database, 'SELECT Name, LimitationID FROM DamLimitations')
- opportunties = load_lookup(database, 'SELECT Name, OpportunityID FROM DamOpportunities')
+ risks = load_lookup(database, 'SELECT Name, RiskID AS ID FROM DamRisks')
+ limitations = load_lookup(database, 'SELECT Name, LimitationID AS ID FROM DamLimitations')
+ opportunties = load_lookup(database, 'SELECT Name, OpportunityID AS ID FROM DamOpportunities')
for values in reaches.values():
@@ -62,7 +62,22 @@ def calculate_conservation(database):
return reaches
-def calc_risks(risks, occ_ex, opc_dist, ipc_lu, ipc_canal):
+def calc_risks(risks: dict, occ_ex: float, opc_dist: float, ipc_lu: float, ipc_canal: float):
+ """ Calculate risk values
+
+ Args:
+ risks (dict): risk type lookup
+ occ_ex ([type]): [description]
+ opc_dist ([type]): [description]
+ ipc_lu ([type]): [description]
+ ipc_canal ([type]): [description]
+
+ Raises:
+ Exception: [description]
+
+ Returns:
+ [type]: [description]
+ """
if occ_ex <= 0:
# if capacity is none risk is negligible
@@ -96,7 +111,25 @@ def calc_risks(risks, occ_ex, opc_dist, ipc_lu, ipc_canal):
raise Exception('Unhandled undesireable dam risk')
-def calc_limited(limitations, ovc_hpe, ovc_ex, occ_ex, slope, landuse, splow, sp2):
+def calc_limited(limitations: dict, ovc_hpe: float, ovc_ex: float, occ_ex: float, slope: float, landuse: float, splow: float, sp2: float) -> int:
+ """ Calculate limitations to conservation
+
+ Args:
+ limitations ([type]): [description]
+ ovc_hpe ([type]): [description]
+ ovc_ex ([type]): [description]
+ occ_ex ([type]): [description]
+ slope ([type]): [description]
+ landuse ([type]): [description]
+ splow ([type]): [description]
+ sp2 ([type]): [description]
+
+ Raises:
+ Exception: [description]
+
+ Returns:
+ [type]: [description]
+ """
# First deal with vegetation limitations
# Find places historically veg limited first ('oVC_HPE' None)
@@ -123,25 +156,43 @@ def calc_limited(limitations, ovc_hpe, ovc_ex, occ_ex, slope, landuse, splow, sp
raise Exception('Unhandled dam limitation')
-def calc_opportunities(opportunities, risks, RiskID, occ_hpe, occ_ex, mCC_HisDep, iPC_VLowLU, iPC_HighLU):
+def calc_opportunities(opportunities: dict, risks: dict, risk_id: float, occ_hpe: float, occ_ex: float, mcc_hisdep: float, ipc_vlowlu: float, ipc_highlu: float) -> int:
+ """ Calculate conservation opportunities
+
+ Args:
+ opportunities ([type]): [description]
+ risks ([type]): [description]
+ risk_id ([type]): [description]
+ occ_hpe ([type]): [description]
+ occ_ex ([type]): [description]
+ mcc_hisdep ([type]): [description]
+ ipc_vlowlu ([type]): [description]
+ ipc_highlu ([type]): [description]
+
+ Raises:
+ Exception: [description]
+
+ Returns:
+ [type]: [description]
+ """
- if RiskID == risks['Negligible Risk'] or RiskID == risks['Minor Risk']:
+ if risk_id == risks['Negligible Risk'] or risk_id == risks['Minor Risk']:
# 'oCC_EX' Frequent or Pervasive
# 'mCC_HisDep' <= 3
- if occ_ex >= 5 and mCC_HisDep <= 3:
+ if occ_ex >= 5 and mcc_hisdep <= 3:
return opportunities['Easiest - Low-Hanging Fruit']
# 'oCC_EX' Occasional, Frequent, or Pervasive
# 'oCC_HPE' Frequent or Pervasive
# 'mCC_HisDep' <= 3
- # 'iPC_VLowLU'(i.e., Natural) > 75
- # 'iPC_HighLU' (i.e., Developed) < 10
- elif occ_ex > 1 and mCC_HisDep <= 3 and occ_hpe >= 5 and iPC_VLowLU > 75 and iPC_HighLU < 10:
+ # 'ipc_vlowlu'(i.e., Natural) > 75
+ # 'ipc_highlu' (i.e., Developed) < 10
+ elif occ_ex > 1 and mcc_hisdep <= 3 and occ_hpe >= 5 and ipc_vlowlu > 75 and ipc_highlu < 10:
return opportunities['Straight Forward - Quick Return']
# 'oCC_EX' Rare or Occasional
# 'oCC_HPE' Frequent or Pervasive
# 'iPC_VLowLU'(i.e., Natural) > 75
# 'iPC_HighLU' (i.e., Developed) < 10
- elif occ_ex > 0 and occ_ex < 5 and occ_hpe >= 5 and iPC_VLowLU > 75 and iPC_HighLU < 10:
+ elif occ_ex > 0 and occ_ex < 5 and occ_hpe >= 5 and ipc_vlowlu > 75 and ipc_highlu < 10:
return opportunities['Strategic - Long-Term Investment']
else:
return opportunities['NA']
@@ -151,15 +202,25 @@ def calc_opportunities(opportunities, risks, RiskID, occ_hpe, occ_ex, mCC_HisDep
raise Exception('Unhandled conservation opportunity')
-def load_lookup(database, sql):
+def load_lookup(gpkg_path: str, sql: str) -> dict:
+ """ Load one of the conservation tables as a dictionary
+
+ Args:
+ gpkg_path (str): [description]
+ sql (str): [description]
- conn = sqlite3.connect(database)
- curs = conn.cursor()
- curs.execute(sql)
- return {row[0]: row[1] for row in curs.fetchall()}
+ Returns:
+ dict: [description]
+ """
+
+ with SQLiteCon(gpkg_path) as database:
+ database.curs.execute(sql)
+ return {row['Name']: row['ID'] for row in database.curs.fetchall()}
def main():
+ """ Conservation
+ """
parser = argparse.ArgumentParser()
parser.add_argument('database', help='BRAT SQLite database', type=str)
parser.add_argument('--verbose', help='(optional) verbose logging mode', action='store_true', default=False)
diff --git a/packages/brat/sqlbrat/utils/hydrology.py b/packages/brat/sqlbrat/utils/hydrology.py
index bdeb3068..38b5b5c1 100644
--- a/packages/brat/sqlbrat/utils/hydrology.py
+++ b/packages/brat/sqlbrat/utils/hydrology.py
@@ -1,26 +1,21 @@
-# Name: Hydrology
-#
-# Calculate the low flow and
-# Author: Philip Bailey
-#
-# Date: 30 May 2019
-# -------------------------------------------------------------------------------
+""" Calculate the low and high flow hydrology
+
+ Philip Bailey
+ 30 May 2019
+"""
import argparse
import os
import sys
import traceback
-import sqlite3
-import math
from rscommons import Logger, dotenv
-from rscommons.database import write_attributes
-from rscommons.database import load_attributes
+from rscommons.database import write_db_attributes, SQLiteCon, load_attributes
# This is the reach drainage area variable in the regional curve equations
-drainage_area_param = 'DRNAREA'
+DRNAREA_PARAM = 'DRNAREA'
-def hydrology(database, prefix, huc):
+def hydrology(gpkg_path: str, prefix: str, huc: str):
"""Calculate low flow, peak flow discharges for each reach
in a BRAT database
@@ -41,31 +36,29 @@ def hydrology(database, prefix, huc):
log.info('Discharge field: {}'.format(hydrology_field))
log.info('Stream power field: {}'.format(streampower_field))
- conn = sqlite3.connect(database)
- curs = conn.cursor()
-
# Load the hydrology equation for the HUC
- curs.execute('SELECT Q{} FROM Watersheds WHERE WatershedID = ?'.format(prefix), [huc])
- equation = curs.fetchone()[0]
- equation = equation.replace('^', '**')
+ with SQLiteCon(gpkg_path) as database:
+ database.curs.execute('SELECT Q{} As Q FROM Watersheds WHERE WatershedID = ?'.format(prefix), [huc])
+ equation = database.curs.fetchone()['Q']
+ equation = equation.replace('^', '**')
- if not equation:
- raise Exception('Missing {} hydrology formula for HUC {}'.format(prefix, huc))
+ if not equation:
+ raise Exception('Missing {} hydrology formula for HUC {}'.format(prefix, huc))
- log.info('Regional curve: {}'.format(equation))
+ log.info('Regional curve: {}'.format(equation))
- # Load the hydrology CONVERTED parameters for the HUC (the values will be in the same units as used in the regional equations)
- curs.execute('SELECT Parameter, ConvertedValue FROM vwHydroParams WHERE WatershedID = ?', [huc])
- params = {row[0]: row[1] for row in curs.fetchall()}
- [log.info('Param: {} = {:.2f}'.format(key, value)) for key, value in params.items()]
+ # Load the hydrology CONVERTED parameters for the HUC (the values will be in the same units as used in the regional equations)
+ database.curs.execute('SELECT Parameter, ConvertedValue FROM vwHydroParams WHERE WatershedID = ?', [huc])
+ params = {row['Parameter']: row['ConvertedValue'] for row in database.curs.fetchall()}
+ [log.info('Param: {} = {:.2f}'.format(key, value)) for key, value in params.items()]
- # Load the conversion factor for converting reach attribute drainage areas to the values used in the regional equations
- curs.execute('SELECT Conversion FROM HydroParams WHERE Name = ?', [drainage_area_param])
- drainage_conversion_factor = curs.fetchone()[0]
- log.info('Reach drainage area attribute conversion factor = {}'.format(drainage_conversion_factor))
+ # Load the conversion factor for converting reach attribute drainage areas to the values used in the regional equations
+ database.curs.execute('SELECT Conversion FROM HydroParams WHERE Name = ?', [DRNAREA_PARAM])
+ drainage_conversion_factor = database.curs.fetchone()['Conversion']
+ log.info('Reach drainage area attribute conversion factor = {}'.format(drainage_conversion_factor))
# Load the discharges for each reach
- reaches = load_attributes(database, ['iGeo_DA'], '(iGeo_DA IS NOT NULL)')
+ reaches = load_attributes(gpkg_path, ['iGeo_DA'], '(iGeo_DA IS NOT NULL)')
log.info('{:,} reaches loaded with valid drainage area values'.format(len(reaches)))
# Calculate the discharges for each reach
@@ -73,17 +66,33 @@ def hydrology(database, prefix, huc):
log.info('{:,} reach hydrology values calculated.'.format(len(results)))
# Write the discharges to the database
- write_attributes(database, results, [hydrology_field])
+ write_db_attributes(gpkg_path, results, [hydrology_field])
# Convert discharges to stream power
- curs.execute('UPDATE Reaches SET {0} = ROUND((1000 * 9.80665) * iGeo_Slope * ({1} * 0.028316846592), 2)'
- ' WHERE ({1} IS NOT NULL) AND (iGeo_Slope IS NOT NULL)'.format(streampower_field, hydrology_field))
- conn.commit()
+ with SQLiteCon(gpkg_path) as database:
+ database.curs.execute('UPDATE ReachAttributes SET {0} = ROUND((1000 * 9.80665) * iGeo_Slope * ({1} * 0.028316846592), 2)'
+ ' WHERE ({1} IS NOT NULL) AND (iGeo_Slope IS NOT NULL)'.format(streampower_field, hydrology_field))
+ database.conn.commit()
log.info('Hydrology calculation complete')
-def calculate_hydrology(reaches, equation, params, drainage_conversion_factor, field):
+def calculate_hydrology(reaches: dict, equation: str, params: dict, drainage_conversion_factor: float, field: str) -> dict:
+ """ Perform the actual hydrology calculation
+
+ Args:
+ reaches ([type]): [description]
+ equation ([type]): [description]
+ params ([type]): [description]
+ drainage_conversion_factor ([type]): [description]
+ field ([type]): [description]
+
+ Raises:
+ ex: [description]
+
+ Returns:
+ [type]: [description]
+ """
results = {}
@@ -94,7 +103,7 @@ def calculate_hydrology(reaches, equation, params, drainage_conversion_factor, f
for reachid, values in reaches.items():
# Use the drainage area for the current reach and convert to the units used in the equation
- params[drainage_area_param] = values['iGeo_DA'] * drainage_conversion_factor
+ params[DRNAREA_PARAM] = values['iGeo_DA'] * drainage_conversion_factor
# Execute the equation but restrict the use of all built-in functions
eval_result = eval(equation, {'__builtins__': None}, params)
@@ -109,6 +118,8 @@ def calculate_hydrology(reaches, equation, params, drainage_conversion_factor, f
def main():
+ """ Main hydrology routine
+ """
parser = argparse.ArgumentParser()
parser.add_argument('database', help='BRAT SQLite database', type=str)
@@ -125,8 +136,8 @@ def main():
try:
hydrology(args.database, args.prefix, args.huc)
- except Exception as e:
- logg.error(e)
+ except Exception as ex:
+ logg.error(ex)
traceback.print_exc(file=sys.stdout)
sys.exit(1)
diff --git a/packages/brat/sqlbrat/utils/land_use.py b/packages/brat/sqlbrat/utils/land_use.py
index 102f8d67..76d0d3aa 100644
--- a/packages/brat/sqlbrat/utils/land_use.py
+++ b/packages/brat/sqlbrat/utils/land_use.py
@@ -1,20 +1,15 @@
-# Name: Land Use
-#
-# Purpose: Calculate the land use intensity required by the conflict attributes
-#
-# Author: Philip Bailey
-#
-# Date: 17 Oct 2019
-# -------------------------------------------------------------------------------
-import os
+""" Calculate the land use intensity required by the conflict attributes
+
+ Philip Bailey
+ 17 Oct 2019
+"""
import argparse
import sqlite3
from rscommons import Logger, dotenv
-from rscommons.database import write_attributes
-from rscommons.database import load_attributes
+from rscommons.database import write_db_attributes
-def land_use(database, buffer):
+def land_use(database: str, buffer: float):
"""Calculate land use intensity for each reach in BRAT database
Arguments:
@@ -23,10 +18,19 @@ def land_use(database, buffer):
"""
reaches = calculate_land_use(database, buffer)
- write_attributes(database, reaches, ['iPC_LU', 'iPC_VLowLU', 'iPC_LowLU', 'iPC_ModLU', 'iPC_HighLU'])
+ write_db_attributes(database, reaches, ['iPC_LU', 'iPC_VLowLU', 'iPC_LowLU', 'iPC_ModLU', 'iPC_HighLU'])
+
+def calculate_land_use(database: str, buffer: float):
+ """ Perform actual land use intensity calculation
-def calculate_land_use(database, buffer):
+ Args:
+ database (str): [description]
+ buffer (float): [description]
+
+ Returns:
+ [type]: [description]
+ """
log = Logger('Land Use')
log.info('Calculating land use using a buffer distance of {:,}m'.format(buffer))
@@ -83,6 +87,8 @@ def calculate_land_use(database, buffer):
def main():
+ """ Land use intensity
+ """
parser = argparse.ArgumentParser()
parser.add_argument('database', help='BRAT SQLite database', type=argparse.FileType('r'))
parser.add_argument('--buffer', help='Distance to buffer flow line fearures for sampling vegetation', default=100, type=int)
diff --git a/packages/brat/sqlbrat/utils/reach_geometry.py b/packages/brat/sqlbrat/utils/reach_geometry.py
index e7533960..dce9dbd0 100644
--- a/packages/brat/sqlbrat/utils/reach_geometry.py
+++ b/packages/brat/sqlbrat/utils/reach_geometry.py
@@ -1,172 +1,120 @@
-# Name: Reach Geometry
-#
-# Purpose: Calculates several properties of each network polyline:
-# Slope, length, min and max elevation.
-#
-# Author: Philip Bailey
-#
-# Date: 23 May 2019
-# -------------------------------------------------------------------------------
-import argparse
+""" Calculates several properties of each network polyline:
+ Slope, length, min and max elevation.
+
+ Philip Bailey
+ 23 May 2019
+"""
import os
-import sys
-import traceback
-from osgeo import gdal, ogr
-import json
-from osgeo import osr
-from shapely.geometry import Point, mapping
+from osgeo import gdal
import rasterio
-from rasterio.mask import mask
-import numpy as np
-from rscommons import Logger, ProgressBar, dotenv, VectorBase
-from rscommons.shapefile import _rough_convert_metres_to_raster_units
-from rscommons.shapefile import get_utm_zone_epsg
-from rscommons.shapefile import get_transform_from_epsg
-from rscommons.database import load_geometries, write_attributes, get_db_srs
-
-reachfld = 'ReachID'
-slopefld = 'iGeo_Slope'
-minElfld = 'iGeo_ElMin'
-maxElfld = 'iGeo_ElMax'
-lenfld = 'iGeo_Len'
-
-
-def reach_geometry(database, dem_path, buffer_distance, epsg):
- """Calculate reach geometry attributes for each reach in a
- BRAT SQLite database
-
- Arguments:
- database {str} -- Path to BRAT SQLite database
- dem_path {str} -- Path to DEM Raster
- buffer_distance {float} -- Distance (meters) to buffer reaches when extracting form the DEM
- """
-
- log = Logger('Reach Geometry')
- log.info('Database: {}'.format(database))
- log.info('DEM: {}'.format(dem_path))
- log.info('Buffer distance: {}m'.format(buffer_distance))
-
- dataset = gdal.Open(dem_path)
- gt = dataset.GetGeoTransform()
- db_srs = get_db_srs(database)
- gdalSRS_wkt = dataset.GetProjection()
- rasterSRS = osr.SpatialReference(wkt=gdalSRS_wkt)
- # https://github.com/OSGeo/gdal/issues/1546
- rasterSRS.SetAxisMappingStrategy(db_srs.GetAxisMappingStrategy())
-
- geometries = load_geometries(database, rasterSRS)
- log.info('{:,} geometries loaded'.format(len(geometries)))
-
- results = calculate_reach_geometry(geometries, dem_path, rasterSRS, buffer_distance)
- log.info('{:,} reach attributes calculated.'.format(len(results)))
+from shapely.geometry import Point, box
+from rscommons import Logger, VectorBase
+from rscommons.raster_buffer_stats import raster_buffer_stats2
+from rscommons.classes.vector_classes import get_shp_or_gpkg
+from rscommons.database import write_db_attributes
+from rscommons.classes.vector_base import get_utm_zone_epsg
- if len(geometries) != len(results):
- log.warning('{:,} features skipped because one or both ends of polyline not on DEM raster'.format(
- len(geometries) - len(results)))
+Path = str
- write_attributes(database, results, [slopefld, minElfld, maxElfld, lenfld])
- log.info('Process completed successfully.')
+def reach_geometry(flow_lines: Path, dem_path: Path, buffer_distance: float):
+ """ Calculate reach geometry BRAT attributes
-def calculate_reach_geometry(polylines, dem_path, polyline_srs, buffer_distance):
+ Args:
+ flow_lines (Path): [description]
+ dem_path (Path): [description]
+ buffer_distance (float): [description]
"""
- Calculate reach length, slope, drainage area, min and max elevations
- :param polylines: Dictionary of geometries keyed by ReachID
- :param dem_path: Absolute path to a DEM raster.
- :param polyline_srs: What SRS does the polyline use.
- :param buffer_distance: Distance to buffer reach end points to sample raster
- :return: None
- """
-
- log = Logger("Calculate Reach Geometries")
- buff_degrees = _rough_convert_metres_to_raster_units(dem_path, buffer_distance)
+ log = Logger('Reach Geometry')
+ # Determine the best projected coordinate system based on the raster
dataset = gdal.Open(dem_path)
- gt = dataset.GetGeoTransform()
- gdalSRS = dataset.GetProjection()
- rasterSRS = osr.SpatialReference(wkt=gdalSRS)
- # https://github.com/OSGeo/gdal/issues/1546
- rasterSRS.SetAxisMappingStrategy(polyline_srs.GetAxisMappingStrategy())
-
- xcentre = gt[0] + (dataset.RasterXSize * gt[1]) / 2.0
+ geo_transform = dataset.GetGeoTransform()
+ xcentre = geo_transform[0] + (dataset.RasterXSize * geo_transform[1]) / 2.0
epsg = get_utm_zone_epsg(xcentre)
- projectedSRS, transform = get_transform_from_epsg(rasterSRS, epsg)
-
- results = {}
-
- log.info('Starting')
- with rasterio.open(dem_path) as demsrc:
-
- progbar = ProgressBar(len(polylines), 50, "Calculating reach geometries")
- counter = 0
-
- for reachid, polyline in polylines.items():
- counter += 1
- progbar.update(counter)
-
- ogr_polyline = VectorBase.shapely2ogr(polyline, transform)
- length = ogr_polyline.Length()
-
- try:
- elev1 = mean_raster_value(demsrc, polyline.coords[0], buff_degrees)
- elev2 = mean_raster_value(demsrc, polyline.coords[-1], buff_degrees)
- if elev1 and elev2:
- slope = abs(elev1 - elev2) / length if elev1 != elev2 else 0.0
- results[reachid] = {
- slopefld: slope,
- maxElfld: max(elev2, elev1),
- minElfld: min(elev2, elev1),
- lenfld: length
- }
- except Exception as ex:
- log.warning('Error obtaining raster values for ReachID {}'.format(reachid))
- log.warning(ex)
-
- progbar.finish()
-
- log.info('Complete')
- return results
-
-
-def mean_raster_value(raster, point, distance):
- """
- Sample a raster with a circular buffer from a point
- :param raster: Rasterio raster object
- :param point: Shapely point at centre of location to sample
- :param distance: Distance to buffer point
- :return: Average raster value within the circular buffer
- """
-
- polygon = Point(point).buffer(distance)
- raw_raster = mask(raster, [polygon], crop=True)[0]
- mask_raster = np.ma.masked_values(raw_raster, raster.nodata)
- return mask_raster.mean() if not mask_raster.mask.all() else None
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('network', help='Output network ShapeFile path', type=argparse.FileType('r'))
- parser.add_argument('dem', help='DEM raster', type=argparse.FileType('r'))
- parser.add_argument('--buffer', help='Buffer distance in metres for sampling rasters', default=100)
- parser.add_argument('--verbose', help='(optional) verbose logging mode', action='store_true', default=False)
- args = dotenv.parse_args_env(parser)
-
- # Initiate the log file
- logg = Logger('Reach Geometry')
- logfile = os.path.join(os.path.dirname(args.network.name), 'reach_geometry.log')
- logg.setup(logPath=logfile, verbose=args.verbose)
-
- try:
- reach_geometry(args.network.name, args.dem.name, args.buffer, 4326)
-
- except Exception as e:
- logg.error(e)
- traceback.print_exc(file=sys.stdout)
- sys.exit(1)
-
- sys.exit(0)
-
-if __name__ == '__main__':
- main()
+ with rasterio.open(dem_path) as raster:
+ bounds = raster.bounds
+ extent = box(*bounds)
+
+ # Buffer the start and end point of each reach
+ line_start_polygons = {}
+ line_end_polygons = {}
+ reaches = {}
+ with get_shp_or_gpkg(flow_lines) as lyr:
+
+ # Transformations from original flow line features to metric EPSG, and to raster spatial reference
+ _srs, transform_to_metres = VectorBase.get_transform_from_epsg(lyr.spatial_ref, epsg)
+ _srs, transform_to_raster = VectorBase.get_transform_from_raster(lyr.spatial_ref, dem_path)
+
+ # Buffer distance converted to the units of the raster spatial reference
+ vector_buffer = VectorBase.rough_convert_metres_to_raster_units(dem_path, buffer_distance)
+
+ for feature, _counter, _progbar in lyr.iterate_features("Processing reaches"):
+ reach_id = feature.GetFID()
+ geom = feature.GetGeometryRef()
+ geom_clone = geom.Clone()
+
+ # Calculate the reach length in the output spatial reference
+ if transform_to_metres is not None:
+ geom.Transform(transform_to_metres)
+
+ reaches[reach_id] = {'iGeo_Len': geom.Length(), 'iGeo_Slope': 0.0, 'iGeo_ElMin': None, 'IGeo_ElMax': None}
+
+ if transform_to_raster is not None:
+ geom_clone.Transform(transform_to_raster)
+
+ # Buffer the ends of the reach polyline in the raster spatial reference
+ pt_start = Point(VectorBase.ogr2shapely(geom_clone, transform_to_raster).coords[0])
+ pt_end = Point(VectorBase.ogr2shapely(geom_clone, transform_to_raster).coords[-1])
+ if extent.contains(pt_start) and extent.contains(pt_end):
+ line_start_polygons[reach_id] = pt_start.buffer(vector_buffer)
+ line_end_polygons[reach_id] = pt_end.buffer(vector_buffer)
+
+ # Retrieve the mean elevation of start and end of point
+ line_start_elevations = raster_buffer_stats2(line_start_polygons, dem_path)
+ line_end_elevations = raster_buffer_stats2(line_end_polygons, dem_path)
+
+ for reach_id, data in reaches.items():
+ if reach_id in line_start_elevations and reach_id in line_end_elevations:
+ sta_data = line_start_elevations[reach_id]
+ end_data = line_end_elevations[reach_id]
+
+ data['iGeo_ElMax'] = _max_ignore_none(sta_data['Maximum'], end_data['Maximum'])
+ data['iGeo_ElMin'] = _min_ignore_none(sta_data['Minimum'], end_data['Minimum'])
+
+ if sta_data['Mean'] is not None and end_data['Mean'] is not None and sta_data['Mean'] != end_data['Mean']:
+ data['iGeo_Slope'] = abs(sta_data['Mean'] - end_data['Mean']) / data['iGeo_Len']
+ else:
+ log.warning('{:,} features skipped because one or both ends of polyline not on DEM raster'.format(reach_id))
+
+ write_db_attributes(os.path.dirname(flow_lines), reaches, ['iGeo_Len', 'iGeo_ElMax', 'iGeo_ElMin', 'iGeo_Slope'])
+
+
+def _max_ignore_none(val1: float, val2: float) -> float:
+
+ if val1 is not None:
+ if val2 is not None:
+ return max(val1, val2)
+ else:
+ return val1
+ else:
+ if val2 is not None:
+ return val2
+ else:
+ return None
+
+
+def _min_ignore_none(val1: float, val2: float) -> float:
+
+ if val1 is not None:
+ if val2 is not None:
+ return min(val1, val2)
+ else:
+ return val1
+ else:
+ if val2 is not None:
+ return val2
+ else:
+ return None
diff --git a/packages/brat/sqlbrat/utils/vegetation_fis.py b/packages/brat/sqlbrat/utils/vegetation_fis.py
index 259c3dde..c422dec6 100644
--- a/packages/brat/sqlbrat/utils/vegetation_fis.py
+++ b/packages/brat/sqlbrat/utils/vegetation_fis.py
@@ -1,13 +1,11 @@
-# Name: Vegetation FIS
-#
-# Purpose: Runs the vegetation FIS for the BRAT input table.
-# Adapted from Jordan Gilbert's original BRAT script.
-#
-# Author: Jordan Gilbert
-# Philip Bailey
-#
-# Created: 30 May 2019
-# -------------------------------------------------------------------------------
+""" Runs the vegetation FIS for the BRAT input table.
+ Adapted from Jordan Gilbert's original BRAT script.
+
+ Jordan Gilbert
+ Philip Bailey
+
+ 30 May 2019
+"""
import os
import sys
import argparse
@@ -17,10 +15,10 @@
from skfuzzy import control as ctrl
from rscommons import Logger, ProgressBar, dotenv
from rscommons.database import load_attributes
-from rscommons.database import write_attributes
+from rscommons.database import write_db_attributes
-def vegetation_fis(database, label, veg_type):
+def vegetation_fis(database: str, label: str, veg_type: str):
"""Calculate vegetation suitability for each reach in a BRAT
SQLite database
@@ -39,12 +37,12 @@ def vegetation_fis(database, label, veg_type):
feature_values = load_attributes(database, [streamside_field, riparian_field], '({} IS NOT NULL) AND ({} IS NOT NULL)'.format(streamside_field, riparian_field))
calculate_vegegtation_fis(feature_values, streamside_field, riparian_field, out_field)
- write_attributes(database, feature_values, [out_field])
+ write_db_attributes(database, feature_values, [out_field])
log.info('Process completed successfully.')
-def calculate_vegegtation_fis(feature_values, streamside_field, riparian_field, out_field):
+def calculate_vegegtation_fis(feature_values: dict, streamside_field: str, riparian_field: str, out_field: str):
"""
Beaver dam capacity vegetation FIS
:param feature_values: Dictionary of features keyed by ReachID and values are dictionaries of attributes
@@ -61,8 +59,8 @@ def calculate_vegegtation_fis(feature_values, streamside_field, riparian_field,
streamside_array = np.zeros(feature_count, np.float64)
counter = 0
- for reachID, values in feature_values.items():
- reachid_array[counter] = reachID
+ for reach_id, values in feature_values.items():
+ reachid_array[counter] = reach_id
riparian_array[counter] = values[riparian_field]
streamside_array[counter] = values[streamside_field]
counter += 1
@@ -131,17 +129,17 @@ def calculate_vegegtation_fis(feature_values, streamside_field, riparian_field,
# this will be used to re-classify output values that fall in this group
# important: will need to update the array (x) and MF values (mfx) if the
# density 'none' values are changed in the model
- x = np.arange(0, 45, 0.01)
- mfx = fuzz.trimf(x, [0, 0, 0.1])
- defuzz_centroid = round(fuzz.defuzz(x, mfx, 'centroid'), 6)
+ x_vals = np.arange(0, 45, 0.01)
+ mfx = fuzz.trimf(x_vals, [0, 0, 0.1])
+ defuzz_centroid = round(fuzz.defuzz(x_vals, mfx, 'centroid'), 6)
- mfx_pervasive = fuzz.trapmf(x, [12, 25, 45, 45])
- defuzz_pervasive = round(fuzz.defuzz(x, mfx_pervasive, 'centroid'))
+ mfx_pervasive = fuzz.trapmf(x_vals, [12, 25, 45, 45])
+ defuzz_pervasive = round(fuzz.defuzz(x_vals, mfx_pervasive, 'centroid'))
# run fuzzy inference system on inputs and defuzzify output
progbar = ProgressBar(len(reachid_array), 50, "Vegetation FIS")
counter = 0
- for i, reachID in enumerate(reachid_array):
+ for i, reach_id in enumerate(reachid_array):
veg_fis.input['input1'] = riparian_array[i]
veg_fis.input['input2'] = streamside_array[i]
veg_fis.compute()
@@ -154,7 +152,7 @@ def calculate_vegegtation_fis(feature_values, streamside_field, riparian_field,
if round(result) >= defuzz_pervasive:
result = 40.0
- feature_values[reachID][out_field] = round(result, 2)
+ feature_values[reach_id][out_field] = round(result, 2)
counter += 1
progbar.update(counter)
@@ -164,6 +162,8 @@ def calculate_vegegtation_fis(feature_values, streamside_field, riparian_field,
def main():
+ """ Main Vegetation FIS
+ """
parser = argparse.ArgumentParser()
parser.add_argument('database', help='BRAT SQLite database', type=argparse.FileType('r'))
parser.add_argument('--verbose', help='(optional) verbose logging mode', action='store_true', default=False)
@@ -178,8 +178,8 @@ def main():
# vegetation_fis(args.network.name, 'historic', 'HPE')
vegetation_fis(args.database.name, 'existing', 'EX')
- except Exception as e:
- logg.error(e)
+ except Exception as ex:
+ logg.error(ex)
traceback.print_exc(file=sys.stdout)
sys.exit(1)
diff --git a/packages/brat/sqlbrat/utils/vegetation_suitability.py b/packages/brat/sqlbrat/utils/vegetation_suitability.py
index 9b61fe01..0d9e2ea8 100644
--- a/packages/brat/sqlbrat/utils/vegetation_suitability.py
+++ b/packages/brat/sqlbrat/utils/vegetation_suitability.py
@@ -1,86 +1,93 @@
-# Name: Vegation Suitability
-#
-# Purpose: Calculates the average vegetation suitability for each reach. It takes
-# the raw areas of each vegetation type within a buffer and converts
-# these values into suitabilities using the lookup in the BRAT database.
-# The average suitability is then written to the appropriate column in
-# the reaches table.
-#
-# Author: Philip Bailey
-#
-# Date: 17 Jan 2019
-# -------------------------------------------------------------------------------
+""" Calculates the average vegetation suitability for each reach. It takes
+ the raw areas of each vegetation type within a buffer and converts
+ these values into suitabilities using the lookup in the BRAT database.
+ The average suitability is then written to the appropriate column in
+ the reaches table.
+
+ Philip Bailey
+ 17 Jan 2019
+"""
import argparse
-import csv
import os
import sys
import traceback
-import sqlite3
import rasterio
import numpy as np
from rscommons import Logger, ProgressBar, dotenv
-from rscommons.util import safe_makedirs
-from rscommons.database import write_attributes
+from rscommons.database import write_db_attributes, SQLiteCon
-def vegetation_suitability(database, buffer, epoch, prefix, ecoregion):
+def vegetation_suitability(gpkg_path: str, buffer: float, prefix: str, ecoregion: str):
"""Calculate vegetation suitability for each reach in a BRAT SQLite
database
Arguments:
database {str} -- Path to BRAT SQLite database
buffer {float} -- Distance to buffer reach polyline to obtain vegetation
- epoch {str} -- Label identifying either 'existing' or 'historic'. Used for log messages only.
prefix {str} -- Either 'EX' for existing or 'HPE' for historic.
ecoregion {int} -- Database ID of the ecoregion associated with the watershed
"""
- vegCol = 'iVeg{}{}{}'.format('_' if len(str(int(buffer))) < 3 else '', int(buffer), prefix)
+ veg_col = 'iVeg{}{}{}'.format('_' if len(str(int(buffer))) < 3 else '', int(buffer), prefix)
+
+ reaches = calculate_vegetation_suitability(gpkg_path, buffer, prefix, veg_col, ecoregion)
+ write_db_attributes(gpkg_path, reaches, [veg_col])
+
- reaches = calculate_vegetation_suitability(database, buffer, prefix, vegCol, ecoregion)
- write_attributes(database, reaches, [vegCol])
+def calculate_vegetation_suitability(gpkg_path: str, buffer: float, epoch: str, veg_col: str, ecoregion: str) -> dict:
+ """ Calculation vegetation suitability
+ Args:
+ gpkg_path ([type]): [description]
+ buffer ([type]): [description]
+ epoch ([type]): [description]
+ veg_col ([type]): [description]
+ ecoregion ([type]): [description]
-def calculate_vegetation_suitability(database, buffer, epoch, vegCol, ecoregion):
+ Raises:
+ Exception: [description]
+
+ Returns:
+ [type]: [description]
+ """
log = Logger('Veg Suitability')
log.info('Buffer: {}'.format(buffer))
log.info('Epoch: {}'.format(epoch))
- log.info('Veg Column: {}'.format(vegCol))
-
- conn = sqlite3.connect(database)
- curs = conn.cursor()
-
- # Get the database epoch that has the prefix 'EX' or 'HPE' in the metadata
- curs.execute('SELECT EpochID FROM Epochs WHERE Metadata = ?', [epoch])
- epochid = curs.fetchone()[0]
- if not epochid:
- raise Exception('Missing epoch in database with metadata value of "{}"'.format(epoch))
-
- curs.execute('SELECT R.ReachID, Round(SUM(CAST(IFNULL(OverrideSuitability, DefaultSuitability) AS REAL) * CAST(CellCount AS REAL) / CAST(TotalCells AS REAL)), 2) AS VegSuitability'
- ' FROM Reaches R'
- ' INNER JOIN Watersheds W ON R.WatershedID = W.WatershedID'
- ' INNER JOIN Ecoregions E ON W.EcoregionID = E.EcoregionID'
- ' INNER JOIN ReachVegetation RV ON R.ReachID = RV.ReachID'
- ' INNER JOIN VegetationTypes VT ON RV.VegetationID = VT.VegetationID'
- ' INNER JOIN Epochs EP ON VT.EpochID = EP.EpochID'
- ' INNER JOIN('
- ' SELECT ReachID, SUM(CellCount) AS TotalCells'
- ' FROM ReachVegetation RV'
- ' INNER JOIN VegetationTypes VT ON RV.VegetationID = VT.VegetationID'
- ' INNER JOIN Epochs E ON E.EpochID = VT.EpochID'
- ' WHERE Buffer = ? AND E.Metadata = ?'
- ' GROUP BY ReachID) AS RS ON R.ReachID = RS.ReachID'
- ' LEFT JOIN VegetationOverrides VO ON E.EcoregionID = VO.EcoregionID AND VT.VegetationID = VO.VegetationID'
- ' WHERE (Buffer = ?) AND (EP.Metadata = ?) AND (E.EcoregionID = ? OR E.EcoregionID IS NULL)'
- ' GROUP BY R.ReachID', [buffer, epoch, buffer, epoch, ecoregion])
- results = {row[0]: {vegCol: row[1]} for row in curs.fetchall()}
+ log.info('Veg Column: {}'.format(veg_col))
+
+ with SQLiteCon(gpkg_path) as database:
+
+ # Get the database epoch that has the prefix 'EX' or 'HPE' in the metadata
+ database.curs.execute('SELECT EpochID FROM Epochs WHERE Metadata = ?', [epoch])
+ epochid = database.curs.fetchone()['EpochID']
+ if not epochid:
+ raise Exception('Missing epoch in database with metadata value of "{}"'.format(epoch))
+
+ database.curs.execute('SELECT R.ReachID, Round(SUM(CAST(IFNULL(OverrideSuitability, DefaultSuitability) AS REAL) * CAST(CellCount AS REAL) / CAST(TotalCells AS REAL)), 2) AS VegSuitability'
+ ' FROM vwReaches R'
+ ' INNER JOIN Watersheds W ON R.WatershedID = W.WatershedID'
+ ' INNER JOIN Ecoregions E ON W.EcoregionID = E.EcoregionID'
+ ' INNER JOIN ReachVegetation RV ON R.ReachID = RV.ReachID'
+ ' INNER JOIN VegetationTypes VT ON RV.VegetationID = VT.VegetationID'
+ ' INNER JOIN Epochs EP ON VT.EpochID = EP.EpochID'
+ ' INNER JOIN('
+ ' SELECT ReachID, SUM(CellCount) AS TotalCells'
+ ' FROM ReachVegetation RV'
+ ' INNER JOIN VegetationTypes VT ON RV.VegetationID = VT.VegetationID'
+ ' INNER JOIN Epochs E ON E.EpochID = VT.EpochID'
+ ' WHERE Buffer = ? AND E.Metadata = ?'
+ ' GROUP BY ReachID) AS RS ON R.ReachID = RS.ReachID'
+ ' LEFT JOIN VegetationOverrides VO ON E.EcoregionID = VO.EcoregionID AND VT.VegetationID = VO.VegetationID'
+ ' WHERE (Buffer = ?) AND (EP.Metadata = ?) AND (E.EcoregionID = ? OR E.EcoregionID IS NULL)'
+ ' GROUP BY R.ReachID', [buffer, epoch, buffer, epoch, ecoregion])
+ results = {row['ReachID']: {veg_col: row['VegSuitability']} for row in database.curs.fetchall()}
log.info('Vegetation suitability complete')
return results
-def output_vegetation_raster(database, raster_path, output_path, epoch, prefix, ecoregion):
+def output_vegetation_raster(gpkg_path, raster_path, output_path, epoch, prefix, ecoregion):
"""Output a vegetation suitability raster. This has no direct use in the process
but it's useful as a reference layer and visual aid.
@@ -95,19 +102,18 @@ def output_vegetation_raster(database, raster_path, output_path, epoch, prefix,
log = Logger('Veg Suitability Rasters')
log.info('Epoch: {}'.format(epoch))
- conn = sqlite3.connect(database)
- curs = conn.cursor()
+ with SQLiteCon(gpkg_path) as database:
- # Get the database epoch that has the prefix 'EX' or 'HPE' in the metadata
- curs.execute('SELECT EpochID FROM Epochs WHERE Metadata = ?', [prefix])
- epochid = curs.fetchone()[0]
- if not epochid:
- raise Exception('Missing epoch in database with metadata value of "{}"'.format(epoch))
+ # Get the database epoch that has the prefix 'EX' or 'HPE' in the metadata
+ database.curs.execute('SELECT EpochID FROM Epochs WHERE Metadata = ?', [prefix])
+ epochid = database.curs.fetchone()['EpochID']
+ if not epochid:
+ raise Exception('Missing epoch in database with metadata value of "{}"'.format(epoch))
- curs.execute('SELECT VegetationID, EffectiveSuitability '
- 'FROM vwVegetationSuitability '
- 'WHERE EpochID = ? AND EcoregionID = ?', [epochid, ecoregion])
- results = {row[0]: row[1] for row in curs.fetchall()}
+ database.curs.execute('SELECT VegetationID, EffectiveSuitability '
+ 'FROM vwVegetationSuitability '
+ 'WHERE EpochID = ? AND EcoregionID = ?', [epochid, ecoregion])
+ results = {row['VegetationID']: row['EffectiveSuitability'] for row in database.curs.fetchall()}
def translate_suit(in_val, in_nodata, out_nodata):
if in_val == in_nodata:
@@ -117,7 +123,7 @@ def translate_suit(in_val, in_nodata, out_nodata):
log.warning('Could not find {} VegetationID={}'.format(prefix, in_val))
return -1
- vf = np.vectorize(translate_suit)
+ vector = np.vectorize(translate_suit)
with rasterio.open(raster_path) as source_ds:
out_meta = source_ds.meta
@@ -135,13 +141,15 @@ def translate_suit(in_val, in_nodata, out_nodata):
# Fill the masked values with the appropriate nodata vals
# Unthresholded in the base band (mostly for debugging)
- out_data = vf(in_data, source_ds.meta['nodata'], out_meta['nodata'])
+ out_data = vector(in_data, source_ds.meta['nodata'], out_meta['nodata'])
dest_ds.write(np.int16(out_data), window=window, indexes=1)
progbar.finish()
def main():
+ """ Vegetation Suitability
+ """
parser = argparse.ArgumentParser()
parser.add_argument('database', help='BRAT database path', type=argparse.FileType('r'))
parser.add_argument('buffer', help='buffer distance (metres)', type=float)
@@ -155,8 +163,7 @@ def main():
logg.setup(logPath=logfile, verbose=args.verbose)
try:
- pass
- # vegetation_suitability(args.database.name, args.raster.name, args.buffer, args.table)
+ vegetation_suitability(args.database.name, args.raster.name, args.buffer, args.table)
except Exception as e:
logg.error(e)
diff --git a/packages/brat/sqlbrat/utils/vegetation_summary.py b/packages/brat/sqlbrat/utils/vegetation_summary.py
index 323a0c8a..7978ec9a 100644
--- a/packages/brat/sqlbrat/utils/vegetation_summary.py
+++ b/packages/brat/sqlbrat/utils/vegetation_summary.py
@@ -1,30 +1,24 @@
-# Name: Vegation Summary
-#
-# Purpose: Summarizes vegetation for each polyline feature within a buffer distance
-# on a raster. Inserts the area of each vegetation type into the BRAT database
-#
-# Author: Philip Bailey
-#
-# Date: 28 Aug 2019
-# -------------------------------------------------------------------------------
-import argparse
+""" Summarizes vegetation for each polyline feature within a buffer distance
+ on a raster. Inserts the area of each vegetation type into the BRAT database
+
+ Philip Bailey
+ 28 Aug 2019
+"""
import os
-import sys
-import traceback
-import sqlite3
-from osgeo import osr, gdal
-from rscommons import ProgressBar, Logger, dotenv
-from rscommons.shapefile import _rough_convert_metres_to_raster_units
-from rscommons.database import load_geometries
+import numpy as np
+from osgeo import gdal
import rasterio
+import sqlite3
from rasterio.mask import mask
-import numpy as np
+from rscommons import GeopackageLayer, Logger
+from rscommons.database import SQLiteCon
+from rscommons.classes.vector_base import VectorBase
-def vegetation_summary(database, veg_raster, buffer):
- """ Loop through every reach in a BRAT database and
+def vegetation_summary(outputs_gpkg_path: str, label: str, veg_raster: str, buffer: float):
+ """ Loop through every reach in a BRAT database and
retrieve the values from a vegetation raster within
- the specified buffer. Then store the tally of
+ the specified buffer. Then store the tally of
vegetation values in the BRAT database.
Arguments:
@@ -38,31 +32,25 @@ def vegetation_summary(database, veg_raster, buffer):
# Retrieve the raster spatial reference and geotransformation
dataset = gdal.Open(veg_raster)
- gt = dataset.GetGeoTransform()
- gdalSRS = dataset.GetProjection()
- raster_srs = osr.SpatialReference(wkt=gdalSRS)
- raster_buffer = _rough_convert_metres_to_raster_units(veg_raster, buffer)
+ geo_transform = dataset.GetGeoTransform()
+ raster_buffer = VectorBase.rough_convert_metres_to_raster_units(veg_raster, buffer)
# Calculate the area of each raster cell in square metres
- conversion_factor = _rough_convert_metres_to_raster_units(veg_raster, 1.0)
- cell_area = abs(gt[1] * gt[5]) / conversion_factor**2
-
- # Load the reach geometries and ensure they are in the same projection as the vegetation raster
- geometries = load_geometries(database, raster_srs)
+ conversion_factor = VectorBase.rough_convert_metres_to_raster_units(veg_raster, 1.0)
+ cell_area = abs(geo_transform[1] * geo_transform[5]) / conversion_factor**2
# Open the raster and then loop over all polyline features
veg_counts = []
- with rasterio.open(veg_raster) as src:
-
- progbar = ProgressBar(len(geometries), 50, "Unioning features")
- counter = 0
+ with rasterio.open(veg_raster) as src, GeopackageLayer(os.path.join(outputs_gpkg_path, 'ReachGeometry')) as lyr:
+ _srs, transform = VectorBase.get_transform_from_raster(lyr.spatial_ref, veg_raster)
- for reachID, polyline in geometries.items():
+ for feature, _counter, _progbar in lyr.iterate_features(label):
+ reach_id = feature.GetFID()
+ geom = feature.GetGeometryRef()
+ if transform:
+ geom.Transform(transform)
- counter += 1
- progbar.update(counter)
-
- polygon = polyline.buffer(raster_buffer)
+ polygon = VectorBase.ogr2shapely(geom).buffer(raster_buffer)
try:
# retrieve an array for the cells under the polygon
@@ -74,43 +62,34 @@ def vegetation_summary(database, veg_raster, buffer):
for oldvalue in np.unique(mask_raster):
if oldvalue is not np.ma.masked:
cell_count = np.count_nonzero(mask_raster == oldvalue)
- veg_counts.append([reachID, int(oldvalue), buffer, cell_count * cell_area, cell_count])
+ veg_counts.append([reach_id, int(oldvalue), buffer, cell_count * cell_area, cell_count])
except Exception as ex:
- log.warning('Error obtaining vegetation raster values for ReachID {}'.format(reachID))
+ log.warning('Error obtaining vegetation raster values for ReachID {}'.format(reach_id))
log.warning(ex)
- progbar.finish()
-
- conn = sqlite3.connect(database)
- conn.executemany('INSERT INTO ReachVegetation (ReachID, VegetationID, Buffer, Area, CellCount) VALUES (?, ?, ?, ?, ?)', veg_counts)
- conn.commit()
+ # Write the reach vegetation values to the database
+ # Because sqlite3 doesn't give us any feedback we do this in batches so that we can figure out what values
+ # Are causing constraint errors
+ with SQLiteCon(outputs_gpkg_path) as database:
+ errs = 0
+ batch_count = 0
+ for veg_record in veg_counts:
+ batch_count += 1
+ try:
+ database.conn.execute('INSERT INTO ReachVegetation (ReachID, VegetationID, Buffer, Area, CellCount) VALUES (?, ?, ?, ?, ?)', veg_record)
+ # Sqlite can't report on SQL errors so we have to print good log messages to help intuit what the problem is
+ except sqlite3.IntegrityError as err:
+ # THis is likely a constraint error.
+ errstr = "Integrity Error when inserting records: ReachID: {} VegetationID: {}".format(veg_record[0], veg_record[1])
+ log.error(errstr)
+ errs += 1
+ except sqlite3.Error as err:
+ # This is any other kind of error
+ errstr = "SQL Error when inserting records: ReachID: {} VegetationID: {} ERROR: {}".format(veg_record[0], veg_record[1], str(err))
+ log.error(errstr)
+ errs += 1
+ if errs > 0:
+ raise Exception('Errors were found inserting records into the database. Cannot continue.')
+ database.conn.commit()
log.info('Vegetation summary complete')
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('database', help='BRAT database path', type=argparse.FileType('r'))
- parser.add_argument('raster', help='vegetation raster', type=argparse.FileType('r'))
- parser.add_argument('buffer', help='buffer distance', type=float)
- parser.add_argument('--verbose', help='(optional) verbose logging mode', action='store_true', default=False)
- args = dotenv.parse_args_env(parser)
-
- # Initiate the log file
- logg = Logger('Veg Summary')
- logfile = os.path.join(os.path.dirname(args.database.name), 'vegetation_summary.log')
- logg.setup(logPath=logfile, verbose=args.verbose)
-
- try:
- vegetation_summary(args.database.name, args.raster.name, args.buffer)
-
- except Exception as e:
- logg.error(e)
- traceback.print_exc(file=sys.stdout)
- sys.exit(1)
-
- sys.exit(0)
-
-
-if __name__ == '__main__':
- main()
diff --git a/packages/gnat/docs/_config.yml b/packages/gnat/docs/_config.yml
index 6fce7c3a..f7becaca 100644
--- a/packages/gnat/docs/_config.yml
+++ b/packages/gnat/docs/_config.yml
@@ -26,6 +26,7 @@ defaults:
# Files/Folders to exclude from publishing
exclude:
+ - vendor
- src
- LICENSE
- README.md
diff --git a/packages/gnat/docs/_includes/sidebar.html b/packages/gnat/docs/_includes/sidebar.html
new file mode 100644
index 00000000..6754ec79
--- /dev/null
+++ b/packages/gnat/docs/_includes/sidebar.html
@@ -0,0 +1,3 @@
+
+
+Back to riverscapes tools
\ No newline at end of file
diff --git a/packages/gnat/gnat/__version__.py b/packages/gnat/gnat/__version__.py
index 3b93d0be..3dc1f76b 100644
--- a/packages/gnat/gnat/__version__.py
+++ b/packages/gnat/gnat/__version__.py
@@ -1 +1 @@
-__version__ = "0.0.2"
+__version__ = "0.1.0"
diff --git a/packages/gnat/gnat/confinement.py b/packages/gnat/gnat/confinement.py
index 9f7d4b24..26053205 100644
--- a/packages/gnat/gnat/confinement.py
+++ b/packages/gnat/gnat/confinement.py
@@ -97,8 +97,6 @@ def confinement(huc, flowlines_orig, confining_polygon_orig, output_folder, buff
project.add_metadata({'BufferField': buffer_field}, inputs_gpkg_lyrs['FLOWLINES'][0])
# Add the confinement polygon
- # TODO: Since we don't know if the input layer is a shp or gpkg it's hard to add
- # _vbet_node, confinement_shp = project.add_project_vector(proj_nodes['Inputs'], LayerTypes['CONFINING_POLYGON'], confining_polygon_orig)
project.add_project_geopackage(proj_nodes['Outputs'], LayerTypes['CONFINEMENT'])
# Generate confining margins
diff --git a/packages/rscontext/docs/_config.yml b/packages/rscontext/docs/_config.yml
index a6cb72df..506983c5 100644
--- a/packages/rscontext/docs/_config.yml
+++ b/packages/rscontext/docs/_config.yml
@@ -26,6 +26,7 @@ defaults:
# Files/Folders to exclude from publishing
exclude:
+ - vendor
- src
- LICENSE
- README.md
diff --git a/packages/rscontext/docs/_includes/sidebar.html b/packages/rscontext/docs/_includes/sidebar.html
new file mode 100644
index 00000000..6754ec79
--- /dev/null
+++ b/packages/rscontext/docs/_includes/sidebar.html
@@ -0,0 +1,3 @@
+
+
+Back to riverscapes tools
\ No newline at end of file
diff --git a/packages/rscontext/requirements.txt b/packages/rscontext/requirements.txt
new file mode 100644
index 00000000..6029f8db
--- /dev/null
+++ b/packages/rscontext/requirements.txt
@@ -0,0 +1 @@
+# To ensure app dependencies are ported from your virtual environment/host machine into your container, run 'pip freeze > requirements.txt' in the terminal to overwrite this file
diff --git a/packages/rscontext/rscontext/__version__.py b/packages/rscontext/rscontext/__version__.py
index 5c4105cd..6849410a 100644
--- a/packages/rscontext/rscontext/__version__.py
+++ b/packages/rscontext/rscontext/__version__.py
@@ -1 +1 @@
-__version__ = "1.0.1"
+__version__ = "1.1.0"
diff --git a/packages/rscontext/rscontext/clip_ownership.py b/packages/rscontext/rscontext/clip_ownership.py
index 8d6d0bc7..dac4d1ca 100644
--- a/packages/rscontext/rscontext/clip_ownership.py
+++ b/packages/rscontext/rscontext/clip_ownership.py
@@ -1,9 +1,5 @@
import os
-import json
import argparse
-from osgeo import ogr
-from osgeo import osr
-from shapely.geometry import shape, mapping
from rscommons import Logger, dotenv
from rscommons.shapefile import get_geometry_unary_union
from rscommons.shapefile import _rough_convert_metres_to_shapefile_units
diff --git a/packages/rscontext/rscontext/rs_context.py b/packages/rscontext/rscontext/rs_context.py
index 40065755..9f31a24a 100755
--- a/packages/rscontext/rscontext/rs_context.py
+++ b/packages/rscontext/rscontext/rs_context.py
@@ -18,7 +18,7 @@
import datetime
from osgeo import ogr
-from rscommons import Logger, RSProject, RSLayer, ModelConfig, dotenv, initGDALOGRErrors, GeopackageLayer, Timer
+from rscommons import Logger, RSProject, RSLayer, ModelConfig, dotenv, initGDALOGRErrors, Timer
from rscommons.util import safe_makedirs, safe_remove_dir
from rscommons.clean_nhd_data import clean_nhd_data
from rscommons.clean_ntd_data import clean_ntd_data
@@ -36,6 +36,7 @@
from rscontext.clip_ownership import clip_ownership
from rscontext.filter_ecoregions import filter_ecoregions
from rscontext.rs_context_report import RSContextReport
+from rscontext.vegetation import clip_vegetation
from rscontext.__version__ import __version__
initGDALOGRErrors()
@@ -65,9 +66,11 @@
# NHD Geopackage Layers
'HYDROLOGY': RSLayer('Hydrology', 'NHD', 'Geopackage', 'hydrology/hydrology.gpkg', {
'NETWORK': RSLayer('NHD Flowlines', 'NETWORK', 'Vector', 'network'),
+ 'BUFFEREDCLIP100': RSLayer('Buffered Clip Shape 100m', 'BUFFERED_CLIP100', 'Vector', 'buffered_clip100m'),
+ 'BUFFEREDCLIP500': RSLayer('Buffered Clip Shape 500m', 'BUFFERED_CLIP500', 'Vector', 'buffered_clip500m'),
'NETWORK300M': RSLayer('NHD Flowlines Segmented 300m', 'NETWORK300M', 'Vector', 'network_300m'),
- 'NETWORK300M': RSLayer('NHD Flowlines intersected with road, rail and ownership', 'NETWORK300M', 'Vector', 'network_intersected'),
- 'NETWORK300MCROSSINGS': RSLayer('NHD Flowlines intersected with road, rail and ownership, segmented to 300m', 'NETWORK300MCROSSINGS', 'Vector', 'network_intersected_300m')
+ 'NETWORK300M_INTERSECTION': RSLayer('NHD Flowlines intersected with road, rail and ownership', 'NETWORK300M_INTERSECTION', 'Vector', 'network_intersected'),
+ 'NETWORK300M_CROSSINGS': RSLayer('NHD Flowlines intersected with road, rail and ownership, segmented to 300m', 'NETWORK300MCROSSINGS', 'Vector', 'network_intersected_300m')
}),
# Prism Layers
@@ -122,6 +125,7 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
safe_makedirs(scratch_dem_folder)
project, realization = create_project(huc, output_folder)
+ hydrology_gpkg_path = os.path.join(output_folder, LayerTypes['HYDROLOGY'].rel_path)
dem_node, dem_raster = project.add_project_raster(realization, LayerTypes['DEM'])
_node, hill_raster = project.add_project_raster(realization, LayerTypes['HILLSHADE'])
@@ -140,12 +144,21 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
nhd_unzip_folder = os.path.join(scratch_dir, 'nhd', huc[:4])
nhd, db_path, huc_name, nhd_url = clean_nhd_data(huc, nhd_download_folder, nhd_unzip_folder, os.path.join(output_folder, 'hydrology'), cfg.OUTPUT_EPSG, False)
+
# Clean up the unzipped files. We won't need them again
if parallel:
safe_remove_dir(nhd_unzip_folder)
project.add_metadata({'Watershed': huc_name})
boundary = 'WBDHU{}'.format(len(huc))
+ # For coarser rasters than the DEM we need to buffer our clip polygon to include enough pixels
+ # This shouldn't be too much more data because these are usually integer rasters that are much lower res.
+ buffered_clip_path100 = os.path.join(hydrology_gpkg_path, LayerTypes['HYDROLOGY'].sub_layers['BUFFEREDCLIP100'].rel_path)
+ copy_feature_class(nhd[boundary], buffered_clip_path100, epsg=cfg.OUTPUT_EPSG, buffer=100)
+
+ buffered_clip_path500 = os.path.join(hydrology_gpkg_path, LayerTypes['HYDROLOGY'].sub_layers['BUFFEREDCLIP500'].rel_path)
+ copy_feature_class(nhd[boundary], buffered_clip_path500, epsg=cfg.OUTPUT_EPSG, buffer=500)
+
# PRISM climate rasters
mean_annual_precip = None
bil_files = glob.glob(os.path.join(prism_folder, '**', '*.bil'))
@@ -158,7 +171,7 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
except StopIteration:
raise Exception('Could not find .bil file corresponding to "{}"'.format(ptype))
_node, project_raster_path = project.add_project_raster(realization, LayerTypes[ptype])
- raster_warp(source_raster_path, project_raster_path, cfg.OUTPUT_EPSG, nhd[boundary], 2)
+ raster_warp(source_raster_path, project_raster_path, cfg.OUTPUT_EPSG, buffered_clip_path500, {"cutlineBlend": 1})
# Use the mean annual precipitation to calculate bankfull width
if ptype.lower() == 'ppt':
@@ -212,7 +225,7 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
# Download the HAND raster
huc6 = huc[0:6]
hand_download_folder = os.path.join(download_folder, 'hand')
- _hpath, hand_url = download_hand(huc6, cfg.OUTPUT_EPSG, hand_download_folder, nhd[boundary], hand_raster)
+ _hpath, hand_url = download_hand(huc6, cfg.OUTPUT_EPSG, hand_download_folder, nhd[boundary], hand_raster, warp_options={"cutlineBlend": 1})
project.add_metadata({'origin_url': hand_url}, hand_node)
# download contributing DEM rasters, mosaic and reproject into compressed GeoTIF
@@ -222,7 +235,7 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
need_dem_rebuild = force_download or not os.path.exists(dem_raster)
if need_dem_rebuild:
- raster_vrt_stitch(dem_rasters, dem_raster, cfg.OUTPUT_EPSG, nhd[boundary])
+ raster_vrt_stitch(dem_rasters, dem_raster, cfg.OUTPUT_EPSG, clip=nhd[boundary], warp_options={"cutlineBlend": 1})
verify_areas(dem_raster, nhd[boundary])
# Calculate slope rasters seperately and then stitch them
@@ -251,14 +264,14 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
gdal_dem_geographic(dem_r, hs_part_path, 'hillshade')
need_hs_build = True
- if (need_slope_build):
- raster_vrt_stitch(slope_parts, slope_raster, cfg.OUTPUT_EPSG, nhd[boundary], clean=parallel)
+ if need_slope_build:
+ raster_vrt_stitch(slope_parts, slope_raster, cfg.OUTPUT_EPSG, clip=nhd[boundary], clean=parallel, warp_options={"cutlineBlend": 1})
verify_areas(slope_raster, nhd[boundary])
else:
log.info('Skipping slope build because nothing has changed.')
- if (need_hs_build):
- raster_vrt_stitch(hillshade_parts, hill_raster, cfg.OUTPUT_EPSG, nhd[boundary], clean=parallel)
+ if need_hs_build:
+ raster_vrt_stitch(hillshade_parts, hill_raster, cfg.OUTPUT_EPSG, clip=nhd[boundary], clean=parallel, warp_options={"cutlineBlend": 1})
verify_areas(hill_raster, nhd[boundary])
else:
log.info('Skipping hillshade build because nothing has changed.')
@@ -274,11 +287,10 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
# Clip and re-project the existing and historic vegetation
log.info('Processing existing and historic vegetation rasters.')
- raster_warp(existing_veg, existing_clip, cfg.OUTPUT_EPSG, nhd[boundary], 2)
- raster_warp(historic_veg, historic_clip, cfg.OUTPUT_EPSG, nhd[boundary], 2)
+ clip_vegetation(buffered_clip_path100, existing_veg, existing_clip, historic_veg, historic_clip, cfg.OUTPUT_EPSG)
log.info('Process the Fair Market Value Raster.')
- raster_warp(fair_market, fair_market_clip, cfg.OUTPUT_EPSG, nhd[boundary], 3)
+ raster_warp(fair_market, fair_market_clip, cfg.OUTPUT_EPSG, clip=buffered_clip_path500, warp_options={"cutlineBlend": 1})
# Clip the landownership Shapefile to a 10km buffer around the watershed boundary
own_path = os.path.join(output_folder, LayerTypes['OWNERSHIP'].rel_path)
@@ -289,7 +301,6 @@ def rs_context(huc, existing_veg, historic_veg, ownership, fair_market, ecoregio
# Segmentation
#######################################################
- hydrology_gpkg_path = os.path.join(output_folder, LayerTypes['HYDROLOGY'].rel_path)
# For now let's just make a copy of the NHD FLowlines
tmr = Timer()
rs_segmentation(
diff --git a/packages/rscontext/rscontext/rs_segmentation.py b/packages/rscontext/rscontext/rs_segmentation.py
index f9cb9a40..b5249d6b 100644
--- a/packages/rscontext/rscontext/rs_segmentation.py
+++ b/packages/rscontext/rscontext/rs_segmentation.py
@@ -5,7 +5,7 @@
from shapely.geometry import Point, MultiPoint, LineString
from shapely.ops import split
from rscommons import get_shp_or_gpkg, GeopackageLayer, Logger
-from rscommons.segment_network import segment_network_NEW
+from rscommons.segment_network import segment_network
from rscommons.vector_ops import copy_feature_class
from rscommons.vector_ops import collect_feature_class
@@ -37,7 +37,7 @@ def rs_segmentation(
# Segment the raw network without doing any intersections
log.info('Segmenting the raw network')
- segment_network_NEW(network_copy_path, os.path.join(out_gpkg, 'network_300m'), interval, minimum, watershed_id, create_layer=True)
+ segment_network(network_copy_path, os.path.join(out_gpkg, 'network_300m'), interval, minimum, watershed_id, create_layer=True)
# If a point needs to be split we store the split pieces here
split_feats = {}
@@ -134,7 +134,7 @@ def rs_segmentation(
# Finally, segment this new layer the same way we did the raw network above.
log.info('Segmenting the intersected network')
- segment_network_NEW(network_crossings_path, os.path.join(out_gpkg, 'network_intersected_300m'), interval, minimum, watershed_id, create_layer=True)
+ segment_network(network_crossings_path, os.path.join(out_gpkg, 'network_intersected_300m'), interval, minimum, watershed_id, create_layer=True)
log.info('Segmentation Complete')
diff --git a/packages/rscontext/rscontext/vegetation.py b/packages/rscontext/rscontext/vegetation.py
new file mode 100644
index 00000000..87cdad18
--- /dev/null
+++ b/packages/rscontext/rscontext/vegetation.py
@@ -0,0 +1,37 @@
+import rasterio
+from rscommons import Logger
+from rscommons.raster_warp import raster_warp
+
+
+def clip_vegetation(boundary_path: str, existing_veg_path: str, existing_clip_path: str, historic_veg_path: str, historic_clip_path: str, output_epsg: int):
+ """[summary]
+
+ Args:
+ boundary_path (str): Path to layer
+ existing_veg_path (str): Path to raster
+ existing_clip_path (str): Path to output raster
+ historic_veg_path (str): Path to raster
+ historic_clip_path (str): Path to output raster
+ output_epsg (int): EPSG
+ """
+ log = Logger('Vegetation Clip')
+
+ with rasterio.open(existing_veg_path) as exist, rasterio.open(historic_veg_path) as hist:
+ meta_existing = exist.meta
+ meta_hist = hist.meta
+
+ if meta_existing['transform'][0] != meta_hist['transform'][0]:
+ msg = 'Vegetation raster cell widths do not match: existing {}, historic {}'.format(meta_existing['transform'][0], meta_hist['transform'][0])
+ raise Exception(msg)
+
+ if meta_existing['transform'][4] != meta_hist['transform'][4]:
+ msg = 'Vegetation raster cell heights do not match: existing {}, historic {}'.format(meta_existing['transform'][4], meta_hist['transform'][4])
+ raise Exception(msg)
+
+ # https://gdal.org/python/osgeo.gdal-module.html#WarpOptions
+ warp_options = {"cutlineBlend": 2}
+ # Now do the raster warp
+ raster_warp(existing_veg_path, existing_clip_path, output_epsg, clip=boundary_path, warp_options=warp_options)
+ raster_warp(historic_veg_path, historic_clip_path, output_epsg, clip=boundary_path, warp_options=warp_options)
+
+ log.info('Complete')
diff --git a/packages/rvd/database/data/VegetationTypes.csv b/packages/rvd/database/data/VegetationTypes.csv
index 5fed3ce9..68f8dafd 100644
--- a/packages/rvd/database/data/VegetationTypes.csv
+++ b/packages/rvd/database/data/VegetationTypes.csv
@@ -1,3682 +1,2627 @@
-VegetationID,EpochID,Name
-11,2,Open Water
-12,2,PerennialIce/Snow
-31,2,Barren-Rock/Sand/Clay
-381,2,Inter-Mountain Basins Big Sagebrush Steppe
-383,2,Inter-Mountain Basins Sparsely Vegetated Systems
-384,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-385,2,North American Warm Desert Sparsely Vegetated Systems
-386,2,Western Great Plains Shortgrass Prairie
-387,2,Western Great Plains Foothill and Piedmont Grassland
-388,2,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe
-389,2,Southern Colorado Plateau Sand Shrubland
-390,2,Inter-Mountain Basins Big Sagebrush Steppe
-391,2,Rocky Mountain Lower Montane-Foothill Shrubland
-392,2,Apacherian-Chihuahuan Mesquite Upland Scrub
-393,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub
-394,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-395,2,Mojave Mid-Elevation Mixed Desert Scrub
-396,2,Southern Rocky Mountain Montane-Subalpine Grassland
-397,2,Sonora-Mojave Semi-Desert Chaparral
-398,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-399,2,Inter-Mountain Basins Montane Sagebrush Steppe - Mountain Big Sagebrush
-400,2,Mojave Mid-Elevation Mixed Desert Scrub
-401,2,Inter-Mountain Basins Mat Saltbush Shrubland
-402,2,Apacherian-Chihuahuan Mesquite Upland Scrub
-403,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-404,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-405,2,Sonora-Mojave Semi-Desert Chaparral
-406,2,Southern Colorado Plateau Sand Shrubland
-407,2,Apacherian-Chihuahuan Mesquite Upland Scrub
-408,2,Mediterranean California Sparsely Vegetated Systems
-409,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-410,2,Inter-Mountain Basins Sparsely Vegetated Systems
-411,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-412,2,Inter-Mountain Basins Sparsely Vegetated Systems
-413,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-414,2,Inter-Mountain Basins Sparsely Vegetated Systems
-415,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-416,2,Rocky Mountain Aspen Forest and Woodland
-417,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Ponderosa Pine-Douglas-fir
-418,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Larch
-419,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Grand Fir
-420,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-421,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest
-422,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest - Cedar Groves
-423,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna
-424,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-425,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-426,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-427,2,Columbia Plateau Scabland Shrubland
-428,2,Rocky Mountain Alpine Dwarf-Shrubland
-429,2,Great Basin Xeric Mixed Sagebrush Shrubland
-430,2,Inter-Mountain Basins Big Sagebrush Shrubland
-431,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-432,2,Inter-Mountain Basins Juniper Savanna
-433,2,Columbia Plateau Steppe and Grassland
-434,2,Columbia Plateau Low Sagebrush Steppe
-435,2,Inter-Mountain Basins Big Sagebrush Steppe
-436,2,Inter-Mountain Basins Montane Sagebrush Steppe
-437,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-438,2,Columbia Basin Foothill and Canyon Dry Grassland
-439,2,Inter-Mountain Basins Semi-Desert Grassland
-440,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-441,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-442,2,Columbia Basin Palouse Prairie
-443,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-444,2,Inter-Mountain Basins Greasewood Flat
-445,2,Inter-Mountain Basins Montane Riparian Systems
-446,2,Rocky Mountain Montane Riparian Systems
-447,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-448,2,Northern Rocky Mountain Conifer Swamp
-449,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-450,2,Rocky Mountain Poor-Site Lodgepole Pine Forest
-451,2,Inter-Mountain Basins Sparsely Vegetated Systems
-452,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-453,2,Northwestern Great Plains Aspen Forest and Parkland
-454,2,Rocky Mountain Aspen Forest and Woodland
-455,2,Great Basin Pinyon-Juniper Woodland
-456,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Ponderosa Pine-Douglas-fir
-457,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Larch
-458,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Grand Fir
-459,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-460,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest
-461,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest - Cedar Groves
-462,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-463,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna
-464,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-465,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-466,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-467,2,Rocky Mountain Alpine Dwarf-Shrubland
-468,2,Inter-Mountain Basins Big Sagebrush Shrubland
-469,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-470,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-471,2,Inter-Mountain Basins Juniper Savanna
-472,2,Columbia Plateau Low Sagebrush Steppe
-473,2,Inter-Mountain Basins Big Sagebrush Steppe
-474,2,Inter-Mountain Basins Montane Sagebrush Steppe
-475,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-476,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-477,2,Rocky Mountain Alpine Fell-Field
-478,2,Rocky Mountain Alpine Turf
-479,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-480,2,Inter-Mountain Basins Greasewood Flat
-481,2,Inter-Mountain Basins Montane Riparian Systems
-482,2,Rocky Mountain Montane Riparian Systems
-483,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-484,2,Northern Rocky Mountain Conifer Swamp
-485,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-486,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland - Fire-maintained Savanna
-487,2,Rocky Mountain Poor-Site Lodgepole Pine Forest
-488,2,Inter-Mountain Basins Sparsely Vegetated Systems
-489,2,North American Warm Desert Sparsely Vegetated Systems
-490,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-491,2,Colorado Plateau Pinyon-Juniper Woodland
-492,2,Great Basin Pinyon-Juniper Woodland
-493,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-494,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-495,2,Southern Rocky Mountain Ponderosa Pine Woodland
-496,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-497,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-498,2,Great Basin Xeric Mixed Sagebrush Shrubland
-499,2,Inter-Mountain Basins Big Sagebrush Shrubland
-500,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-501,2,Mojave Mid-Elevation Mixed Desert Scrub
-502,2,Rocky Mountain Lower Montane-Foothill Shrubland
-503,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-504,2,Sonora-Mojave Mixed Salt Desert Scrub
-505,2,Sonoran Mid-Elevation Desert Scrub
-506,2,Southern Colorado Plateau Sand Shrubland
-507,2,Colorado Plateau Pinyon-Juniper Shrubland
-508,2,Great Basin Semi-Desert Chaparral
-509,2,Mogollon Chaparral
-510,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-511,2,Sonora-Mojave Semi-Desert Chaparral
-512,2,Sonoran Paloverde-Mixed Cacti Desert Scrub
-513,2,Inter-Mountain Basins Juniper Savanna
-514,2,Southern Rocky Mountain Ponderosa Pine Savanna
-515,2,Inter-Mountain Basins Big Sagebrush Steppe
-516,2,Inter-Mountain Basins Montane Sagebrush Steppe
-517,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-518,2,Inter-Mountain Basins Semi-Desert Grassland
-519,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-520,2,Inter-Mountain Basins Greasewood Flat
-521,2,Inter-Mountain Basins Montane Riparian Systems
-522,2,North American Warm Desert Riparian Systems
-523,2,North American Warm Desert Riparian Systems - Stringers
-524,2,Rocky Mountain Montane Riparian Systems
-525,2,North American Warm Desert Sparsely Vegetated Systems
-526,2,Colorado Plateau Pinyon-Juniper Woodland
-527,2,Great Basin Pinyon-Juniper Woodland
-528,2,Madrean Encinal
-529,2,Madrean Lower Montane Pine-Oak Forest and Woodland
-530,2,Madrean Pinyon-Juniper Woodland
-531,2,Southern Rocky Mountain Ponderosa Pine Woodland
-532,2,Inter-Mountain Basins Big Sagebrush Shrubland
-533,2,Mojave Mid-Elevation Mixed Desert Scrub
-534,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-535,2,Sonora-Mojave Mixed Salt Desert Scrub
-536,2,Sonoran Granite Outcrop Desert Scrub
-537,2,Sonoran Mid-Elevation Desert Scrub
-538,2,Mogollon Chaparral
-539,2,Sonora-Mojave Semi-Desert Chaparral
-540,2,Sonoran Paloverde-Mixed Cacti Desert Scrub
-541,2,Inter-Mountain Basins Juniper Savanna
-542,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe
-543,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-544,2,Inter-Mountain Basins Semi-Desert Grassland
-545,2,North American Warm Desert Riparian Systems
-546,2,North American Warm Desert Riparian Systems - Stringers
-547,2,North Pacific Oak Woodland
-548,2,California Coastal Redwood Forest
-549,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland
-550,2,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland
-551,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-552,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-553,2,Mediterranean California Mixed Oak Woodland
-554,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-555,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-556,2,Mediterranean California Red Fir Forest
-557,2,Mediterranean California Subalpine Woodland
-558,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest
-559,2,Mediterranean California Mixed Evergreen Forest
-560,2,Northern California Mesic Subalpine Woodland
-561,2,California Maritime Chaparral
-562,2,California Mesic Chaparral
-563,2,California Montane Woodland and Chaparral
-564,2,California Xeric Serpentine Chaparral
-565,2,Northern and Central California Dry-Mesic Chaparral
-566,2,California Coastal Live Oak Woodland and Savanna
-567,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna
-568,2,Northern California Coastal Scrub
-569,2,California Mesic Serpentine Grassland
-570,2,California Northern Coastal Grassland
-571,2,Mediterranean California Subalpine Meadow
-572,2,North Pacific Montane Grassland
-573,2,California Montane Riparian Systems
-574,2,Pacific Coastal Marsh Systems
-575,2,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral
-576,2,California Coastal Closed-Cone Conifer Forest and Woodland
-577,2,Inter-Mountain Basins Sparsely Vegetated Systems
-578,2,Mediterranean California Sparsely Vegetated Systems
-579,2,Rocky Mountain Aspen Forest and Woodland
-580,2,Columbia Plateau Western Juniper Woodland and Savanna
-581,2,Great Basin Pinyon-Juniper Woodland
-582,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-583,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland
-584,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-585,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-586,2,Mediterranean California Mixed Oak Woodland
-587,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-588,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-589,2,Mediterranean California Red Fir Forest - Cascades
-590,2,Mediterranean California Red Fir Forest - Southern Sierra
-591,2,Mediterranean California Subalpine Woodland
-592,2,Mediterranean California Mesic Serpentine Woodland and Chaparral
-593,2,Mediterranean California Mixed Evergreen Forest
-594,2,Northern California Mesic Subalpine Woodland
-595,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-596,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland - Wet
-597,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland - Dry
-598,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-599,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-600,2,Mediterranean California Alpine Fell-Field
-601,2,Sierra Nevada Alpine Dwarf-Shrubland
-602,2,Great Basin Xeric Mixed Sagebrush Shrubland
-603,2,Inter-Mountain Basins Big Sagebrush Shrubland
-604,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-605,2,Mojave Mid-Elevation Mixed Desert Scrub
-606,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-607,2,California Mesic Chaparral
-608,2,California Montane Woodland and Chaparral
-609,2,Great Basin Semi-Desert Chaparral
-610,2,Northern and Central California Dry-Mesic Chaparral
-611,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna
-612,2,Inter-Mountain Basins Big Sagebrush Steppe
-613,2,Inter-Mountain Basins Montane Sagebrush Steppe
-614,2,Mediterranean California Alpine Dry Tundra
-615,2,Mediterranean California Subalpine Meadow
-616,2,North Pacific Montane Grassland
-617,2,California Montane Riparian Systems
-618,2,Inter-Mountain Basins Greasewood Flat
-619,2,Inter-Mountain Basins Montane Riparian Systems
-620,2,Inter-Mountain Basins Sparsely Vegetated Systems
-621,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-622,2,Rocky Mountain Aspen Forest and Woodland
-623,2,Columbia Plateau Western Juniper Woodland and Savanna
-624,2,Great Basin Pinyon-Juniper Woodland
-625,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-626,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-627,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-628,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest
-629,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic
-630,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Xeric
-631,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-632,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-633,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-634,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-635,2,Columbia Plateau Scabland Shrubland
-636,2,Great Basin Xeric Mixed Sagebrush Shrubland
-637,2,Inter-Mountain Basins Big Sagebrush Shrubland
-638,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-639,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-640,2,Columbia Plateau Steppe and Grassland
-641,2,Columbia Plateau Low Sagebrush Steppe
-642,2,Inter-Mountain Basins Big Sagebrush Steppe
-643,2,Inter-Mountain Basins Montane Sagebrush Steppe
-644,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-645,2,Columbia Basin Foothill and Canyon Dry Grassland
-646,2,Inter-Mountain Basins Semi-Desert Grassland
-647,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-648,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-649,2,Columbia Basin Palouse Prairie
-650,2,Rocky Mountain Alpine Fell-Field
-651,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-652,2,Inter-Mountain Basins Greasewood Flat
-653,2,Inter-Mountain Basins Montane Riparian Systems
-654,2,Rocky Mountain Montane Riparian Systems
-655,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-656,2,Northern Rocky Mountain Conifer Swamp
-657,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe
-658,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-659,2,Rocky Mountain Poor-Site Lodgepole Pine Forest
-660,2,Inter-Mountain Basins Sparsely Vegetated Systems
-661,2,Columbia Plateau Western Juniper Woodland and Savanna
-662,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-663,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest
-664,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic
-665,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-666,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-667,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-668,2,Columbia Plateau Scabland Shrubland
-669,2,Inter-Mountain Basins Big Sagebrush Shrubland
-670,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-671,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-672,2,Columbia Plateau Steppe and Grassland
-673,2,Columbia Plateau Low Sagebrush Steppe
-674,2,Inter-Mountain Basins Big Sagebrush Steppe
-675,2,Inter-Mountain Basins Montane Sagebrush Steppe
-676,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-677,2,Columbia Basin Foothill and Canyon Dry Grassland
-678,2,Inter-Mountain Basins Semi-Desert Grassland
-679,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-680,2,Columbia Basin Palouse Prairie
-681,2,Inter-Mountain Basins Greasewood Flat
-682,2,Inter-Mountain Basins Montane Riparian Systems
-683,2,Rocky Mountain Montane Riparian Systems
-684,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-685,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe
-686,2,Rocky Mountain Aspen Forest and Woodland
-687,2,Rocky Mountain Bigtooth Maple Ravine Woodland
-688,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-689,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-690,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-691,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-692,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-693,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-694,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-695,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-696,2,Rocky Mountain Alpine Dwarf-Shrubland
-697,2,Inter-Mountain Basins Big Sagebrush Shrubland - Basin Big Sagebrush
-698,2,Inter-Mountain Basins Big Sagebrush Shrubland - Wyoming Big Sagebrush
-699,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-700,2,Rocky Mountain Lower Montane-Foothill Shrubland
-701,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-702,2,Inter-Mountain Basins Juniper Savanna
-703,2,Columbia Plateau Low Sagebrush Steppe
-704,2,Inter-Mountain Basins Montane Sagebrush Steppe
-705,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-706,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-707,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-708,2,Rocky Mountain Alpine Fell-Field
-709,2,Rocky Mountain Alpine Turf
-710,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-711,2,Inter-Mountain Basins Greasewood Flat
-712,2,Rocky Mountain Montane Riparian Systems
-713,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-714,2,Northern Rocky Mountain Conifer Swamp
-715,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-716,2,Rocky Mountain Poor-Site Lodgepole Pine Forest
-717,2,Inter-Mountain Basins Sparsely Vegetated Systems
-718,2,North Pacific Sparsely Vegetated Systems
-719,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-720,2,North Pacific Oak Woodland
-721,2,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland
-722,2,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland
-723,2,North Pacific Hypermaritime Sitka Spruce Forest
-724,2,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest
-725,2,North Pacific Maritime Mesic Subalpine Parkland
-726,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest
-727,2,North Pacific Mountain Hemlock Forest - Wet
-728,2,North Pacific Mountain Hemlock Forest - Xeric
-729,2,North Pacific Mesic Western Hemlock-Silver Fir Forest
-730,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-731,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-732,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic
-733,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-734,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-735,2,East Cascades Oak-Ponderosa Pine Forest and Woodland
-736,2,North Pacific Broadleaf Landslide Forest and Shrubland
-737,2,Columbia Plateau Scabland Shrubland
-738,2,North Pacific Dry and Mesic Alpine Dwarf-Shrubland or Fell-field or Meadow
-739,2,Inter-Mountain Basins Big Sagebrush Shrubland
-740,2,North Pacific Avalanche Chute Shrubland
-741,2,North Pacific Montane Shrubland
-742,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-743,2,Willamette Valley Upland Prairie and Savanna
-744,2,Columbia Plateau Steppe and Grassland
-745,2,Columbia Plateau Low Sagebrush Steppe
-746,2,Inter-Mountain Basins Big Sagebrush Steppe
-747,2,Inter-Mountain Basins Montane Sagebrush Steppe
-748,2,North Pacific Montane Grassland
-749,2,Inter-Mountain Basins Montane Riparian Systems
-750,2,North Pacific Lowland Riparian Forest and Shrubland
-751,2,North Pacific Swamp Systems
-752,2,North Pacific Montane Riparian Woodland and Shrubland - Wet
-753,2,North Pacific Montane Riparian Woodland and Shrubland - Dry
-754,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe
-755,2,Rocky Mountain Poor-Site Lodgepole Pine Forest
-756,2,North Pacific Alpine and Subalpine Dry Grassland
-757,2,North Pacific Wooded Volcanic Flowage
-758,2,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest
-759,2,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest
-760,2,North Pacific Oak Woodland
-761,2,California Coastal Redwood Forest
-762,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland
-763,2,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland
-764,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-765,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-766,2,Mediterranean California Mixed Oak Woodland
-767,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-768,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-769,2,Mediterranean California Red Fir Forest
-770,2,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland
-771,2,North Pacific Hypermaritime Sitka Spruce Forest
-772,2,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest
-773,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest
-774,2,Mediterranean California Mixed Evergreen Forest
-775,2,East Cascades Oak-Ponderosa Pine Forest and Woodland
-776,2,North Pacific Broadleaf Landslide Forest and Shrubland
-777,2,Willamette Valley Upland Prairie and Savanna
-778,2,Northern California Coastal Scrub
-779,2,California Northern Coastal Grassland
-780,2,California Montane Riparian Systems
-781,2,North Pacific Lowland Riparian Forest and Shrubland
-782,2,North Pacific Swamp Systems
-783,2,North Pacific Montane Riparian Woodland and Shrubland - Wet
-784,2,North Pacific Montane Riparian Woodland and Shrubland - Dry
-785,2,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral
-786,2,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest
-787,2,Inter-Mountain Basins Sparsely Vegetated Systems
-788,2,Mediterranean California Sparsely Vegetated Systems
-789,2,North Pacific Sparsely Vegetated Systems
-790,2,North Pacific Oak Woodland
-791,2,Rocky Mountain Aspen Forest and Woodland
-792,2,Columbia Plateau Western Juniper Woodland and Savanna
-793,2,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland
-794,2,Great Basin Pinyon-Juniper Woodland
-795,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland
-796,2,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland
-797,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-798,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-799,2,Mediterranean California Mixed Oak Woodland
-800,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-801,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-802,2,Mediterranean California Red Fir Forest
-803,2,Mediterranean California Subalpine Woodland
-804,2,Mediterranean California Mesic Serpentine Woodland and Chaparral
-805,2,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland
-806,2,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest
-807,2,North Pacific Maritime Mesic Subalpine Parkland
-808,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest
-809,2,North Pacific Mountain Hemlock Forest - Wet
-810,2,North Pacific Mountain Hemlock Forest - Xeric
-811,2,North Pacific Mesic Western Hemlock-Silver Fir Forest
-812,2,Mediterranean California Mixed Evergreen Forest
-813,2,Northern California Mesic Subalpine Woodland
-814,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-815,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-816,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic
-817,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Xeric
-818,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-819,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland
-820,2,East Cascades Oak-Ponderosa Pine Forest and Woodland
-821,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-822,2,North Pacific Broadleaf Landslide Forest and Shrubland
-823,2,North Pacific Dry and Mesic Alpine Dwarf-Shrubland or Fell-field or Meadow
-824,2,Inter-Mountain Basins Big Sagebrush Shrubland
-825,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-826,2,California Mesic Chaparral
-827,2,California Montane Woodland and Chaparral
-828,2,Great Basin Semi-Desert Chaparral
-829,2,Northern and Central California Dry-Mesic Chaparral
-830,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna
-831,2,Willamette Valley Upland Prairie and Savanna
-832,2,Columbia Plateau Steppe and Grassland
-833,2,Columbia Plateau Low Sagebrush Steppe
-834,2,Inter-Mountain Basins Big Sagebrush Steppe
-835,2,Inter-Mountain Basins Montane Sagebrush Steppe
-836,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-837,2,Inter-Mountain Basins Semi-Desert Grassland
-838,2,California Montane Riparian Systems
-839,2,Inter-Mountain Basins Greasewood Flat
-840,2,Inter-Mountain Basins Montane Riparian Systems
-841,2,North Pacific Lowland Riparian Forest and Shrubland
-842,2,North Pacific Montane Riparian Woodland and Shrubland - Wet
-843,2,North Pacific Montane Riparian Woodland and Shrubland - Dry
-844,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe
-845,2,Rocky Mountain Poor-Site Lodgepole Pine Forest
-846,2,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral
-847,2,North Pacific Alpine and Subalpine Dry Grassland
-848,2,Sierran-Intermontane Desert Western White Pine-White Fir Woodland
-849,2,North Pacific Wooded Volcanic Flowage
-850,2,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest
-851,2,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest
-852,2,Western Great Plains Sparsely Vegetated Systems
-853,2,Rocky Mountain Aspen Forest and Woodland
-854,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Ponderosa Pine-Douglas-fir
-855,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Lodgepole Pine
-856,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-857,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-858,2,Southern Rocky Mountain Ponderosa Pine Woodland
-859,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-860,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-861,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-862,2,Northwestern Great Plains Shrubland
-863,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-864,2,Southern Rocky Mountain Ponderosa Pine Savanna
-865,2,Inter-Mountain Basins Big Sagebrush Steppe
-866,2,Inter-Mountain Basins Montane Sagebrush Steppe
-867,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-868,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-869,2,Northwestern Great Plains Mixedgrass Prairie
-870,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-871,2,Western Great Plains Sand Prairie
-872,2,Inter-Mountain Basins Greasewood Flat
-873,2,Rocky Mountain Montane Riparian Systems
-874,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-875,2,Western Great Plains Floodplain Systems
-876,2,Western Great Plains Wooded Draw and Ravine
-877,2,Western Great Plains Depressional Wetland Systems
-878,2,Inter-Mountain Basins Sparsely Vegetated Systems
-879,2,Rocky Mountain Aspen Forest and Woodland
-880,2,Colorado Plateau Pinyon-Juniper Woodland
-881,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-882,2,Rocky Mountain Lodgepole Pine Forest
-883,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-884,2,Southern Rocky Mountain Ponderosa Pine Woodland
-885,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-886,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-887,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-888,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-889,2,Inter-Mountain Basins Mat Saltbush Shrubland
-890,2,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe
-891,2,Inter-Mountain Basins Big Sagebrush Shrubland - Basin Big Sagebrush
-892,2,Inter-Mountain Basins Big Sagebrush Shrubland - Wyoming Big Sagebrush
-893,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-894,2,Rocky Mountain Lower Montane-Foothill Shrubland - No True Mountain Mahogany
-895,2,Rocky Mountain Lower Montane-Foothill Shrubland - True Mountain Mahogany
-896,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-897,2,Inter-Mountain Basins Juniper Savanna
-898,2,Inter-Mountain Basins Montane Sagebrush Steppe
-899,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-900,2,Inter-Mountain Basins Semi-Desert Grassland
-901,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-902,2,Rocky Mountain Alpine Turf
-903,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-904,2,Inter-Mountain Basins Greasewood Flat
-905,2,Rocky Mountain Montane Riparian Systems
-906,2,Western Great Plains Floodplain Systems
-907,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-908,2,Inter-Mountain Basins Sparsely Vegetated Systems
-909,2,Mediterranean California Sparsely Vegetated Systems
-910,2,Central and Southern California Mixed Evergreen Woodland
-911,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-912,2,Mediterranean California Mixed Oak Woodland
-913,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-914,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-915,2,Mediterranean California Mixed Evergreen Forest
-916,2,Sonora-Mojave Mixed Salt Desert Scrub
-917,2,California Mesic Chaparral
-918,2,Northern and Central California Dry-Mesic Chaparral
-919,2,Sonora-Mojave Semi-Desert Chaparral
-920,2,California Central Valley Mixed Oak Savanna
-921,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna
-922,2,California Central Valley and Southern Coastal Grassland
-923,2,North Pacific Montane Grassland
-924,2,California Central Valley Riparian Woodland and Shrubland
-925,2,California Montane Riparian Systems
-926,2,Pacific Coastal Marsh Systems
-927,2,North American Warm Desert Sparsely Vegetated Systems
-928,2,Central and Southern California Mixed Evergreen Woodland
-929,2,California Coastal Redwood Forest
-930,2,Great Basin Pinyon-Juniper Woodland
-931,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-932,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-933,2,Mediterranean California Mixed Oak Woodland
-934,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-935,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-936,2,Mediterranean California Mesic Serpentine Woodland and Chaparral
-937,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland
-938,2,Mojave Mid-Elevation Mixed Desert Scrub
-939,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-940,2,Sonora-Mojave Mixed Salt Desert Scrub
-941,2,Southern California Coastal Scrub
-942,2,California Maritime Chaparral
-943,2,California Mesic Chaparral
-944,2,California Montane Woodland and Chaparral
-945,2,California Xeric Serpentine Chaparral
-946,2,Northern and Central California Dry-Mesic Chaparral
-947,2,Sonora-Mojave Semi-Desert Chaparral
-948,2,Sonoran Paloverde-Mixed Cacti Desert Scrub
-949,2,Southern California Dry-Mesic Chaparral
-950,2,California Central Valley Mixed Oak Savanna
-951,2,California Coastal Live Oak Woodland and Savanna
-952,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna
-953,2,Southern California Oak Woodland and Savanna
-954,2,Northern California Coastal Scrub
-955,2,California Central Valley and Southern Coastal Grassland
-956,2,California Mesic Serpentine Grassland
-957,2,California Northern Coastal Grassland
-958,2,California Central Valley Riparian Woodland and Shrubland
-959,2,California Montane Riparian Systems
-960,2,North American Warm Desert Riparian Systems
-961,2,Pacific Coastal Marsh Systems
-962,2,California Coastal Closed-Cone Conifer Forest and Woodland
-963,2,Inter-Mountain Basins Sparsely Vegetated Systems
-964,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-965,2,Rocky Mountain Aspen Forest and Woodland
-966,2,Rocky Mountain Bigtooth Maple Ravine Woodland
-967,2,Colorado Plateau Pinyon-Juniper Woodland
-968,2,Great Basin Pinyon-Juniper Woodland
-969,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-970,2,Rocky Mountain Lodgepole Pine Forest
-971,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-972,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-973,2,Southern Rocky Mountain Ponderosa Pine Woodland
-974,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-975,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-976,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-977,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - Low Elevation
-978,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - High Elevation
-979,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-980,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-981,2,Rocky Mountain Alpine Dwarf-Shrubland
-982,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-983,2,Great Basin Xeric Mixed Sagebrush Shrubland
-984,2,Inter-Mountain Basins Big Sagebrush Shrubland
-985,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-986,2,Rocky Mountain Lower Montane-Foothill Shrubland
-987,2,Southern Colorado Plateau Sand Shrubland
-988,2,Colorado Plateau Pinyon-Juniper Shrubland
-989,2,Great Basin Semi-Desert Chaparral
-990,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland - Continuous
-991,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland - Patchy
-992,2,Inter-Mountain Basins Juniper Savanna
-993,2,Southern Rocky Mountain Ponderosa Pine Savanna
-994,2,Inter-Mountain Basins Big Sagebrush Steppe
-995,2,Inter-Mountain Basins Montane Sagebrush Steppe - Mountain Big Sagebrush
-996,2,Inter-Mountain Basins Montane Sagebrush Steppe - Low Sagebrush
-997,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-998,2,Inter-Mountain Basins Semi-Desert Grassland
-999,2,Rocky Mountain Alpine Turf
-1000,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-1001,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1002,2,Inter-Mountain Basins Greasewood Flat
-1003,2,Inter-Mountain Basins Montane Riparian Systems
-1004,2,Rocky Mountain Montane Riparian Systems
-1005,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1006,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1007,2,North American Warm Desert Sparsely Vegetated Systems
-1008,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-1009,2,Rocky Mountain Aspen Forest and Woodland
-1010,2,Colorado Plateau Pinyon-Juniper Woodland
-1011,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-1012,2,Rocky Mountain Lodgepole Pine Forest
-1013,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1014,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1015,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1016,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1017,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-1018,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-1019,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - Low Elevation
-1020,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - High Elevation
-1021,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1022,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-1023,2,Inter-Mountain Basins Mat Saltbush Shrubland
-1024,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-1025,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1026,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1027,2,Mojave Mid-Elevation Mixed Desert Scrub
-1028,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1029,2,Southern Colorado Plateau Sand Shrubland
-1030,2,Colorado Plateau Pinyon-Juniper Shrubland
-1031,2,Great Basin Semi-Desert Chaparral
-1032,2,Mogollon Chaparral
-1033,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1034,2,Inter-Mountain Basins Juniper Savanna
-1035,2,Southern Rocky Mountain Ponderosa Pine Savanna
-1036,2,Inter-Mountain Basins Big Sagebrush Steppe
-1037,2,Inter-Mountain Basins Montane Sagebrush Steppe - Mountain Big Sagebrush
-1038,2,Inter-Mountain Basins Montane Sagebrush Steppe - Low Sagebrush
-1039,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1040,2,Inter-Mountain Basins Semi-Desert Grassland
-1041,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1042,2,Inter-Mountain Basins Greasewood Flat
-1043,2,Rocky Mountain Montane Riparian Systems
-1044,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1045,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1046,2,North American Warm Desert Sparsely Vegetated Systems
-1047,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-1048,2,Rocky Mountain Aspen Forest and Woodland
-1049,2,Columbia Plateau Western Juniper Woodland and Savanna
-1050,2,Great Basin Pinyon-Juniper Woodland
-1051,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-1052,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-1053,2,Mediterranean California Mixed Oak Woodland
-1054,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-1055,2,Mediterranean California Subalpine Woodland
-1056,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1057,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-1058,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland
-1059,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1060,2,Great Basin Xeric Mixed Sagebrush Shrubland
-1061,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1062,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1063,2,Mojave Mid-Elevation Mixed Desert Scrub
-1064,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-1065,2,Sonora-Mojave Mixed Salt Desert Scrub
-1066,2,Great Basin Semi-Desert Chaparral
-1067,2,Columbia Plateau Low Sagebrush Steppe
-1068,2,Inter-Mountain Basins Big Sagebrush Steppe
-1069,2,Inter-Mountain Basins Montane Sagebrush Steppe
-1070,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1071,2,Inter-Mountain Basins Semi-Desert Grassland
-1072,2,Rocky Mountain Alpine Turf
-1073,2,Inter-Mountain Basins Greasewood Flat
-1074,2,Inter-Mountain Basins Montane Riparian Systems
-1075,2,Rocky Mountain Montane Riparian Systems
-1076,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1077,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1078,2,Rocky Mountain Aspen Forest and Woodland
-1079,2,Rocky Mountain Bigtooth Maple Ravine Woodland
-1080,2,Colorado Plateau Pinyon-Juniper Woodland
-1081,2,Great Basin Pinyon-Juniper Woodland
-1082,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-1083,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1084,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1085,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1086,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1087,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1088,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1089,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-1090,2,Great Basin Xeric Mixed Sagebrush Shrubland
-1091,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1092,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1093,2,Mojave Mid-Elevation Mixed Desert Scrub
-1094,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1095,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-1096,2,Great Basin Semi-Desert Chaparral
-1097,2,Mogollon Chaparral
-1098,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1099,2,Sonora-Mojave Semi-Desert Chaparral
-1100,2,Inter-Mountain Basins Juniper Savanna
-1101,2,Columbia Plateau Low Sagebrush Steppe
-1102,2,Inter-Mountain Basins Big Sagebrush Steppe
-1103,2,Inter-Mountain Basins Montane Sagebrush Steppe
-1104,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1105,2,Inter-Mountain Basins Semi-Desert Grassland
-1106,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-1107,2,Inter-Mountain Basins Greasewood Flat
-1108,2,Inter-Mountain Basins Montane Riparian Systems
-1109,2,Rocky Mountain Montane Riparian Systems
-1110,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1111,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1112,2,North American Warm Desert Sparsely Vegetated Systems
-1113,2,Rocky Mountain Aspen Forest and Woodland
-1114,2,Colorado Plateau Pinyon-Juniper Woodland
-1115,2,Madrean Encinal
-1116,2,Madrean Lower Montane Pine-Oak Forest and Woodland
-1117,2,Madrean Pinyon-Juniper Woodland
-1118,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1119,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1120,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1121,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1122,2,Southern Rocky Mountain Pinyon-Juniper Woodland
-1123,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - Low Elevation
-1124,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-1125,2,Inter-Mountain Basins Mat Saltbush Shrubland
-1126,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-1127,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1128,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1129,2,Southern Colorado Plateau Sand Shrubland
-1130,2,Colorado Plateau Pinyon-Juniper Shrubland
-1131,2,Mogollon Chaparral
-1132,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1133,2,Inter-Mountain Basins Juniper Savanna
-1134,2,Madrean Juniper Savanna
-1135,2,Southern Rocky Mountain Ponderosa Pine Savanna
-1136,2,Southern Rocky Mountain Juniper Woodland and Savanna
-1137,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe
-1138,2,Inter-Mountain Basins Big Sagebrush Steppe
-1139,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1140,2,Inter-Mountain Basins Semi-Desert Grassland
-1141,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-1142,2,Inter-Mountain Basins Greasewood Flat
-1143,2,Rocky Mountain Montane Riparian Systems
-1144,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1145,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-1146,2,Rocky Mountain Aspen Forest and Woodland
-1147,2,Colorado Plateau Pinyon-Juniper Woodland
-1148,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-1149,2,Rocky Mountain Lodgepole Pine Forest
-1150,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1151,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1152,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1153,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1154,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-1155,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-1156,2,Southern Rocky Mountain Pinyon-Juniper Woodland
-1157,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1158,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1159,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-1160,2,Rocky Mountain Alpine Dwarf-Shrubland
-1161,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1162,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1163,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1164,2,Colorado Plateau Pinyon-Juniper Shrubland
-1165,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1166,2,Inter-Mountain Basins Juniper Savanna
-1167,2,Southern Rocky Mountain Ponderosa Pine Savanna
-1168,2,Southern Rocky Mountain Juniper Woodland and Savanna
-1169,2,Inter-Mountain Basins Big Sagebrush Steppe
-1170,2,Inter-Mountain Basins Montane Sagebrush Steppe
-1171,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1172,2,Inter-Mountain Basins Semi-Desert Grassland
-1173,2,Rocky Mountain Alpine Fell-Field
-1174,2,Rocky Mountain Alpine Turf
-1175,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-1176,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1177,2,Inter-Mountain Basins Greasewood Flat
-1178,2,Rocky Mountain Montane Riparian Systems
-1179,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1180,2,North American Warm Desert Sparsely Vegetated Systems
-1181,2,Rocky Mountain Aspen Forest and Woodland
-1182,2,Colorado Plateau Pinyon-Juniper Woodland
-1183,2,Great Basin Pinyon-Juniper Woodland
-1184,2,Madrean Encinal
-1185,2,Madrean Lower Montane Pine-Oak Forest and Woodland
-1186,2,Madrean Pinyon-Juniper Woodland
-1187,2,Madrean Upper Montane Conifer-Oak Forest and Woodland
-1188,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1189,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1190,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1191,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1192,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-1193,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1194,2,Chihuahuan Succulent Desert Scrub
-1195,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1196,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1197,2,Mojave Mid-Elevation Mixed Desert Scrub
-1198,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-1199,2,Sonoran Mid-Elevation Desert Scrub
-1200,2,Chihuahuan Mixed Desert and Thorn Scrub
-1201,2,Colorado Plateau Pinyon-Juniper Shrubland
-1202,2,Mogollon Chaparral
-1203,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1204,2,Sonoran Paloverde-Mixed Cacti Desert Scrub
-1205,2,Inter-Mountain Basins Juniper Savanna
-1206,2,Madrean Juniper Savanna
-1207,2,Southern Rocky Mountain Ponderosa Pine Savanna
-1208,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe
-1209,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1210,2,Inter-Mountain Basins Semi-Desert Grassland
-1211,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1212,2,North American Warm Desert Riparian Systems
-1213,2,North American Warm Desert Riparian Systems - Stringers
-1214,2,Rocky Mountain Montane Riparian Systems
-1215,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1216,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1217,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-1218,2,Rocky Mountain Aspen Forest and Woodland
-1219,2,Rocky Mountain Bigtooth Maple Ravine Woodland
-1220,2,Columbia Plateau Western Juniper Woodland and Savanna
-1221,2,Great Basin Pinyon-Juniper Woodland
-1222,2,Northern Rocky Mountain Subalpine Woodland and Parkland
-1223,2,Rocky Mountain Lodgepole Pine Forest
-1224,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1225,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1226,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1227,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-1228,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-1229,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1230,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1231,2,Great Basin Xeric Mixed Sagebrush Shrubland
-1232,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1233,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1234,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1235,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-1236,2,Columbia Plateau Steppe and Grassland
-1237,2,Columbia Plateau Low Sagebrush Steppe
-1238,2,Inter-Mountain Basins Big Sagebrush Steppe
-1239,2,Inter-Mountain Basins Montane Sagebrush Steppe
-1240,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1241,2,Inter-Mountain Basins Semi-Desert Grassland
-1242,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-1243,2,Inter-Mountain Basins Greasewood Flat
-1244,2,Inter-Mountain Basins Montane Riparian Systems
-1245,2,Rocky Mountain Montane Riparian Systems
-1246,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1247,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-1248,2,Western Great Plains Sparsely Vegetated Systems
-1249,2,Rocky Mountain Aspen Forest and Woodland
-1250,2,Northwestern Great Plains Highland White Spruce Woodland
-1251,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-1252,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1253,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1254,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1255,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-1256,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-1257,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1258,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1259,2,Inter-Mountain Basins Mat Saltbush Shrubland
-1260,2,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe
-1261,2,Northwestern Great Plains Shrubland
-1262,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1263,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-1264,2,Southern Rocky Mountain Ponderosa Pine Savanna
-1265,2,Inter-Mountain Basins Big Sagebrush Steppe
-1266,2,Inter-Mountain Basins Montane Sagebrush Steppe
-1267,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-1268,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-1269,2,Northwestern Great Plains Mixedgrass Prairie
-1270,2,Rocky Mountain Subalpine-Montane Mesic Meadow
-1271,2,Western Great Plains Sand Prairie
-1272,2,Western Great Plains Shortgrass Prairie
-1273,2,Inter-Mountain Basins Greasewood Flat
-1274,2,Rocky Mountain Montane Riparian Systems
-1275,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems
-1276,2,Western Great Plains Floodplain Systems
-1277,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-1278,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Low Elevation Woodland
-1279,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Savanna
-1280,2,Western Great Plains Wooded Draw and Ravine
-1281,2,Western Great Plains Sparsely Vegetated Systems
-1282,2,Northwestern Great Plains Shrubland
-1283,2,Inter-Mountain Basins Big Sagebrush Steppe
-1284,2,Northwestern Great Plains Mixedgrass Prairie
-1285,2,Western Great Plains Sand Prairie
-1286,2,Inter-Mountain Basins Greasewood Flat
-1287,2,Western Great Plains Floodplain Systems
-1288,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Low Elevation Woodland
-1289,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Savanna
-1290,2,Western Great Plains Wooded Draw and Ravine
-1291,2,Great Plains Prairie Pothole
-1292,2,Western Great Plains Depressional Wetland Systems
-1293,2,Southern Coastal Plain Dry Upland Hardwood Forest
-1294,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest
-1295,2,Atlantic Coastal Plain Mesic Hardwood Forest
-1296,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland
-1297,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland
-1298,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland
-1299,2,Florida Longleaf Pine Sandhill
-1300,2,Southern Coastal Plain Mesic Slope Forest
-1301,2,East Gulf Coastal Plain Maritime Forest
-1302,2,Southern Atlantic Coastal Plain Maritime Forest
-1303,2,Florida Peninsula Inland Scrub
-1304,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods
-1305,2,Central Florida Pine Flatwoods
-1306,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods
-1307,2,Southern Coastal Plain Nonriverine Cypress Dome
-1308,2,Southern Coastal Plain Seepage Swamp and Baygall
-1309,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall
-1310,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1311,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1312,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1313,2,East Gulf Coastal Plain Savanna and Wet Prairie
-1314,2,Floridian Highlands Freshwater Marsh
-1315,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1316,2,Southern Coastal Plain Dry Upland Hardwood Forest
-1317,2,South Florida Hardwood Hammock
-1318,2,Southwest Florida Coastal Strand and Maritime Hammock
-1319,2,Southeast Florida Coastal Strand and Maritime Hammock
-1320,2,Florida Longleaf Pine Sandhill
-1321,2,South Florida Pine Rockland
-1322,2,Florida Peninsula Inland Scrub
-1323,2,Florida Dry Prairie
-1324,2,South Florida Dwarf Cypress Savanna
-1325,2,South Florida Pine Flatwoods
-1326,2,South Florida Cypress Dome
-1327,2,Central Florida Pine Flatwoods
-1328,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods
-1329,2,Southern Coastal Plain Nonriverine Cypress Dome
-1330,2,Southern Coastal Plain Seepage Swamp and Baygall
-1331,2,Caribbean Coastal Wetland Systems
-1332,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1333,2,Caribbean Swamp Systems
-1334,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1335,2,South Florida Everglades Sawgrass Marsh
-1336,2,Floridian Highlands Freshwater Marsh
-1337,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1338,2,North American Warm Desert Sparsely Vegetated Systems
-1339,2,Colorado Plateau Pinyon-Juniper Woodland
-1340,2,Madrean Encinal
-1341,2,Madrean Lower Montane Pine-Oak Forest and Woodland
-1342,2,Madrean Pinyon-Juniper Woodland
-1343,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1344,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1345,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1346,2,Southern Rocky Mountain Pinyon-Juniper Woodland
-1347,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1348,2,Chihuahuan Creosotebush Desert Scrub
-1349,2,Chihuahuan Mixed Salt Desert Scrub
-1350,2,Chihuahuan Succulent Desert Scrub
-1351,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1352,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-1353,2,Sonora-Mojave Mixed Salt Desert Scrub
-1354,2,Sonoran Mid-Elevation Desert Scrub
-1355,2,Western Great Plains Sandhill Steppe
-1356,2,Chihuahuan Mixed Desert Shrubland
-1357,2,Chihuahuan Grama Grass-Creosote Steppe
-1358,2,Madrean Oriental Chaparral
-1359,2,Mogollon Chaparral
-1360,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1361,2,Sonora-Mojave Semi-Desert Chaparral
-1362,2,Sonoran Paloverde-Mixed Cacti Desert Scrub
-1363,2,Madrean Juniper Savanna
-1364,2,Southern Rocky Mountain Juniper Woodland and Savanna
-1365,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe
-1366,2,Chihuahuan Gypsophilous Grassland and Steppe
-1367,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-1368,2,Chihuahuan Sandy Plains Semi-Desert Grassland
-1369,2,Inter-Mountain Basins Semi-Desert Grassland
-1370,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1371,2,Western Great Plains Shortgrass Prairie
-1372,2,Inter-Mountain Basins Greasewood Flat
-1373,2,North American Warm Desert Riparian Systems
-1374,2,Rocky Mountain Montane Riparian Systems
-1375,2,Chihuahuan Loamy Plains Desert Grassland
-1376,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland
-1377,2,North American Warm Desert Sparsely Vegetated Systems
-1378,2,Madrean Lower Montane Pine-Oak Forest and Woodland
-1379,2,Madrean Pinyon-Juniper Woodland
-1380,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1381,2,Southern Rocky Mountain Pinyon-Juniper Woodland
-1382,2,Chihuahuan Creosotebush Desert Scrub
-1383,2,Chihuahuan Mixed Salt Desert Scrub
-1384,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub
-1385,2,Chihuahuan Succulent Desert Scrub
-1386,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1387,2,Western Great Plains Sandhill Steppe
-1388,2,Apacherian-Chihuahuan Mesquite Upland Scrub
-1389,2,Chihuahuan Mixed Desert and Thorn Scrub
-1390,2,Madrean Oriental Chaparral
-1391,2,Western Great Plains Mesquite Woodland and Shrubland
-1392,2,Madrean Juniper Savanna
-1393,2,Southern Rocky Mountain Juniper Woodland and Savanna
-1394,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe
-1395,2,Chihuahuan Gypsophilous Grassland and Steppe
-1396,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1397,2,Western Great Plains Shortgrass Prairie
-1398,2,North American Warm Desert Riparian Systems
-1399,2,Rocky Mountain Montane Riparian Systems
-1400,2,Edwards Plateau Limestone Shrubland
-1401,2,Western Great Plains Depressional Wetland Systems - Playa
-1402,2,Chihuahuan Loamy Plains Desert Grassland
-1403,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Tobosa Grassland
-1404,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Alkali Sacaton
-1405,2,Southern Rocky Mountain Ponderosa Pine Woodland
-1406,2,Southern Rocky Mountain Pinyon-Juniper Woodland
-1407,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1408,2,Inter-Mountain Basins Mixed Salt Desert Scrub
-1409,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1410,2,Western Great Plains Sandhill Steppe
-1411,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1412,2,Western Great Plains Mesquite Woodland and Shrubland
-1413,2,Southern Rocky Mountain Ponderosa Pine Savanna
-1414,2,Inter-Mountain Basins Montane Sagebrush Steppe
-1415,2,Central Mixedgrass Prairie
-1416,2,Western Great Plains Foothill and Piedmont Grassland
-1417,2,Western Great Plains Shortgrass Prairie
-1418,2,Rocky Mountain Montane Riparian Systems
-1419,2,Western Great Plains Floodplain Systems
-1420,2,Northwestern Great Plains Canyon
-1421,2,Western Great Plains Depressional Wetland Systems
-1422,2,Western Great Plains Sparsely Vegetated Systems
-1423,2,Western Great Plains Sandhill Steppe
-1424,2,Western Great Plains Mesquite Woodland and Shrubland
-1425,2,Southern Rocky Mountain Juniper Woodland and Savanna
-1426,2,Central Mixedgrass Prairie
-1427,2,Western Great Plains Sand Prairie
-1428,2,Western Great Plains Shortgrass Prairie
-1429,2,Western Great Plains Floodplain Systems
-1430,2,Edwards Plateau Limestone Shrubland
-1431,2,Western Great Plains Depressional Wetland Systems - Playa
-1432,2,Western Great Plains Depressional Wetland Systems - Saline
-1433,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Tobosa Grassland
-1434,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Alkali Sacaton
-1435,2,West Gulf Coastal Plain Mesic Hardwood Forest
-1436,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland
-1437,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland
-1438,2,West Gulf Coastal Plain Pine-Hardwood Forest
-1439,2,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland
-1440,2,Southern Blackland Tallgrass Prairie
-1441,2,West Gulf Coastal Plain Northern Calcareous Prairie
-1442,2,West Gulf Coastal Plain Southern Calcareous Prairie
-1443,2,Texas-Louisiana Coastal Prairie
-1444,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-1445,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods
-1446,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1447,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1448,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1449,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1450,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods
-1451,2,East-Central Texas Plains Post Oak Savanna and Woodland
-1452,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest
-1453,2,Atlantic Coastal Plain Mesic Hardwood Forest
-1454,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland
-1455,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland
-1456,2,Southern Coastal Plain Mesic Slope Forest
-1457,2,Central Atlantic Coastal Plain Maritime Forest
-1458,2,Southern Atlantic Coastal Plain Maritime Forest
-1459,2,Southern Atlantic Coastal Plain Dune and Maritime Grassland
-1460,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-1461,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods
-1462,2,Atlantic Coastal Plain Peatland Pocosin and Canebrake
-1463,2,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland
-1464,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall
-1465,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1466,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1467,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1468,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1469,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest
-1470,2,Inter-Mountain Basins Sparsely Vegetated Systems
-1471,2,Western Great Plains Sparsely Vegetated Systems
-1472,2,Rocky Mountain Aspen Forest and Woodland
-1473,2,Rocky Mountain Bigtooth Maple Ravine Woodland
-1474,2,Madrean Lower Montane Pine-Oak Forest and Woodland
-1475,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-1476,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-1477,2,Southern Rocky Mountain Ponderosa Pine Woodland - South
-1478,2,Southern Rocky Mountain Ponderosa Pine Woodland - North
-1479,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-1480,2,Southern Rocky Mountain Pinyon-Juniper Woodland
-1481,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-1482,2,Colorado Plateau Mixed Low Sagebrush Shrubland
-1483,2,Inter-Mountain Basins Mixed Salt Desert Scrub - South
-1484,2,Inter-Mountain Basins Mixed Salt Desert Scrub - North
-1485,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1486,2,Western Great Plains Sandhill Steppe
-1487,2,Apacherian-Chihuahuan Mesquite Upland Scrub
-1488,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-1489,2,Western Great Plains Mesquite Woodland and Shrubland
-1490,2,Southern Rocky Mountain Ponderosa Pine Savanna - South
-1491,2,Southern Rocky Mountain Ponderosa Pine Savanna - North
-1492,2,Southern Rocky Mountain Juniper Woodland and Savanna
-1493,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe
-1494,2,Chihuahuan Gypsophilous Grassland and Steppe
-1495,2,Southern Rocky Mountain Montane-Subalpine Grassland
-1496,2,Western Great Plains Foothill and Piedmont Grassland
-1497,2,Western Great Plains Shortgrass Prairie
-1498,2,Inter-Mountain Basins Greasewood Flat
-1499,2,Rocky Mountain Montane Riparian Systems
-1500,2,Western Great Plains Floodplain Systems
-1501,2,Western Great Plains Depressional Wetland Systems
-1502,2,Chihuahuan Loamy Plains Desert Grassland
-1503,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland
-1504,2,West Gulf Coastal Plain Mesic Hardwood Forest
-1505,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland
-1506,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland
-1507,2,West Gulf Coastal Plain Pine-Hardwood Forest
-1508,2,Mississippi Delta Maritime Forest
-1509,2,Texas-Louisiana Coastal Prairie
-1510,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-1511,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods
-1512,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1513,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1514,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1515,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1516,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems
-1517,2,Southern Crowley`s Ridge Mesic Loess Slope Forest
-1518,2,West Gulf Coastal Plain Mesic Hardwood Forest
-1519,2,East Gulf Coastal Plain Northern Loess Bluff Forest
-1520,2,East Gulf Coastal Plain Southern Loess Bluff Forest
-1521,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland
-1522,2,West Gulf Coastal Plain Pine-Hardwood Forest
-1523,2,Lower Mississippi River Dune Woodland and Forest
-1524,2,West Gulf Coastal Plain Southern Calcareous Prairie
-1525,2,Lower Mississippi Alluvial Plain Grand Prairie
-1526,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods
-1527,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1528,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1529,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1530,2,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest
-1531,2,Northern Crowley`s Ridge Sand Forest
-1532,2,Lower Mississippi River Flatwoods
-1561,2,Laurentian-Acadian Northern Hardwoods Forest
-1562,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock
-1563,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-1564,2,North-Central Interior Dry Oak Forest and Woodland
-1565,2,North-Central Interior Beech-Maple Forest
-1566,2,North-Central Interior Maple-Basswood Forest
-1567,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1568,2,Boreal White Spruce-Fir-Hardwood Forest - Inland
-1569,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-1570,2,North-Central Interior Oak Savanna
-1571,2,North-Central Oak Barrens
-1572,2,Laurentian Pine-Oak Barrens
-1573,2,Laurentian-Acadian Jack Pine Barrens and Forest
-1574,2,Great Lakes Alvar
-1575,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-1576,2,Central Tallgrass Prairie
-1577,2,Eastern Boreal Floodplain
-1578,2,Great Lakes Wooded Dune and Swale
-1579,2,Central Interior and Appalachian Floodplain Systems
-1580,2,Laurentian-Acadian Floodplain Systems
-1581,2,Boreal Acidic Peatland Systems
-1582,2,Central Interior and Appalachian Swamp Systems
-1583,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp
-1584,2,Great Lakes Coastal Marsh Systems
-1585,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems
-1586,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1587,2,Paleozoic Plateau Bluff and Talus
-1588,2,Laurentian-Acadian Northern Hardwoods Forest
-1589,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock
-1590,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-1591,2,North-Central Interior Maple-Basswood Forest
-1592,2,Eastern Great Plains Tallgrass Aspen Parkland
-1593,2,Boreal Jack Pine-Black Spruce Forest
-1594,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1595,2,Laurentian-Acadian Northern Pine Forest
-1596,2,Boreal White Spruce-Fir-Hardwood Forest - Inland
-1597,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal
-1598,2,Boreal White Spruce-Fir-Hardwood Forest - Aspen-Birch
-1599,2,North-Central Interior Oak Savanna
-1600,2,North-Central Oak Barrens
-1601,2,Laurentian Pine-Oak Barrens
-1602,2,Laurentian-Acadian Jack Pine Barrens and Forest
-1603,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-1604,2,Northern Tallgrass Prairie
-1605,2,Eastern Boreal Floodplain
-1606,2,Central Interior and Appalachian Floodplain Systems
-1607,2,Laurentian-Acadian Floodplain Systems
-1608,2,Boreal Acidic Peatland Systems
-1609,2,Central Interior and Appalachian Swamp Systems
-1610,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp
-1611,2,Great Lakes Coastal Marsh Systems
-1612,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems
-1613,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1614,2,Laurentian-Acadian Northern Hardwoods Forest
-1615,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock
-1616,2,Northern Sugar Maple-Basswood Forest
-1617,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-1618,2,North-Central Interior Dry Oak Forest and Woodland
-1619,2,North-Central Interior Beech-Maple Forest
-1620,2,Great Lakes Pine Barrens
-1621,2,Great Lakes Spruce-Fir
-1622,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1623,2,Boreal White Spruce-Fir-Hardwood Forest - Inland
-1624,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal
-1625,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-1626,2,North-Central Interior Oak Savanna
-1627,2,North-Central Oak Barrens
-1628,2,Laurentian Pine-Oak Barrens
-1629,2,Laurentian-Acadian Jack Pine Barrens and Forest
-1630,2,Great Lakes Wet-Mesic Lakeplain Prairie
-1631,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-1632,2,Central Tallgrass Prairie
-1633,2,Eastern Boreal Floodplain
-1634,2,Great Lakes Wooded Dune and Swale
-1635,2,Central Interior and Appalachian Floodplain Systems
-1636,2,Laurentian-Acadian Floodplain Systems
-1637,2,Boreal Acid Peatland Systems
-1638,2,Central Interior and Appalachian Swamp Systems
-1639,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp
-1640,2,Great Lakes Coastal Marsh Systems
-1641,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1642,2,Western Great Plains Dry Bur Oak Forest and Woodland
-1643,2,Northwestern Great Plains Mixedgrass Prairie
-1644,2,Western Great Plains Tallgrass Prairie
-1645,2,Western Great Plains Floodplain Systems
-1646,2,Boreal Aspen-Birch Forest
-1647,2,Laurentian-Acadian Northern Hardwoods Forest
-1648,2,North-Central Interior Maple-Basswood Forest
-1649,2,Eastern Great Plains Tallgrass Aspen Parkland
-1650,2,Boreal White Spruce-Fir-Hardwood Forest - Inland
-1651,2,Western Great Plains Wooded Draw and Ravine
-1652,2,North-Central Interior Oak Savanna
-1653,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-1654,2,Northern Tallgrass Prairie
-1655,2,Eastern Great Plains Floodplain Systems
-1656,2,Boreal Acidic Peatland Systems
-1657,2,Great Plains Prairie Pothole
-1658,2,Western Great Plains Depressional Wetland Systems
-1659,2,Western Great Plains Dry Bur Oak Forest and Woodland
-1660,2,Northwestern Great Plains Mixedgrass Prairie
-1661,2,Western Great Plains Tallgrass Prairie
-1662,2,Western Great Plains Floodplain Systems
-1663,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-1664,2,North-Central Interior Dry Oak Forest and Woodland
-1665,2,North-Central Interior Maple-Basswood Forest
-1666,2,Eastern Great Plains Tallgrass Aspen Parkland
-1667,2,Western Great Plains Wooded Draw and Ravine
-1668,2,North-Central Interior Oak Savanna
-1669,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-1670,2,Northern Tallgrass Prairie
-1671,2,Eastern Great Plains Floodplain Systems
-1672,2,Great Plains Prairie Pothole
-1673,2,Western Great Plains Depressional Wetland Systems
-1674,2,Western Great Plains Sparsely Vegetated Systems
-1675,2,Western Great Plains Dry Bur Oak Forest and Woodland
-1676,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland
-1677,2,Inter-Mountain Basins Big Sagebrush Shrubland
-1678,2,Rocky Mountain Lower Montane-Foothill Shrubland
-1679,2,Western Great Plains Sandhill Steppe
-1680,2,Inter-Mountain Basins Big Sagebrush Steppe
-1681,2,Central Mixedgrass Prairie
-1682,2,Northwestern Great Plains Mixedgrass Prairie
-1683,2,Western Great Plains Sand Prairie
-1684,2,Western Great Plains Shortgrass Prairie
-1685,2,Western Great Plains Tallgrass Prairie
-1686,2,Western Great Plains Floodplain Systems
-1687,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna
-1688,2,Western Great Plains Wooded Draw and Ravine
-1689,2,Central Tallgrass Prairie
-1690,2,Eastern Great Plains Floodplain Systems
-1691,2,Western Great Plains Depressional Wetland Systems
-1692,2,Western Great Plains Sandhill Steppe
-1693,2,Western Great Plains Mesquite Woodland and Shrubland
-1694,2,Central Mixedgrass Prairie
-1695,2,Western Great Plains Sand Prairie
-1696,2,Western Great Plains Floodplain Systems
-1697,2,Ozark-Ouachita Dry-Mesic Oak Forest
-1698,2,Crosstimbers Oak Forest and Woodland
-1699,2,West Gulf Coastal Plain Mesic Hardwood Forest
-1700,2,Ozark-Ouachita Mesic Hardwood Forest
-1701,2,Ozark-Ouachita Dry Oak Woodland
-1702,2,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland
-1703,2,West Gulf Coastal Plain Pine-Hardwood Forest
-1704,2,Edwards Plateau Limestone Savanna and Woodland
-1705,2,Edwards Plateau Limestone Shrubland
-1706,2,Southern Blackland Tallgrass Prairie
-1707,2,Southeastern Great Plains Tallgrass Prairie
-1708,2,Central Interior and Appalachian Floodplain Systems
-1709,2,Central Interior and Appalachian Riparian Systems
-1710,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1711,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1712,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland
-1713,2,East-Central Texas Plains Post Oak Savanna and Woodland
-1714,2,Edwards Plateau Dry-Mesic Slope Forest and Woodland
-1715,2,Western Great Plains Sandhill Steppe
-1716,2,Apacherian-Chihuahuan Mesquite Upland Scrub
-1717,2,Western Great Plains Mesquite Woodland and Shrubland
-1718,2,Central Mixedgrass Prairie
-1719,2,Western Great Plains Sand Prairie
-1720,2,Western Great Plains Shortgrass Prairie
-1721,2,North American Warm Desert Riparian Systems
-1722,2,Western Great Plains Floodplain Systems
-1723,2,Crosstimbers Oak Forest and Woodland
-1724,2,East-Central Texas Plains Southern Pine Forest and Woodland
-1725,2,Edwards Plateau Limestone Savanna and Woodland
-1726,2,Tamaulipan Mixed Deciduous Thornscrub
-1727,2,Tamaulipan Calcareous Thornscrub
-1728,2,Edwards Plateau Limestone Shrubland
-1729,2,Llano Uplift Acidic Forest-Woodland-Glade
-1730,2,Southern Blackland Tallgrass Prairie
-1731,2,Southeastern Great Plains Tallgrass Prairie
-1732,2,Central Interior and Appalachian Floodplain Systems
-1733,2,Central Interior and Appalachian Riparian Systems
-1734,2,Western Great Plains Depressional Wetland Systems
-1735,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland
-1736,2,East-Central Texas Plains Post Oak Savanna and Woodland
-1737,2,Edwards Plateau Dry-Mesic Slope Forest and Woodland
-1738,2,Edwards Plateau Mesic Canyon
-1739,2,Edwards Plateau Riparian
-1740,2,West Gulf Coastal Plain Mesic Hardwood Forest
-1741,2,Central and South Texas Coastal Fringe Forest and Woodland
-1742,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland
-1743,2,East-Central Texas Plains Southern Pine Forest and Woodland
-1744,2,West Gulf Coastal Plain Pine-Hardwood Forest
-1745,2,Edwards Plateau Limestone Savanna and Woodland
-1746,2,Tamaulipan Mixed Deciduous Thornscrub
-1747,2,Tamaulipan Calcareous Thornscrub
-1748,2,Southern Blackland Tallgrass Prairie
-1749,2,Texas-Louisiana Coastal Prairie
-1750,2,Central and Upper Texas Coast Dune and Coastal Grassland
-1751,2,Tamaulipan Savanna Grassland
-1752,2,South Texas Lomas
-1753,2,Tamaulipan Clay Grassland
-1754,2,South Texas Sand Sheet Grassland
-1755,2,Tamaulipan Floodplain
-1756,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1757,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1758,2,Tamaulipan Riparian Systems
-1759,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1760,2,Texas-Louisiana Saline Coastal Prairie
-1761,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1762,2,Western Great Plains Depressional Wetland Systems
-1763,2,East-Central Texas Plains Post Oak Savanna and Woodland
-1764,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest
-1765,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest
-1766,2,East Gulf Coastal Plain Northern Loess Bluff Forest
-1767,2,East Gulf Coastal Plain Limestone Forest
-1768,2,East Gulf Coastal Plain Southern Loess Bluff Forest
-1769,2,Southern Coastal Plain Dry Upland Hardwood Forest
-1770,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland
-1771,2,Southern Appalachian Low-Elevation Pine Forest
-1772,2,Southern Coastal Plain Mesic Slope Forest
-1773,2,Southern Piedmont Dry Oak(-Pine) Forest
-1774,2,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest
-1775,2,Southern Coastal Plain Blackland Prairie and Woodland
-1776,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods
-1777,2,Southern Coastal Plain Seepage Swamp and Baygall
-1778,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall
-1779,2,Central Interior and Appalachian Riparian Systems
-1780,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1781,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1782,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1783,2,East Gulf Coastal Plain Limestone Forest
-1784,2,East Gulf Coastal Plain Southern Loess Bluff Forest
-1785,2,Southern Coastal Plain Dry Upland Hardwood Forest
-1786,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland
-1787,2,Florida Longleaf Pine Sandhill
-1788,2,Southern Coastal Plain Mesic Slope Forest
-1789,2,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest
-1790,2,East Gulf Coastal Plain Maritime Forest
-1791,2,East Gulf Coastal Plain Dune and Coastal Grassland
-1792,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods
-1793,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods
-1794,2,Southern Coastal Plain Nonriverine Cypress Dome
-1795,2,Southern Coastal Plain Seepage Swamp and Baygall
-1796,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall
-1797,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1798,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1799,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1800,2,East Gulf Coastal Plain Savanna and Wet Prairie
-1801,2,Floridian Highlands Freshwater Marsh
-1802,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1803,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems
-1804,2,Southern Appalachian Oak Forest
-1805,2,Southern Piedmont Mesic Forest
-1806,2,Southern and Central Appalachian Cove Forest
-1807,2,Piedmont Hardpan Woodland and Forest
-1808,2,Southeastern Interior Longleaf Pine Woodland
-1809,2,Southern Appalachian Montane Pine Forest and Woodland
-1810,2,Southern Appalachian Low-Elevation Pine Forest
-1811,2,Southern Piedmont Dry Oak(-Pine) Forest
-1812,2,Central Interior and Appalachian Floodplain Systems
-1813,2,Central Interior and Appalachian Riparian Systems
-1814,2,Southern Appalachian Northern Hardwood Forest
-1815,2,Southern Appalachian Oak Forest
-1816,2,Southern Piedmont Mesic Forest
-1817,2,Allegheny-Cumberland Dry Oak Forest and Woodland
-1818,2,Southern and Central Appalachian Cove Forest
-1819,2,Central and Southern Appalachian Montane Oak Forest
-1820,2,South-Central Interior Mesophytic Forest
-1821,2,Central and Southern Appalachian Spruce-Fir Forest
-1822,2,Southern Appalachian Montane Pine Forest and Woodland
-1823,2,Southern Appalachian Low-Elevation Pine Forest
-1824,2,Southern Piedmont Dry Oak(-Pine) Forest
-1825,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest
-1826,2,Southern Appalachian Grass and Shrub Bald
-1827,2,Central Interior and Appalachian Floodplain Systems
-1828,2,Central Interior and Appalachian Riparian Systems
-1829,2,Southern Piedmont Mesic Forest
-1830,2,Southern Coastal Plain Dry Upland Hardwood Forest
-1831,2,Atlantic Coastal Plain Mesic Hardwood Forest
-1832,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland
-1833,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland
-1834,2,Southeastern Interior Longleaf Pine Woodland
-1835,2,Southern Appalachian Montane Pine Forest and Woodland
-1836,2,Southern Appalachian Low-Elevation Pine Forest
-1837,2,Southern Piedmont Dry Oak(-Pine) Forest
-1838,2,Central Interior and Appalachian Floodplain Systems
-1839,2,Central Interior and Appalachian Riparian Systems
-1840,2,Northeastern Interior Dry-Mesic Oak Forest
-1841,2,Southern Piedmont Mesic Forest
-1842,2,Northern Atlantic Coastal Plain Hardwood Forest
-1843,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest
-1844,2,Atlantic Coastal Plain Mesic Hardwood Forest
-1845,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland
-1846,2,Southern Appalachian Montane Pine Forest and Woodland
-1847,2,Southern Appalachian Low-Elevation Pine Forest
-1848,2,Northern Atlantic Coastal Plain Pitch Pine Barrens
-1849,2,Central Atlantic Coastal Plain Maritime Forest
-1850,2,Southern Piedmont Dry Oak(-Pine) Forest
-1851,2,Central Appalachian Dry Oak-Pine Forest
-1852,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1853,2,Eastern Serpentine Woodland
-1854,2,Central Appalachian Pine-Oak Rocky Woodland
-1855,2,Northern Atlantic Coastal Plain Maritime Forest
-1856,2,Central Appalachian Alkaline Glade and Woodland
-1857,2,Northern Atlantic Coastal Plain Dune and Swale
-1858,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-1859,2,Atlantic Coastal Plain Peatland Pocosin and Canebrake
-1860,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall
-1861,2,Central Interior and Appalachian Floodplain Systems
-1862,2,Central Interior and Appalachian Riparian Systems
-1863,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-1864,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-1865,2,Central Interior and Appalachian Swamp Systems
-1866,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1867,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1868,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems
-1869,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest
-1870,2,Northeastern Interior Dry-Mesic Oak Forest
-1871,2,Southern Appalachian Oak Forest
-1872,2,Southern Piedmont Mesic Forest
-1873,2,Allegheny-Cumberland Dry Oak Forest and Woodland
-1874,2,Southern and Central Appalachian Cove Forest
-1875,2,Central and Southern Appalachian Montane Oak Forest
-1876,2,South-Central Interior Mesophytic Forest
-1877,2,Appalachian Shale Barrens
-1878,2,Central and Southern Appalachian Spruce-Fir Forest
-1879,2,Southern Appalachian Montane Pine Forest and Woodland
-1880,2,Southern Appalachian Low-Elevation Pine Forest
-1881,2,Southern Piedmont Dry Oak(-Pine) Forest
-1882,2,Central Appalachian Dry Oak-Pine Forest
-1883,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1884,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest
-1885,2,Central Appalachian Pine-Oak Rocky Woodland
-1886,2,Central Appalachian Alkaline Glade and Woodland
-1887,2,Central Interior and Appalachian Floodplain Systems
-1888,2,Central Interior and Appalachian Riparian Systems
-1889,2,Central Interior and Appalachian Swamp Systems
-1890,2,Laurentian-Acadian Northern Hardwoods Forest
-1891,2,Northeastern Interior Dry-Mesic Oak Forest
-1892,2,South-Central Interior Mesophytic Forest
-1893,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1894,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-1895,2,Central Appalachian Dry Oak-Pine Forest
-1896,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1897,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest
-1898,2,Central Appalachian Pine-Oak Rocky Woodland
-1899,2,Central Appalachian Alkaline Glade and Woodland
-1900,2,Central Interior and Appalachian Floodplain Systems
-1901,2,Central Interior and Appalachian Riparian Systems
-1902,2,Laurentian-Acadian Floodplain Systems
-1903,2,Boreal Acidic Peatland Systems
-1904,2,Central Interior and Appalachian Swamp Systems
-1905,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp
-1906,2,Great Lakes Coastal Marsh Systems
-1907,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1908,2,North-Central Interior Wet Flatwoods
-1909,2,Northeastern Interior Dry-Mesic Oak Forest
-1910,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-1911,2,North-Central Interior Beech-Maple Forest
-1912,2,Allegheny-Cumberland Dry Oak Forest and Woodland
-1913,2,South-Central Interior Mesophytic Forest
-1914,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1915,2,Central Interior and Appalachian Floodplain Systems
-1916,2,Central Interior and Appalachian Riparian Systems
-1917,2,Central Interior and Appalachian Swamp Systems
-1918,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems
-1919,2,North-Central Interior Wet Flatwoods
-1920,2,Laurentian-Acadian Northern Hardwoods Forest
-1921,2,Northeastern Interior Dry-Mesic Oak Forest
-1922,2,Northern Atlantic Coastal Plain Hardwood Forest
-1923,2,Northern Atlantic Coastal Plain Pitch Pine Barrens
-1924,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1925,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-1926,2,Central Appalachian Dry Oak-Pine Forest
-1927,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1928,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest
-1929,2,Acadian-Appalachian Montane Spruce-Fir Forest
-1930,2,Central Appalachian Pine-Oak Rocky Woodland
-1931,2,Northern Atlantic Coastal Plain Maritime Forest
-1932,2,Northern Atlantic Coastal Plain Dune and Swale
-1933,2,Central Interior and Appalachian Floodplain Systems
-1934,2,Central Interior and Appalachian Riparian Systems
-1935,2,Laurentian-Acadian Floodplain Systems
-1936,2,Boreal Acidic Peatland Systems
-1937,2,Central Interior and Appalachian Swamp Systems
-1938,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1939,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1940,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1941,2,North-Central Interior Wet Flatwoods
-1942,2,Laurentian-Acadian Swamp Systems
-1943,2,Laurentian-Acadian Northern Hardwoods Forest
-1944,2,Northeastern Interior Dry-Mesic Oak Forest
-1945,2,Northeastern Interior Pine Barrens
-1946,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1947,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-1948,2,Central Appalachian Dry Oak-Pine Forest
-1949,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1950,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest
-1951,2,Acadian-Appalachian Montane Spruce-Fir Forest
-1952,2,Central Appalachian Pine-Oak Rocky Woodland
-1953,2,Acadian-Appalachian Subalpine Woodland and Heath-Krummholz
-1954,2,Central Appalachian Alkaline Glade and Woodland
-1955,2,Great Lakes Alvar
-1956,2,Central Interior and Appalachian Floodplain Systems
-1957,2,Central Interior and Appalachian Riparian Systems
-1958,2,Laurentian-Acadian Floodplain Systems
-1959,2,Boreal Acidic Peatland Systems
-1960,2,Central Interior and Appalachian Swamp Systems
-1961,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1962,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1963,2,North-Central Interior Wet Flatwoods
-1964,2,Laurentian-Acadian Swamp Systems
-1965,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-1966,2,North-Central Interior Dry Oak Forest and Woodland
-1967,2,North-Central Interior Beech-Maple Forest
-1968,2,North-Central Interior Oak Savanna
-1969,2,North-Central Oak Barrens
-1970,2,Great Lakes Wet-Mesic Lakeplain Prairie
-1971,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-1972,2,Central Tallgrass Prairie
-1973,2,Central Interior and Appalachian Floodplain Systems
-1974,2,Central Interior and Appalachian Swamp Systems
-1975,2,Great Lakes Coastal Marsh Systems
-1976,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems
-1977,2,North-Central Interior Wet Flatwoods
-1978,2,Laurentian-Acadian Northern Hardwoods Forest
-1979,2,Northern Atlantic Coastal Plain Hardwood Forest
-1980,2,Boreal Jack Pine-Black Spruce Forest
-1981,2,Northeastern Interior Pine Barrens
-1982,2,Laurentian-Acadian Northern Pine(-Oak) Forest
-1983,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-1984,2,Central Appalachian Dry Oak-Pine Forest
-1985,2,Appalachian (Hemlock-)Northern Hardwood Forest
-1986,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest
-1987,2,Acadian-Appalachian Montane Spruce-Fir Forest
-1988,2,Central Appalachian Pine-Oak Rocky Woodland
-1989,2,Acadian-Appalachian Alpine Tundra
-1990,2,Acadian-Appalachian Subalpine Woodland and Heath-Krummholz
-1991,2,Northern Atlantic Coastal Plain Dune and Swale
-1992,2,Central Interior and Appalachian Riparian Systems
-1993,2,Laurentian-Acadian Floodplain Systems
-1994,2,Boreal Acidic Peatland Systems
-1995,2,Central Interior and Appalachian Swamp Systems
-1996,2,Gulf and Atlantic Coastal Plain Swamp Systems
-1997,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems
-1998,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems
-1999,2,Laurentian-Acadian Swamp Systems
-2000,2,Southern Interior Low Plateau Dry-Mesic Oak Forest
-2001,2,Southern Appalachian Northern Hardwood Forest
-2002,2,Southern Appalachian Oak Forest
-2003,2,Allegheny-Cumberland Dry Oak Forest and Woodland
-2004,2,Southern and Central Appalachian Cove Forest
-2005,2,South-Central Interior Mesophytic Forest
-2006,2,Southern Appalachian Montane Pine Forest and Woodland
-2007,2,Southern Appalachian Low-Elevation Pine Forest
-2008,2,Central Interior Highlands Dry Acidic Glade and Barrens
-2009,2,Appalachian (Hemlock-)Northern Hardwood Forest
-2010,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest
-2011,2,Central Interior Highlands Calcareous Glade and Barrens
-2012,2,Central Interior and Appalachian Floodplain Systems
-2013,2,Central Interior and Appalachian Riparian Systems
-2014,2,Central Interior and Appalachian Swamp Systems
-2015,2,Ozark-Ouachita Dry-Mesic Oak Forest
-2016,2,Southern Interior Low Plateau Dry-Mesic Oak Forest
-2017,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-2018,2,North-Central Interior Dry Oak Forest and Woodland
-2019,2,North-Central Interior Beech-Maple Forest
-2020,2,North-Central Interior Maple-Basswood Forest
-2021,2,South-Central Interior Mesophytic Forest
-2022,2,South-Central Interior/Upper Coastal Plain Flatwoods
-2023,2,Ozark-Ouachita Dry Oak Woodland
-2024,2,North-Central Interior Oak Savanna
-2025,2,North-Central Oak Barrens
-2026,2,Central Interior Highlands Calcareous Glade and Barrens
-2027,2,Great Lakes Wet-Mesic Lakeplain Prairie
-2028,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-2029,2,Central Tallgrass Prairie
-2030,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods
-2031,2,Great Lakes Wooded Dune and Swale
-2032,2,Eastern Great Plains Floodplain Systems
-2033,2,Central Interior and Appalachian Floodplain Systems
-2034,2,Central Interior and Appalachian Riparian Systems
-2035,2,Paleozoic Plateau Bluff and Talus
-2036,2,North-Central Interior Wet Flatwoods
-2037,2,Ozark-Ouachita Dry-Mesic Oak Forest
-2038,2,Crosstimbers Oak Forest and Woodland
-2039,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-2040,2,North-Central Interior Dry Oak Forest and Woodland
-2041,2,North-Central Interior Maple-Basswood Forest
-2042,2,Ozark-Ouachita Mesic Hardwood Forest
-2043,2,North-Central Oak Barrens
-2044,2,Central Interior Highlands Calcareous Glade and Barrens
-2045,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-2046,2,Central Tallgrass Prairie
-2047,2,Southeastern Great Plains Tallgrass Prairie
-2048,2,Eastern Great Plains Floodplain Systems
-2049,2,Central Interior and Appalachian Floodplain Systems
-2050,2,Eastern Great Plains Wet Meadow-Prairie-Marsh
-2051,2,North-Central Interior Wet Flatwoods
-2052,2,Western Great Plains Dry Bur Oak Forest and Woodland
-2053,2,Western Great Plains Sandhill Steppe
-2054,2,Central Mixedgrass Prairie
-2055,2,Western Great Plains Sand Prairie
-2056,2,Western Great Plains Shortgrass Prairie
-2057,2,Western Great Plains Tallgrass Prairie
-2058,2,Western Great Plains Floodplain Systems
-2059,2,Crosstimbers Oak Forest and Woodland
-2060,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-2061,2,North-Central Interior Maple-Basswood Forest
-2062,2,Central Tallgrass Prairie
-2063,2,Southeastern Great Plains Tallgrass Prairie
-2064,2,Eastern Great Plains Floodplain Systems
-2065,2,Eastern Great Plains Wet Meadow-Prairie-Marsh
-2066,2,Western Great Plains Depressional Wetland Systems
-2067,2,Southern Interior Low Plateau Dry-Mesic Oak Forest
-2068,2,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland
-2069,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest
-2070,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-2071,2,North-Central Interior Beech-Maple Forest
-2072,2,South-Central Interior Mesophytic Forest
-2073,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest
-2074,2,South-Central Interior/Upper Coastal Plain Flatwoods
-2075,2,East Gulf Coastal Plain Northern Loess Bluff Forest
-2076,2,Southern Appalachian Low-Elevation Pine Forest
-2077,2,Southern Coastal Plain Mesic Slope Forest
-2078,2,Central Interior Highlands Dry Acidic Glade and Barrens
-2079,2,Central Interior Highlands Calcareous Glade and Barrens
-2080,2,Bluegrass Savanna and Woodland
-2081,2,Pennyroyal Karst Plain Prairie and Barrens
-2082,2,East Gulf Coastal Plain Jackson Plain Prairie and Barrens
-2083,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods
-2084,2,Central Interior and Appalachian Floodplain Systems
-2085,2,Central Interior and Appalachian Riparian Systems
-2086,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-2087,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-2088,2,Central Interior and Appalachian Swamp Systems
-2089,2,Gulf and Atlantic Coastal Plain Swamp Systems
-2090,2,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest
-2091,2,North-Central Interior Wet Flatwoods
-2092,2,Southern Interior Low Plateau Dry-Mesic Oak Forest
-2093,2,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland
-2094,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest
-2095,2,Southern Appalachian Oak Forest
-2096,2,Allegheny-Cumberland Dry Oak Forest and Woodland
-2097,2,Southern and Central Appalachian Cove Forest
-2098,2,Central and Southern Appalachian Montane Oak Forest
-2099,2,South-Central Interior Mesophytic Forest
-2100,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest
-2101,2,Southern Coastal Plain Dry Upland Hardwood Forest
-2102,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland
-2103,2,Southeastern Interior Longleaf Pine Woodland
-2104,2,Southern Appalachian Low-Elevation Pine Forest
-2105,2,Southern Piedmont Dry Oak(-Pine) Forest
-2106,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest
-2107,2,Nashville Basin Limestone Glade and Woodland
-2108,2,Central Interior Highlands Calcareous Glade and Barrens
-2109,2,Alabama Ketona Glade and Woodland
-2110,2,Western Highland Rim Prairie and Barrens
-2111,2,Eastern Highland Rim Prairie and Barrens
-2112,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods
-2113,2,Central Interior and Appalachian Floodplain Systems
-2114,2,Central Interior and Appalachian Riparian Systems
-2115,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-2116,2,Central Interior and Appalachian Swamp Systems
-2117,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-2118,2,North-Central Interior Dry Oak Forest and Woodland
-2119,2,North-Central Interior Maple-Basswood Forest
-2120,2,Western Great Plains Wooded Draw and Ravine
-2121,2,North-Central Interior Oak Savanna
-2122,2,North-Central Oak Barrens
-2123,2,North-Central Interior Sand and Gravel Tallgrass Prairie
-2124,2,Northern Tallgrass Prairie
-2125,2,Central Tallgrass Prairie
-2126,2,Eastern Great Plains Floodplain Systems
-2127,2,Central Interior and Appalachian Floodplain Systems
-2128,2,Central Interior and Appalachian Swamp Systems
-2129,2,Eastern Great Plains Wet Meadow-Prairie-Marsh
-2130,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems
-2131,2,Paleozoic Plateau Bluff and Talus
-2132,2,Ozark-Ouachita Dry-Mesic Oak Forest
-2133,2,Crosstimbers Oak Forest and Woodland
-2134,2,North-Central Interior Dry-Mesic Oak Forest and Woodland
-2135,2,North-Central Interior Dry Oak Forest and Woodland
-2136,2,Ouachita Montane Oak Forest
-2137,2,North-Central Interior Maple-Basswood Forest
-2138,2,West Gulf Coastal Plain Mesic Hardwood Forest
-2139,2,Ozark-Ouachita Mesic Hardwood Forest
-2140,2,Ozark-Ouachita Dry Oak Woodland
-2141,2,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland
-2142,2,West Gulf Coastal Plain Pine-Hardwood Forest
-2143,2,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland
-2144,2,North-Central Interior Oak Savanna
-2145,2,Central Interior Highlands Calcareous Glade and Barrens
-2146,2,Arkansas Valley Prairie and Woodland - Prairie
-2147,2,Arkansas Valley Prairie and Woodland - Woodland
-2148,2,Central Tallgrass Prairie
-2149,2,Southeastern Great Plains Tallgrass Prairie
-2150,2,West Gulf Coastal Plain Northern Calcareous Prairie
-2151,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods
-2152,2,Central Interior and Appalachian Floodplain Systems
-2153,2,South-Central Interior Large Floodplain
-2154,2,Central Interior and Appalachian Riparian Systems
-2155,2,Gulf and Atlantic Coastal Plain Floodplain Systems
-2156,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems
-2157,2,Gulf and Atlantic Coastal Plain Swamp Systems
-2158,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems
-2159,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods
-2160,2,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland
-2161,2,Alaska Arctic Mesic Alder Shrubland
-2162,2,Alaska Arctic Mesic-Wet Willow Shrubland
-2163,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire
-2164,2,Alaska Arctic Mesic Sedge-Willow Tundra
-2165,2,Alaska Arctic Mesic Sedge-Dryas Tundra
-2166,2,Alaska Arctic Acidic Sparse Tundra
-2167,2,Alaska Arctic Non-Acidic Sparse Tundra
-2168,2,Alaska Arctic Lichen Tundra
-2169,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland
-2170,2,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland
-2171,2,Alaska Arctic Dwarf-Shrubland - Infrequent Fire
-2172,2,Alaska Arctic Tussock Tundra - Infrequent Fire
-2173,2,Alaska Arctic Pendantgrass Freshwater Marsh
-2174,2,Alaska Arctic Wet Sedge Meadow
-2175,2,Alaska Arctic Mesic Herbaceous Meadow
-2176,2,Alaska Arctic Coastal Sedge-Dwarf-Shrubland
-2177,2,Alaska Arctic Wet Sedge-Sphagnum Peatland
-2178,2,Alaska Arctic Dwarf-Shrub-Sphagnum Peatland
-2179,2,Alaska Arctic Sedge Freshwater Marsh
-2180,2,Alaska Arctic Polygonal Ground Wet Sedge Tundra
-2181,2,Alaska Arctic Polygonal Ground Shrub-Tussock Tundra
-2182,2,Alaska Arctic Marine Beach and Beach Meadow
-2183,2,Alaska Arctic Tidal Marsh
-2184,2,Alaska Arctic Coastal Brackish Meadow
-2185,2,Alaska Arctic Floodplain
-2186,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2187,2,Western North American Boreal White Spruce-Hardwood Forest
-2188,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2189,2,Western North American Boreal Mesic Birch-Aspen Forest
-2190,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2191,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2192,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2193,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2194,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2195,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2196,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2197,2,Alaska Arctic Mesic Alder Shrubland
-2198,2,Alaska Arctic Mesic-Wet Willow Shrubland
-2199,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire
-2200,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire
-2201,2,Alaska Arctic Mesic Sedge-Willow Tundra
-2202,2,Alaska Arctic Mesic Sedge-Dryas Tundra
-2203,2,Alaska Arctic Acidic Sparse Tundra
-2204,2,Alaska Arctic Non-Acidic Sparse Tundra
-2205,2,Alaska Arctic Lichen Tundra
-2206,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland
-2207,2,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland
-2208,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire
-2209,2,Alaska Arctic Dwarf-Shrubland - Infrequent Fire
-2210,2,Alaska Arctic Tussock Tundra - Frequent Fire
-2211,2,Alaska Arctic Tussock Tundra - Infrequent Fire
-2212,2,Alaska Arctic Pendantgrass Freshwater Marsh
-2213,2,Alaska Arctic Wet Sedge Meadow
-2214,2,Alaska Arctic Mesic Herbaceous Meadow
-2215,2,Alaska Arctic Coastal Sedge-Dwarf-Shrubland
-2216,2,Alaska Arctic Wet Sedge-Sphagnum Peatland
-2217,2,Alaska Arctic Dwarf-Shrub-Sphagnum Peatland
-2218,2,Alaska Arctic Permafrost Plateau Dwarf-Shrub Lichen Tundra
-2219,2,Alaska Arctic Sedge Freshwater Marsh
-2220,2,Alaska Arctic Polygonal Ground Wet Sedge Tundra
-2221,2,Alaska Arctic Polygonal Ground Shrub-Tussock Tundra
-2222,2,Alaska Arctic Tidal Marsh
-2223,2,Alaska Arctic Coastal Brackish Meadow
-2224,2,Alaska Arctic Active Inland Dune
-2225,2,Alaska Arctic Large River Floodplain
-2226,2,Alaska Arctic Floodplain
-2227,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2228,2,Western North American Boreal White Spruce-Hardwood Forest
-2229,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2230,2,Western North American Boreal Mesic Birch-Aspen Forest
-2231,2,Western North American Boreal Dry Aspen-Steppe Bluff - Higher Elevations
-2232,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2233,2,Alaska Sub-boreal Mesic Subalpine Alder Shrubland
-2234,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2235,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2236,2,Western North American Boreal Dry Grassland
-2237,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2238,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2239,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2240,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2241,2,Western North American Boreal Deciduous Shrub Swamp
-2242,2,Western North American Boreal Low Shrub-Tussock Tundra
-2243,2,Western North American Boreal Tussock Tundra
-2244,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2245,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2246,2,Western North American Boreal Alpine Mesic Herbaceous Meadow
-2247,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex
-2248,2,Western North American Boreal Alpine Floodplain - Lower Elevations
-2249,2,Western North American Boreal Alpine Floodplain - Higher Elevations
-2250,2,Alaska Arctic Mesic Alder Shrubland
-2251,2,Alaska Arctic Mesic-Wet Willow Shrubland
-2252,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire
-2253,2,Alaska Arctic Mesic Sedge-Willow Tundra
-2254,2,Alaska Arctic Mesic Sedge-Dryas Tundra
-2255,2,Alaska Arctic Acidic Sparse Tundra
-2256,2,Alaska Arctic Non-Acidic Sparse Tundra
-2257,2,Alaska Arctic Lichen Tundra
-2258,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland
-2259,2,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland
-2260,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire
-2261,2,Alaska Arctic Tussock Tundra - Frequent Fire
-2262,2,Alaska Arctic Pendantgrass Freshwater Marsh
-2263,2,Alaska Arctic Wet Sedge Meadow
-2264,2,Alaska Arctic Mesic Herbaceous Meadow
-2265,2,Alaska Arctic Sedge Freshwater Marsh
-2266,2,Alaska Arctic Polygonal Ground Wet Sedge Tundra
-2267,2,Alaska Arctic Polygonal Ground Shrub-Tussock Tundra
-2268,2,Alaska Arctic Floodplain
-2269,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2270,2,Western North American Boreal White Spruce-Hardwood Forest
-2271,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2272,2,Western North American Boreal Mesic Birch-Aspen Forest
-2273,2,Western North American Boreal Dry Aspen-Steppe Bluff - Lower Elevations
-2274,2,Western North American Boreal Dry Aspen-Steppe Bluff - Higher Elevations
-2275,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2276,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2277,2,Alaska Sub-Boreal Mesic Subalpine Alder Shrubland
-2278,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2279,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2280,2,Western North American Boreal Dry Grassland
-2281,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2282,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2283,2,Western North American Boreal Riparian Stringer Forest and Shrubland
-2284,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2285,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2286,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2287,2,Western North American Boreal Deciduous Shrub Swamp
-2288,2,Western North American Boreal Low Shrub-Tussock Tundra
-2289,2,Western North American Boreal Tussock Tundra
-2290,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2291,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2293,2,Western North American Boreal Alpine Mesic Herbaceous Meadow
-2294,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex
-2295,2,Western North American Boreal Alpine Floodplain - Higher Elevations
-2296,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2297,2,Western North American Boreal White Spruce-Hardwood Forest
-2298,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2299,2,Western North American Boreal Mesic Birch-Aspen Forest
-2300,2,Western North American Boreal Dry Aspen-Steppe Bluff - Lower Elevations
-2301,2,Western North American Boreal Dry Aspen-Steppe Bluff - Higher Elevations
-2302,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2303,2,Alaska Sub-Boreal Mesic Subalpine Alder Shrubland
-2304,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2305,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2306,2,Western North American Boreal Active Inland Dune
-2307,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2308,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2309,2,Western North American Boreal Riparian Stringer Forest and Shrubland
-2310,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2311,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2312,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2313,2,Western North American Boreal Deciduous Shrub Swamp
-2314,2,Western North American Boreal Low Shrub-Tussock Tundra
-2315,2,Western North American Boreal Tussock Tundra
-2316,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2317,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2318,2,Western North American Boreal Alpine Mesic Herbaceous Meadow
-2319,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex
-2320,2,Western North American Boreal Alpine Floodplain - Lower Elevations
-2321,2,Western North American Boreal Alpine Floodplain - Higher Elevations
-2322,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2323,2,Western North American Boreal White Spruce-Hardwood Forest
-2324,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2325,2,Western North American Boreal Mesic Birch-Aspen Forest
-2326,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2327,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2328,2,Alaska Sub-boreal Mesic Subalpine Alder Shrubland
-2329,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2330,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2331,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2332,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2333,2,Western North American Boreal Riparian Stringer Forest and Shrubland
-2334,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2335,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2336,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2337,2,Western North American Boreal Deciduous Shrub Swamp
-2338,2,Western North American Boreal Low Shrub-Tussock Tundra
-2339,2,Western North American Boreal Tussock Tundra
-2340,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2341,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2342,2,Alaska Arctic Mesic Alder Shrubland
-2343,2,Alaska Arctic Mesic-Wet Willow Shrubland
-2344,2,Alaskan Pacific Maritime Mesic Herbaceous Meadow
-2345,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Frequent Fire
-2346,2,Alaska Arctic Mesic Sedge-Willow Tundra
-2347,2,Alaska Arctic Acidic Sparse Tundra
-2348,2,Alaska Arctic Lichen Tundra
-2349,2,Alaska Arctic Acidic Dryas Dwarf-Shrubland
-2350,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire
-2351,2,Alaska Arctic Tussock Tundra - Frequent Fire
-2352,2,Alaska Arctic Pendantgrass Freshwater Marsh
-2353,2,Alaska Arctic Wet Sedge Meadow
-2354,2,Alaska Arctic Mesic Herbaceous Meadow
-2355,2,Alaska Arctic Coastal Sedge-Dwarf-Shrubland
-2356,2,Alaska Arctic Wet Sedge-Sphagnum Peatland
-2357,2,Alaska Arctic Dwarf-Shrub-Sphagnum Peatland
-2358,2,Alaska Arctic Permafrost Plateau Dwarf-Shrub Lichen Tundra
-2359,2,Alaska Arctic Sedge Freshwater Marsh
-2360,2,Alaska Arctic Polygonal Ground Wet Sedge Tundra
-2361,2,Alaska Arctic Polygonal Ground Shrub-Tussock Tundra
-2362,2,Alaska Arctic Marine Beach and Beach Meadow
-2363,2,Alaska Arctic Tidal Marsh
-2364,2,Alaska Arctic Coastal Brackish Meadow
-2365,2,Alaska Arctic Large River Floodplain
-2366,2,Alaska Arctic Floodplain
-2367,2,Alaska Arctic Bedrock and Talus
-2368,2,Aleutian Volcanic Rock and Talus
-2369,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2370,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal
-2371,2,Western North American Boreal White Spruce-Hardwood Forest
-2372,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2373,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal
-2374,2,Western North American Boreal Mesic Birch-Aspen Forest
-2375,2,Western North American Boreal Dry Aspen-Steppe Bluff - Lower Elevations
-2376,2,Western North American Boreal Dry Aspen-Steppe Bluff - Higher Elevations
-2377,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2378,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2379,2,Alaska Sub-Boreal Mesic Subalpine Alder Shrubland
-2380,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2381,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Alaska Sub-boreal
-2382,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2383,2,Western North American Boreal Dry Grassland
-2384,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2385,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Alaska Sub-boreal
-2386,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2387,2,Western North American Boreal Riparian Stringer Forest and Shrubland
-2388,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2389,2,Western North American Boreal Herbaceous Fen - Alaska Sub-Boreal Complex
-2390,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2391,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Alaska Sub-boreal Complex
-2392,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2393,2,Western North American Boreal Deciduous Shrub Swamp
-2394,2,Western North American Boreal Low Shrub-Tussock Tundra
-2395,2,Western North American Boreal Tussock Tundra
-2396,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2397,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2399,2,Western North American Boreal Alpine Mesic Herbaceous Meadow
-2400,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex
-2401,2,Western North American Boreal Alpine Floodplain - Lower Elevations
-2402,2,Western North American Boreal Alpine Floodplain - Higher Elevations
-2403,2,Aleutian Kenai Birch-Cottonwood-Poplar Forest
-2404,2,Alaskan Pacific Maritime Alpine Dwarf-Shrubland
-2405,2,Alaska Sub-boreal and Maritime Alpine Mesic Herbaceous Meadow
-2406,2,Alaskan Pacific Maritime Sitka Spruce Forest
-2407,2,Alaskan Pacific Maritime Western Hemlock Forest
-2408,2,Alaskan Pacific Maritime Mountain Hemlock Forest - Southeast
-2409,2,Alaska Sub-boreal White Spruce-Hardwood Forest
-2410,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2411,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal
-2412,2,Western North American Boreal White Spruce-Hardwood Forest
-2413,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2414,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal
-2415,2,Western North American Boreal Mesic Birch-Aspen Forest
-2416,2,Western North American Boreal Dry Aspen-Steppe Bluff - Lower Elevations
-2417,2,Western North American Boreal Dry Aspen-Steppe Bluff - Higher Elevations
-2418,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2419,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2420,2,Alaska Sub-Boreal Mesic Subalpine Alder Shrubland
-2421,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2422,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Alaska Sub-boreal
-2423,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2424,2,Western North American Boreal Dry Grassland
-2425,2,Western North American Boreal Active Inland Dune
-2426,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Boreal
-2427,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Alaska Sub-boreal
-2428,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2429,2,Western North American Boreal Riparian Stringer Forest and Shrubland
-2430,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2431,2,Western North American Boreal Herbaceous Fen - Alaska Sub-Boreal Complex
-2432,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Boreal Complex
-2433,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Alaska Sub-boreal Complex
-2434,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2435,2,Western North American Boreal Deciduous Shrub Swamp
-2436,2,Western North American Boreal Low Shrub-Tussock Tundra
-2437,2,Western North American Boreal Tussock Tundra
-2438,2,Western North American Boreal Wet Black Spruce-Tussock Woodland
-2439,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2441,2,Western North American Boreal Alpine Mesic Herbaceous Meadow
-2442,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex
-2443,2,Western North American Boreal Alpine Floodplain - Lower Elevations
-2444,2,Western North American Boreal Alpine Floodplain - Higher Elevations
-2445,2,Alaskan Pacific Maritime Western Hemlock Forest
-2446,2,Alaska Sub-boreal White Spruce-Hardwood Forest
-2447,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2448,2,Western North American Boreal White Spruce-Hardwood Forest
-2449,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal
-2450,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2451,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2452,2,Alaska Sub-Boreal Mesic Subalpine Alder Shrubland
-2453,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Alaska Sub-boreal
-2454,2,Western North American Sub-boreal Mesic Bluejoint Meadow
-2455,2,Western North American Boreal Dry Grassland
-2456,2,Western North American Boreal Montane Floodplain Forest and Shrubland - Alaska Sub-boreal
-2457,2,Western North American Boreal Riparian Stringer Forest and Shrubland
-2458,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2459,2,Western North American Boreal Herbaceous Fen - Alaska Sub-Boreal Complex
-2460,2,Western North American Boreal Black Spruce Dwarf-tree Peatland - Alaska Sub-boreal Complex
-2461,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2462,2,Western North American Boreal Deciduous Shrub Swamp
-2463,2,Western North American Boreal Low Shrub-Tussock Tundra
-2464,2,Western North American Boreal Tussock Tundra
-2465,2,Western North American Boreal Alpine Dwarf-Shrub Summit
-2467,2,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland - Complex
-2468,2,Western North American Boreal Alpine Floodplain - Lower Elevations
-2469,2,Western North American Boreal Alpine Floodplain - Higher Elevations
-2470,2,Alaskan Pacific Maritime Alpine Dwarf-Shrubland
-2471,2,Alaska Sub-boreal Mountain Hemlock Forest - Northern
-2472,2,Alaskan Pacific Maritime Mountain Hemlock Forest - Northern
-2473,2,Alaskan Pacific Maritime Periglacial Woodland and Shrubland
-2474,2,Alaskan Pacific Maritime Wet Low Shrubland
-2476,2,Temperate Pacific Tidal Salt and Brackish Marsh
-2477,2,Alaskan Pacific Maritime Alpine Wet Meadow
-2478,2,Alaskan Pacific Maritime Alpine Floodplain
-2479,2,Alaska Sub-boreal Mountain Hemlock-White Spruce Forest
-2480,2,Alaska Sub-boreal White Spruce-Hardwood Forest
-2481,2,North Pacific Alpine and Subalpine Bedrock and Scree
-2482,2,Western North American Boreal Treeline White Spruce Woodland - Boreal
-2483,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal
-2484,2,Western North American Boreal White Spruce-Hardwood Forest
-2485,2,Western North American Boreal Mesic Black Spruce Forest - Boreal
-2486,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal
-2487,2,Western North American Boreal Mesic Birch-Aspen Forest
-2488,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2489,2,Alaska Sub-boreal Avalanche Slope Shrubland
-2490,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Boreal
-2491,2,Western North American Boreal Lowland Large River Floodplain Forest and Shrubland
-2492,2,Western North American Boreal Shrub and Herbaceous Floodplain Wetland
-2493,2,Western North American Boreal Herbaceous Fen - Alaska Sub-Boreal Complex
-2494,2,Western North American Boreal Black Spruce Dwarf-Tree Peatland - Boreal Complex
-2495,2,Western North American Boreal Black Spruce Dwarf-Tree Peatland - Alaska Sub-boreal Complex
-2496,2,Western North American Boreal Black Spruce Wet-Mesic Slope Woodland
-2497,2,Western North American Boreal Tussock Tundra
-2498,2,Western North American Boreal Alpine Floodplain - Lower Elevations
-2499,2,Alaska Arctic Mesic Alder Shrubland
-2500,2,Alaska Arctic Mesic-Wet Willow Shrubland
-2501,2,Aleutian Mesic-Wet Willow Shrubland
-2502,2,Aleutian Kenai Birch-Cottonwood-Poplar Forest
-2503,2,Alaska Sub-boreal and Maritime Alpine Mesic Herbaceous Meadow
-2504,2,Alaskan Pacific Maritime Sitka Spruce Forest
-2505,2,Alaskan Pacific Maritime Mesic Herbaceous Meadow
-2506,2,Alaskan Pacific Maritime Floodplain Forest and Shrubland
-2508,2,North Pacific Shrub Swamp
-2509,2,Temperate Pacific Tidal Salt and Brackish Marsh
-2510,2,North Pacific Maritime Eelgrass Bed
-2511,2,Aleutian American Dunegrass Grassland
-2512,2,Alaska Sub-boreal White Spruce-Hardwood Forest
-2513,2,Alaska Arctic Scrub Birch-Ericaceous Shrubland - Infrequent Fire
-2514,2,Alaska Arctic Mesic Sedge-Willow Tundra
-2515,2,Alaska Arctic Acidic Sparse Tundra
-2516,2,Alaska Arctic Lichen Tundra
-2517,2,Alaska Arctic Dwarf-Shrubland - Frequent Fire
-2518,2,Alaska Arctic Tussock Tundra - Infrequent Fire
-2519,2,Alaska Arctic Wet Sedge Meadow
-2520,2,Alaska Arctic Mesic Herbaceous Meadow
-2521,2,Alaska Arctic Coastal Sedge-Dwarf-Shrubland
-2522,2,Alaska Arctic Wet Sedge-Sphagnum Peatland
-2523,2,Alaska Arctic Sedge Freshwater Marsh
-2524,2,Alaska Arctic Marine Beach and Beach Meadow
-2525,2,Alaska Arctic Tidal Marsh
-2526,2,Alaska Arctic Coastal Brackish Meadow
-2527,2,Alaska Arctic Floodplain
-2528,2,Aleutian Rocky Headland and Sea Cliff
-2529,2,Aleutian Mesic Alder-Salmonberry Shrubland
-2530,2,Aleutian Crowberry-Herbaceous Heath
-2531,2,Aleutian Mixed Dwarf-Shrub-Herbaceous Shrubland
-2532,2,Aleutian Freshwater Marsh
-2533,2,Aleutian Wet Meadow and Herbaceous Peatland - Complex
-2534,2,Aleutian Marine Beach and Beach Meadow
-2535,2,Aleutian Tidal Marsh
-2536,2,Aleutian Shrub and Herbaceous Meadow Floodplain
-2537,2,Aleutian Floodplain Forest and Shrubland
-2538,2,Aleutian Floodplain Wetland
-2539,2,Aleutian Sparse Heath and Fell-Field
-2540,2,Aleutian Oval-leaf Blueberry Shrubland
-2541,2,Aleutian Volcanic Rock and Talus
-2542,2,Western North American Boreal Treeline White Spruce Woodland - Alaska Sub-boreal
-2543,2,Western North American Boreal White Spruce-Hardwood Forest
-2544,2,Western North American Boreal Mesic Black Spruce Forest - Alaska Sub-boreal
-2545,2,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-2546,2,Western North American Boreal Mesic Scrub Birch-Willow Shrubland - Alaska Sub-boreal
-2547,2,Alaskan Pacific Maritime Alpine Dwarf-Shrubland
-2548,2,Alaskan Pacific Maritime Sitka Spruce Forest
-2549,2,Alaska Sub-boreal and Maritime Alpine Mesic Herbaceous Meadow
-2550,2,Alaskan Pacific Maritime Mountain Hemlock Forest - Northern
-2551,2,Alaskan Pacific Maritime Periglacial Woodland and Shrubland
-2552,2,Alaskan Pacific Maritime Subalpine Alder-Salmonberry Shrubland
-2553,2,Alaskan Pacific Maritime Sitka Spruce Beach Ridge
-2554,2,Alaskan Pacific Maritime Sitka Spruce Beach Ridge
-2555,2,Alaskan Pacific Maritime Shrub and Herbaceous Floodplain Wetland
-2556,2,Alaskan Pacific Maritime Mountain Hemlock Peatland
-2557,2,Alaskan Pacific Maritime Mountain Hemlock Peatland
-2558,2,Alaskan Pacific Maritime Wet Low Shrubland
-2560,2,Alaskan Pacific Maritime Fen and Wet Meadow
-2561,2,Temperate Pacific Freshwater Emergent Marsh
-2562,2,North Pacific Shrub Swamp
-2563,2,Alaskan Pacific Maritime Coastal Meadow and Slough-Levee
-2564,2,Temperate Pacific Tidal Salt and Brackish Marsh
-2565,2,Alaskan Pacific Maritime Alpine Wet Meadow
-2566,2,Alaskan Pacific Maritime Alpine Floodplain
-2567,2,Alaska Sub-boreal White Spruce-Hardwood Forest
-2568,2,Alaskan Pacific Maritime Avalanche Slope Shrubland
-2569,2,Alaskan Pacific Maritime Poorly Drained Conifer Woodland
-2570,2,Alaskan Pacific Maritime Alpine Dwarf-Shrubland
-2571,2,Alaskan Pacific Maritime Sitka Spruce Forest
-2572,2,Alaskan Pacific Maritime Western Hemlock Forest
-2573,2,Alaskan Pacific Maritime Mountain Hemlock Forest - Northern
-2574,2,Aleutian Mesic Herbaceous Meadow
-2575,2,Aleutian Mesic Herbaceous Meadow
-2576,2,Alaskan Pacific Maritime Subalpine Alder-Salmonberry Shrubland
-2577,2,Alaskan Pacific Maritime Sitka Spruce Beach Ridge
-2578,2,Alaskan Pacific Maritime Floodplain Forest and Shrubland
-2579,2,Alaskan Pacific Maritime Shore Pine Peatland
-2580,2,Alaskan Pacific Maritime Mountain Hemlock Peatland
-2581,2,Alaskan Pacific Maritime Wet Low Shrub
-2582,2,Alaskan Pacific Maritime Wet Low Shrubland
-2584,2,Alaskan Pacific Maritime Fen and Wet Meadow
-2585,2,Temperate Pacific Freshwater Emergent Marsh
-2586,2,North Pacific Shrub Swamp
-2587,2,Alaskan Pacific Maritime Coastal Meadow and Slough-Levee
-2588,2,Temperate Pacific Tidal Salt and Brackish Marsh
-2589,2,Alaskan Pacific Maritime Alpine Wet Meadow
-2590,2,Alaskan Pacific Maritime Avalanche Slope Shrubland
-2591,2,Alaskan Pacific Maritime Poorly Drained Conifer Woodland
-2592,2,Western North American Boreal Alpine Talus and Bedrock
-2593,2,Western North American Boreal Alpine Talus and Bedrock
-2594,2,Western North American Boreal Alpine Talus and Bedrock
-2595,2,Western North American Boreal Alpine Talus and Bedrock
-2596,2,Hawaii Freshwater Marsh
-2597,2,Hawaii Bog
-2598,2,Hawaii Lowland Rainforest
-2599,2,Hawaii Montane Cloud Forest
-2600,2,Hawaii Montane Rainforest
-2601,2,Hawaii Wet Cliff and Ridge Crest Shrubland
-2602,2,Hawaii Lowland Dry Forest
-2603,2,Hawaii Lowland Mesic Forest
-2604,2,Hawaii Montane-Subalpine Dry Forest and Woodland - Lava
-2605,2,Hawaii Montane-Subalpine Mesic Forest
-2606,2,Hawaii Lowland Dry Shrubland
-2607,2,Hawaii Lowland Mesic Shrubland
-2608,2,Hawaii Lowland Dry Grassland
-2609,2,Hawaii Lowland Mesic Grassland
-2610,2,Hawaii Montane-Subalpine Dry Shrubland
-2611,2,Hawaii Montane-Subalpine Dry Grassland
-2612,2,Hawaii Montane-Subalpine Mesic Grassland
-2613,2,Hawaii Alpine Dwarf-Shrubland
-2614,2,Hawaii Dry Cliff
-2615,2,Hawaii Dry Coastal Strand
-2616,2,Hawaii Wet-Mesic Coastal Strand
-2617,2,Hawaii Subalpine Mesic Shrubland
-3001,1,Inter-Mountain Basins Sparsely Vegetated Systems
-3002,1,Mediterranean California Sparsely Vegetated Systems
-3003,1,North Pacific Sparsely Vegetated Systems
-3004,1,North American Warm Desert Sparsely Vegetated Systems
-3006,1,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems
-3007,1,Western Great Plains Sparsely Vegetated Systems
-3008,1,North Pacific Oak Woodland
-3009,1,Northwestern Great Plains Aspen Forest and Parkland
-3011,1,Rocky Mountain Aspen Forest and Woodland
-3012,1,Rocky Mountain Bigtooth Maple Ravine Woodland
-3013,1,Western Great Plains Dry Bur Oak Forest and Woodland
-3014,1,Central and Southern California Mixed Evergreen Woodland
-3015,1,California Coastal Redwood Forest
-3016,1,Colorado Plateau Pinyon-Juniper Woodland
-3017,1,Columbia Plateau Western Juniper Woodland and Savanna
-3018,1,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland
-3019,1,Great Basin Pinyon-Juniper Woodland
-3020,1,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-3021,1,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland
-3022,1,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland
-3023,1,Madrean Encinal
-3024,1,Madrean Lower Montane Pine-Oak Forest and Woodland
-3025,1,Madrean Pinyon-Juniper Woodland
-3026,1,Madrean Upper Montane Conifer-Oak Forest and Woodland
-3027,1,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-3028,1,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-3029,1,Mediterranean California Mixed Oak Woodland
-3030,1,Mediterranean California Lower Montane Conifer Forest and Woodland
-3031,1,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland
-3032,1,Mediterranean California Red Fir Forest
-3033,1,Mediterranean California Subalpine Woodland
-3034,1,Mediterranean California Mesic Serpentine Woodland and Chaparral
-3035,1,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland
-3036,1,North Pacific Hypermaritime Seasonal Sitka Spruce Forest
-3037,1,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest
-3038,1,North Pacific Maritime Mesic Subalpine Parkland
-3039,1,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest
-3041,1,North Pacific Mountain Hemlock Forest
-3042,1,North Pacific Mesic Western Hemlock-Silver Fir Forest
-3043,1,Mediterranean California Mixed Evergreen Forest
-3044,1,Northern California Mesic Subalpine Woodland
-3045,1,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-3046,1,Northern Rocky Mountain Subalpine Woodland and Parkland
-3047,1,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest
-3048,1,Northwestern Great Plains Highland White Spruce Woodland
-3049,1,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-3050,1,Rocky Mountain Lodgepole Pine Forest
-3051,1,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-3052,1,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-3053,1,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna
-3054,1,Southern Rocky Mountain Ponderosa Pine Woodland
-3055,1,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-3056,1,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-3057,1,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-3058,1,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland
-3059,1,Southern Rocky Mountain Pinyon-Juniper Woodland
-3060,1,East Cascades Ponderosa Pine Forest and Woodland
-3061,1,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-3062,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland
-3063,1,North Pacific Broadleaf Landslide Forest and Shrubland
-3064,1,Colorado Plateau Mixed Low Sagebrush Shrubland
-3065,1,Columbia Plateau Scabland Shrubland
-3066,1,Inter-Mountain Basins Mat Saltbush Shrubland
-3067,1,Mediterranean California Alpine Fell-Field
-3068,1,North Pacific Dry and Mesic Alpine Dwarf-Shrubland or Fell-field or Meadow
-3070,1,Rocky Mountain Alpine Dwarf-Shrubland
-3071,1,Sierra Nevada Alpine Dwarf-Shrubland
-3072,1,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe
-3074,1,Chihuahuan Creosotebush Desert Scrub
-3075,1,Chihuahuan Mixed Salt Desert Scrub
-3076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub
-3077,1,Chihuahuan Succulent Desert Scrub
-3078,1,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-3079,1,Great Basin Xeric Mixed Sagebrush Shrubland
-3080,1,Inter-Mountain Basins Big Sagebrush Shrubland
-3081,1,Inter-Mountain Basins Mixed Salt Desert Scrub
-3082,1,Mojave Mid-Elevation Mixed Desert Scrub
-3083,1,North Pacific Avalanche Chute Shrubland
-3084,1,North Pacific Montane Shrubland
-3085,1,Northwestern Great Plains Shrubland
-3086,1,Rocky Mountain Lower Montane-Foothill Shrubland
-3087,1,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-3088,1,Sonora-Mojave Mixed Salt Desert Scrub
-3090,1,Sonoran Granite Outcrop Desert Scrub
-3091,1,Sonoran Mid-Elevation Desert Scrub
-3092,1,Southern California Coastal Scrub
-3093,1,Southern Colorado Plateau Sand Shrubland
-3094,1,Western Great Plains Sandhill Shrubland
-3095,1,Apacherian-Chihuahuan Mesquite Upland Scrub
-3096,1,California Maritime Chaparral
-3097,1,California Mesic Chaparral
-3098,1,California Montane Woodland and Chaparral
-3099,1,California Xeric Serpentine Chaparral
-3100,1,Chihuahuan Mixed Desert and Thornscrub
-3101,1,Madrean Oriental Chaparral
-3103,1,Great Basin Semi-Desert Chaparral
-3104,1,Mogollon Chaparral
-3105,1,Northern and Central California Dry-Mesic Chaparral
-3106,1,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-3107,1,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-3108,1,Sonora-Mojave Semi-Desert Chaparral
-3109,1,Sonoran Paloverde-Mixed Cacti Desert Scrub
-3110,1,Southern California Dry-Mesic Chaparral
-3111,1,Western Great Plains Mesquite Woodland
-3112,1,California Central Valley Mixed Oak Savanna
-3113,1,California Coastal Live Oak Woodland and Savanna
-3114,1,California Lower Montane Foothill Pine Woodland and Savanna
-3115,1,Inter-Mountain Basins Juniper Savanna
-3116,1,Madrean Juniper Savanna
-3117,1,Southern Rocky Mountain Ponderosa Pine Savanna
-3118,1,Southern California Oak Woodland and Savanna
-3119,1,Southern Rocky Mountain Juniper Woodland and Savanna
-3120,1,Willamette Valley Upland Prairie and Savanna
-3121,1,Apacherian-Chihuahuan Semi-Desert Shrubland
-3122,1,Chihuahuan Gypsophilous Grassland and Steppe
-3123,1,Columbia Plateau Steppe and Grassland
-3124,1,Columbia Plateau Low Sagebrush Steppe
-3125,1,Inter-Mountain Basins Big Sagebrush Steppe
-3126,1,Inter-Mountain Basins Montane Sagebrush Steppe
-3127,1,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-3128,1,Northern California Coastal Scrub
-3129,1,California Central Valley and Southern Coastal Grassland
-3130,1,California Mesic Serpentine Grassland
-3131,1,California Northern Coastal Grassland
-3132,1,Central Mixedgrass Prairie Grassland
-3133,1,Chihuahuan Sandy Plains Semi-Desert Grassland
-3134,1,Columbia Basin Foothill and Canyon Dry Grassland
-3135,1,Inter-Mountain Basins Semi-Desert Grassland
-3136,1,Mediterranean California Alpine Dry Tundra
-3137,1,Mediterranean California Subalpine Meadow
-3138,1,North Pacific Montane Grassland
-3139,1,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-3140,1,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-3141,1,Northwestern Great Plains Mixedgrass Prairie
-3142,1,Columbia Basin Palouse Prairie
-3143,1,Rocky Mountain Alpine Fell-Field
-3144,1,Rocky Mountain Alpine Turf
-3145,1,Rocky Mountain Subalpine-Montane Mesic Meadow
-3146,1,Southern Rocky Mountain Montane-Subalpine Grassland
-3147,1,Western Great Plains Foothill and Piedmont Grassland
-3148,1,Western Great Plains Sand Prairie Grassland
-3149,1,Western Great Plains Shortgrass Prairie
-3150,1,Western Great Plains Tallgrass Prairie
-3151,1,California Central Valley Riparian Forest and Woodland
-3152,1,California Montane Riparian Systems
-3153,1,Inter-Mountain Basins Greasewood Flat
-3154,1,Inter-Mountain Basins Montane Riparian Forest and Woodland
-3155,1,North American Warm Desert Riparian Forest and Woodland
-3156,1,North Pacific Lowland Riparian Forest and Shrubland
-3157,1,North Pacific Swamp Systems
-3158,1,North Pacific Montane Riparian Woodland and Shrubland
-3159,1,Rocky Mountain Montane Riparian Forest and Woodland
-3160,1,Rocky Mountain Subalpine/Upper Montane Riparian Forest and Woodland
-3161,1,Northern Rocky Mountain Conifer Swamp
-3162,1,Western Great Plains Floodplain Forest and Woodland
-3163,1,Pacific Coastal Marsh Systems
-3164,1,Rocky Mountain Wetland-Herbaceous
-3165,1,Northern Rocky Mountain Foothill Conifer Wooded Steppe
-3166,1,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-3167,1,Rocky Mountain Poor-Site Lodgepole Pine Forest
-3168,1,Northern Rocky Mountain Avalanche Chute Shrubland
-3169,1,Northern Rocky Mountain Subalpine Deciduous Shrubland
-3170,1,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral
-3171,1,North Pacific Alpine and Subalpine Dry Grassland
-3172,1,Sierran-Intermontane Desert Western White Pine-White Fir Woodland
-3173,1,North Pacific Wooded Volcanic Flowage
-3174,1,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest
-3177,1,California Coastal Closed-Cone Conifer Forest and Woodland
-3178,1,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest
-3179,1,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna
-3180,1,Introduced Riparian Forest and Woodland
-3181,1,Introduced Upland Vegetation-Annual Grassland
-3182,1,Introduced Upland Vegetation-Perennial Grassland and Forbland
-3183,1,Introduced Upland Vegetation-Annual and Biennial Forbland
-3184,1,California Annual Grassland
-3185,1,Introduced Forest Wetland
-3186,1,Introduced Upland Vegetation-Shrub
-3187,1,Introduced Upland Vegetation-Treed
-3191,1,Recently Logged-Herb and Grass Cover
-3192,1,Recently Logged-Shrub Cover
-3193,1,Recently Logged-Tree Cover
-3194,1,Ruderal Upland-Treed
-3195,1,Recently Burned-Herb and Grass Cover
-3196,1,Introduced Shrub Wetland
-3199,1,Introduced Herbaceous Wetland
-3200,1,Coastal Douglas-fir Woodland
-3201,1,Quercus garryana Woodland Alliance
-3202,1,Juniperus occidentalis Wooded Herbaceous Alliance
-3203,1,Juniperus occidentalis Woodland Alliance
-3204,1,Western Great Plains Mesquite Shrubland
-3205,1,Tsuga mertensiana-Abies amabilis Woodland Alliance
-3206,1,Pseudotsuga menziesii Giant Forest Alliance
-3207,1,Central Mixedgrass Prairie Shrubland
-3208,1,Abies concolor Forest Alliance
-3209,1,Western Great Plains Sand Prairie Shrubland
-3210,1,Coleogyne ramosissima Shrubland Alliance
-3211,1,Grayia spinosa Shrubland Alliance
-3212,1,Western Great Plains Sandhill Grassland
-3213,1,Quercus havardii Shrubland Alliance
-3214,1,Arctostaphylos patula Shrubland Alliance
-3215,1,Quercus turbinella Shrubland Alliance
-3216,1,Cercocarpus montanus Shrubland Alliance
-3217,1,Quercus gambelii Shrubland Alliance
-3218,1,North American Warm Desert Sparsely Vegetated Systems II
-3219,1,Inter-Mountain Basins Sparsely Vegetated Systems II
-3220,1,Artemisia tridentata ssp. vaseyana Shrubland Alliance
-3221,1,Mediterranean California Sparsely Vegetated Systems II
-3222,1,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems II
-3223,1,Sonoran Desert Sparsely Vegetated
-3227,1,Dry-mesic Montane Douglas-fir Forest
-3228,1,Dry-mesic Montane Western Larch Forest
-3229,1,Pinus albicaulis Woodland Alliance
-3230,1,Pinus sabiniana Woodland Alliance
-3231,1,Sequoiadendron giganteum Forest Alliance
-3232,1,Abies grandis Forest Forest
-3233,1,Subalpine Douglas-fir Forest
-3234,1,Mesic Montane Douglas-fir Forest
-3235,1,Xeric Montane Douglas-fir Forest
-3236,1,Subalpine Western Larch Forest
-3237,1,Mesic Montane Western Larch Forest
-3238,1,Laurentian-Acadian Northern Oak Forest
-3239,1,Laurentian-Acadian Northern Pine-Oak Forest
-3240,1,Laurentian-Acadian Hardwood Forest
-3241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-3242,1,Laurentian Oak Barrens
-3243,1,Laurentian Pine-Oak Barrens
-3244,1,Boreal Hardwood Forest
-3245,1,Boreal White Spruce-Fir-Hardwood Forest
-3247,1,Southern Appalachian Grass Bald
-3248,1,Northern Atlantic Coastal Plain Dune and Swale Grassland
-3249,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Shrubland
-3250,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Shrubland
-3251,1,Rocky Mountain Montane Riparian Shrubland
-3252,1,Rocky Mountain Subalpine/Upper Montane Riparian Shrubland
-3253,1,Western Great Plains Floodplain Shrubland
-3254,1,Western Great Plains Floodplain Herbaceous
-3255,1,Inter-Mountain Basins Montane Riparian Shrubland
-3256,1,Apacherian-Chihuahuan Semi-Desert Grassland
-3257,1,California Central Valley Riparian Herbaceous
-3258,1,North American Warm Desert Riparian Herbaceous
-3259,1,Introduced Riparian Shrubland
-3260,1,Mediterranean California Lower Montane Black Oak Forest and Woodland
-3261,1,Mediterranean California Lower Montane Black Oak - Conifer Forest and Woodland
-3262,1,East Cascades Oak Forest and Woodland
-3263,1,East Cascades Oak - Ponderosa Pine Forest and Woodland
-3264,1,California Lower Montane Blue Oak Forest and Woodland
-3265,1,California Lower Montane Blue Oak-Foothill Pine Forest and Woodland
-3266,1,Oregon White Oak Woodland
-3267,1,Douglas-fir - Oregon White Oak Woodland
-3268,1,Eastern Great Plains Tallgrass Aspen Shrubland
-3269,1,Laurentian Shrubland Barrens
-3270,1,North-Central Interior Sand and Gravel Shrubland
-3271,1,Eastern Boreal Floodplain Herbaceous
-3272,1,Eastern Boreal Floodplain Shrubland
-3273,1,Eastern Great Plains Floodplain Herbaceous
-3274,1,Central Interior and Appalachian Floodplain Herbaceous
-3275,1,Central Interior and Appalachian Floodplain Shrubland
-3276,1,Laurentian-Acadian Floodplain Herbaceous
-3277,1,Laurentian-Acadian Floodplain Shrubland
-3278,1,Boreal Acidic Peatland Herbaceous
-3279,1,Boreal Acidic Peatland Shrubland
-3280,1,Central Interior and Appalachian Swamp Shrubland
-3281,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp Shrubland
-3282,1,Great Lakes Coastal Marsh Shrubland
-3283,1,Central Interior and Appalachian Shrub Wetlands
-3284,1,Laurentian-Acadian Herbaceous Wetlands
-3285,1,Laurentian-Acadian Shrub Wetlands
-3286,1,Paleozoic Plateau Bluff and Talus Herbaceous
-3287,1,Modified/Managed Northern Tallgrass Shrubland
-3288,1,Central Appalachian Rocky Shrubland
-3289,1,Acadian-Appalachian Subalpine Heath-Krummholz
-3290,1,North-Central Oak Barrens Herbaceous
-3291,1,Central Interior Highlands Calcareous Glade and Barrens Herbaceous
-3292,1,Open Water
-3293,1,Snow-Ice
-3294,1,Barren
-3295,1,Quarries-Strip Mines-Gravel Pits
-3296,1,Developed-Low Intensity
-3297,1,Developed-Medium Intensity
-3298,1,Developed-High Intensity
-3299,1,Developed-Roads
-3300,1,Central Interior and Appalachian Riparian Herbaceous
-3301,1,Boreal Aspen-Birch Forest
-3302,1,Laurentian-Acadian Northern Hardwoods Forest
-3303,1,Northeastern Interior Dry-Mesic Oak Forest
-3304,1,Ozark-Ouachita Dry-Mesic Oak Forest
-3305,1,Southern Interior Low Plateau Dry-Mesic Oak Forest
-3306,1,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland
-3307,1,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest
-3308,1,Crosstimbers Oak Forest and Woodland
-3309,1,Southern Appalachian Northern Hardwood Forest
-3310,1,North-Central Interior Dry-Mesic Oak Forest and Woodland
-3311,1,North-Central Interior Dry Oak Forest and Woodland
-3312,1,Ouachita Montane Oak Forest
-3313,1,North-Central Interior Beech-Maple Forest
-3314,1,North-Central Interior Maple-Basswood Forest
-3315,1,Southern Appalachian Oak Forest
-3316,1,Southern Piedmont Mesic Forest
-3317,1,Allegheny-Cumberland Dry Oak Forest and Woodland
-3318,1,Southern and Central Appalachian Cove Forest
-3319,1,Central Interior and Appalachian Riparian Shrubland
-3320,1,Central and Southern Appalachian Montane Oak Forest
-3321,1,South-Central Interior Mesophytic Forest
-3322,1,Crowley's Ridge Mesic Loess Slope Forest
-3323,1,West Gulf Coastal Plain Mesic Hardwood Forest
-3324,1,Northern Atlantic Coastal Plain Hardwood Forest
-3325,1,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest
-3326,1,South-Central Interior/Upper Coastal Plain Flatwoods
-3327,1,East Gulf Coastal Plain Northern Loess Bluff Forest
-3328,1,Southern Coastal Plain Limestone Forest
-3329,1,East Gulf Coastal Plain Southern Loess Bluff Forest
-3330,1,Southern Coastal Plain Dry Upland Hardwood Forest
-3331,1,Eastern Great Plains Tallgrass Aspen Forest and Woodland
-3332,1,Gulf and Atlantic Coastal Plain Floodplain Herbaceous
-3333,1,South Florida Hardwood Hammock
-3334,1,Ozark-Ouachita Mesic Hardwood Forest
-3335,1,Southern Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest
-3336,1,Southwest Florida Coastal Strand and Maritime Hammock
-3337,1,Southeast Florida Coastal Strand and Maritime Hammock
-3338,1,Central and South Texas Coastal Fringe Forest and Woodland
-3339,1,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland
-3340,1,Appalachian Shale Barrens
-3342,1,Piedmont Hardpan Woodland and Forest
-3343,1,Southern Atlantic Coastal Plain Mesic Hardwood Forest
-3344,1,Boreal Jack Pine-Black Spruce Forest
-3346,1,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland
-3347,1,Atlantic Coastal Plain Upland Longleaf Pine Woodland
-3348,1,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland
-3349,1,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland
-3350,1,Central and Southern Appalachian Spruce-Fir Forest
-3351,1,Southeastern Interior Longleaf Pine Woodland
-3352,1,Southern Appalachian Montane Pine Forest and Woodland
-3353,1,Southern Appalachian Low-Elevation Pine Forest
-3354,1,Northeastern Interior Pine Barrens
-3355,1,Northern Atlantic Coastal Plain Pitch Pine Barrens
-3356,1,Florida Longleaf Pine Sandhill
-3357,1,Southern Coastal Plain Mesic Slope Forest
-3358,1,East-Central Texas Plains Pine Forest and Woodland
-3359,1,Gulf and Atlantic Coastal Plain Floodplain Shrubland
-3361,1,Central Atlantic Coastal Plain Maritime Forest
-3362,1,Laurentian-Acadian Northern Pine Forest
-3363,1,Central Interior Highlands Dry Acidic Glade and Barrens
-3364,1,Ozark-Ouachita Dry Oak Woodland
-3365,1,Boreal White Spruce-Fir Forest
-3366,1,Laurentian-Acadian Pine-Hemlock Forest
-3367,1,Ozark-Ouachita Shortleaf Pine Forest and Woodland
-3368,1,Southern Piedmont Dry Pine Forest
-3369,1,Central Appalachian Dry Pine Forest
-3370,1,Appalachian Hemlock Forest
-3371,1,West Gulf Coastal Plain Pine Forest
-3372,1,East Gulf Coastal Plain Interior Shortleaf Pine Forest
-3373,1,Acadian Low-Elevation Spruce-Fir Forest
-3374,1,Acadian-Appalachian Montane Spruce-Fir Forest
-3375,1,Eastern Serpentine Woodland
-3376,1,Southern Ridge and Valley/Cumberland Dry Calcareous Forest
-3377,1,Central Appalachian Rocky Pine Woodland
-3378,1,West Gulf Coastal Plain Sandhill Shortleaf Pine Forest and Woodland
-3379,1,Northern Atlantic Coastal Plain Maritime Forest
-3380,1,East Gulf Coastal Plain Maritime Forest
-3381,1,Lower Mississippi River Dune Woodland and Forest
-3382,1,Southern Atlantic Coastal Plain Maritime Forest
-3383,1,Edwards Plateau Limestone Woodland
-3384,1,Mississippi Delta Maritime Forest
-3385,1,Western Great Plains Wooded Draw and Ravine
-3386,1,Acadian-Appalachian Alpine Tundra
-3387,1,Florida Peninsula Inland Scrub Shrubland
-3389,1,Acadian-Appalachian Subalpine Woodland
-3390,1,Tamaulipan Mixed Deciduous Thornscrub
-3391,1,Tamaulipan Mesquite Upland Tree
-3392,1,Tamaulipan Calcareous Thornscrub
-3393,1,Edwards Plateau Limestone Shrubland
-3394,1,North-Central Interior Oak Savanna
-3395,1,North-Central Oak Barrens Woodland
-3396,1,Gulf and Atlantic Coastal Plain Tidal Marsh Herbaceous
-3397,1,Nashville Basin Limestone Glade and Woodland
-3398,1,Cumberland Sandstone Glade and Barrens
-3399,1,Northern Atlantic Coastal Plain Grassland
-3400,1,Central Appalachian Alkaline Glade and Woodland
-3401,1,Central Interior Highlands Calcareous Glade and Barrens Woodland
-3402,1,Laurentian-Acadian Swamp Shrubland
-3403,1,West Gulf Coastal Plain Catahoula Barrens
-3405,1,West Gulf Coastal Plain Nepheline Syenite Glade
-3406,1,Southern Piedmont Dry Oak Forest
-3407,1,Laurentian Pine Barrens
-3408,1,Alabama Ketona Glade and Woodland
-3409,1,Great Lakes Alvar Shrubland
-3410,1,Llano Uplift Acidic Forest and Woodland
-3411,1,Great Lakes Wet-Mesic Lakeplain Prairie
-3412,1,North-Central Interior Sand and Gravel Tallgrass Prairie
-3413,1,Bluegrass Savanna and Woodland
-3414,1,Southern Appalachian Shrub Bald
-3415,1,Arkansas Valley Prairie and Woodland
-3416,1,Western Highland Rim Prairie and Barrens
-3417,1,Eastern Highland Rim Prairie and Barrens
-3418,1,Pennyroyal Karst Plain Prairie and Barrens
-3419,1,Southern Ridge and Valley Patch Prairie
-3420,1,Northern Tallgrass Prairie
-3421,1,Central Tallgrass Prairie
-3422,1,Texas Blackland Tallgrass Prairie
-3423,1,Southeastern Great Plains Tallgrass Prairie
-3425,1,Florida Dry Prairie Grassland
-3426,1,Southern Atlantic Coastal Plain Dune and Maritime Grassland
-3428,1,West Gulf Coastal Plain Northern Calcareous Prairie
-3429,1,West Gulf Coastal Plain Southern Calcareous Prairie
-3430,1,Southern Coastal Plain Blackland Prairie
-3433,1,East Gulf Coastal Plain Jackson Prairie
-3434,1,Texas-Louisiana Coastal Prairie
-3435,1,East Gulf Coastal Plain Dune and Coastal Grassland
-3436,1,Northern Atlantic Coastal Plain Dune and Swale Shrubland
-3437,1,Central and Upper Texas Coast Dune and Coastal Grassland
-3438,1,Tamaulipan Savanna Grassland
-3439,1,South Texas Lomas
-3440,1,Tamaulipan Clay Grassland
-3442,1,South Texas Sand Sheet Grassland
-3443,1,South Texas Dune and Coastal Grassland
-3444,1,Eastern Boreal Floodplain Woodland
-3446,1,South Florida Pine Flatwoods
-3447,1,South Florida Cypress Dome
-3448,1,Southern Piedmont Dry Oak-Pine Forest
-3449,1,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-3450,1,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods
-3451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-3452,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Woodland
-3453,1,Central Florida Pine Flatwoods
-3454,1,East Gulf Coastal Plain Near-Coast Pine Flatwoods
-3455,1,East Gulf Coastal Plain Southern Loblolly Flatwoods
-3456,1,Northern Atlantic Coastal Plain Pitch Pine Lowland
-3457,1,South-Central Interior/Upper Coastal Plain Wet Flatwoods
-3458,1,West Gulf Coastal Plain Pine Flatwoods
-3459,1,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland
-3460,1,Southern Coastal Plain Nonriverine Cypress Dome Woodland
-3461,1,Southern Coastal Plain Seepage Swamp and Baygall Woodland
-3462,1,West Gulf Coastal Plain Seepage Swamp and Baygall
-3463,1,Central Appalachian Dry Oak Forest
-3464,1,Acadian Near-Boreal Spruce Barrens
-3466,1,Great Lakes Wooded Dune and Swale
-3467,1,Tamaulipan Floodplain Forest
-3468,1,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall
-3469,1,Eastern Great Plains Floodplain Woodland
-3470,1,Caribbean Coastal Wetland Systems
-3471,1,Central Interior and Appalachian Floodplain Forest
-3472,1,Central Interior and Appalachian Riparian Forest
-3473,1,Gulf and Atlantic Coastal Plain Floodplain Forest
-3474,1,Gulf and Atlantic Coastal Plain Small Stream Riparian Woodland
-3475,1,Laurentian-Acadian Floodplain Forest
-3476,1,Tamaulipan Riparian Woodland
-3477,1,Boreal Acidic Peatland Forest
-3478,1,Caribbean Forested Swamp
-3479,1,Central Interior and Appalachian Swamp Forest
-3480,1,Gulf and Atlantic Coastal Plain Swamp Systems
-3481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp Forest
-3482,1,Great Plains Prairie Pothole
-3483,1,South Florida Everglades Sawgrass Marsh
-3485,1,East Gulf Coastal Plain Savanna and Wet Prairie
-3486,1,Texas Saline Coastal Prairie
-3488,1,Eastern Great Plains Wet Meadow-Prairie-Marsh
-3489,1,Floridian Highlands Freshwater Marsh Herbaceous
-3490,1,Gulf and Atlantic Coastal Plain Tidal Marsh Shrubland
-3491,1,Acadian Salt Marsh and Estuary Systems
-3492,1,Great Lakes Coastal Marsh Herbaceous
-3493,1,Central Interior and Appalachian Herbaceous Wetlands
-3494,1,Laurentian-Acadian Forested Wetlands
-3495,1,Western Great Plains Depressional Wetland Systems
-3497,1,Central Interior and Appalachian Sparsely Vegetated Systems
-3498,1,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems
-3499,1,Laurentian-Acadian Sparsely Vegetated Systems
-3501,1,Southern Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest
-3502,1,Central Appalachian Dry Oak-Pine Forest
-3503,1,Chihuahuan Loamy Plains Desert Grassland
-3504,1,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland
-3506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods
-3507,1,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland
-3509,1,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest
-3510,1,Crowley's Ridge Sand Forest
-3511,1,Appalachian Northern Hardwood Forest
-3512,1,Appalachian Hemlock-Northern Hardwood Forest
-3513,1,Lower Mississippi River Flatwoods
-3517,1,Paleozoic Plateau Bluff and Talus Woodland
-3518,1,North-Central Interior Wet Flatwoods
-3519,1,East-Central Texas Plains Post Oak Savanna and Woodland
-3522,1,Northern Atlantic Coastal Plain Heathland
-3523,1,Edwards Plateau Dry-Mesic Slope Forest and Woodland
-3524,1,Edwards Plateau Mesic Canyon
-3525,1,Edwards Plateau Riparian Woodland
-3526,1,Laurentian-Acadian Swamp Woodland
-3527,1,East Gulf Coastal Plain Interior Oak Forest
-3528,1,Ruderal Upland Shrubland
-3529,1,Ruderal Upland Herbaceous
-3531,1,Ruderal Upland Forest
-3532,1,Ruderal Forest-Northern and Central Hardwood and Conifer
-3533,1,Ruderal Forest-Southeast Hardwood and Conifer
-3534,1,Managed Tree Plantation-Northern and Central Hardwood and Conifer Plantation Group
-3535,1,Managed Tree Plantation-Southeast Conifer and Hardwood Plantation Group
-3536,1,Introduced Wetland Vegetation-Tree
-3538,1,Introduced Wetland Vegetation-Herbaceous
-3539,1,Modified/Managed Northern Tallgrass Grassland
-3540,1,Modified/Managed Southern Tallgrass Grassland
-3546,1,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest
-3550,1,Pinus taeda Forest Alliance
-3551,1,Pinus elliottii Saturated Temperate Woodland Alliance
-3552,1,Pinus palustris-Pinus elliottii Forest Alliance
-3553,1,Mixed Loblolly-Slash Pine
-3554,1,Acadian Low-Elevation Hardwood Forest
-3555,1,Acadian Low-Elevation Spruce-Fir-Hardwood Forest
-3556,1,Central Appalachian Rocky Oak Woodland
-3557,1,Central Appalachian Rocky Pine-Oak Woodland
-3558,1,Edwards Plateau Limestone Grassland
-3559,1,Edwards Plateau Limestone Shrubland
-3560,1,Tamaulipan Mesquite Upland Shrub
-3561,1,Llano Uplift Acidic Herbaceous Glade
-3562,1,Tamaulipan Riparian Shrubland
-3563,1,Edwards Plateau Riparian Shrubland
-3564,1,Modified/Managed Southern Tallgrass Shrubland
-3565,1,Florida Peninsula Inland Scrub Woodland
-3566,1,Florida Dry Prairie Shruband
-3567,1,Southern Coastal Plain Blackland Prairie Woodland
-3568,1,East Gulf Coastal Plain Jackson Prairie Woodland
-3569,1,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Shrubland
-3570,1,Southern Coastal Plain Nonriverine Cypress Dome Herbaceous
-3571,1,Southern Coastal Plain Seepage Swamp and Baygall Shrubland
-3572,1,South Florida Cypress Dome Herbaceous
-3573,1,Gulf and Atlantic Coastal Plain Small Stream Riparian Herbaceous
-3574,1,Gulf and Atlantic Coastal Plain Small Stream Riparian Shrubland
-3575,1,Caribbean Herbaceous Swamp
-3576,1,South Florida Everglades Forest
-3577,1,East Gulf Coastal Plain Wet Prairie Grassland
-3578,1,East Gulf Coastal Plain Wet Prairie Shrubland
-3579,1,Floridian Highlands Freshwater Marsh Shrubland
-3580,1,Floridian Highlands Freshwater Marsh Woodland
-3581,1,South Florida Everglades Shrubland
-3582,1,Ozark-Ouachita Oak Forest and Woodland
-3583,1,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland
-3584,1,West Gulf Coastal Plain Hardwood Forest
-3585,1,West Gulf Coastal Plain Pine-Hardwood Forest
-3586,1,West Gulf Coastal Plain Sandhill Oak Forest and Woodland
-3587,1,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland
-3588,1,East Gulf Coastal Plain Southern Hardwood Flatwoods
-3589,1,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods
-3590,1,West Gulf Coastal Plain Hardwood Flatwoods
-3591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods
-3600,1,Western North American Boreal White Spruce Forest
-3601,1,Western North American Boreal Treeline White Spruce Woodland
-3602,1,Western North American Boreal Spruce-Lichen Woodland
-3603,1,Alaska Boreal White Spruce Forest
-3604,1,Western North American Boreal Mesic Black Spruce Forest
-3605,1,Western North American Boreal Mesic Birch-Aspen Forest
-3606,1,Western North American Boreal Dry Aspen-Steppe Bluff
-3607,1,Western North American Boreal Subalpine Balsam Poplar-Aspen Woodland
-3608,1,Alaska Sub-boreal Avalanche Slope Shrubland
-3609,1,Alaska Sub-boreal Mesic Subalpine Alder Shrubland
-3610,1,Western North American Boreal Mesic Scrub Birch-Willow Shrubland
-3611,1,Western North American Sub-boreal Mesic Bluejoint Meadow
-3612,1,Western North American Boreal Dry Grassland
-3631,1,Western North American Boreal Alpine Dwarf-Shrub Summit
-3633,1,Western North American Boreal Alpine Mesic Herbaceous Meadow
-3634,1,Western North American Boreal Alpine Dryas Dwarf-Shrubland
-3635,1,Western North American Boreal Alpine Ericaceous Dwarf-Shrubland
-3636,1,Western North American Boreal Alpine Dwarf-Shrub-Lichen Shrubland
-3638,1,Alaska Arctic Mesic Alder Shrubland
-3639,1,Alaska Arctic Mesic-Wet Willow Shrubland
-3640,1,Aleutian Mesic-Wet Willow Shrubland
-3641,1,North Pacific Maritime Mesic Subalpine Parkland
-3642,1,Aleutian Kenai Birch-Cottonwood-Poplar Forest
-3643,1,Alaskan Pacific Maritime Alpine Dwarf-Shrubland
-3644,1,Alaskan Pacific Maritime Sitka Spruce Forest
-3645,1,Alaska Sub-boreal and Maritime Alpine Mesic Herbaceous Meadow
-3646,1,Alaskan Pacific Maritime Western Hemlock Forest
-3648,1,Alaskan Pacific Maritime Mountain Hemlock Forest
-3649,1,Alaskan Pacific Maritime Subalpine Mountain Hemlock Woodland
-3650,1,Alaskan Pacific Maritime Periglacial Woodland
-3651,1,Aleutian Mesic Herbaceous Meadow
-3652,1,Alaskan Pacific Maritime Subalpine Alder-Salmonberry Shrubland
-3653,1,Alaskan Pacific Maritime Mesic Herbaceous Meadow
-3654,1,Alaskan Pacific Maritime Sitka Spruce Beach Ridge
-3671,1,Aleutian American Dunegrass Grassland
-3672,1,Alaskan Pacific Maritime Subalpine Copperbush Shrubland
-3674,1,Alaskan Pacific Maritime Alpine Sparse Shrub and Fell-field
-3675,1,North Pacific Mesic Western Hemlock-Yellow-cedar Forest
-3677,1,Alaska Sub-boreal White-Lutz Spruce Forest and Woodland
-3678,1,Alaska Sub-boreal Mountain Hemlock-White Spruce Forest
-3679,1,Alaska Sub-boreal White Spruce Forest
-3680,1,Alaskan Pacific Maritime Avalanche Slope Shrubland
-3682,1,Alaska Arctic Scrub Birch-Ericaceous Shrubland
-3683,1,Alaska Arctic Mesic Sedge-Willow Tundra
-3684,1,Alaska Arctic Mesic Sedge-Dryas Tundra
-3685,1,Alaska Arctic Acidic Sparse Tundra
-3686,1,Alaska Arctic Non-Acidic Sparse Tundra
-3687,1,Alaska Arctic Lichen Tundra
-3688,1,Alaska Arctic Acidic Dryas Dwarf-Shrubland
-3689,1,Alaska Arctic Non-Acidic Dryas Dwarf-Shrubland
-3690,1,Alaska Arctic Dwarf-Shrubland
-3691,1,Alaska Arctic Acidic Dwarf-Shrub Lichen Tundra
-3692,1,Alaska Arctic Non-Acidic Dwarf-Shrub Lichen Tundra
-3699,1,Alaska Arctic Mesic Herbaceous Meadow
-3709,1,Alaska Arctic Marine Beach and Beach Meadow
-3718,1,Aleutian Mesic Alder-Salmonberry Shrubland
-3719,1,Aleutian Crowberry-Herbaceous Heath
-3720,1,Aleutian Mixed Dwarf-Shrub-Herbaceous Shrubland
-3725,1,Aleutian Marine Beach and Beach Meadow
-3730,1,Aleutian Sparse Heath and Fell-Field
-3731,1,Aleutian Oval-leaf Blueberry Shrubland
-3736,1,Barren
-3737,1,Snow-Ice
-3738,1,Open Water
-3739,1,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest
-3740,1,Boreal Aquatic Beds
-3741,1,Polar Tidal Marshes and Aquatic Beds
-3742,1,"Temperate Pacific Tidal Marshes, Aquatic Beds, and Intertidal Flats"
-3743,1,Aleutian Herbaceous Wetlands
-3744,1,Arctic Herbaceous Wetlands
-3745,1,Boreal Herbaceous Wetlands
-3746,1,Pacific Maritime Herbaceous Wetlands
-3747,1,Arctic Sedge Meadows
-3748,1,Aleutian Shrub-Herbaceous Wetlands
-3749,1,Pacific Maritime Coastal Meadows and Slough-Levee
-3750,1,Alaska Sub-boreal Hardwood Forest
-3751,1,Boreal Coniferous Woody Wetland
-3752,1,Pacific Maritime Coniferous Woody Wetland
-3753,1,Boreal Coniferous-Deciduous Woody Wetland
-3754,1,Agriculture-Pasture and Hay
-3755,1,Agriculture-Cultivated Crops and Irrigated Agriculture
-3756,1,Arctic Dwarf Shrub Wetland
-3757,1,Boreal Dwarf Shrub Wetland
-3758,1,Pacific Maritime Dwarf Shrub Wetland
-3759,1,Recently Burned - Herb Cover
-3760,1,Recently Burned - Shrub Cover
-3761,1,Aleutian Shrub Floodplains
-3762,1,Arctic Floodplains
-3763,1,Boreal Forested Floodplains
-3764,1,Pacific Maritime Forested Floodplains
-3765,1,Boreal Black Spruce-Tussock Woodland
-3766,1,Alaskan Pacific Maritime Periglacial Shrubland
-3767,1,Developed-Open Space
-3768,1,Developed-Low Intensity
-3769,1,Developed-Medium Intensity
-3770,1,Developed-High Intensity
-3771,1,Aleutian Shrub Peatlands
-3772,1,Arctic Shrub Peatlands
-3773,1,Boreal Peatlands
-3774,1,Pacific Maritime Forested Peatlands
-3775,1,Aleutian Forested Floodplains
-3776,1,Boreal Riparian Stringer Forest and Shrubland
-3777,1,Boreal Shrub Swamp
-3778,1,Pacific Maritime Shrub Swamp
-3779,1,Alaska Boreal Hardwood Forest
-3780,1,Alaska Boreal White Spruce-Hardwood Forest
-3781,1,Arctic Shrub Sedge-Tussock-Lichen Tundra
-3782,1,Boreal Tussock Tundra
-3783,1,Arctic Shrub Tussock Tundra
-3784,1,Arctic Shrub-Tussock Tundra
-3785,1,Arctic Shrub Tundra
-3786,1,Boreal Shrub-Tussock Tundra
-3787,1,Boreal Herbaceous Floodplains
-3788,1,Boreal Shrub Floodplains
-3789,1,Alaska Sub-boreal White Spruce-Hardwood Forest
-3790,1,Pacific Maritime Shrub Floodplains
-3791,1,Aleutian Sparsely Vegetated
-3792,1,Arctic Sparsely Vegetated
-3793,1,Boreal Sparsely Vegetated
-3794,1,Pacific Maritime Sparsely Vegetated
-3795,1,Aleutian Herbaceous Peatlands
-3796,1,Arctic Herbaceous Peatlands
-3797,1,Pacific Maritime Shrub Peatlands
-3798,1,Arctic Herbaceous Sedge-Tussock-Lichen Tundra
-3799,1,Arctic Herbaceous Tussock Tundra
-3800,1,Developed-Open Space
-3801,1,Developed-Low Intensity
-3802,1,Developed-Medium Intensity
-3803,1,Developed-High Intensity
-3804,1,Agriculture
-3805,1,Water
-3806,1,Hawai'i Bog
-3807,1,Hawai'i Islands Introduced Wetland Vegetation-Tree
-3808,1,Hawai'i Lowland Rainforest
-3809,1,Hawai'i Montane Cloud Forest
-3810,1,Hawai'i Montane Rainforest
-3811,1,Hawai'i Wet Cliff and Ridge Crest Shrubland
-3812,1,Hawai'i Introduced Wetland Vegetation-Shrub
-3813,1,Hawai'i Lowland Dry Forest
-3814,1,Hawai'i Lowland Mesic Forest
-3815,1,Hawai'i Montane-Subalpine Dry Forest and Woodland
-3816,1,Hawai'i Montane-Subalpine Mesic Forest
-3817,1,Hawai'i Lowland Dry Shrubland
-3818,1,Hawai'i Lowland Mesic Shrubland
-3819,1,Hawai'i Lowland Dry Grassland
-3820,1,Hawai'i Lowland Mesic Grassland
-3821,1,Hawai'i Montane-Subalpine Dry Shrubland
-3822,1,Hawai'i Montane-Subalpine Dry Grassland
-3823,1,Hawai'i Montane-Subalpine Mesic Grassland
-3824,1,Hawai'i Alpine Dwarf-Shrubland
-3825,1,Hawai'i Dry Cliff
-3826,1,Hawai'i Dry Coastal Strand
-3827,1,Hawai'i Wet-Mesic Coastal Strand
-3828,1,Hawai'i Subalpine Mesic Shrubland
-3830,1,Barren
-3832,1,Barren
-3833,1,Pacific Islands Limestone Forest
-3834,1,Pacific Islands Littoral/Strand Vegetation
-3835,1,Pacific Islands Lowland Forest
-3836,1,Pacific Islands Mangrove Forest
-3837,1,Pacific Islands Palm Forest
-3838,1,Hawai'i Introduced Wetland Vegetation-Herbaceous
-3839,1,Pacific Islands Ravine Forest
-3840,1,Pacific Islands Savannah
-3841,1,Pacific Islands Scrub Forest/Shrub
-3842,1,Pacific Islands Swamp/Marsh
-3843,1,Pacific Islands Upland Forest
-3845,1,Hawai'i Introduced Dry Forest
-3846,1,Hawai'i Introduced Wet-Mesic Forest
-3847,1,Hawai'i Introduced Deciduous Shrubland
-3848,1,Hawai'i Introduced Perennial Grassland
-3849,1,Hawai'i Introduced Evergreen Shrubland
-3850,1,Pacific Islands Introduced Forest
-3852,1,Hawai'i Introduced Coastal Wetland Vegetation - Tree
-3853,1,Hawai'i Introduced Coastal Wetland Vegetation - Shrub
-3854,1,Hawai'i Introduced Coastal Wetland Vegetation - Herbaceous
-3855,1,Hawai'i Managed Tree Plantation
-3856,1,Pacific Islands Plantation Forest
-3857,1,Urban
-3858,1,Agriculture
-3859,1,Water
-3860,1,Caribbean High-medium density urban
-3861,1,Caribbean Low-medium density urban
-3862,1,Caribbean Herbaceous agriculture - cultivated lands
-3863,1,Caribbean Active sun coffee and mixed woody agriculture
-3864,1,"Caribbean Pasture, hay or inactive agriculture"
-3865,1,"Caribbean Pasture, hay or other grassy areas"
-3866,1,Caribbean Drought deciduous open woodland
-3867,1,Caribbean Drought deciduous dense woodland
-3868,1,"Caribbean Deciduous, evergreen coastal and mixed forest or shrubland with succulents"
-3869,1,Caribbean Semi-deciduous and drought deciduous forest on alluvium and non-carbonate substrates
-3870,1,Caribbean Semi-deciduous and drought deciduous forest on karst (includes semi-evergreen forest)
-3871,1,"Caribbean Drought deciduous, semi-deciduous and seasonal evergreen forest on serpentine"
-3872,1,Caribbean Seasonal evergreen and semi-deciduous forest on karst
-3873,1,Caribbean Seasonal evergreen and evergreen forest
-3874,1,Caribbean Seasonal evergreen forest with coconut palm
-3875,1,Caribbean Evergreen and seasonal evergreen forest on karst
-3876,1,Caribbean Evergreen forest on serpentine
-3877,1,"Caribbean Elfin, sierra palm, transitional and tall cloud forest"
-3878,1,Caribbean Emergent wetlands including seasonnally flooded pasture
-3879,1,Caribbean Salt or mud flats
-3880,1,Caribbean Mangrove
-3881,1,Caribbean Seasonally flooded savannahs and woodlands
-3882,1,Caribbean Pterocarpus swamp
-3883,1,Caribbean Tidally flooded evergreen dwarf-shrubland and forb vegetation
-3884,1,Quarries
-3885,1,Coastal sand and rock
-3886,1,Bare soil
-3887,1,Water
-3900,1,Western Cool Temperate Urban Deciduous Forest
-3901,1,Western Cool Temperate Urban Evergreen Forest
-3902,1,Western Cool Temperate Urban Mixed Forest
-3903,1,Western Cool Temperate Urban Herbaceous
-3904,1,Western Cool Temperate Urban Shrubland
-3905,1,Eastern Cool Temperate Urban Deciduous Forest
-3906,1,Eastern Cool Temperate Urban Evergreen Forest
-3907,1,Eastern Cool Temperate Urban Mixed Forest
-3908,1,Eastern Cool Temperate Urban Herbaceous
-3909,1,Eastern Cool Temperate Urban Shrubland
-3910,1,Western Warm Temperate Urban Deciduous Forest
-3911,1,Western Warm Temperate Urban Evergreen Forest
-3912,1,Western Warm Temperate Urban Mixed Forest
-3913,1,Western Warm Temperate Urban Herbaceous
-3914,1,Western Warm Temperate Urban Shrubland
-3915,1,Eastern Warm Temperate Urban Urban Deciduous Forest
-3916,1,Eastern Warm Temperate Urban Urban Evergreen Forest
-3917,1,Eastern Warm Temperate Urban Urban Mixed Forest
-3918,1,Eastern Warm Temperate Urban Urban Herbaceous
-3919,1,Eastern Warm Temperate Urban Urban Shrubland
-3920,1,Western Cool Temperate Developed Ruderal Deciduous Forest
-3921,1,Western Cool Temperate Developed Ruderal Evergreen Forest
-3922,1,Western Cool Temperate Developed Ruderal Mixed Forest
-3923,1,Western Cool Temperate Developed Ruderal Shrubland
-3924,1,Western Cool Temperate Developed Ruderal Grassland
-3925,1,Western Warm Temperate Developed Ruderal Deciduous Forest
-3926,1,Western Warm Temperate Developed Ruderal Evergreen Forest
-3927,1,Western Warm Temperate Developed Ruderal Mixed Forest
-3928,1,Western Warm Temperate Developed Ruderal Shrubland
-3929,1,Western Warm Temperate Developed Ruderal Grassland
-3930,1,Eastern Cool Temperate Developed Ruderal Deciduous Forest
-3931,1,Eastern Cool Temperate Developed Ruderal Evergreen Forest
-3932,1,Eastern Cool Temperate Developed Ruderal Mixed Forest
-3933,1,Eastern Cool Temperate Developed Ruderal Shrubland
-3934,1,Eastern Cool Temperate Developed Ruderal Grassland
-3935,1,Eastern Warm Temperate Developed Ruderal Deciduous Forest
-3936,1,Eastern Warm Temperate Developed Ruderal Evergreen Forest
-3937,1,Eastern Warm Temperate Developed Ruderal Mixed Forest
-3938,1,Eastern Warm Temperate Developed Ruderal Shrubland
-3939,1,Eastern Warm Temperate Developed Ruderal Grassland
-3940,1,Western Cool Temperate Undeveloped Ruderal Deciduous Forest
-3941,1,Western Cool Temperate Undeveloped Ruderal Evergreen Forest
-3942,1,Western Cool Temperate Undeveloped Ruderal Mixed Forest
-3943,1,Western Cool Temperate Undeveloped Ruderal Shrubland
-3944,1,Western Cool Temperate Undeveloped Ruderal Grassland
-3945,1,Western Warm Temperate Undeveloped Ruderal Deciduous Forest
-3946,1,Western Warm Temperate Undeveloped Ruderal Evergreen Forest
-3947,1,Western Warm Temperate Undeveloped Ruderal Mixed Forest
-3948,1,Western Warm Temperate Undeveloped Ruderal Shrubland
-3949,1,Western Warm Temperate Undeveloped Ruderal Grassland
-3950,1,Eastern Cool Temperate Undeveloped Ruderal Deciduous Forest
-3951,1,Eastern Cool Temperate Undeveloped Ruderal Evergreen Forest
-3952,1,Eastern Cool Temperate Undeveloped Ruderal Mixed Forest
-3953,1,Eastern Cool Temperate Undeveloped Ruderal Shrubland
-3954,1,Eastern Cool Temperate Undeveloped Ruderal Grassland
-3955,1,Eastern Warm Temperate Undeveloped Ruderal Deciduous Forest
-3956,1,Eastern Warm Temperate Undeveloped Ruderal Evergreen Forest
-3957,1,Eastern Warm Temperate Undeveloped Ruderal Mixed Forest
-3958,1,Eastern Warm Temperate Undeveloped Ruderal Shrubland
-3959,1,Eastern Warm Temperate Undeveloped Ruderal Grassland
-3960,1,Western Cool Temperate Orchard
-3961,1,Western Cool Temperate Vineyard
-3962,1,Western Cool Temperate Bush fruit and berries
-3963,1,Western Cool Temperate Row Crop - Close Grown Crop
-3964,1,Western Cool Temperate Row Crop
-3965,1,Western Cool Temperate Close Grown Crop
-3966,1,Western Cool Temperate Fallow/Idle Cropland
-3967,1,Western Cool Temperate Pasture and Hayland
-3968,1,Western Cool Temperate Wheat
-3969,1,Western Cool Temperate Aquaculture
-3970,1,Eastern Cool Temperate Orchard
-3971,1,Eastern Cool Temperate Vineyard
-3972,1,Eastern Cool Temperate Bush fruit and berries
-3973,1,Eastern Cool Temperate Row Crop - Close Grown Crop
-3974,1,Eastern Cool Temperate Row Crop
-3975,1,Eastern Cool Temperate Close Grown Crop
-3976,1,Eastern Cool Temperate Fallow/Idle Cropland
-3977,1,Eastern Cool Temperate Pasture and Hayland
-3978,1,Eastern Cool Temperate Wheat
-3979,1,Eastern Cool Temperate Aquaculture
-3980,1,Western Warm Temperate Orchard
-3981,1,Western Warm Temperate Vineyard
-3982,1,Western Warm Temperate Bush fruit and berries
-3983,1,Western Warm Temperate Row Crop - Close Grown Crop
-3984,1,Western Warm Temperate Row Crop
-3985,1,Western Warm Temperate Close Grown Crop
-3986,1,Western Warm Temperate Fallow/Idle Cropland
-3987,1,Western Warm Temperate Pasture and Hayland
-3988,1,Western Warm Temperate Wheat
-3989,1,Western Warm Temperate Aquaculture
-3990,1,Eastern Warm Temperate Orchard
-3991,1,Eastern Warm Temperate Vineyard
-3992,1,Eastern Warm Temperate Bush fruit and berries
-3993,1,Eastern Warm Temperate Row Crop - Close Grown Crop
-3994,1,Eastern Warm Temperate Row Crop
-3995,1,Eastern Warm Temperate Close Grown Crop
-3996,1,Eastern Warm Temperate Fallow/Idle Cropland
-3997,1,Eastern Warm Temperate Pasture and Hayland
-3998,1,Eastern Warm Temperate Wheat
-3999,1,Eastern Warm Temperate Aquaculture
-7008,1,North Pacific Oak Woodland
-7009,1,Northwestern Great Plains Aspen Forest and Parkland
-7010,1,Northern Rocky Mountain Western Larch Savanna
-7011,1,Rocky Mountain Aspen Forest and Woodland
-7012,1,Rocky Mountain Bigtooth Maple Ravine Woodland
-7013,1,Western Great Plains Dry Bur Oak Forest and Woodland
-7014,1,Central and Southern California Mixed Evergreen Woodland
-7015,1,California Coastal Redwood Forest
-7016,1,Colorado Plateau Pinyon-Juniper Woodland
-7017,1,Columbia Plateau Western Juniper Woodland and Savanna
-7018,1,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland
-7019,1,Great Basin Pinyon-Juniper Woodland
-7020,1,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland
-7021,1,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland
-7022,1,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland
-7023,1,Madrean Encinal
-7024,1,Madrean Lower Montane Pine-Oak Forest and Woodland
-7025,1,Madrean Pinyon-Juniper Woodland
-7026,1,Madrean Upper Montane Conifer-Oak Forest and Woodland
-7027,1,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland
-7028,1,Mediterranean California Mesic Mixed Conifer Forest and Woodland
-7029,1,Mediterranean California Mixed Oak Woodland
-7030,1,Mediterranean California Lower Montane Conifer Forest and Woodland
-7031,1,California Montane Jeffrey Pine-(Ponderosa Pine) Woodland
-7032,1,Mediterranean California Red Fir Forest
-7033,1,Mediterranean California Subalpine Woodland
-7034,1,Mediterranean California Mesic Serpentine Woodland
-7035,1,North Pacific Dry Douglas-fir-(Madrone) Forest and Woodland
-7036,1,North Pacific Seasonal Sitka Spruce Forest
-7037,1,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest
-7038,1,North Pacific Maritime Mesic Subalpine Parkland
-7039,1,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest
-7041,1,North Pacific Mountain Hemlock Forest
-7042,1,North Pacific Mesic Western Hemlock-Silver Fir Forest
-7043,1,Mediterranean California Mixed Evergreen Forest
-7044,1,Northern California Mesic Subalpine Woodland
-7045,1,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest
-7046,1,Northern Rocky Mountain Subalpine Woodland and Parkland
-7047,1,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest
-7048,1,Northwestern Great Plains Highland White Spruce Woodland
-7049,1,Rocky Mountain Foothill Limber Pine-Juniper Woodland
-7050,1,Rocky Mountain Lodgepole Pine Forest
-7051,1,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland
-7052,1,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland
-7053,1,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna
-7054,1,Southern Rocky Mountain Ponderosa Pine Woodland
-7055,1,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland
-7056,1,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland
-7057,1,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland
-7058,1,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland
-7059,1,Southern Rocky Mountain Pinyon-Juniper Woodland
-7060,1,East Cascades Ponderosa Pine Forest and Woodland
-7061,1,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland
-7062,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland
-7063,1,North Pacific Broadleaf Landslide Forest
-7064,1,Colorado Plateau Mixed Low Sagebrush Shrubland
-7065,1,Columbia Plateau Scabland Shrubland
-7066,1,Inter-Mountain Basins Mat Saltbush Shrubland
-7067,1,Mediterranean California Alpine Fell-Field
-7068,1,North Pacific Dry and Mesic Alpine Dwarf-Shrubland
-7069,1,North Pacific Dry and Mesic Alpine Fell-field or Meadow
-7070,1,Rocky Mountain Alpine Dwarf-Shrubland
-7071,1,Sierra Nevada Alpine Dwarf-Shrubland
-7072,1,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe
-7073,1,Baja Semi-Desert Coastal Succulent Scrub
-7074,1,Chihuahuan Creosotebush Desert Scrub
-7075,1,Chihuahuan Mixed Salt Desert Scrub
-7076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub
-7077,1,Chihuahuan Succulent Desert Scrub
-7078,1,Colorado Plateau Blackbrush-Mormon-tea Shrubland
-7079,1,Great Basin Xeric Mixed Sagebrush Shrubland
-7080,1,Inter-Mountain Basins Big Sagebrush Shrubland
-7081,1,Inter-Mountain Basins Mixed Salt Desert Scrub
-7082,1,Mojave Mid-Elevation Mixed Desert Scrub
-7083,1,North Pacific Avalanche Chute Shrubland
-7084,1,North Pacific Montane Shrubland
-7085,1,Northwestern Great Plains Shrubland
-7086,1,Rocky Mountain Lower Montane-Foothill Shrubland
-7087,1,Sonora-Mojave Creosotebush-White Bursage Desert Scrub
-7088,1,Sonora-Mojave Mixed Salt Desert Scrub
-7090,1,Sonoran Granite Outcrop Desert Scrub
-7091,1,Sonoran Mid-Elevation Desert Scrub
-7092,1,Southern California Coastal Scrub
-7093,1,Southern Colorado Plateau Sand Shrubland
-7094,1,Western Great Plains Sandhill Steppe
-7096,1,California Maritime Chaparral
-7097,1,California Mesic Chaparral
-7098,1,California Montane Woodland and Chaparral
-7099,1,California Xeric Serpentine Chaparral
-7100,1,Chihuahuan Mixed Desert and Thornscrub
-7101,1,Madrean Oriental Chaparral
-7102,1,Colorado Plateau Pinyon-Juniper Shrubland
-7103,1,Great Basin Semi-Desert Chaparral
-7104,1,Mogollon Chaparral
-7105,1,Northern and Central California Dry-Mesic Chaparral
-7106,1,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland
-7107,1,Rocky Mountain Gambel Oak-Mixed Montane Shrubland
-7108,1,Sonora-Mojave Semi-Desert Chaparral
-7109,1,Sonoran Paloverde-Mixed Cacti Desert Scrub
-7110,1,Southern California Dry-Mesic Chaparral
-7111,1,Western Great Plains Mesquite Shrubland
-7112,1,California Central Valley Mixed Oak Savanna
-7113,1,California Coastal Live Oak Woodland and Savanna
-7114,1,California Lower Montane Foothill Pine Woodland and Savanna
-7115,1,Inter-Mountain Basins Juniper Savanna
-7116,1,Madrean Juniper Savanna
-7117,1,Southern Rocky Mountain Ponderosa Pine Savanna
-7118,1,Southern California Oak Woodland and Savanna
-7119,1,Southern Rocky Mountain Juniper Woodland and Savanna
-7120,1,Willamette Valley Upland Prairie
-7121,1,Apacherian-Chihuahuan Semi-Desert Shrub-Steppe
-7122,1,Chihuahuan Gypsophilous Grassland and Steppe
-7123,1,Columbia Plateau Steppe and Grassland
-7124,1,Columbia Plateau Low Sagebrush Steppe
-7125,1,Inter-Mountain Basins Big Sagebrush Steppe
-7126,1,Inter-Mountain Basins Montane Sagebrush Steppe
-7127,1,Inter-Mountain Basins Semi-Desert Shrub-Steppe
-7128,1,Northern California Coastal Scrub
-7129,1,California Central Valley and Southern Coastal Grassland
-7130,1,California Mesic Serpentine Grassland
-7131,1,California Northern Coastal Grassland
-7132,1,Central Mixedgrass Prairie Grassland
-7133,1,Chihuahuan Sandy Plains Semi-Desert Grassland
-7134,1,Columbia Basin Foothill and Canyon Dry Grassland
-7135,1,Inter-Mountain Basins Semi-Desert Grassland
-7136,1,Mediterranean California Alpine Dry Tundra
-7137,1,Mediterranean California Subalpine Meadow
-7138,1,North Pacific Montane Grassland
-7139,1,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland
-7140,1,Northern Rocky Mountain Subalpine-Upper Montane Grassland
-7141,1,Northwestern Great Plains Mixedgrass Prairie
-7142,1,Columbia Basin Palouse Prairie
-7143,1,Rocky Mountain Alpine Fell-Field
-7144,1,Rocky Mountain Alpine Turf
-7145,1,Rocky Mountain Subalpine-Montane Mesic Meadow
-7146,1,Southern Rocky Mountain Montane-Subalpine Grassland
-7147,1,Western Great Plains Foothill and Piedmont Grassland
-7148,1,Western Great Plains Sand Prairie
-7149,1,Western Great Plains Shortgrass Prairie
-7150,1,Western Great Plains Tallgrass Prairie
-7151,1,California Central Valley Riparian Woodland
-7152,1,California Central Valley Riparian Shrubland
-7153,1,Inter-Mountain Basins Greasewood Flat
-7156,1,North Pacific Lowland Riparian Forest
-7157,1,North Pacific Lowland Riparian Shrubland
-7158,1,North Pacific Montane Riparian Woodland
-7159,1,North Pacific Montane Riparian Shrubland
-7161,1,Northern Rocky Mountain Conifer Swamp
-7165,1,Northern Rocky Mountain Foothill Conifer Wooded Steppe
-7166,1,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland
-7167,1,Rocky Mountain Poor-Site Lodgepole Pine Forest
-7168,1,Northern Rocky Mountain Avalanche Chute Shrubland
-7169,1,Northern Rocky Mountain Subalpine Deciduous Shrubland
-7170,1,Klamath-Siskiyou Xeromorphic Serpentine Savanna
-7171,1,North Pacific Alpine and Subalpine Dry Grassland
-7172,1,Sierran-Intermontane Desert Western White Pine-White Fir Woodland
-7173,1,North Pacific Wooded Volcanic Flowage
-7174,1,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest
-7177,1,California Coastal Closed-Cone Conifer Forest and Woodland
-7178,1,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest
-7179,1,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna
-7191,1,Recently Logged-Herb and Grass Cover
-7192,1,Recently Logged-Shrub Cover
-7193,1,Recently Logged-Tree Cover
-7195,1,Recently Burned-Herb and Grass Cover
-7196,1,Recently Burned-Shrub Cover
-7197,1,Recently Burned-Tree Cover
-7198,1,Recently Disturbed Other-Herb and Grass Cover
-7199,1,Recently Disturbed Other-Shrub Cover
-7200,1,Recently Disturbed Other-Tree Cover
-7207,1,Central Mixedgrass Prairie Shrubland
-7234,1,Mediterranean California Mesic Serpentine Chaparral
-7238,1,Laurentian-Acadian Northern Oak Forest
-7239,1,Laurentian-Acadian Northern Pine-(Oak) Forest
-7240,1,Laurentian-Acadian Hardwood Forest
-7241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest
-7242,1,Laurentian Oak Barrens
-7243,1,Laurentian Pine-Oak Barrens
-7250,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Shrubland
-7256,1,Apacherian-Chihuahuan Semi-Desert Grassland
-7260,1,Mediterranean California Lower Montane Black Oak Forest and Woodland
-7261,1,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland
-7262,1,East Cascades Oak Forest and Woodland
-7263,1,East Cascades Oak-Ponderosa Pine Forest and Woodland
-7264,1,California Lower Montane Blue Oak Woodland and Savanna
-7265,1,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna
-7268,1,Eastern Great Plains Tallgrass Aspen Shrubland
-7270,1,Klamath-Siskiyou Xeromorphic Serpentine Chaparral
-7272,1,Eastern Boreal Floodplain Shrubland
-7286,1,Paleozoic Plateau Bluff and Talus Herbaceous
-7290,1,North-Central Oak Barrens Herbaceous
-7291,1,Central Interior Highlands Calcareous Glade and Barrens Herbaceous
-7292,1,Open Water
-7295,1,Quarries-Strip Mines-Gravel Pits-Well and Wind Pads
-7296,1,Developed-Low Intensity
-7297,1,Developed-Medium Intensity
-7298,1,Developed-High Intensity
-7299,1,Developed-Roads
-7301,1,Laurentian-Acadian Sub-boreal Aspen-Birch Forest
-7302,1,Laurentian-Acadian Northern Hardwoods Forest
-7304,1,Ozark-Ouachita Dry-Mesic Oak Forest
-7305,1,Southern Interior Low Plateau Dry-Mesic Oak Forest
-7308,1,Crosstimbers Oak Forest and Woodland
-7310,1,North-Central Interior Dry-Mesic Oak Forest and Woodland
-7311,1,North-Central Interior Dry Oak Forest and Woodland
-7312,1,Ouachita Montane Oak Forest
-7313,1,North-Central Interior Beech-Maple Forest
-7314,1,North-Central Interior Maple-Basswood Forest
-7317,1,Allegheny-Cumberland Dry Oak Forest and Woodland
-7321,1,South-Central Interior Mesophytic Forest
-7323,1,West Gulf Coastal Plain Mesic Hardwood Forest
-7326,1,South-Central Interior / Upper Coastal Plain Flatwoods
-7331,1,Eastern Great Plains Tallgrass Aspen Forest and Woodland
-7334,1,Ozark-Ouachita Mesic Hardwood Forest
-7338,1,Central and South Texas Coastal Fringe Forest and Woodland
-7339,1,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland
-7348,1,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland
-7353,1,Southern Appalachian Low-Elevation Pine Forest
-7358,1,Bastrop Lost Pines Forest and Woodland
-7362,1,Laurentian-Acadian Northern Pine Forest
-7363,1,Central Interior Highlands Dry Acidic Glade and Barrens
-7364,1,Ozark-Ouachita Dry Oak Woodland
-7366,1,Laurentian-Acadian Pine-Hemlock Forest
-7367,1,Ozark-Ouachita Shortleaf Pine Forest and Woodland
-7370,1,Appalachian Hemlock Forest
-7371,1,West Gulf Coastal Plain Pine Forest
-7372,1,East Gulf Coastal Plain Interior Shortleaf Pine Forest
-7376,1,Southern Ridge and Valley / Cumberland Dry Calcareous Forest
-7378,1,West Gulf Coastal Plain Sandhill Shortleaf Pine Forest and Woodland
-7383,1,Edwards Plateau Limestone Savanna and Woodland
-7385,1,Great Plains Wooded Draw and Ravine Woodland
-7390,1,Tamaulipan Mixed Deciduous Thornscrub
-7391,1,Tamaulipan Mesquite Upland Woodland
-7392,1,Tamaulipan Calcareous Thornscrub
-7393,1,Edwards Plateau Limestone Shrubland
-7394,1,North-Central Interior Oak Savanna
-7395,1,North-Central Oak Barrens Woodland
-7396,1,Great Plains Wooded Draw and Ravine Shrubland
-7397,1,Nashville Basin Limestone Glade and Woodland
-7401,1,Central Interior Highlands Calcareous Glade and Barrens Woodland
-7403,1,West Gulf Coastal Plain Catahoula Barrens
-7405,1,West Gulf Coastal Plain Nepheline Syenite Glade
-7407,1,Laurentian Pine Barrens
-7409,1,Great Lakes Alvar
-7410,1,Llano Uplift Acidic Forest and Woodland
-7411,1,Great Lakes Wet-Mesic Lakeplain Prairie
-7412,1,North-Central Interior Sand and Gravel Tallgrass Prairie
-7413,1,Bluegrass Savanna and Woodland Prairie
-7415,1,Arkansas Valley Prairie
-7416,1,Western Highland Rim Prairie and Barrens
-7417,1,Eastern Highland Rim Prairie and Barrens
-7418,1,Pennyroyal Karst Plain Prairie and Barrens
-7420,1,Northern Tallgrass Prairie
-7421,1,Central Tallgrass Prairie
-7422,1,Texas Blackland Tallgrass Prairie
-7423,1,Southeastern Great Plains Tallgrass Prairie
-7424,1,East-Central Texas Plains Xeric Sandyland
-7428,1,West Gulf Coastal Plain Northern Calcareous Prairie
-7429,1,West Gulf Coastal Plain Southern Calcareous Prairie
-7434,1,Texas-Louisiana Coastal Prairie
-7437,1,Texas Coast Dune and Coastal Grassland
-7438,1,Tamaulipan Savanna Grassland
-7439,1,Tamaulipan Lomas
-7441,1,Bluegrass Savanna and Woodland
-7442,1,Arkansas Valley Prairie and Woodland
-7444,1,Eastern Boreal Floodplain Woodland
-7451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods
-7457,1,South-Central Interior / Upper Coastal Plain Wet Flatwoods
-7458,1,West Gulf Coastal Plain Pine Flatwoods
-7461,1,Southern Coastal Plain Seepage Swamp and Baygall Woodland
-7462,1,West Gulf Coastal Plain Seepage Swamp and Baygall Woodland
-7466,1,Great Lakes Wooded Dune and Swale
-7467,1,Tamaulipan Floodplain Woodland
-7473,1,West Gulf Coastal Plain Seepage Swamp and Baygall Shrubland
-7474,1,Tamaulipan Floodplain Shrubland
-7475,1,Tamaulipan Floodplain Herbaceous
-7476,1,Tamaulipan Riparian Woodland
-7481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp
-7482,1,Great Plains Prairie Pothole
-7486,1,Texas Saline Coastal Prairie
-7487,1,Texas-Louisiana Coastal Prairie Pondshore
-7488,1,Eastern Great Plains Wet Meadow-Prairie-Marsh
-7500,1,South Texas Salt and Brackish Tidal Flat
-7503,1,Chihuahuan Loamy Plains Desert Grassland
-7504,1,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland
-7505,1,Ouachita Novaculite Glade and Woodland
-7506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods
-7507,1,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland
-7517,1,Paleozoic Plateau Bluff and Talus Woodland
-7518,1,North-Central Interior Wet Flatwoods
-7519,1,East-Central Texas Plains Post Oak Savanna and Woodland
-7523,1,Edwards Plateau Dry-Mesic Slope Forest and Woodland
-7524,1,Edwards Plateau Mesic Canyon
-7525,1,Edwards Plateau Riparian Forest and Woodland
-7560,1,Tamaulipan Mesquite Upland Scrub
-7561,1,Llano Uplift Acidic Herbaceous Glade
-7562,1,Tamaulipan Riparian Shrubland
-7563,1,Edwards Plateau Riparian Shrubland
-7564,1,Edwards Plateau Riparian Herbaceous
-7571,1,Southern Coastal Plain Seepage Swamp and Baygall Shrubland
-7573,1,Tamaulipan Riparian Herbaceous
-7582,1,Ozark-Ouachita Oak Forest and Woodland
-7583,1,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland
-7584,1,West Gulf Coastal Plain Hardwood Forest
-7585,1,West Gulf Coastal Plain Pine-Hardwood Forest
-7586,1,West Gulf Coastal Plain Sandhill Oak Forest and Woodland
-7587,1,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland
-7590,1,West Gulf Coastal Plain Hardwood Flatwoods
-7591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods
-7662,1,Temperate Pacific Freshwater Emergent Marsh
-7663,1,North Pacific Shrub Swamp
-7668,1,Temperate Pacific Tidal Salt and Brackish Marsh
-7733,1,North Pacific Montane Massive Bedrock-Cliff and Talus
-7734,1,North Pacific Alpine and Subalpine Bedrock and Scree
-7735,1,North American Glacier and Ice Field
-7900,1,Western Cool Temperate Urban Deciduous Forest
-7901,1,Western Cool Temperate Urban Evergreen Forest
-7902,1,Western Cool Temperate Urban Mixed Forest
-7903,1,Western Cool Temperate Urban Herbaceous
-7904,1,Western Cool Temperate Urban Shrubland
-7905,1,Eastern Cool Temperate Urban Deciduous Forest
-7906,1,Eastern Cool Temperate Urban Evergreen Forest
-7907,1,Eastern Cool Temperate Urban Mixed Forest
-7908,1,Eastern Cool Temperate Urban Herbaceous
-7909,1,Eastern Cool Temperate Urban Shrubland
-7910,1,Western Warm Temperate Urban Deciduous Forest
-7911,1,Western Warm Temperate Urban Evergreen Forest
-7912,1,Western Warm Temperate Urban Mixed Forest
-7913,1,Western Warm Temperate Urban Herbaceous
-7914,1,Western Warm Temperate Urban Shrubland
-7915,1,Eastern Warm Temperate Urban Deciduous Forest
-7916,1,Eastern Warm Temperate Urban Evergreen Forest
-7917,1,Eastern Warm Temperate Urban Mixed Forest
-7918,1,Eastern Warm Temperate Urban Herbaceous
-7919,1,Eastern Warm Temperate Urban Shrubland
-7920,1,Western Cool Temperate Developed Ruderal Deciduous Forest
-7921,1,Western Cool Temperate Developed Ruderal Evergreen Forest
-7922,1,Western Cool Temperate Developed Ruderal Mixed Forest
-7923,1,Western Cool Temperate Developed Ruderal Shrubland
-7924,1,Western Cool Temperate Developed Ruderal Grassland
-7925,1,Western Warm Temperate Developed Ruderal Deciduous Forest
-7926,1,Western Warm Temperate Developed Ruderal Evergreen Forest
-7927,1,Western Warm Temperate Developed Ruderal Mixed Forest
-7928,1,Western Warm Temperate Developed Ruderal Shrubland
-7929,1,Western Warm Temperate Developed Ruderal Grassland
-7930,1,Eastern Cool Temperate Developed Ruderal Deciduous Forest
-7931,1,Eastern Cool Temperate Developed Ruderal Evergreen Forest
-7932,1,Eastern Cool Temperate Developed Ruderal Mixed Forest
-7933,1,Eastern Cool Temperate Developed Ruderal Shrubland
-7934,1,Eastern Cool Temperate Developed Ruderal Grassland
-7935,1,Eastern Warm Temperate Developed Ruderal Deciduous Forest
-7936,1,Eastern Warm Temperate Developed Ruderal Evergreen Forest
-7937,1,Eastern Warm Temperate Developed Ruderal Mixed Forest
-7938,1,Eastern Warm Temperate Developed Ruderal Shrubland
-7939,1,Eastern Warm Temperate Developed Ruderal Grassland
-7940,1,Western Cool Temperate Developed Ruderal Deciduous Forested Wetland
-7941,1,Western Cool Temperate Developed Ruderal Evergreen Forested Wetland
-7942,1,Western Cool Temperate Developed Ruderal Mixed Forested Wetland
-7943,1,Western Cool Temperate Developed Ruderal Shrub Wetland
-7944,1,Western Cool Temperate Developed Ruderal Herbaceous Wetland
-7945,1,Western Warm Temperate Developed Ruderal Deciduous Forested Wetland
-7946,1,Western Warm Temperate Developed Ruderal Evergreen Forested Wetland
-7947,1,Western Warm Temperate Developed Ruderal Mixed Forested Wetland
-7948,1,Western Warm Temperate Developed Ruderal Shrub Wetland
-7949,1,Western Warm Temperate Developed Ruderal Herbaceous Wetland
-7950,1,Eastern Cool Temperate Developed Ruderal Deciduous Forested Wetland
-7951,1,Eastern Cool Temperate Developed Ruderal Evergreen Forested Wetland
-7952,1,Eastern Cool Temperate Developed Ruderal Mixed Forested Wetland
-7953,1,Eastern Cool Temperate Developed Ruderal Shrub Wetland
-7954,1,Eastern Cool Temperate Developed Ruderal Herbaceous Wetland
-7955,1,Eastern Warm Temperate Developed Ruderal Deciduous Forested Wetland
-7956,1,Eastern Warm Temperate Developed Ruderal Evergreen Forested Wetland
-7957,1,Eastern Warm Temperate Developed Ruderal Mixed Forested Wetland
-7958,1,Eastern Warm Temperate Developed Ruderal Shrub Wetland
-7959,1,Eastern Warm Temperate Developed Ruderal Herbaceous Wetland
-7960,1,Western Cool Temperate Orchard
-7961,1,Western Cool Temperate Vineyard
-7962,1,Western Cool Temperate Bush fruit and berries
-7963,1,Western Cool Temperate Row Crop - Close Grown Crop
-7964,1,Western Cool Temperate Row Crop
-7965,1,Western Cool Temperate Close Grown Crop
-7966,1,Western Cool Temperate Fallow/Idle Cropland
-7967,1,Western Cool Temperate Pasture and Hayland
-7968,1,Western Cool Temperate Wheat
-7970,1,Eastern Cool Temperate Orchard
-7971,1,Eastern Cool Temperate Vineyard
-7972,1,Eastern Cool Temperate Bush fruit and berries
-7973,1,Eastern Cool Temperate Row Crop - Close Grown Crop
-7974,1,Eastern Cool Temperate Row Crop
-7975,1,Eastern Cool Temperate Close Grown Crop
-7976,1,Eastern Cool Temperate Fallow/Idle Cropland
-7977,1,Eastern Cool Temperate Pasture and Hayland
-7978,1,Eastern Cool Temperate Wheat
-7979,1,Eastern Cool Temperate Aquaculture
-7980,1,Western Warm Temperate Orchard
-7981,1,Western Warm Temperate Vineyard
-7982,1,Western Warm Temperate Bush fruit and berries
-7983,1,Western Warm Temperate Row Crop - Close Grown Crop
-7984,1,Western Warm Temperate Row Crop
-7985,1,Western Warm Temperate Close Grown Crop
-7986,1,Western Warm Temperate Fallow/Idle Cropland
-7987,1,Western Warm Temperate Pasture and Hayland
-7988,1,Western Warm Temperate Wheat
-7989,1,Western Warm Temperate Aquaculture
-7990,1,Eastern Warm Temperate Orchard
-7991,1,Eastern Warm Temperate Vineyard
-7992,1,Eastern Warm Temperate Bush fruit and berries
-7993,1,Eastern Warm Temperate Row Crop - Close Grown Crop
-7994,1,Eastern Warm Temperate Row Crop
-7995,1,Eastern Warm Temperate Close Grown Crop
-7996,1,Eastern Warm Temperate Fallow/Idle Cropland
-7997,1,Eastern Warm Temperate Pasture and Hayland
-7998,1,Eastern Warm Temperate Wheat
-7999,1,Eastern Warm Temperate Aquaculture
-9001,1,Colorado Plateau Mixed Bedrock Canyon and Tableland
-9002,1,Columbia Basin Foothill Riparian Woodland
-9003,1,Great Basin Foothill and Lower Montane Riparian Woodland
-9004,1,Inter-Mountain Basins Active and Stabilized Dune
-9005,1,Inter-Mountain Basins Alkaline Closed Depression
-9006,1,Inter-Mountain Basins Cliff and Canyon
-9008,1,Inter-Mountain Basins Playa
-9009,1,Inter-Mountain Basins Shale Badland
-9010,1,Inter-Mountain Basins Wash
-9011,1,North American Arid West Emergent Marsh
-9012,1,Northern Rocky Mountain Lower Montane Riparian Woodland
-9014,1,Northwestern Great Plains Floodplain Forest and Woodland
-9015,1,Northwestern Great Plains Riparian Forest
-9016,1,Rocky Mountain Alpine Bedrock and Scree
-9017,1,Rocky Mountain Alpine-Montane Wet Meadow
-9018,1,Rocky Mountain Cliff Canyon and Massive Bedrock
-9019,1,Rocky Mountain Lower Montane-Foothill Riparian Woodland
-9021,1,Rocky Mountain Subalpine-Montane Riparian Shrubland
-9022,1,Rocky Mountain Subalpine-Montane Riparian Woodland
-9023,1,Western Great Plains Badlands
-9024,1,Western Great Plains Cliff and Outcrop
-9025,1,Western Great Plains Closed Depression Wetland
-9026,1,Western Great Plains Floodplain Forest and Woodland
-9027,1,Western Great Plains Open Freshwater Depression Wetland
-9028,1,Western Great Plains Riparian Woodland
-9029,1,Western Great Plains Saline Depression Wetland
-9030,1,Columbia Plateau Silver Sagebrush Seasonally Flooded Shrub-Steppe
-9032,1,Columbia Plateau Ash and Tuff Badland
-9033,1,Inter-Mountain Basins Volcanic Rock and Cinder Land
-9034,1,North American Warm Desert Riparian Woodland
-9035,1,North American Warm Desert Lower Montane Riparian Woodland
-9055,1,Boreal-Laurentian Bog
-9056,1,Boreal-Laurentian Conifer Acidic Swamp and Treed Poor Fen
-9057,1,Boreal-Laurentian-Acadian Acidic Basin Fen
-9062,1,Central California Coast Ranges Cliff and Canyon
-9064,1,Central Interior Acidic Cliff and Talus
-9065,1,Central Interior Calcareous Cliff and Talus
-9066,1,Central Interior Highlands and Appalachian Sinkhole and Depression Pond
-9068,1,Central Texas Coastal Prairie Riparian Forest
-9069,1,Central Texas Coastal Prairie River Floodplain Forest
-9071,1,Columbia Bottomlands Forest and Woodland
-9074,1,Cumberland Riverscour
-9088,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce Forest
-9089,1,Laurentian-Acadian Sub-boreal Mesic Balsam Fir-Spruce Forest
-9091,1,Edwards Plateau Cliff
-9092,1,Edwards Plateau Floodplain Terrace Forest and Woodland
-9099,1,Great Lakes Acidic Rocky Shore and Cliff
-9100,1,Great Lakes Alkaline Rocky Shore and Cliff
-9101,1,Great Lakes Dune
-9102,1,Great Lakes Freshwater Estuary and Delta
-9103,1,Gulf Coast Chenier Plain Beach
-9104,1,Gulf Coast Chenier Plain Fresh and Oligohaline Tidal Marsh
-9105,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh
-9110,1,Klamath-Siskiyou Cliff and Outcrop
-9111,1,Laurentian Acidic Rocky Outcrop Woodland
-9112,1,Laurentian Jack Pine-Red Pine Forest
-9113,1,Laurentian-Acadian Acidic Cliff and Talus
-9114,1,Laurentian-Acadian Alkaline Fen
-9115,1,Laurentian-Acadian Calcareous Cliff and Talus
-9117,1,Laurentian-Acadian Floodplain Forest
-9118,1,Laurentian-Acadian Freshwater Marsh
-9119,1,Laurentian-Acadian Lakeshore Beach
-9120,1,Laurentian-Acadian Wet Meadow
-9121,1,Llano Estacado Caprock Escarpment and Breaks Shrubland and Steppe
-9122,1,Louisiana Beach
-9125,1,Mediterranean California Alpine Bedrock and Scree
-9126,1,Mediterranean California Coastal Bluff
-9129,1,Mediterranean California Foothill and Lower Montane Riparian Woodland
-9130,1,Mediterranean California Northern Coastal Dune
-9133,1,Mediterranean California Serpentine Foothill and Lower Montane Riparian Woodland and Seep
-9134,1,Mediterranean California Southern Coastal Dune
-9145,1,North American Warm Desert Active and Stabilized Dune
-9146,1,North American Warm Desert Badland
-9147,1,North American Warm Desert Bedrock Cliff and Outcrop
-9148,1,North American Warm Desert Cienega
-9150,1,North American Warm Desert Pavement
-9151,1,North American Warm Desert Playa
-9152,1,North American Warm Desert Riparian Mesquite Bosque Woodland
-9153,1,North American Warm Desert Volcanic Rockland
-9154,1,North American Warm Desert Wash Woodland
-9160,1,North Pacific Active Volcanic Rock and Cinder Land
-9165,1,North Pacific Hardwood-Conifer Swamp
-9166,1,North Pacific Herbaceous Bald and Bluff
-9167,1,North Pacific Hypermaritime Herbaceous Headland
-9170,1,North Pacific Lowland Mixed Hardwood-Conifer Forest
-9171,1,North Pacific Maritime Coastal Sand Dune and Strand
-9177,1,North-Central Interior and Appalachian Acidic Peatland Woodland
-9178,1,North-Central Interior and Appalachian Rich Swamp
-9179,1,North-Central Interior Floodplain Forest
-9180,1,North-Central Interior Freshwater Marsh
-9181,1,North-Central Interior Quartzite Glade
-9182,1,North-Central Interior Shrub Alkaline Fen
-9183,1,North-Central Interior Shrub Swamp
-9192,1,Northern Atlantic Coastal Plain Pond
-9202,1,Northern Great Lakes Coastal Marsh
-9203,1,Northern Great Lakes Interdunal Wetland
-9207,1,Ozark-Ouachita Riparian Forest
-9211,1,Red River Large Floodplain Forest
-9213,1,Sierra Nevada Cliff and Canyon
-9223,1,South-Central Interior Large Floodplain Forest
-9224,1,South-Central Interior Small Stream and Riparian Forest
-9227,1,Southeastern Coastal Plain Cliff
-9228,1,Southeastern Coastal Plain Interdunal Wetland
-9230,1,Southeastern Great Plains Floodplain Forest and Woodland
-9231,1,Southeastern Great Plains Riparian Forest and Woodland
-9246,1,Southern California Coast Ranges Cliff and Canyon
-9265,1,Southwestern Great Plains Canyon
-9266,1,Tamaulipan Closed Depression Wetland Woodland
-9268,1,Tamaulipan Ramadero
-9270,1,Tamaulipan Saline Thornscrub
-9272,1,Temperate Pacific Subalpine-Montane Wet Meadow
-9273,1,Texas Coast Beach
-9274,1,Texas Coast Fresh and Oligohaline Tidal Marsh
-9275,1,Texas Coast Salt and Brackish Tidal Marsh
-9282,1,West Gulf Coastal Plain Large River Floodplain Forest
-9283,1,West Gulf Coastal Plain Near-Coast Large River Swamp
-9284,1,West Gulf Coastal Plain Small Stream and River Forest
-9289,1,Madrean Mesic Canyon Forest and Woodland
-9290,1,Southeastern Great Plains Cliff
-9295,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce-Hardwood Forest
-9301,1,California Ruderal Grassland and Meadow
-9302,1,Californian Ruderal Forest
-9307,1,Great Basin & Intermountain Introduced Annual and Biennial Forbland
-9308,1,Great Basin & Intermountain Introduced Annual Grassland
-9309,1,Great Basin & Intermountain Introduced Perennial Grassland and Forbland
-9310,1,North American Warm Desert Ruderal & Planted Scrub
-9311,1,North Pacific Maritime Coastal Sand Dune Ruderal Scrub
-9312,1,Northeastern North American Temperate Forest Plantation
-9313,1,Northern & Central Exotic Ruderal Forest
-9314,1,Northern & Central Native Ruderal Flooded & Swamp Forest
-9315,1,Northern & Central Native Ruderal Forest
-9316,1,Northern & Central Plains Ruderal & Planted Shrubland
-9317,1,Northern & Central Ruderal Shrubland
-9318,1,Northern & Central Ruderal Wet Meadow & Marsh
-9319,1,Southeastern Exotic Ruderal Forest
-9320,1,Southeastern Native Ruderal Flooded & Swamp Forest
-9321,1,Southeastern Native Ruderal Forest
-9322,1,Southeastern North American Temperate Forest Plantation
-9323,1,Southeastern Ruderal Shrubland
-9324,1,Southeastern Ruderal Wet Meadow & Marsh
-9325,1,Great Plains Comanchian Ruderal Shrubland
-9326,1,Southern Vancouverian Lowland Ruderal Shrubland
-9327,1,Interior West Ruderal Riparian Forest
-9328,1,Interior Western North American Temperate Ruderal Shrubland
-9329,1,Western North American Ruderal Wet Shrubland
-9332,1,Southeastern Exotic Ruderal Flooded & Swamp Forest
-9336,1,Great Basin & Intermountain Ruderal Shrubland
-9337,1,California Ruderal Scrub
-9502,1,Columbia Basin Foothill Riparian Shrubland
-9503,1,Great Basin Foothill and Lower Montane Riparian Shrubland
-9504,1,Columbia Basin Foothill Riparian Herbaceous
-9505,1,Great Basin Foothill and Lower Montane Riparian Herbaceous
-9512,1,Northern Rocky Mountain Lower Montane Riparian Shrubland
-9513,1,Northwestern Great Plains Floodplain Shrubland
-9514,1,Northwestern Great Plains Floodplain Herbaceous
-9515,1,Northwestern Great Plains Riparian Shrubland
-9516,1,Northwestern Great Plains Riparian Herbaceous
-9519,1,Rocky Mountain Lower Montane-Foothill Riparian Shrubland
-9526,1,Western Great Plains Floodplain Shrubland
-9527,1,Western Great Plains Floodplain Herbaceous
-9528,1,Western Great Plains Riparian Shrubland
-9529,1,Western Great Plains Riparian Herbaceous
-9533,1,North American Warm Desert Riparian Herbaceous
-9534,1,North American Warm Desert Riparian Shrubland
-9535,1,North American Warm Desert Lower Montane Riparian Shrubland
-9568,1,Central Texas Coastal Prairie Riparian Shrubland
-9569,1,Central Texas Coastal Prairie River Floodplain Shrubland
-9570,1,Central Texas Coastal Prairie Riparian Herbaceous
-9571,1,Central Texas Coastal Prairie River Floodplain Herbaceous
-9592,1,Edwards Plateau Floodplain Terrace Shrubland
-9593,1,Edwards Plateau Floodplain Terrace Herbaceous
-9601,1,Great Lakes Dune Grassland
-9604,1,Gulf Coast Chenier Plain Fresh and Oligohaline Tidal Marsh Shrubland
-9605,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh Shrubland
-9611,1,Laurentian Acidic Rocky Outcrop Shrubland
-9617,1,Laurentian-Acadian Floodplain Shrubland
-9620,1,Laurentian-Acadian Shrub Swamp
-9629,1,Mediterranean California Foothill and Lower Montane Riparian Shrubland
-9633,1,Mediterranean California Serpentine Foothill and Lower Montane Riparian Shrubland and Seep
-9652,1,North American Warm Desert Riparian Mesquite Bosque Shrubland
-9654,1,North American Warm Desert Wash Shrubland
-9667,1,North Pacific Hypermaritime Shrub Headland
-9677,1,North-Central Interior and Appalachian Acidic Peatland Shrubland
-9679,1,North-Central Interior Floodplain Shrubland
-9682,1,North-Central Interior Graminoid Alkaline Fen
-9683,1,North-Central Interior Wet Meadow
-9707,1,Ozark-Ouachita Riparian Shrubland
-9708,1,Ozark-Ouachita Riparian Herbaceous
-9723,1,South-Central Interior Large Floodplain Shrubland
-9724,1,South-Central Interior Small Stream and Riparian Shrubland
-9725,1,South-Central Interior Large Floodplain Herbaceous
-9726,1,South-Central Interior Small Stream and Riparian Herbaceous
-9730,1,Southeastern Great Plains Floodplain Shrubland
-9731,1,Southeastern Great Plains Riparian Shrubland
-9732,1,Southeastern Great Plains Floodplain Herbaceous
-9733,1,Southeastern Great Plains Riparian Herbaceous
-9766,1,Tamaulipan Closed Depression Wetland Shrubland
-9774,1,Texas Coast Fresh and Oligohaline Tidal Marsh Shrubland
-9775,1,Texas Coast Salt and Brackish Tidal Marsh Shrubland
-9782,1,West Gulf Coastal Plain Large River Floodplain Shrubland
-9783,1,West Gulf Coastal Plain Large River Floodplain Herbaceous
-9784,1,West Gulf Coastal Plain Small Stream and River Shrubland
-9785,1,West Gulf Coastal Plain Small Stream and River Herbaceous
-9810,1,North American Warm Desert Ruderal & Planted Grassland
-9811,1,North Pacific Maritime Coastal Sand Dune Ruderal Herb Vegetation
-9816,1,Northern & Central Plains Ruderal & Planted Grassland
-9817,1,Northern & Central Ruderal Meadow
-9823,1,Southeastern Ruderal Grassland
-9825,1,Great Plains Comanchian Ruderal Grassland
-9826,1,Southern Vancouverian Lowland Ruderal Grassland
-9827,1,Interior West Ruderal Riparian Scrub
-9828,1,Interior Western North American Temperate Ruderal Grassland
-9829,1,Western North American Ruderal Wet Meadow & Marsh
-9993,1,West Gulf Coastal Plain Flatwoods Pond
-9994,1,West Gulf Coastal Plain Herbaceous Seep and Bog
+VegetationID,EpochID,Name,Physiognomy,LandUseGroup
+-9999,2,No Data,No Data,
+11,2,Open Water,Open Water,
+12,2,Perennial Ice/Snow,Perennial Ice/Snow,
+31,2,Barren-Rock/Sand/Clay,Barren-Rock/Sand/Clay,
+381,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+383,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+384,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+385,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+386,2,Western Great Plains Shortgrass Prairie,Grassland,
+387,2,Western Great Plains Foothill and Piedmont Grassland,Grassland,
+388,2,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe,Shrubland,
+389,2,Southern Colorado Plateau Sand Shrubland,Shrubland,
+390,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+391,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+392,2,Apacherian-Chihuahuan Mesquite Upland Scrub,Shrubland,
+393,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,Shrubland,
+394,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland,Shrubland,
+395,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+396,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+397,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+398,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+399,2,Inter-Mountain Basins Montane Sagebrush Steppe - Mountain Big Sagebrush,Shrubland,
+400,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+401,2,Inter-Mountain Basins Mat Saltbush Shrubland,Shrubland,
+402,2,Apacherian-Chihuahuan Mesquite Upland Scrub,Shrubland,
+403,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+404,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland,Shrubland,
+405,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+406,2,Southern Colorado Plateau Sand Shrubland,Shrubland,
+407,2,Apacherian-Chihuahuan Mesquite Upland Scrub,Shrubland,
+408,2,Mediterranean California Sparsely Vegetated Systems,Sparse,
+409,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+410,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+411,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+412,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+413,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+414,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+415,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+416,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+417,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Ponderosa Pine-Douglas-fir,Conifer,
+418,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Larch,Conifer,
+419,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Grand Fir,Conifer,
+420,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+421,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest,Conifer,
+422,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest - Cedar Groves,Conifer,
+423,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna,Conifer,
+424,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+425,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+426,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+427,2,Columbia Plateau Scabland Shrubland,Shrubland,
+428,2,Rocky Mountain Alpine Dwarf-Shrubland,Shrubland,
+429,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+430,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+431,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+432,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+433,2,Columbia Plateau Steppe and Grassland,Grassland,
+434,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+435,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+436,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+437,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+438,2,Columbia Basin Foothill and Canyon Dry Grassland,Grassland,
+439,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+440,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+441,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,
+442,2,Columbia Basin Palouse Prairie,Grassland,
+443,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+444,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+445,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+446,2,Rocky Mountain Montane Riparian Systems,Riparian,
+447,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+448,2,Northern Rocky Mountain Conifer Swamp,Conifer,
+449,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,
+450,2,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,
+451,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+452,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+453,2,Northwestern Great Plains Aspen Forest and Parkland,Hardwood,
+454,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+456,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Ponderosa Pine-Douglas-fir,Conifer,
+457,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Larch,Conifer,
+458,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Grand Fir,Conifer,
+459,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+460,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest,Conifer,
+461,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest - Cedar Groves,Conifer,
+462,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+463,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna,Conifer,
+464,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+465,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+466,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+467,2,Rocky Mountain Alpine Dwarf-Shrubland,Shrubland,
+468,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+469,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+470,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+471,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+472,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+473,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+474,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+475,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+476,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,
+477,2,Rocky Mountain Alpine Fell-Field,Grassland,
+478,2,Rocky Mountain Alpine Turf,Grassland,
+479,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+480,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+481,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+482,2,Rocky Mountain Montane Riparian Systems,Riparian,
+483,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+484,2,Northern Rocky Mountain Conifer Swamp,Conifer,
+485,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,
+486,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland - Fire-maintained Savanna,Conifer,
+487,2,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,
+488,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+491,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+492,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+493,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland,Conifer,
+494,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+495,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+496,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+497,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+498,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+499,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+500,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+501,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+502,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+503,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+505,2,Sonoran Mid-Elevation Desert Scrub,Shrubland,
+506,2,Southern Colorado Plateau Sand Shrubland,Shrubland,
+508,2,Great Basin Semi-Desert Chaparral,Shrubland,
+510,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+512,2,Sonoran Paloverde-Mixed Cacti Desert Scrub,Shrubland,
+513,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+516,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+517,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+518,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+519,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+520,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+521,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+522,2,North American Warm Desert Riparian Systems,Riparian,
+523,2,North American Warm Desert Riparian Systems - Stringers,Riparian,
+525,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+526,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+527,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+528,2,Madrean Encinal,Conifer,
+530,2,Madrean Pinyon-Juniper Woodland,Conifer,
+531,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+532,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+533,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+534,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+535,2,Sonora-Mojave Mixed Salt Desert Scrub,Shrubland,
+536,2,Sonoran Granite Outcrop Desert Scrub,Shrubland,
+537,2,Sonoran Mid-Elevation Desert Scrub,Shrubland,
+538,2,Mogollon Chaparral,Shrubland,
+539,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+540,2,Sonoran Paloverde-Mixed Cacti Desert Scrub,Shrubland,
+541,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+542,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe,Grassland,
+544,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+545,2,North American Warm Desert Riparian Systems,Riparian,
+546,2,North American Warm Desert Riparian Systems - Stringers,Riparian,
+547,2,North Pacific Oak Woodland,Hardwood,
+548,2,California Coastal Redwood Forest,Conifer,
+549,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland,Conifer,
+550,2,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland,Conifer,
+551,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,
+552,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland,Conifer,
+553,2,Mediterranean California Mixed Oak Woodland,Hardwood,
+554,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer,
+555,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+556,2,Mediterranean California Red Fir Forest,Conifer,
+557,2,Mediterranean California Subalpine Woodland,Conifer,
+558,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest,Conifer,
+560,2,Northern California Mesic Subalpine Woodland,Conifer,
+561,2,California Maritime Chaparral,Shrubland,
+562,2,California Mesic Chaparral,Shrubland,
+563,2,California Montane Woodland and Chaparral,Shrubland,
+564,2,California Xeric Serpentine Chaparral,Shrubland,
+565,2,Northern and Central California Dry-Mesic Chaparral,Shrubland,
+566,2,California Coastal Live Oak Woodland and Savanna,Hardwood,
+567,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna,Hardwood,
+568,2,Northern California Coastal Scrub,Shrubland,
+569,2,California Mesic Serpentine Grassland,Grassland,
+570,2,California Northern Coastal Grassland,Grassland,
+571,2,Mediterranean California Subalpine Meadow,Grassland,
+572,2,North Pacific Montane Grassland,Grassland,
+573,2,California Montane Riparian Systems,Riparian,
+574,2,Pacific Coastal Marsh Systems,Riparian,
+575,2,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral,Conifer,
+576,2,California Coastal Closed-Cone Conifer Forest and Woodland,Conifer,
+577,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+579,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+580,2,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,
+581,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+582,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland,Conifer,
+583,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland,Conifer,
+584,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,
+585,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland,Conifer,
+586,2,Mediterranean California Mixed Oak Woodland,Hardwood,
+587,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer,
+588,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+589,2,Mediterranean California Red Fir Forest - Cascades,Conifer,
+590,2,Mediterranean California Red Fir Forest - Southern Sierra,Conifer,
+591,2,Mediterranean California Subalpine Woodland,Conifer,
+592,2,Mediterranean California Mesic Serpentine Woodland and Chaparral,Shrubland,
+593,2,Mediterranean California Mixed Evergreen Forest - Interior,Conifer,
+594,2,Northern California Mesic Subalpine Woodland,Conifer,
+595,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+596,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland - Wet,Conifer,
+597,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland - Dry,Conifer,
+598,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+599,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+600,2,Mediterranean California Alpine Fell-Field,Shrubland,
+601,2,Sierra Nevada Alpine Dwarf-Shrubland,Shrubland,
+602,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+604,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+605,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+606,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+607,2,California Mesic Chaparral,Shrubland,
+608,2,California Montane Woodland and Chaparral,Shrubland,
+609,2,Great Basin Semi-Desert Chaparral,Shrubland,
+610,2,Northern and Central California Dry-Mesic Chaparral,Shrubland,
+611,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna,Hardwood,
+612,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+613,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+614,2,Mediterranean California Alpine Dry Tundra,Grassland,
+615,2,Mediterranean California Subalpine Meadow,Grassland,
+616,2,North Pacific Montane Grassland,Grassland,
+617,2,California Montane Riparian Systems,Riparian,
+618,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+619,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+620,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+621,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+622,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+623,2,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,
+624,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+625,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland,Conifer,
+626,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest,Conifer,
+627,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+628,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest,Conifer,
+629,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic,Conifer,
+630,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Xeric,Conifer,
+631,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+632,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+633,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+634,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+635,2,Columbia Plateau Scabland Shrubland,Shrubland,
+636,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+637,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+638,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+639,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+640,2,Columbia Plateau Steppe and Grassland,Grassland,
+641,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+642,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+643,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+644,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+645,2,Columbia Basin Foothill and Canyon Dry Grassland,Grassland,
+646,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+647,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+648,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,
+649,2,Columbia Basin Palouse Prairie,Grassland,
+650,2,Rocky Mountain Alpine Fell-Field,Grassland,
+651,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+652,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+653,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+654,2,Rocky Mountain Montane Riparian Systems,Riparian,
+655,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+656,2,Northern Rocky Mountain Conifer Swamp,Conifer,
+657,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe,Conifer,
+658,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,
+659,2,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,
+660,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+661,2,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,
+662,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest,Conifer,
+663,2,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest,Conifer,
+664,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic,Conifer,
+665,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+666,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+667,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+668,2,Columbia Plateau Scabland Shrubland,Shrubland,
+669,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+670,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+671,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+672,2,Columbia Plateau Steppe and Grassland,Grassland,
+673,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+674,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+675,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+676,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+677,2,Columbia Basin Foothill and Canyon Dry Grassland,Grassland,
+678,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+679,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+680,2,Columbia Basin Palouse Prairie,Grassland,
+681,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+682,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+683,2,Rocky Mountain Montane Riparian Systems,Riparian,
+684,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+685,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe,Conifer,
+686,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+687,2,Rocky Mountain Bigtooth Maple Ravine Woodland,Hardwood,
+688,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest,Conifer,
+689,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+690,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+691,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+692,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+693,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+694,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+695,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+696,2,Rocky Mountain Alpine Dwarf-Shrubland,Shrubland,
+697,2,Inter-Mountain Basins Big Sagebrush Shrubland - Basin Big Sagebrush,Shrubland,
+698,2,Inter-Mountain Basins Big Sagebrush Shrubland - Wyoming Big Sagebrush,Shrubland,
+699,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+700,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+701,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+702,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+703,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+704,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+705,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+706,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+707,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,
+708,2,Rocky Mountain Alpine Fell-Field,Grassland,
+709,2,Rocky Mountain Alpine Turf,Grassland,
+710,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+711,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+712,2,Rocky Mountain Montane Riparian Systems,Riparian,
+713,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+714,2,Northern Rocky Mountain Conifer Swamp,Conifer,
+715,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,
+716,2,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,
+717,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+718,2,North Pacific Sparsely Vegetated Systems,Sparse,
+719,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+720,2,North Pacific Oak Woodland,Hardwood,
+721,2,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland,Conifer,
+722,2,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland,Conifer,
+723,2,North Pacific Hypermaritime Sitka Spruce Forest,Conifer,
+724,2,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest,Conifer,
+725,2,North Pacific Maritime Mesic Subalpine Parkland,Conifer,
+726,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest,Conifer,
+727,2,North Pacific Mountain Hemlock Forest - Wet,Conifer,
+728,2,North Pacific Mountain Hemlock Forest - Xeric,Conifer,
+729,2,North Pacific Mesic Western Hemlock-Silver Fir Forest,Conifer,
+730,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest,Conifer,
+731,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+732,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic,Conifer,
+733,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+734,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+735,2,East Cascades Oak-Ponderosa Pine Forest and Woodland,Conifer,
+736,2,North Pacific Broadleaf Landslide Forest and Shrubland,Hardwood,
+737,2,Columbia Plateau Scabland Shrubland,Shrubland,
+738,2,North Pacific Dry and Mesic Alpine Dwarf-Shrubland or Fell-field or Meadow,Shrubland,
+739,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+740,2,North Pacific Avalanche Chute Shrubland,Shrubland,
+741,2,North Pacific Montane Shrubland,Shrubland,
+742,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+743,2,Willamette Valley Upland Prairie and Savanna,Hardwood,
+744,2,Columbia Plateau Steppe and Grassland,Grassland,
+745,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+746,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+747,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+748,2,North Pacific Montane Grassland,Grassland,
+749,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+750,2,North Pacific Lowland Riparian Forest and Shrubland,Riparian,
+751,2,North Pacific Swamp Systems,Riparian,
+752,2,North Pacific Montane Riparian Woodland and Shrubland - Wet,Riparian,
+753,2,North Pacific Montane Riparian Woodland and Shrubland - Dry,Riparian,
+754,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe,Conifer,
+755,2,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,
+756,2,North Pacific Alpine and Subalpine Dry Grassland,Grassland,
+757,2,North Pacific Wooded Volcanic Flowage,Conifer,
+758,2,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest,Conifer,
+759,2,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest,Conifer,
+760,2,North Pacific Oak Woodland,Hardwood,
+761,2,California Coastal Redwood Forest,Conifer,
+762,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland,Conifer,
+763,2,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland,Conifer,
+764,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,
+765,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland,Conifer,
+766,2,Mediterranean California Mixed Oak Woodland,Hardwood,
+767,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer,
+768,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+769,2,Mediterranean California Red Fir Forest,Conifer,
+770,2,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland,Conifer,
+771,2,North Pacific Hypermaritime Sitka Spruce Forest,Conifer,
+772,2,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest,Conifer,
+773,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest,Conifer,
+775,2,East Cascades Oak-Ponderosa Pine Forest and Woodland,Conifer,
+776,2,North Pacific Broadleaf Landslide Forest and Shrubland,Hardwood,
+777,2,Willamette Valley Upland Prairie and Savanna,Hardwood,
+778,2,Northern California Coastal Scrub,Shrubland,
+779,2,California Northern Coastal Grassland,Grassland,
+780,2,California Montane Riparian Systems,Riparian,
+781,2,North Pacific Lowland Riparian Forest and Shrubland,Riparian,
+782,2,North Pacific Swamp Systems,Riparian,
+783,2,North Pacific Montane Riparian Woodland and Shrubland - Wet,Riparian,
+784,2,North Pacific Montane Riparian Woodland and Shrubland - Dry,Riparian,
+785,2,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral,Conifer,
+786,2,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest,Conifer,
+787,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+788,2,Mediterranean California Sparsely Vegetated Systems,Sparse,
+789,2,North Pacific Sparsely Vegetated Systems,Sparse,
+790,2,North Pacific Oak Woodland,Hardwood,
+791,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+792,2,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,
+793,2,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland,Conifer,
+794,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+795,2,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland,Conifer,
+796,2,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland,Conifer,
+797,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,
+798,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland,Conifer,
+799,2,Mediterranean California Mixed Oak Woodland,Hardwood,
+800,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer,
+801,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+802,2,Mediterranean California Red Fir Forest,Conifer,
+803,2,Mediterranean California Subalpine Woodland,Conifer,
+804,2,Mediterranean California Mesic Serpentine Woodland and Chaparral,Shrubland,
+805,2,North Pacific Dry Douglas-fir(-Madrone) Forest and Woodland,Conifer,
+806,2,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest,Conifer,
+807,2,North Pacific Maritime Mesic Subalpine Parkland,Conifer,
+808,2,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest,Conifer,
+809,2,North Pacific Mountain Hemlock Forest - Wet,Conifer,
+810,2,North Pacific Mountain Hemlock Forest - Xeric,Conifer,
+811,2,North Pacific Mesic Western Hemlock-Silver Fir Forest,Conifer,
+812,2,Mediterranean California Mixed Evergreen Forest - Interior,Conifer,
+813,2,Northern California Mesic Subalpine Woodland,Conifer,
+814,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest,Conifer,
+815,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+816,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Mesic,Conifer,
+817,2,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna - Xeric,Conifer,
+818,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+819,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland,Conifer,
+820,2,East Cascades Oak-Ponderosa Pine Forest and Woodland,Conifer,
+821,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+822,2,North Pacific Broadleaf Landslide Forest and Shrubland,Hardwood,
+823,2,North Pacific Dry and Mesic Alpine Dwarf-Shrubland or Fell-field or Meadow,Shrubland,
+824,2,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,
+825,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+826,2,California Mesic Chaparral,Shrubland,
+827,2,California Montane Woodland and Chaparral,Shrubland,
+828,2,Great Basin Semi-Desert Chaparral,Shrubland,
+829,2,Northern and Central California Dry-Mesic Chaparral,Shrubland,
+830,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna,Hardwood,
+831,2,Willamette Valley Upland Prairie and Savanna,Hardwood,
+832,2,Columbia Plateau Steppe and Grassland,Grassland,
+833,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+834,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+835,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+836,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+837,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+838,2,California Montane Riparian Systems,Riparian,
+839,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+840,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+841,2,North Pacific Lowland Riparian Forest and Shrubland,Riparian,
+842,2,North Pacific Montane Riparian Woodland and Shrubland - Wet,Riparian,
+843,2,North Pacific Montane Riparian Woodland and Shrubland - Dry,Riparian,
+844,2,Northern Rocky Mountain Foothill Conifer Wooded Steppe,Conifer,
+845,2,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,
+846,2,Klamath-Siskiyou Xeromorphic Serpentine Savanna and Chaparral,Conifer,
+847,2,North Pacific Alpine and Subalpine Dry Grassland,Grassland,
+848,2,Sierran-Intermontane Desert Western White Pine-White Fir Woodland,Conifer,
+849,2,North Pacific Wooded Volcanic Flowage,Conifer,
+850,2,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest,Conifer,
+851,2,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest,Conifer,
+852,2,Western Great Plains Sparsely Vegetated Systems,Sparse,
+853,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+854,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Ponderosa Pine-Douglas-fir,Conifer,
+855,2,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest - Lodgepole Pine,Conifer,
+856,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+857,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+858,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+859,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+860,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+861,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+862,2,Northwestern Great Plains Shrubland,Shrubland,
+863,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+864,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+865,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+866,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+867,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+868,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,
+869,2,Northwestern Great Plains Mixedgrass Prairie,Grassland,
+870,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+871,2,Western Great Plains Sand Prairie,Grassland,
+872,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+873,2,Rocky Mountain Montane Riparian Systems,Riparian,
+874,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+875,2,Western Great Plains Floodplain Systems,Riparian,
+876,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+877,2,Western Great Plains Depressional Wetland Systems,Riparian,
+878,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+879,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+880,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+881,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+882,2,Rocky Mountain Lodgepole Pine Forest,Conifer,
+883,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+884,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+885,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+886,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+887,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+888,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+889,2,Inter-Mountain Basins Mat Saltbush Shrubland,Shrubland,
+890,2,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe,Shrubland,
+891,2,Inter-Mountain Basins Big Sagebrush Shrubland - Basin Big Sagebrush,Shrubland,
+892,2,Inter-Mountain Basins Big Sagebrush Shrubland - Wyoming Big Sagebrush,Shrubland,
+893,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+894,2,Rocky Mountain Lower Montane-Foothill Shrubland - No True Mountain Mahogany,Shrubland,
+895,2,Rocky Mountain Lower Montane-Foothill Shrubland - True Mountain Mahogany,Shrubland,
+896,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+897,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+898,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+899,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+900,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+901,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+903,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+904,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+905,2,Rocky Mountain Montane Riparian Systems,Riparian,
+906,2,Western Great Plains Floodplain Systems,Riparian,
+907,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,
+908,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+909,2,Mediterranean California Sparsely Vegetated Systems,Sparse,
+910,2,Central and Southern California Mixed Evergreen Woodland,Hardwood,
+911,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,
+912,2,Mediterranean California Mixed Oak Woodland,Hardwood,
+913,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer,
+914,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+915,2,Mediterranean California Mixed Evergreen Forest,Conifer,
+916,2,Sonora-Mojave Mixed Salt Desert Scrub,Shrubland,
+917,2,California Mesic Chaparral,Shrubland,
+918,2,Northern and Central California Dry-Mesic Chaparral,Shrubland,
+919,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+920,2,California Central Valley Mixed Oak Savanna,Hardwood,
+921,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna,Hardwood,
+922,2,California Central Valley and Southern Coastal Grassland,Grassland,
+923,2,North Pacific Montane Grassland,Grassland,
+924,2,California Central Valley Riparian Woodland and Shrubland,Riparian,
+925,2,California Montane Riparian Systems,Riparian,
+926,2,Pacific Coastal Marsh Systems,Riparian,
+927,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+928,2,Central and Southern California Mixed Evergreen Woodland,Hardwood,
+929,2,California Coastal Redwood Forest,Conifer,
+930,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+931,2,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,
+932,2,Mediterranean California Mesic Mixed Conifer Forest and Woodland,Conifer,
+933,2,Mediterranean California Mixed Oak Woodland,Hardwood,
+934,2,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer,
+935,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+936,2,Mediterranean California Mesic Serpentine Woodland and Chaparral,Shrubland,
+937,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland,Conifer,
+938,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+939,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+940,2,Sonora-Mojave Mixed Salt Desert Scrub,Shrubland,
+941,2,Southern California Coastal Scrub,Shrubland,
+942,2,California Maritime Chaparral,Shrubland,
+943,2,California Mesic Chaparral,Shrubland,
+944,2,California Montane Woodland and Chaparral,Shrubland,
+945,2,California Xeric Serpentine Chaparral,Shrubland,
+946,2,Northern and Central California Dry-Mesic Chaparral,Shrubland,
+947,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+948,2,Sonoran Paloverde-Mixed Cacti Desert Scrub,Shrubland,
+949,2,Southern California Dry-Mesic Chaparral,Shrubland,
+950,2,California Central Valley Mixed Oak Savanna,Hardwood,
+951,2,California Coastal Live Oak Woodland and Savanna,Hardwood,
+952,2,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna,Hardwood,
+953,2,Southern California Oak Woodland and Savanna,Hardwood,
+954,2,Northern California Coastal Scrub,Shrubland,
+955,2,California Central Valley and Southern Coastal Grassland,Grassland,
+956,2,California Mesic Serpentine Grassland,Grassland,
+957,2,California Northern Coastal Grassland,Grassland,
+958,2,California Central Valley Riparian Woodland and Shrubland,Riparian,
+959,2,California Montane Riparian Systems,Riparian,
+960,2,North American Warm Desert Riparian Systems,Riparian,
+961,2,Pacific Coastal Marsh Systems,Riparian,
+962,2,California Coastal Closed-Cone Conifer Forest and Woodland,Conifer,
+963,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+964,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+965,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+966,2,Rocky Mountain Bigtooth Maple Ravine Woodland,Hardwood,
+967,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+968,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+969,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+970,2,Rocky Mountain Lodgepole Pine Forest,Conifer,
+971,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+972,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+973,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+974,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+975,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+976,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,
+977,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - Low Elevation,Hardwood-Conifer,
+978,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - High Elevation,Hardwood-Conifer,
+979,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+980,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+981,2,Rocky Mountain Alpine Dwarf-Shrubland,Shrubland,
+982,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland,Shrubland,
+983,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+985,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+986,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+987,2,Southern Colorado Plateau Sand Shrubland,Shrubland,
+988,2,Colorado Plateau Pinyon-Juniper Shrubland,Conifer,
+989,2,Great Basin Semi-Desert Chaparral,Shrubland,
+990,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland - Continuous,Shrubland,
+991,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland - Patchy,Shrubland,
+992,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+993,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+994,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+995,2,Inter-Mountain Basins Montane Sagebrush Steppe - Mountain Big Sagebrush,Shrubland,
+996,2,Inter-Mountain Basins Montane Sagebrush Steppe - Low Sagebrush,Shrubland,
+997,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+998,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+999,2,Rocky Mountain Alpine Turf,Grassland,
+1000,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+1001,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1002,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1003,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+1004,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1005,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1006,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1007,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+1008,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+1009,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1010,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+1011,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+1012,2,Rocky Mountain Lodgepole Pine Forest,Conifer,
+1013,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1014,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1015,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1016,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1017,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+1018,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,
+1019,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - Low Elevation,Hardwood-Conifer,
+1020,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - High Elevation,Hardwood-Conifer,
+1021,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1022,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+1023,2,Inter-Mountain Basins Mat Saltbush Shrubland,Shrubland,
+1024,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland,Shrubland,
+1026,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1027,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+1028,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1029,2,Southern Colorado Plateau Sand Shrubland,Shrubland,
+1030,2,Colorado Plateau Pinyon-Juniper Shrubland,Conifer,
+1031,2,Great Basin Semi-Desert Chaparral,Shrubland,
+1032,2,Mogollon Chaparral,Shrubland,
+1033,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1034,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+1035,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+1036,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1037,2,Inter-Mountain Basins Montane Sagebrush Steppe - Mountain Big Sagebrush,Shrubland,
+1038,2,Inter-Mountain Basins Montane Sagebrush Steppe - Low Sagebrush,Shrubland,
+1039,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1040,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1041,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1042,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1043,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1044,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1045,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1046,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+1047,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+1048,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1049,2,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,
+1050,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+1051,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland,Conifer,
+1054,2,California Montane Jeffrey Pine(-Ponderosa Pine) Woodland,Conifer,
+1055,2,Mediterranean California Subalpine Woodland,Conifer,
+1056,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1057,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,
+1058,2,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland,Conifer,
+1059,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1060,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+1062,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1063,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+1064,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+1065,2,Sonora-Mojave Mixed Salt Desert Scrub,Shrubland,
+1066,2,Great Basin Semi-Desert Chaparral,Shrubland,
+1067,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+1068,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1069,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+1070,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1071,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1072,2,Rocky Mountain Alpine Turf,Grassland,
+1073,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1074,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+1075,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1076,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1077,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1078,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1079,2,Rocky Mountain Bigtooth Maple Ravine Woodland,Hardwood,
+1080,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+1081,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+1082,2,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland,Conifer,
+1083,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1084,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1085,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1086,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1087,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1088,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1089,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+1090,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+1092,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1093,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+1094,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1095,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+1096,2,Great Basin Semi-Desert Chaparral,Shrubland,
+1097,2,Mogollon Chaparral,Shrubland,
+1098,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1099,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+1100,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+1101,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+1102,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1103,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+1104,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1105,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1106,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+1107,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1108,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+1109,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1110,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1111,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1112,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+1113,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1114,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+1115,2,Madrean Encinal,Conifer,
+1116,2,Madrean Lower Montane Pine-Oak Forest and Woodland,Conifer,
+1117,2,Madrean Pinyon-Juniper Woodland,Conifer,
+1118,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1119,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1120,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1121,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1122,2,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,
+1123,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland - Low Elevation,Hardwood-Conifer,
+1124,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+1125,2,Inter-Mountain Basins Mat Saltbush Shrubland,Shrubland,
+1126,2,Colorado Plateau Blackbrush-Mormon-tea Shrubland,Shrubland,
+1128,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1129,2,Southern Colorado Plateau Sand Shrubland,Shrubland,
+1130,2,Colorado Plateau Pinyon-Juniper Shrubland,Conifer,
+1131,2,Mogollon Chaparral,Shrubland,
+1132,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1133,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+1134,2,Madrean Juniper Savanna,Conifer,
+1135,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+1136,2,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,
+1137,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe,Grassland,
+1138,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1139,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1140,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1141,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+1142,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1143,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1144,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1145,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+1146,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1147,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+1148,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+1149,2,Rocky Mountain Lodgepole Pine Forest,Conifer,
+1150,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1151,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1152,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1153,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1154,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+1155,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,
+1156,2,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,
+1157,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1158,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1159,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+1160,2,Rocky Mountain Alpine Dwarf-Shrubland,Shrubland,
+1161,2,Inter-Mountain Basins Big Sagebrush Shrubland - Basin Big Sagebrush,Shrubland,
+1162,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1163,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1164,2,Colorado Plateau Pinyon-Juniper Shrubland,Conifer,
+1165,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1166,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+1167,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+1168,2,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,
+1169,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1170,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+1171,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1172,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1173,2,Rocky Mountain Alpine Fell-Field,Grassland,
+1174,2,Rocky Mountain Alpine Turf,Grassland,
+1175,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+1176,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1177,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1178,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1179,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1180,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+1181,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1182,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+1183,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+1184,2,Madrean Encinal,Conifer,
+1185,2,Madrean Lower Montane Pine-Oak Forest and Woodland,Conifer,
+1186,2,Madrean Pinyon-Juniper Woodland,Conifer,
+1187,2,Madrean Upper Montane Conifer-Oak Forest and Woodland,Conifer,
+1188,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1189,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1190,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1191,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1192,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+1193,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1194,2,Chihuahuan Succulent Desert Scrub,Shrubland,
+1196,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1197,2,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,
+1198,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+1199,2,Sonoran Mid-Elevation Desert Scrub,Shrubland,
+1200,2,Chihuahuan Mixed Desert and Thorn Scrub,Shrubland,
+1201,2,Colorado Plateau Pinyon-Juniper Shrubland,Conifer,
+1202,2,Mogollon Chaparral,Shrubland,
+1203,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1204,2,Sonoran Paloverde-Mixed Cacti Desert Scrub,Shrubland,
+1205,2,Inter-Mountain Basins Juniper Savanna,Conifer,
+1206,2,Madrean Juniper Savanna,Conifer,
+1207,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+1208,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe,Grassland,
+1209,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1210,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1211,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1212,2,North American Warm Desert Riparian Systems,Riparian,
+1213,2,North American Warm Desert Riparian Systems - Stringers,Riparian,
+1214,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1215,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1216,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1217,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+1218,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1219,2,Rocky Mountain Bigtooth Maple Ravine Woodland,Hardwood,
+1220,2,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,
+1221,2,Great Basin Pinyon-Juniper Woodland,Conifer,
+1222,2,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,
+1223,2,Rocky Mountain Lodgepole Pine Forest,Conifer,
+1224,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1225,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1226,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1227,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+1228,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,
+1229,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1230,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1231,2,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,
+1233,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1234,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1235,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+1236,2,Columbia Plateau Steppe and Grassland,Grassland,
+1237,2,Columbia Plateau Low Sagebrush Steppe,Shrubland,
+1238,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1239,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+1240,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1241,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1243,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1244,2,Inter-Mountain Basins Montane Riparian Systems,Riparian,
+1245,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1246,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1247,2,Rocky Mountain Alpine/Montane Sparsely Vegetated Systems,Sparse,
+1248,2,Western Great Plains Sparsely Vegetated Systems,Sparse,
+1249,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1250,2,Northwestern Great Plains Highland White Spruce Woodland,Conifer,
+1251,2,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,
+1252,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1253,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1254,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1255,2,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,
+1256,2,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,
+1257,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1258,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1259,2,Inter-Mountain Basins Mat Saltbush Shrubland,Shrubland,
+1260,2,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe,Shrubland,
+1261,2,Northwestern Great Plains Shrubland,Shrubland,
+1262,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1263,2,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,
+1264,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+1265,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1266,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+1267,2,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,
+1268,2,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,
+1269,2,Northwestern Great Plains Mixedgrass Prairie,Grassland,
+1270,2,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,
+1271,2,Western Great Plains Sand Prairie,Grassland,
+1272,2,Western Great Plains Shortgrass Prairie,Grassland,
+1273,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1274,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1275,2,Rocky Mountain Subalpine/Upper Montane Riparian Systems,Riparian,
+1276,2,Western Great Plains Floodplain Systems,Riparian,
+1277,2,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,
+1278,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Low Elevation Woodland,Conifer,
+1279,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Savanna,Conifer,
+1280,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+1281,2,Western Great Plains Sparsely Vegetated Systems,Sparse,
+1282,2,Northwestern Great Plains Shrubland,Shrubland,
+1283,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1284,2,Northwestern Great Plains Mixedgrass Prairie,Grassland,
+1285,2,Western Great Plains Sand Prairie,Grassland,
+1286,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1287,2,Western Great Plains Floodplain Systems,Riparian,
+1288,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Low Elevation Woodland,Conifer,
+1289,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna - Savanna,Conifer,
+1290,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+1291,2,Great Plains Prairie Pothole,Grassland,
+1292,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1293,2,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,
+1294,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,Hardwood,
+1295,2,Atlantic Coastal Plain Mesic Hardwood Forest,Hardwood,
+1296,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,Conifer,
+1297,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland,Conifer,
+1298,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,Conifer,
+1299,2,Florida Longleaf Pine Sandhill,Conifer,
+1300,2,Southern Coastal Plain Mesic Slope Forest,Hardwood,
+1301,2,East Gulf Coastal Plain Maritime Forest,Hardwood-Conifer,
+1302,2,Southern Atlantic Coastal Plain Maritime Forest,Hardwood-Conifer,
+1303,2,Florida Peninsula Inland Scrub,Shrubland,
+1304,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,Riparian,
+1305,2,Central Florida Pine Flatwoods,Riparian,
+1306,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,Riparian,
+1307,2,Southern Coastal Plain Nonriverine Cypress Dome,Riparian,
+1308,2,Southern Coastal Plain Seepage Swamp and Baygall,Riparian,
+1309,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,Riparian,
+1310,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1311,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1312,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1313,2,East Gulf Coastal Plain Savanna and Wet Prairie,Savanna,
+1314,2,Floridian Highlands Freshwater Marsh,Riparian,
+1315,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1316,2,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,
+1317,2,South Florida Hardwood Hammock,Hardwood,
+1318,2,Southwest Florida Coastal Strand and Maritime Hammock,Hardwood,
+1319,2,Southeast Florida Coastal Strand and Maritime Hammock,Hardwood,
+1320,2,Florida Longleaf Pine Sandhill,Conifer,
+1321,2,South Florida Pine Rockland,Conifer,
+1322,2,Florida Peninsula Inland Scrub,Shrubland,
+1323,2,Florida Dry Prairie,Grassland,
+1324,2,South Florida Dwarf Cypress Savanna,Savanna,
+1325,2,South Florida Pine Flatwoods,Conifer,
+1326,2,South Florida Cypress Dome,Riparian,
+1327,2,Central Florida Pine Flatwoods,Riparian,
+1328,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,Riparian,
+1329,2,Southern Coastal Plain Nonriverine Cypress Dome,Riparian,
+1330,2,Southern Coastal Plain Seepage Swamp and Baygall,Riparian,
+1331,2,Caribbean Coastal Wetland Systems,Riparian,
+1332,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1333,2,Caribbean Swamp Systems,Riparian,
+1334,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1335,2,South Florida Everglades Sawgrass Marsh,Riparian,
+1336,2,Floridian Highlands Freshwater Marsh,Riparian,
+1337,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1338,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+1339,2,Colorado Plateau Pinyon-Juniper Woodland,Conifer,
+1340,2,Madrean Encinal,Conifer,
+1341,2,Madrean Lower Montane Pine-Oak Forest and Woodland,Conifer,
+1342,2,Madrean Pinyon-Juniper Woodland,Conifer,
+1343,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1344,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1345,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1346,2,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,
+1347,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1348,2,Chihuahuan Creosotebush Desert Scrub,Shrubland,
+1349,2,Chihuahuan Mixed Salt Desert Scrub,Shrubland,
+1350,2,Chihuahuan Succulent Desert Scrub,Shrubland,
+1352,2,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,
+1353,2,Sonora-Mojave Mixed Salt Desert Scrub,Shrubland,
+1354,2,Sonoran Mid-Elevation Desert Scrub,Shrubland,
+1355,2,Western Great Plains Sandhill Steppe,Shrubland,
+1356,2,Chihuahuan Mixed Desert and Thorn Scrub - Shrubland,Shrubland,
+1357,2,Chihuahuan Mixed Desert and Thorn Scrub - Steppe,Shrubland,
+1358,2,Madrean Oriental Chaparral,Shrubland,
+1359,2,Mogollon Chaparral,Shrubland,
+1360,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1361,2,Sonora-Mojave Semi-Desert Chaparral,Shrubland,
+1362,2,Sonoran Paloverde-Mixed Cacti Desert Scrub,Shrubland,
+1363,2,Madrean Juniper Savanna,Conifer,
+1364,2,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,
+1365,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe,Grassland,
+1366,2,Chihuahuan Gypsophilous Grassland and Steppe,Grassland,
+1367,2,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,
+1368,2,Chihuahuan Sandy Plains Semi-Desert Grassland,Grassland,
+1369,2,Inter-Mountain Basins Semi-Desert Grassland,Grassland,
+1370,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1371,2,Western Great Plains Shortgrass Prairie,Grassland,
+1372,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1373,2,North American Warm Desert Riparian Systems,Riparian,
+1374,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1375,2,Chihuahuan Loamy Plains Desert Grassland,Grassland,
+1376,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,Grassland,
+1377,2,North American Warm Desert Sparsely Vegetated Systems,Sparse,
+1378,2,Madrean Lower Montane Pine-Oak Forest and Woodland,Conifer,
+1379,2,Madrean Pinyon-Juniper Woodland,Conifer,
+1380,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1381,2,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,
+1382,2,Chihuahuan Creosotebush Desert Scrub,Shrubland,
+1383,2,Chihuahuan Mixed Salt Desert Scrub,Shrubland,
+1384,2,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,Shrubland,
+1385,2,Chihuahuan Succulent Desert Scrub,Shrubland,
+1386,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1387,2,Western Great Plains Sandhill Steppe,Shrubland,
+1388,2,Apacherian-Chihuahuan Mesquite Upland Scrub,Shrubland,
+1389,2,Chihuahuan Mixed Desert and Thorn Scrub,Shrubland,
+1390,2,Madrean Oriental Chaparral,Shrubland,
+1391,2,Western Great Plains Mesquite Woodland and Shrubland,Shrubland,
+1392,2,Madrean Juniper Savanna,Conifer,
+1393,2,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,
+1394,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe,Grassland,
+1395,2,Chihuahuan Gypsophilous Grassland and Steppe,Grassland,
+1396,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1397,2,Western Great Plains Shortgrass Prairie,Grassland,
+1398,2,North American Warm Desert Riparian Systems,Riparian,
+1399,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1400,2,Edwards Plateau Limestone Shrubland,Conifer,
+1401,2,Western Great Plains Depressional Wetland Systems - Playa,Riparian,
+1402,2,Chihuahuan Loamy Plains Desert Grassland,Grassland,
+1403,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Tobosa Grassland,Grassland,
+1404,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Alkali Sacaton,Grassland,
+1405,2,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,
+1406,2,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,
+1407,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1408,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+1409,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1410,2,Western Great Plains Sandhill Steppe,Shrubland,
+1411,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1412,2,Western Great Plains Mesquite Woodland and Shrubland,Shrubland,
+1413,2,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,
+1414,2,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,
+1415,2,Central Mixedgrass Prairie,Grassland,
+1416,2,Western Great Plains Foothill and Piedmont Grassland,Grassland,
+1417,2,Western Great Plains Shortgrass Prairie,Grassland,
+1418,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1419,2,Western Great Plains Floodplain Systems,Riparian,
+1420,2,Northwestern Great Plains Canyon,Sparse,
+1421,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1422,2,Western Great Plains Sparsely Vegetated Systems,Sparse,
+1423,2,Western Great Plains Sandhill Steppe,Shrubland,
+1424,2,Western Great Plains Mesquite Woodland and Shrubland,Shrubland,
+1425,2,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,
+1426,2,Central Mixedgrass Prairie,Grassland,
+1427,2,Western Great Plains Sand Prairie,Grassland,
+1428,2,Western Great Plains Shortgrass Prairie,Grassland,
+1429,2,Western Great Plains Floodplain Systems,Riparian,
+1430,2,Edwards Plateau Limestone Shrubland,Conifer,
+1431,2,Western Great Plains Depressional Wetland Systems - Playa,Riparian,
+1432,2,Western Great Plains Depressional Wetland Systems - Saline,Riparian,
+1433,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Tobosa Grassland,Grassland,
+1434,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland - Alkali Sacaton,Grassland,
+1435,2,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,
+1436,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,Hardwood,
+1437,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,Conifer,
+1438,2,West Gulf Coastal Plain Pine-Hardwood Forest,Hardwood-Conifer,
+1439,2,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,Hardwood-Conifer,
+1440,2,Southern Blackland Tallgrass Prairie,Grassland,
+1441,2,West Gulf Coastal Plain Northern Calcareous Prairie,Grassland,
+1442,2,West Gulf Coastal Plain Southern Calcareous Prairie,Grassland,
+1443,2,Texas-Louisiana Coastal Prairie,Grassland,
+1444,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,Riparian,
+1445,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,Hardwood-Conifer,
+1446,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1447,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1448,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1449,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1450,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,Hardwood,
+1451,2,East-Central Texas Plains Post Oak Savanna and Woodland,Hardwood,
+1452,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,Hardwood,
+1453,2,Atlantic Coastal Plain Mesic Hardwood Forest,Hardwood,
+1454,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,Conifer,
+1455,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland,Conifer,
+1456,2,Southern Coastal Plain Mesic Slope Forest,Hardwood,
+1457,2,Central Atlantic Coastal Plain Maritime Forest,Hardwood,
+1458,2,Southern Atlantic Coastal Plain Maritime Forest,Hardwood-Conifer,
+1459,2,Southern Atlantic Coastal Plain Dune and Maritime Grassland,Grassland,
+1460,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,Riparian,
+1461,2,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,Riparian,
+1462,2,Atlantic Coastal Plain Peatland Pocosin and Canebrake,Riparian,
+1463,2,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland,Riparian,
+1464,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,Riparian,
+1465,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1466,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1467,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1468,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1469,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,Riparian,
+1470,2,Inter-Mountain Basins Sparsely Vegetated Systems,Sparse,
+1471,2,Western Great Plains Sparsely Vegetated Systems,Sparse,
+1472,2,Rocky Mountain Aspen Forest and Woodland,Hardwood,
+1473,2,Rocky Mountain Bigtooth Maple Ravine Woodland,Hardwood,
+1474,2,Madrean Lower Montane Pine-Oak Forest and Woodland,Conifer,
+1475,2,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1476,2,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,
+1477,2,Southern Rocky Mountain Ponderosa Pine Woodland - South,Conifer,
+1478,2,Southern Rocky Mountain Ponderosa Pine Woodland - North,Conifer,
+1479,2,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,
+1480,2,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,
+1481,2,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Hardwood-Conifer,
+1482,2,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,
+1485,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1486,2,Western Great Plains Sandhill Steppe,Shrubland,
+1487,2,Apacherian-Chihuahuan Mesquite Upland Scrub,Shrubland,
+1488,2,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,
+1489,2,Western Great Plains Mesquite Woodland and Shrubland,Shrubland,
+1490,2,Southern Rocky Mountain Ponderosa Pine Savanna - South,Conifer,
+1491,2,Southern Rocky Mountain Ponderosa Pine Savanna - North,Conifer,
+1492,2,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,
+1493,2,Apacherian-Chihuahuan Semi-Desert Grassland and Steppe,Grassland,
+1494,2,Chihuahuan Gypsophilous Grassland and Steppe,Grassland,
+1495,2,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,
+1496,2,Western Great Plains Foothill and Piedmont Grassland,Grassland,
+1497,2,Western Great Plains Shortgrass Prairie,Grassland,
+1498,2,Inter-Mountain Basins Greasewood Flat,Shrubland,
+1499,2,Rocky Mountain Montane Riparian Systems,Riparian,
+1500,2,Western Great Plains Floodplain Systems,Riparian,
+1501,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1502,2,Chihuahuan Loamy Plains Desert Grassland,Grassland,
+1503,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,Grassland,
+1504,2,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,
+1505,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,Hardwood,
+1506,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,Conifer,
+1507,2,West Gulf Coastal Plain Pine-Hardwood Forest,Hardwood-Conifer,
+1508,2,Mississippi Delta Maritime Forest,Hardwood-Conifer,
+1509,2,Texas-Louisiana Coastal Prairie,Grassland,
+1510,2,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,Riparian,
+1511,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,Hardwood-Conifer,
+1512,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1513,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1514,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1515,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1517,2,Southern Crowley`s Ridge Mesic Loess Slope Forest,Hardwood,
+1518,2,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,
+1519,2,East Gulf Coastal Plain Northern Loess Bluff Forest,Hardwood,
+1520,2,East Gulf Coastal Plain Southern Loess Bluff Forest,Hardwood,
+1521,2,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,Conifer,
+1522,2,West Gulf Coastal Plain Pine-Hardwood Forest,Hardwood-Conifer,
+1523,2,Lower Mississippi River Dune Woodland and Forest,Hardwood,
+1524,2,West Gulf Coastal Plain Southern Calcareous Prairie,Grassland,
+1525,2,Lower Mississippi Alluvial Plain Grand Prairie,Grassland,
+1526,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,Hardwood-Conifer,
+1527,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1528,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1529,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1530,2,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,Hardwood,
+1531,2,Northern Crowley`s Ridge Sand Forest,Hardwood-Conifer,
+1532,2,Lower Mississippi River Flatwoods,Hardwood,
+1561,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,Hardwood,
+1562,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,Hardwood,
+1563,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+1564,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+1565,2,North-Central Interior Beech-Maple Forest,Hardwood,
+1566,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+1568,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,Conifer,
+1569,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Hardwood-Conifer,
+1570,2,North-Central Interior Oak Savanna,Hardwood,
+1571,2,North-Central Oak Barrens,Hardwood,
+1572,2,Laurentian Pine-Oak Barrens,Hardwood-Conifer,
+1573,2,Laurentian Pine-Oak Barrens - Jack Pine,Conifer,
+1574,2,Great Lakes Alvar,Conifer,
+1575,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+1576,2,Central Tallgrass Prairie,Grassland,
+1577,2,Eastern Boreal Floodplain,Hardwood,
+1578,2,Great Lakes Wooded Dune and Swale,Riparian,
+1579,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1580,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1581,2,Boreal Acidic Peatland Systems,Riparian,
+1582,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1583,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,Riparian,
+1584,2,Great Lakes Coastal Marsh Systems,Riparian,
+1585,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,Riparian,
+1586,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1587,2,Paleozoic Plateau Bluff and Talus,Hardwood-Conifer,
+1588,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,Hardwood,
+1589,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,Hardwood,
+1590,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+1591,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+1592,2,Eastern Great Plains Tallgrass Aspen Parkland,Hardwood,
+1593,2,Boreal Jack Pine-Black Spruce Forest,Conifer,
+1596,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,Conifer,
+1597,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal,Conifer,
+1598,2,Boreal White Spruce-Fir-Hardwood Forest - Aspen-Birch,Conifer,
+1599,2,North-Central Interior Oak Savanna,Hardwood,
+1600,2,North-Central Oak Barrens,Hardwood,
+1601,2,Laurentian Pine-Oak Barrens,Hardwood-Conifer,
+1602,2,Laurentian Pine-Oak Barrens - Jack Pine,Conifer,
+1603,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+1604,2,Northern Tallgrass Prairie,Grassland,
+1605,2,Eastern Boreal Floodplain,Hardwood,
+1606,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1607,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1608,2,Boreal Acidic Peatland Systems,Riparian,
+1609,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1610,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,Riparian,
+1611,2,Great Lakes Coastal Marsh Systems,Riparian,
+1612,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,Riparian,
+1613,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1614,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,Hardwood,
+1615,2,Laurentian-Acadian Northern Hardwoods Forest - Hemlock,Hardwood,
+1616,2,Laurentian-Acadian Northern Hardwoods Forest - Northern Sugar Maple-Basswood ,Hardwood,
+1617,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+1618,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+1619,2,North-Central Interior Beech-Maple Forest,Hardwood,
+1620,2,Boreal Jack Pine-Black Spruce Forest - Pine Barrens,Conifer,
+1621,2,Boreal Jack Pine-Black Spruce Forest - Spruce-Fir,Conifer,
+1622,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+1623,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,Conifer,
+1624,2,Boreal White Spruce-Fir-Hardwood Forest - Coastal,Conifer,
+1625,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Hardwood-Conifer,
+1626,2,North-Central Interior Oak Savanna,Hardwood,
+1627,2,North-Central Oak Barrens,Hardwood,
+1628,2,Laurentian Pine-Oak Barrens,Hardwood-Conifer,
+1629,2,Laurentian Pine-Oak Barrens - Jack Pine,Conifer,
+1630,2,Great Lakes Wet-Mesic Lakeplain Prairie,Riparian,
+1631,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+1632,2,Central Tallgrass Prairie,Grassland,
+1633,2,Eastern Boreal Floodplain,Hardwood,
+1634,2,Great Lakes Wooded Dune and Swale,Riparian,
+1635,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1636,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1637,2,Boreal Acidic Peatland Systems,Riparian,
+1638,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1639,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,Riparian,
+1640,2,Great Lakes Coastal Marsh Systems,Riparian,
+1641,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1642,2,Western Great Plains Dry Bur Oak Forest and Woodland,Hardwood,
+1643,2,Northwestern Great Plains Mixedgrass Prairie,Grassland,
+1644,2,Western Great Plains Tallgrass Prairie,Grassland,
+1645,2,Western Great Plains Floodplain Systems,Riparian,
+1646,2,Boreal Aspen-Birch Forest,Conifer,
+1647,2,Laurentian-Acadian Northern Hardwoods Forest,Hardwood,
+1648,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+1649,2,Eastern Great Plains Tallgrass Aspen Parkland,Hardwood,
+1650,2,Boreal White Spruce-Fir-Hardwood Forest - Inland,Conifer,
+1651,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+1652,2,North-Central Interior Oak Savanna,Hardwood,
+1653,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+1654,2,Northern Tallgrass Prairie,Grassland,
+1655,2,Eastern Great Plains Floodplain Systems,Riparian,
+1656,2,Boreal Acidic Peatland Systems,Riparian,
+1657,2,Great Plains Prairie Pothole,Grassland,
+1658,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1659,2,Western Great Plains Dry Bur Oak Forest and Woodland,Hardwood,
+1660,2,Northwestern Great Plains Mixedgrass Prairie,Grassland,
+1661,2,Western Great Plains Tallgrass Prairie,Grassland,
+1662,2,Western Great Plains Floodplain Systems,Riparian,
+1663,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+1664,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+1665,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+1666,2,Eastern Great Plains Tallgrass Aspen Parkland,Hardwood,
+1667,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+1668,2,North-Central Interior Oak Savanna,Hardwood,
+1669,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+1670,2,Northern Tallgrass Prairie,Grassland,
+1671,2,Eastern Great Plains Floodplain Systems,Riparian,
+1672,2,Great Plains Prairie Pothole,Grassland,
+1673,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1674,2,Western Great Plains Sparsely Vegetated Systems,Sparse,
+1675,2,Western Great Plains Dry Bur Oak Forest and Woodland,Hardwood,
+1676,2,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland and Shrubland,Shrubland,
+1677,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1678,2,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,
+1679,2,Western Great Plains Sandhill Steppe,Shrubland,
+1680,2,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,
+1681,2,Central Mixedgrass Prairie,Grassland,
+1682,2,Northwestern Great Plains Mixedgrass Prairie,Grassland,
+1683,2,Western Great Plains Sand Prairie,Grassland,
+1684,2,Western Great Plains Shortgrass Prairie,Grassland,
+1685,2,Western Great Plains Tallgrass Prairie,Grassland,
+1686,2,Western Great Plains Floodplain Systems,Riparian,
+1687,2,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna,Conifer,
+1688,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+1689,2,Central Tallgrass Prairie,Grassland,
+1690,2,Eastern Great Plains Floodplain Systems,Riparian,
+1691,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1692,2,Western Great Plains Sandhill Steppe,Shrubland,
+1693,2,Western Great Plains Mesquite Woodland and Shrubland,Shrubland,
+1694,2,Central Mixedgrass Prairie,Grassland,
+1695,2,Western Great Plains Sand Prairie,Grassland,
+1696,2,Western Great Plains Floodplain Systems,Riparian,
+1697,2,Ozark-Ouachita Dry-Mesic Oak Forest,Hardwood,
+1698,2,Crosstimbers Oak Forest and Woodland,Hardwood,
+1699,2,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,
+1700,2,Ozark-Ouachita Mesic Hardwood Forest,Hardwood,
+1701,2,Ozark-Ouachita Dry Oak Woodland,Hardwood,
+1702,2,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,Conifer,
+1703,2,West Gulf Coastal Plain Pine-Hardwood Forest,Hardwood-Conifer,
+1704,2,Edwards Plateau Limestone Savanna and Woodland,Hardwood,
+1705,2,Edwards Plateau Limestone Shrubland,Conifer,
+1706,2,Southern Blackland Tallgrass Prairie,Grassland,
+1707,2,Southeastern Great Plains Tallgrass Prairie,Grassland,
+1708,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1709,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1710,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1711,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1712,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,Grassland,
+1713,2,East-Central Texas Plains Post Oak Savanna and Woodland,Hardwood,
+1714,2,Edwards Plateau Dry-Mesic Slope Forest and Woodland,Hardwood,
+1715,2,Western Great Plains Sandhill Steppe,Shrubland,
+1716,2,Apacherian-Chihuahuan Mesquite Upland Scrub,Shrubland,
+1717,2,Western Great Plains Mesquite Woodland and Shrubland,Shrubland,
+1718,2,Central Mixedgrass Prairie,Grassland,
+1719,2,Western Great Plains Sand Prairie,Grassland,
+1720,2,Western Great Plains Shortgrass Prairie,Grassland,
+1721,2,North American Warm Desert Riparian Systems,Riparian,
+1722,2,Western Great Plains Floodplain Systems,Riparian,
+1723,2,Crosstimbers Oak Forest and Woodland,Hardwood,
+1724,2,East-Central Texas Plains Southern Pine Forest and Woodland,Conifer,
+1725,2,Edwards Plateau Limestone Savanna and Woodland,Hardwood,
+1726,2,Tamaulipan Mixed Deciduous Thornscrub,Shrubland,
+1727,2,Tamaulipan Calcareous Thornscrub,Shrubland,
+1728,2,Edwards Plateau Limestone Shrubland,Conifer,
+1729,2,Llano Uplift Acidic Forest-Woodland-Glade,Hardwood,
+1730,2,Southern Blackland Tallgrass Prairie,Grassland,
+1731,2,Southeastern Great Plains Tallgrass Prairie,Grassland,
+1732,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1733,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1734,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1735,2,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,Grassland,
+1736,2,East-Central Texas Plains Post Oak Savanna and Woodland,Hardwood,
+1737,2,Edwards Plateau Dry-Mesic Slope Forest and Woodland,Hardwood,
+1738,2,Edwards Plateau Mesic Canyon,Hardwood,
+1739,2,Edwards Plateau Riparian,Riparian,
+1740,2,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,
+1741,2,Central and South Texas Coastal Fringe Forest and Woodland,Hardwood,
+1742,2,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,Hardwood,
+1743,2,East-Central Texas Plains Southern Pine Forest and Woodland,Conifer,
+1744,2,West Gulf Coastal Plain Pine-Hardwood Forest,Hardwood-Conifer,
+1745,2,Edwards Plateau Limestone Savanna and Woodland,Hardwood,
+1746,2,Tamaulipan Mixed Deciduous Thornscrub,Shrubland,
+1747,2,Tamaulipan Calcareous Thornscrub,Shrubland,
+1748,2,Southern Blackland Tallgrass Prairie,Grassland,
+1749,2,Texas-Louisiana Coastal Prairie,Grassland,
+1750,2,Central and Upper Texas Coast Dune and Coastal Grassland,Grassland,
+1751,2,Tamaulipan Savanna Grassland,Grassland,
+1752,2,South Texas Lomas,Shrubland,
+1753,2,Tamaulipan Clay Grassland,Grassland,
+1754,2,South Texas Sand Sheet Grassland,Grassland,
+1755,2,Tamaulipan Floodplain,Riparian,
+1756,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1757,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1758,2,Tamaulipan Riparian Systems,Riparian,
+1759,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1760,2,Texas-Louisiana Saline Coastal Prairie,Grassland,
+1761,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Grassland,
+1762,2,Western Great Plains Depressional Wetland Systems,Riparian,
+1763,2,East-Central Texas Plains Post Oak Savanna and Woodland,Hardwood,
+1764,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,Hardwood,
+1765,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,Hardwood,
+1766,2,East Gulf Coastal Plain Northern Loess Bluff Forest,Hardwood,
+1767,2,East Gulf Coastal Plain Limestone Forest,Hardwood,
+1768,2,East Gulf Coastal Plain Southern Loess Bluff Forest,Hardwood,
+1769,2,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,
+1770,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,Conifer,
+1771,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+1772,2,Southern Coastal Plain Mesic Slope Forest,Hardwood,
+1773,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+1774,2,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest,Hardwood-Conifer,
+1775,2,Southern Coastal Plain Blackland Prairie and Woodland,Grassland,
+1776,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,Riparian,
+1777,2,Southern Coastal Plain Seepage Swamp and Baygall,Riparian,
+1778,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,Riparian,
+1779,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1780,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1781,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1782,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1783,2,East Gulf Coastal Plain Limestone Forest,Hardwood,
+1784,2,East Gulf Coastal Plain Southern Loess Bluff Forest,Hardwood,
+1785,2,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,
+1786,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,Conifer,
+1787,2,Florida Longleaf Pine Sandhill,Conifer,
+1788,2,Southern Coastal Plain Mesic Slope Forest,Hardwood,
+1789,2,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest,Hardwood-Conifer,
+1790,2,East Gulf Coastal Plain Maritime Forest,Hardwood-Conifer,
+1791,2,East Gulf Coastal Plain Dune and Coastal Grassland,Grassland,
+1792,2,East Gulf Coastal Plain Near-Coast Pine Flatwoods,Riparian,
+1793,2,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,Riparian,
+1794,2,Southern Coastal Plain Nonriverine Cypress Dome,Riparian,
+1795,2,Southern Coastal Plain Seepage Swamp and Baygall,Riparian,
+1796,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,Riparian,
+1797,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1798,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1799,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1800,2,East Gulf Coastal Plain Savanna and Wet Prairie,Savanna,
+1801,2,Floridian Highlands Freshwater Marsh,Riparian,
+1802,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1803,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems,Sparse,
+1804,2,Southern Appalachian Oak Forest,Hardwood,
+1805,2,Southern Piedmont Mesic Forest,Hardwood,
+1806,2,Southern and Central Appalachian Cove Forest,Hardwood,
+1807,2,Piedmont Hardpan Woodland and Forest,Hardwood,
+1808,2,Southeastern Interior Longleaf Pine Woodland,Conifer,
+1809,2,Southern Appalachian Montane Pine Forest and Woodland,Conifer,
+1810,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+1811,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+1812,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1813,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1814,2,Southern Appalachian Northern Hardwood Forest,Hardwood,
+1815,2,Southern Appalachian Oak Forest,Hardwood,
+1816,2,Southern Piedmont Mesic Forest,Hardwood,
+1817,2,Allegheny-Cumberland Dry Oak Forest and Woodland,Hardwood,
+1818,2,Southern and Central Appalachian Cove Forest,Hardwood,
+1819,2,Central and Southern Appalachian Montane Oak Forest,Hardwood,
+1820,2,South-Central Interior Mesophytic Forest,Hardwood,
+1821,2,Central and Southern Appalachian Spruce-Fir Forest,Conifer,
+1822,2,Southern Appalachian Montane Pine Forest and Woodland,Conifer,
+1823,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+1824,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+1825,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,Hardwood,
+1826,2,Southern Appalachian Grass and Shrub Bald,Grassland,
+1827,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1828,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1829,2,Southern Piedmont Mesic Forest,Hardwood,
+1830,2,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,
+1831,2,Atlantic Coastal Plain Mesic Hardwood Forest,Hardwood,
+1832,2,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,Conifer,
+1833,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,Conifer,
+1834,2,Southeastern Interior Longleaf Pine Woodland,Conifer,
+1835,2,Southern Appalachian Montane Pine Forest and Woodland,Conifer,
+1836,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+1837,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+1838,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1839,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1840,2,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,
+1841,2,Southern Piedmont Mesic Forest,Hardwood,
+1842,2,Northern Atlantic Coastal Plain Hardwood Forest,Hardwood,
+1843,2,Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,Hardwood,
+1844,2,Atlantic Coastal Plain Mesic Hardwood Forest,Hardwood,
+1845,2,Atlantic Coastal Plain Upland Longleaf Pine Woodland,Conifer,
+1846,2,Southern Appalachian Montane Pine Forest and Woodland,Conifer,
+1847,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+1848,2,Northern Atlantic Coastal Plain Pitch Pine Barrens,Conifer,
+1849,2,Central Atlantic Coastal Plain Maritime Forest,Hardwood,
+1850,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+1851,2,Central Appalachian Dry Oak-Pine Forest,Hardwood-Conifer,
+1852,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1853,2,Eastern Serpentine Woodland,Hardwood-Conifer,
+1854,2,Central Appalachian Pine-Oak Rocky Woodland,Hardwood-Conifer,
+1855,2,Northern Atlantic Coastal Plain Maritime Forest,Hardwood-Conifer,
+1856,2,Central Appalachian Alkaline Glade and Woodland,Savanna,
+1857,2,Northern Atlantic Coastal Plain Dune and Swale,Grassland,
+1858,2,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,Riparian,
+1859,2,Atlantic Coastal Plain Peatland Pocosin and Canebrake,Riparian,
+1860,2,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall,Riparian,
+1861,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1862,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1863,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+1864,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+1865,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1866,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1867,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1868,2,Gulf and Atlantic Coastal Plain Sparsely Vegetated Systems,Sparse,
+1869,2,Central Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,Riparian,
+1870,2,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,
+1871,2,Southern Appalachian Oak Forest,Hardwood,
+1872,2,Southern Piedmont Mesic Forest,Hardwood,
+1873,2,Allegheny-Cumberland Dry Oak Forest and Woodland,Hardwood,
+1874,2,Southern and Central Appalachian Cove Forest,Hardwood,
+1875,2,Central and Southern Appalachian Montane Oak Forest,Hardwood,
+1876,2,South-Central Interior Mesophytic Forest,Hardwood,
+1877,2,Appalachian Shale Barrens,Hardwood,
+1878,2,Central and Southern Appalachian Spruce-Fir Forest,Conifer,
+1879,2,Southern Appalachian Montane Pine Forest and Woodland,Conifer,
+1880,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+1881,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+1882,2,Central Appalachian Dry Oak-Pine Forest,Hardwood-Conifer,
+1883,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1884,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,Hardwood,
+1885,2,Central Appalachian Pine-Oak Rocky Woodland,Hardwood-Conifer,
+1886,2,Central Appalachian Alkaline Glade and Woodland,Savanna,
+1887,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1888,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1889,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1890,2,Laurentian-Acadian Northern Hardwoods Forest,Hardwood,
+1891,2,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,
+1892,2,South-Central Interior Mesophytic Forest,Hardwood,
+1893,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+1894,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Hardwood-Conifer,
+1895,2,Central Appalachian Dry Oak-Pine Forest,Hardwood-Conifer,
+1896,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1897,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,Hardwood-Conifer,
+1898,2,Central Appalachian Pine-Oak Rocky Woodland,Hardwood-Conifer,
+1899,2,Central Appalachian Alkaline Glade and Woodland,Savanna,
+1900,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1901,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1902,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1903,2,Boreal Acidic Peatland Systems,Riparian,
+1904,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1905,2,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,Riparian,
+1906,2,Great Lakes Coastal Marsh Systems,Riparian,
+1907,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1908,2,North-Central Interior Wet Flatwoods,Hardwood,
+1909,2,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,
+1910,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+1911,2,North-Central Interior Beech-Maple Forest,Hardwood,
+1912,2,Allegheny-Cumberland Dry Oak Forest and Woodland,Hardwood,
+1913,2,South-Central Interior Mesophytic Forest,Hardwood,
+1914,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1915,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1916,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1917,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1918,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,Riparian,
+1919,2,North-Central Interior Wet Flatwoods,Hardwood,
+1920,2,Laurentian-Acadian Northern Hardwoods Forest,Hardwood,
+1921,2,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,
+1922,2,Northern Atlantic Coastal Plain Hardwood Forest,Hardwood,
+1923,2,Northern Atlantic Coastal Plain Pitch Pine Barrens,Conifer,
+1924,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+1925,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Hardwood-Conifer,
+1926,2,Central Appalachian Dry Oak-Pine Forest,Hardwood-Conifer,
+1927,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1928,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,Hardwood-Conifer,
+1929,2,Acadian-Appalachian Montane Spruce-Fir Forest,Hardwood-Conifer,
+1930,2,Central Appalachian Pine-Oak Rocky Woodland,Hardwood-Conifer,
+1931,2,Northern Atlantic Coastal Plain Maritime Forest,Hardwood-Conifer,
+1932,2,Northern Atlantic Coastal Plain Dune and Swale,Grassland,
+1933,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1934,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1935,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1936,2,Boreal Acidic Peatland Systems,Riparian,
+1937,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1938,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1939,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1940,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1941,2,North-Central Interior Wet Flatwoods,Hardwood,
+1942,2,Laurentian-Acadian Swamp Systems,Riparian,
+1943,2,Laurentian-Acadian Northern Hardwoods Forest,Hardwood,
+1944,2,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,
+1945,2,Northeastern Interior Pine Barrens,Conifer,
+1946,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+1947,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Hardwood-Conifer,
+1948,2,Central Appalachian Dry Oak-Pine Forest,Hardwood-Conifer,
+1949,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1950,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,Hardwood-Conifer,
+1951,2,Acadian-Appalachian Montane Spruce-Fir Forest,Hardwood-Conifer,
+1952,2,Central Appalachian Pine-Oak Rocky Woodland,Hardwood-Conifer,
+1953,2,Acadian-Appalachian Subalpine Woodland and Heath-Krummholz,Shrubland,
+1954,2,Central Appalachian Alkaline Glade and Woodland,Savanna,
+1955,2,Great Lakes Alvar,Conifer,
+1956,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1957,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1958,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1959,2,Boreal Acidic Peatland Systems,Riparian,
+1960,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1961,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1962,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1963,2,North-Central Interior Wet Flatwoods,Hardwood,
+1964,2,Laurentian-Acadian Swamp Systems,Riparian,
+1965,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+1966,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+1967,2,North-Central Interior Beech-Maple Forest,Hardwood,
+1968,2,North-Central Interior Oak Savanna,Hardwood,
+1969,2,North-Central Oak Barrens,Hardwood,
+1970,2,Great Lakes Wet-Mesic Lakeplain Prairie,Riparian,
+1971,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+1972,2,Central Tallgrass Prairie,Grassland,
+1973,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+1974,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1975,2,Great Lakes Coastal Marsh Systems,Riparian,
+1976,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,Riparian,
+1977,2,North-Central Interior Wet Flatwoods,Hardwood,
+1978,2,Laurentian-Acadian Northern Hardwoods Forest,Hardwood,
+1979,2,Northern Atlantic Coastal Plain Hardwood Forest,Hardwood,
+1980,2,Boreal Jack Pine-Black Spruce Forest,Conifer,
+1981,2,Northeastern Interior Pine Barrens,Conifer,
+1982,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+1983,2,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Hardwood-Conifer,
+1984,2,Central Appalachian Dry Oak-Pine Forest,Hardwood-Conifer,
+1985,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+1986,2,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,Hardwood-Conifer,
+1987,2,Acadian-Appalachian Montane Spruce-Fir Forest,Hardwood-Conifer,
+1988,2,Central Appalachian Pine-Oak Rocky Woodland,Hardwood-Conifer,
+1989,2,Acadian-Appalachian Alpine Tundra,Shrubland,
+1990,2,Acadian-Appalachian Subalpine Woodland and Heath-Krummholz,Shrubland,
+1991,2,Northern Atlantic Coastal Plain Dune and Swale,Grassland,
+1992,2,Central Interior and Appalachian Riparian Systems,Riparian,
+1993,2,Laurentian-Acadian Floodplain Systems,Riparian,
+1994,2,Boreal Acidic Peatland Systems,Riparian,
+1995,2,Central Interior and Appalachian Swamp Systems,Riparian,
+1996,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+1997,2,Gulf and Atlantic Coastal Plain Tidal Marsh Systems,Riparian,
+1998,2,Laurentian-Acadian Shrub-Herbaceous Wetland Systems,Riparian,
+1999,2,Laurentian-Acadian Swamp Systems,Riparian,
+2000,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,Hardwood,
+2001,2,Southern Appalachian Northern Hardwood Forest,Hardwood,
+2002,2,Southern Appalachian Oak Forest,Hardwood,
+2003,2,Allegheny-Cumberland Dry Oak Forest and Woodland,Hardwood,
+2004,2,Southern and Central Appalachian Cove Forest,Hardwood,
+2005,2,South-Central Interior Mesophytic Forest,Hardwood,
+2006,2,Southern Appalachian Montane Pine Forest and Woodland,Conifer,
+2007,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+2008,2,Central Interior Highlands Dry Acidic Glade and Barrens,Hardwood,
+2009,2,Appalachian (Hemlock-)Northern Hardwood Forest,Hardwood,
+2010,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,Hardwood,
+2011,2,Central Interior Highlands Calcareous Glade and Barrens,Grassland,
+2012,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2013,2,Central Interior and Appalachian Riparian Systems,Riparian,
+2014,2,Central Interior and Appalachian Swamp Systems,Riparian,
+2015,2,Ozark-Ouachita Dry-Mesic Oak Forest,Hardwood,
+2016,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,Hardwood,
+2017,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+2018,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+2019,2,North-Central Interior Beech-Maple Forest,Hardwood,
+2020,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+2021,2,South-Central Interior Mesophytic Forest,Hardwood,
+2022,2,South-Central Interior/Upper Coastal Plain Flatwoods,Hardwood,
+2023,2,Ozark-Ouachita Dry Oak Woodland,Hardwood,
+2024,2,North-Central Interior Oak Savanna,Hardwood,
+2025,2,North-Central Oak Barrens,Hardwood,
+2026,2,Central Interior Highlands Calcareous Glade and Barrens,Grassland,
+2027,2,Great Lakes Wet-Mesic Lakeplain Prairie,Riparian,
+2028,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+2029,2,Central Tallgrass Prairie,Grassland,
+2030,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,Hardwood,
+2031,2,Great Lakes Wooded Dune and Swale,Riparian,
+2032,2,Eastern Great Plains Floodplain Systems,Riparian,
+2033,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2034,2,Central Interior and Appalachian Riparian Systems,Riparian,
+2035,2,Paleozoic Plateau Bluff and Talus,Hardwood-Conifer,
+2036,2,North-Central Interior Wet Flatwoods,Hardwood,
+2037,2,Ozark-Ouachita Dry-Mesic Oak Forest,Hardwood,
+2038,2,Crosstimbers Oak Forest and Woodland,Hardwood,
+2039,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+2040,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+2041,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+2042,2,Ozark-Ouachita Mesic Hardwood Forest,Hardwood,
+2043,2,North-Central Oak Barrens,Hardwood,
+2044,2,Central Interior Highlands Calcareous Glade and Barrens,Grassland,
+2045,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+2046,2,Central Tallgrass Prairie,Grassland,
+2047,2,Southeastern Great Plains Tallgrass Prairie,Grassland,
+2048,2,Eastern Great Plains Floodplain Systems,Riparian,
+2049,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2050,2,Eastern Great Plains Wet Meadow-Prairie-Marsh,Grassland,
+2051,2,North-Central Interior Wet Flatwoods,Hardwood,
+2052,2,Western Great Plains Dry Bur Oak Forest and Woodland,Hardwood,
+2053,2,Western Great Plains Sandhill Steppe,Shrubland,
+2054,2,Central Mixedgrass Prairie,Grassland,
+2055,2,Western Great Plains Sand Prairie,Grassland,
+2056,2,Western Great Plains Shortgrass Prairie,Grassland,
+2057,2,Western Great Plains Tallgrass Prairie,Grassland,
+2058,2,Western Great Plains Floodplain Systems,Riparian,
+2059,2,Crosstimbers Oak Forest and Woodland,Hardwood,
+2060,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+2061,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+2062,2,Central Tallgrass Prairie,Grassland,
+2063,2,Southeastern Great Plains Tallgrass Prairie,Grassland,
+2064,2,Eastern Great Plains Floodplain Systems,Riparian,
+2065,2,Eastern Great Plains Wet Meadow-Prairie-Marsh,Grassland,
+2066,2,Western Great Plains Depressional Wetland Systems,Riparian,
+2067,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,Hardwood,
+2068,2,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,Hardwood,
+2069,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,Hardwood,
+2070,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+2071,2,North-Central Interior Beech-Maple Forest,Hardwood,
+2072,2,South-Central Interior Mesophytic Forest,Hardwood,
+2073,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,Hardwood,
+2074,2,South-Central Interior/Upper Coastal Plain Flatwoods,Hardwood,
+2075,2,East Gulf Coastal Plain Northern Loess Bluff Forest,Hardwood,
+2076,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+2077,2,Southern Coastal Plain Mesic Slope Forest,Hardwood,
+2078,2,Central Interior Highlands Dry Acidic Glade and Barrens,Hardwood,
+2079,2,Central Interior Highlands Calcareous Glade and Barrens,Grassland,
+2080,2,Bluegrass Savanna and Woodland,Hardwood,
+2081,2,Pennyroyal Karst Plain Prairie and Barrens,Grassland,
+2082,2,East Gulf Coastal Plain Jackson Plain Prairie and Barrens,Grassland,
+2083,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,Hardwood,
+2084,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2085,2,Central Interior and Appalachian Riparian Systems,Riparian,
+2086,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+2087,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+2088,2,Central Interior and Appalachian Swamp Systems,Riparian,
+2089,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+2090,2,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,Hardwood,
+2091,2,North-Central Interior Wet Flatwoods,Hardwood,
+2092,2,Southern Interior Low Plateau Dry-Mesic Oak Forest,Hardwood,
+2093,2,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,Hardwood,
+2094,2,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,Hardwood,
+2095,2,Southern Appalachian Oak Forest,Hardwood,
+2096,2,Allegheny-Cumberland Dry Oak Forest and Woodland,Hardwood,
+2097,2,Southern and Central Appalachian Cove Forest,Hardwood,
+2098,2,Central and Southern Appalachian Montane Oak Forest,Hardwood,
+2099,2,South-Central Interior Mesophytic Forest,Hardwood,
+2100,2,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,Hardwood,
+2101,2,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,
+2102,2,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,Conifer,
+2103,2,Southeastern Interior Longleaf Pine Woodland,Conifer,
+2104,2,Southern Appalachian Low-Elevation Pine Forest,Conifer,
+2105,2,Southern Piedmont Dry Oak(-Pine) Forest,Hardwood-Conifer,
+2106,2,Southern Ridge and Valley/Cumberland Dry Calcareous Forest,Hardwood,
+2107,2,Nashville Basin Limestone Glade and Woodland,Savanna,
+2108,2,Central Interior Highlands Calcareous Glade and Barrens,Grassland,
+2109,2,Alabama Ketona Glade and Woodland,Hardwood,
+2110,2,Western Highland Rim Prairie and Barrens,Grassland,
+2111,2,Eastern Highland Rim Prairie and Barrens,Grassland,
+2112,2,South-Central Interior/Upper Coastal Plain Wet Flatwoods,Hardwood,
+2113,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2114,2,Central Interior and Appalachian Riparian Systems,Riparian,
+2115,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+2116,2,Central Interior and Appalachian Swamp Systems,Riparian,
+2117,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+2118,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+2119,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+2120,2,Western Great Plains Wooded Draw and Ravine,Shrubland,
+2121,2,North-Central Interior Oak Savanna,Hardwood,
+2122,2,North-Central Oak Barrens,Hardwood,
+2123,2,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,
+2124,2,Northern Tallgrass Prairie,Grassland,
+2125,2,Central Tallgrass Prairie,Grassland,
+2126,2,Eastern Great Plains Floodplain Systems,Riparian,
+2127,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2128,2,Central Interior and Appalachian Swamp Systems,Riparian,
+2129,2,Eastern Great Plains Wet Meadow-Prairie-Marsh,Grassland,
+2130,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,Riparian,
+2131,2,Paleozoic Plateau Bluff and Talus,Hardwood-Conifer,
+2132,2,Ozark-Ouachita Dry-Mesic Oak Forest,Hardwood,
+2133,2,Crosstimbers Oak Forest and Woodland,Hardwood,
+2134,2,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,
+2135,2,North-Central Interior Dry Oak Forest and Woodland,Hardwood,
+2136,2,Ouachita Montane Oak Forest,Hardwood,
+2137,2,North-Central Interior Maple-Basswood Forest,Hardwood,
+2138,2,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,
+2139,2,Ozark-Ouachita Mesic Hardwood Forest,Hardwood,
+2140,2,Ozark-Ouachita Dry Oak Woodland,Hardwood,
+2141,2,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,Conifer,
+2142,2,West Gulf Coastal Plain Pine-Hardwood Forest,Hardwood-Conifer,
+2143,2,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,Hardwood-Conifer,
+2144,2,North-Central Interior Oak Savanna,Hardwood,
+2145,2,Central Interior Highlands Calcareous Glade and Barrens,Grassland,
+2146,2,Arkansas Valley Prairie and Woodland - Prairie,Grassland,
+2147,2,Arkansas Valley Prairie and Woodland - Woodland,Grassland,
+2148,2,Central Tallgrass Prairie,Grassland,
+2149,2,Southeastern Great Plains Tallgrass Prairie,Grassland,
+2150,2,West Gulf Coastal Plain Northern Calcareous Prairie,Grassland,
+2151,2,West Gulf Coastal Plain Pine-Hardwood Flatwoods,Hardwood-Conifer,
+2152,2,Central Interior and Appalachian Floodplain Systems,Riparian,
+2153,2,Central Interior and Appalachian Floodplain Systems - Large Floodplains,Riparian,
+2154,2,Central Interior and Appalachian Riparian Systems,Riparian,
+2155,2,Gulf and Atlantic Coastal Plain Floodplain Systems,Riparian,
+2156,2,Gulf and Atlantic Coastal Plain Small Stream Riparian Systems,Riparian,
+2157,2,Gulf and Atlantic Coastal Plain Swamp Systems,Riparian,
+2158,2,Central Interior and Appalachian Shrub-Herbaceous Wetland Systems,Riparian,
+2159,2,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,Hardwood,
+2160,2,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland,Hardwood-Conifer,
+2596,2,Hawaii Freshwater Marsh,,
+2597,2,Hawaii Bog,,
+2598,2,Hawaii Lowland Rainforest,,
+2599,2,Hawaii Montane Cloud Forest,,
+2600,2,Hawaii Montane Rainforest,,
+2601,2,Hawaii Wet Cliff and Ridge Crest Shrubland,,
+2602,2,Hawaii Lowland Dry Forest,,
+2603,2,Hawaii Lowland Mesic Forest,,
+2604,2,Hawaii Montane-Subalpine Dry Forest and Woodland - Lava,,
+2605,2,Hawaii Montane-Subalpine Mesic Forest,,
+2606,2,Hawaii Lowland Dry Shrubland,,
+2607,2,Hawaii Lowland Mesic Shrubland,,
+2608,2,Hawaii Lowland Dry Grassland,,
+2609,2,Hawaii Lowland Mesic Grassland,,
+2610,2,Hawaii Montane-Subalpine Dry Shrubland,,
+2611,2,Hawaii Montane-Subalpine Dry Grassland,,
+2612,2,Hawaii Montane-Subalpine Mesic Grassland,,
+2613,2,Hawaii Alpine Dwarf-Shrubland,,
+2614,2,Hawaii Dry Cliff,,
+2615,2,Hawaii Dry Coastal Strand,,
+2616,2,Hawaii Wet-Mesic Coastal Strand,,
+2617,2,Hawaii Subalpine Mesic Shrubland,,
+2700,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2701,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2702,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2703,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2704,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2705,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2706,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2707,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2708,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2709,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2710,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2711,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2712,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2713,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2714,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2715,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2716,2,Inter-Mountain Basins Big Sagebrush Shrubland - Semi-Desert,Shrubland,
+2717,2,Inter-Mountain Basins Big Sagebrush Shrubland - Upland,Shrubland,
+2718,2,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,
+2719,2,Mediterranean California Mixed Evergreen Forest - Coastal,Conifer,
+2720,2,Mediterranean California Mixed Evergreen Forest - Interior,Conifer,
+2721,2,Mediterranean California Mixed Evergreen Forest - Coastal,Conifer,
+2722,2,Mediterranean California Mixed Evergreen Forest - Interior,Conifer,
+2723,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+2724,2,Laurentian-Acadian Northern Pine(-Oak) Forest - Pine Dominated,Hardwood-Conifer,
+2725,2,Laurentian-Acadian Northern Pine(-Oak) Forest,Hardwood-Conifer,
+2726,2,Laurentian-Acadian Northern Pine(-Oak) Forest - Pine Dominated,Hardwood-Conifer,
+7008,1,North Pacific Oak Woodland,Hardwood,Western Oak Woodland and Savanna
+7009,1,Northwestern Great Plains Aspen Forest and Parkland,Hardwood,"Aspen Forest, Woodland, and Parkland"
+7010,1,Northern Rocky Mountain Western Larch Savanna,Conifer,Western Larch Forest and Woodland
+7011,1,Rocky Mountain Aspen Forest and Woodland,Hardwood,"Aspen Forest, Woodland, and Parkland"
+7012,1,Rocky Mountain Bigtooth Maple Ravine Woodland,Hardwood,Bigtooth Maple Woodland
+7013,1,Western Great Plains Dry Bur Oak Forest and Woodland,Hardwood,Bur Oak Woodland and Savanna
+7014,1,Central and Southern California Mixed Evergreen Woodland,Conifer,California Mixed Evergreen Forest and Woodland
+7015,1,California Coastal Redwood Forest,Conifer,Redwood Forest and Woodland
+7016,1,Colorado Plateau Pinyon-Juniper Woodland,Conifer,Pinyon-Juniper Woodland
+7017,1,Columbia Plateau Western Juniper Woodland and Savanna,Conifer,Juniper Woodland and Savanna
+7018,1,East Cascades Mesic Montane Mixed-Conifer Forest and Woodland,Conifer,Douglas-fir-Grand Fir-White Fir Forest and Woodland
+7019,1,Great Basin Pinyon-Juniper Woodland,Conifer,Pinyon-Juniper Woodland
+7020,1,Inter-Mountain Basins Subalpine Limber-Bristlecone Pine Woodland,Conifer,Limber Pine Woodland
+7021,1,Klamath-Siskiyou Lower Montane Serpentine Mixed Conifer Woodland,Conifer,Western Red-cedar-Western Hemlock Forest
+7022,1,Klamath-Siskiyou Upper Montane Serpentine Mixed Conifer Woodland,Conifer,Western Red-cedar-Western Hemlock Forest
+7023,1,Madrean Encinal,Conifer-Hardwood,Juniper-Oak
+7024,1,Madrean Lower Montane Pine-Oak Forest and Woodland,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+7025,1,Madrean Pinyon-Juniper Woodland,Conifer,Pinyon-Juniper Woodland
+7026,1,Madrean Upper Montane Conifer-Oak Forest and Woodland,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+7027,1,Mediterranean California Dry-Mesic Mixed Conifer Forest and Woodland,Conifer,Douglas-fir-Ponderosa Pine-Lodgepole Pine Forest and Woodland
+7028,1,Mediterranean California Mesic Mixed Conifer Forest and Woodland,Conifer,Douglas-fir-Grand Fir-White Fir Forest and Woodland
+7029,1,Mediterranean California Mixed Oak Woodland,Hardwood,Western Oak Woodland and Savanna
+7030,1,Mediterranean California Lower Montane Conifer Forest and Woodland,Conifer,Conifer-Oak Forest and Woodland
+7031,1,California Montane Jeffrey Pine-(Ponderosa Pine) Woodland,Conifer,"Ponderosa Pine Forest, Woodland and Savanna"
+7032,1,Mediterranean California Red Fir Forest,Conifer,Red Fir Forest and Woodland
+7033,1,Mediterranean California Subalpine Woodland,Conifer,Subalpine Woodland and Parkland
+7034,1,Mediterranean California Mesic Serpentine Woodland,Conifer,Chaparral
+7035,1,North Pacific Dry Douglas-fir-(Madrone) Forest and Woodland,Conifer,Douglas-fir Forest and Woodland
+7036,1,North Pacific Seasonal Sitka Spruce Forest,Conifer,Sitka Spruce Forest
+7037,1,North Pacific Maritime Dry-Mesic Douglas-fir-Western Hemlock Forest,Conifer,Douglas-fir-Western Hemlock Forest and Woodland
+7038,1,North Pacific Maritime Mesic Subalpine Parkland,Conifer,Mountain Hemlock Forest and Woodland
+7039,1,North Pacific Maritime Mesic-Wet Douglas-fir-Western Hemlock Forest,Conifer,Douglas-fir-Western Hemlock Forest and Woodland
+7041,1,North Pacific Mountain Hemlock Forest,Conifer,Mountain Hemlock Forest and Woodland
+7042,1,North Pacific Mesic Western Hemlock-Silver Fir Forest,Conifer,Western Hemlock-Silver Fir Forest
+7043,1,Mediterranean California Mixed Evergreen Forest,Conifer,California Mixed Evergreen Forest and Woodland
+7044,1,Northern California Mesic Subalpine Woodland,Conifer,Mountain Hemlock Forest and Woodland
+7045,1,Northern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest,Conifer,Douglas-fir-Ponderosa Pine-Lodgepole Pine Forest and Woodland
+7046,1,Northern Rocky Mountain Subalpine Woodland and Parkland,Conifer,Subalpine Woodland and Parkland
+7047,1,Northern Rocky Mountain Mesic Montane Mixed Conifer Forest,Conifer,Douglas-fir-Grand Fir-White Fir Forest and Woodland
+7048,1,Northwestern Great Plains Highland White Spruce Woodland,Conifer,Spruce-Fir Forest and Woodland
+7049,1,Rocky Mountain Foothill Limber Pine-Juniper Woodland,Conifer,Limber Pine Woodland
+7050,1,Rocky Mountain Lodgepole Pine Forest,Conifer,Lodgepole Pine Forest and Woodland
+7051,1,Southern Rocky Mountain Dry-Mesic Montane Mixed Conifer Forest and Woodland,Conifer,Douglas-fir-Ponderosa Pine-Lodgepole Pine Forest and Woodland
+7052,1,Southern Rocky Mountain Mesic Montane Mixed Conifer Forest and Woodland,Conifer,Douglas-fir-Grand Fir-White Fir Forest and Woodland
+7053,1,Northern Rocky Mountain Ponderosa Pine Woodland and Savanna,Conifer,"Ponderosa Pine Forest, Woodland and Savanna"
+7054,1,Southern Rocky Mountain Ponderosa Pine Woodland,Conifer,"Ponderosa Pine Forest, Woodland and Savanna"
+7055,1,Rocky Mountain Subalpine Dry-Mesic Spruce-Fir Forest and Woodland,Conifer,Spruce-Fir Forest and Woodland
+7056,1,Rocky Mountain Subalpine Mesic-Wet Spruce-Fir Forest and Woodland,Conifer,Spruce-Fir Forest and Woodland
+7057,1,Rocky Mountain Subalpine-Montane Limber-Bristlecone Pine Woodland,Conifer,Limber Pine Woodland
+7058,1,Sierra Nevada Subalpine Lodgepole Pine Forest and Woodland,Conifer,Lodgepole Pine Forest and Woodland
+7059,1,Southern Rocky Mountain Pinyon-Juniper Woodland,Conifer,Pinyon-Juniper Woodland
+7060,1,East Cascades Ponderosa Pine Forest and Woodland,Conifer,Conifer-Oak Forest and Woodland
+7061,1,Inter-Mountain Basins Aspen-Mixed Conifer Forest and Woodland,Conifer-Hardwood,Aspen-Mixed Conifer Forest and Woodland
+7062,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Woodland,Conifer,Mountain Mahogany Woodland and Shrubland
+7063,1,North Pacific Broadleaf Landslide Forest,Hardwood,Red Alder Forest and Woodland
+7064,1,Colorado Plateau Mixed Low Sagebrush Shrubland,Shrubland,Low Sagebrush Shrubland and Steppe
+7065,1,Columbia Plateau Scabland Shrubland,Shrubland,Desert Scrub
+7066,1,Inter-Mountain Basins Mat Saltbush Shrubland,Shrubland,Salt Desert Scrub
+7067,1,Mediterranean California Alpine Fell-Field,Shrubland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7068,1,North Pacific Dry and Mesic Alpine Dwarf-Shrubland,Shrubland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7069,1,North Pacific Dry and Mesic Alpine Fell-field or Meadow,Grassland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7070,1,Rocky Mountain Alpine Dwarf-Shrubland,Shrubland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7071,1,Sierra Nevada Alpine Dwarf-Shrubland,Shrubland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7072,1,Wyoming Basins Dwarf Sagebrush Shrubland and Steppe,Shrubland,Low Sagebrush Shrubland and Steppe
+7073,1,Baja Semi-Desert Coastal Succulent Scrub,Shrubland,Pacific Coastal Scrub
+7074,1,Chihuahuan Creosotebush Desert Scrub,Shrubland,Creosotebush Desert Scrub
+7075,1,Chihuahuan Mixed Salt Desert Scrub,Shrubland,Salt Desert Scrub
+7076,1,Chihuahuan Stabilized Coppice Dune and Sand Flat Scrub,Shrubland,Desert Scrub
+7077,1,Chihuahuan Succulent Desert Scrub,Shrubland,Succulent Desert Scrub
+7078,1,Colorado Plateau Blackbrush-Mormon-tea Shrubland,Shrubland,Blackbrush Shrubland
+7079,1,Great Basin Xeric Mixed Sagebrush Shrubland,Shrubland,Low Sagebrush Shrubland and Steppe
+7080,1,Inter-Mountain Basins Big Sagebrush Shrubland,Shrubland,Big Sagebrush Shrubland and Steppe
+7081,1,Inter-Mountain Basins Mixed Salt Desert Scrub,Shrubland,Salt Desert Scrub
+7082,1,Mojave Mid-Elevation Mixed Desert Scrub,Shrubland,Desert Scrub
+7083,1,North Pacific Avalanche Chute Shrubland,Shrubland,Deciduous Shrubland
+7084,1,North Pacific Montane Shrubland,Shrubland,Deciduous Shrubland
+7085,1,Northwestern Great Plains Shrubland,Shrubland,Big Sagebrush Shrubland and Steppe
+7086,1,Rocky Mountain Lower Montane-Foothill Shrubland,Shrubland,Deciduous Shrubland
+7087,1,Sonora-Mojave Creosotebush-White Bursage Desert Scrub,Shrubland,Creosotebush Desert Scrub
+7088,1,Sonora-Mojave Mixed Salt Desert Scrub,Shrubland,Salt Desert Scrub
+7090,1,Sonoran Granite Outcrop Desert Scrub,Shrubland,Desert Scrub
+7091,1,Sonoran Mid-Elevation Desert Scrub,Shrubland,Desert Scrub
+7092,1,Southern California Coastal Scrub,Shrubland,Pacific Coastal Scrub
+7093,1,Southern Colorado Plateau Sand Shrubland,Shrubland,Sand Shrubland
+7094,1,Western Great Plains Sandhill Steppe,Shrubland,Sand Shrubland
+7096,1,California Maritime Chaparral,Shrubland,Chaparral
+7097,1,California Mesic Chaparral,Shrubland,Chaparral
+7098,1,California Montane Woodland and Chaparral,Shrubland,Chaparral
+7099,1,California Xeric Serpentine Chaparral,Shrubland,Chaparral
+7100,1,Chihuahuan Mixed Desert and Thornscrub,Shrubland,Desert Scrub
+7101,1,Madrean Oriental Chaparral,Shrubland,Chaparral
+7102,1,Colorado Plateau Pinyon-Juniper Shrubland,Shrubland,Pinyon-Juniper Shrubland
+7103,1,Great Basin Semi-Desert Chaparral,Shrubland,Chaparral
+7104,1,Mogollon Chaparral,Shrubland,Chaparral
+7105,1,Northern and Central California Dry-Mesic Chaparral,Shrubland,Chaparral
+7106,1,Northern Rocky Mountain Montane-Foothill Deciduous Shrubland,Shrubland,Deciduous Shrubland
+7107,1,Rocky Mountain Gambel Oak-Mixed Montane Shrubland,Shrubland,Deciduous Shrubland
+7108,1,Sonora-Mojave Semi-Desert Chaparral,Shrubland,Chaparral
+7109,1,Sonoran Paloverde-Mixed Cacti Desert Scrub,Shrubland,Desert Scrub
+7110,1,Southern California Dry-Mesic Chaparral,Shrubland,Chaparral
+7111,1,Western Great Plains Mesquite Shrubland,Shrubland,Mesquite Woodland and Scrub
+7112,1,California Central Valley Mixed Oak Savanna,Hardwood,Western Oak Woodland and Savanna
+7113,1,California Coastal Live Oak Woodland and Savanna,Hardwood,Western Oak Woodland and Savanna
+7114,1,California Lower Montane Foothill Pine Woodland and Savanna,Conifer,Conifer-Oak Forest and Woodland
+7115,1,Inter-Mountain Basins Juniper Savanna,Conifer,Juniper Woodland and Savanna
+7116,1,Madrean Juniper Savanna,Conifer,Juniper Woodland and Savanna
+7117,1,Southern Rocky Mountain Ponderosa Pine Savanna,Conifer,"Ponderosa Pine Forest, Woodland and Savanna"
+7118,1,Southern California Oak Woodland and Savanna,Hardwood,Western Oak Woodland and Savanna
+7119,1,Southern Rocky Mountain Juniper Woodland and Savanna,Conifer,Juniper Woodland and Savanna
+7120,1,Willamette Valley Upland Prairie,Grassland,Western Oak Woodland and Savanna
+7121,1,Apacherian-Chihuahuan Semi-Desert Shrub-Steppe,Shrubland,Grassland and Steppe
+7122,1,Chihuahuan Gypsophilous Grassland and Steppe,Grassland,Grassland and Steppe
+7123,1,Columbia Plateau Steppe and Grassland,Grassland,Grassland and Steppe
+7124,1,Columbia Plateau Low Sagebrush Steppe,Shrubland,Low Sagebrush Shrubland and Steppe
+7125,1,Inter-Mountain Basins Big Sagebrush Steppe,Shrubland,Big Sagebrush Shrubland and Steppe
+7126,1,Inter-Mountain Basins Montane Sagebrush Steppe,Shrubland,Big Sagebrush Shrubland and Steppe
+7127,1,Inter-Mountain Basins Semi-Desert Shrub-Steppe,Shrubland,Desert Scrub
+7128,1,Northern California Coastal Scrub,Shrubland,Pacific Coastal Scrub
+7129,1,California Central Valley and Southern Coastal Grassland,Grassland,Grassland
+7130,1,California Mesic Serpentine Grassland,Grassland,Grassland
+7131,1,California Northern Coastal Grassland,Grassland,Grassland
+7132,1,Central Mixedgrass Prairie Grassland,Grassland,Mixedgrass Prairie
+7133,1,Chihuahuan Sandy Plains Semi-Desert Grassland,Grassland,Grassland
+7134,1,Columbia Basin Foothill and Canyon Dry Grassland,Grassland,Grassland
+7135,1,Inter-Mountain Basins Semi-Desert Grassland,Grassland,Grassland
+7136,1,Mediterranean California Alpine Dry Tundra,Grassland,Dry Tundra
+7137,1,Mediterranean California Subalpine Meadow,Grassland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7138,1,North Pacific Montane Grassland,Grassland,Grassland
+7139,1,Northern Rocky Mountain Lower Montane-Foothill-Valley Grassland,Grassland,Grassland
+7140,1,Northern Rocky Mountain Subalpine-Upper Montane Grassland,Grassland,Grassland
+7141,1,Northwestern Great Plains Mixedgrass Prairie,Grassland,Mixedgrass Prairie
+7142,1,Columbia Basin Palouse Prairie,Grassland,Grassland
+7143,1,Rocky Mountain Alpine Fell-Field,Grassland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7144,1,Rocky Mountain Alpine Turf,Grassland,Dry Tundra
+7145,1,Rocky Mountain Subalpine-Montane Mesic Meadow,Grassland,"Alpine Dwarf-Shrubland, Fell-field and Meadow"
+7146,1,Southern Rocky Mountain Montane-Subalpine Grassland,Grassland,Grassland
+7147,1,Western Great Plains Foothill and Piedmont Grassland,Grassland,Grassland
+7148,1,Western Great Plains Sand Prairie,Grassland,Sand Prairie
+7149,1,Western Great Plains Shortgrass Prairie,Grassland,Shortgrass Prairie
+7150,1,Western Great Plains Tallgrass Prairie,Grassland,Tallgrass Prairie
+7151,1,California Central Valley Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+7152,1,California Central Valley Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+7153,1,Inter-Mountain Basins Greasewood Flat,Shrubland,Greasewood Shrubland
+7156,1,North Pacific Lowland Riparian Forest,Riparian,Red Alder Forest and Woodland
+7157,1,North Pacific Lowland Riparian Shrubland,Riparian,Red Alder Forest and Woodland
+7158,1,North Pacific Montane Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+7159,1,North Pacific Montane Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+7161,1,Northern Rocky Mountain Conifer Swamp,Riparian,Spruce-Fir Forest and Woodland
+7165,1,Northern Rocky Mountain Foothill Conifer Wooded Steppe,Conifer,Douglas-fir Forest and Woodland
+7166,1,Middle Rocky Mountain Montane Douglas-fir Forest and Woodland,Conifer,Douglas-fir Forest and Woodland
+7167,1,Rocky Mountain Poor-Site Lodgepole Pine Forest,Conifer,Lodgepole Pine Forest and Woodland
+7168,1,Northern Rocky Mountain Avalanche Chute Shrubland,Shrubland,Deciduous Shrubland
+7169,1,Northern Rocky Mountain Subalpine Deciduous Shrubland,Shrubland,Deciduous Shrubland
+7170,1,Klamath-Siskiyou Xeromorphic Serpentine Savanna,Conifer,Chaparral
+7171,1,North Pacific Alpine and Subalpine Dry Grassland,Grassland,Grassland
+7172,1,Sierran-Intermontane Desert Western White Pine-White Fir Woodland,Conifer,Douglas-fir-Grand Fir-White Fir Forest and Woodland
+7173,1,North Pacific Wooded Volcanic Flowage,Conifer,Douglas-fir-Ponderosa Pine-Lodgepole Pine Forest and Woodland
+7174,1,North Pacific Dry-Mesic Silver Fir-Western Hemlock-Douglas-fir Forest,Conifer,Western Hemlock-Silver Fir Forest
+7177,1,California Coastal Closed-Cone Conifer Forest and Woodland,Conifer,Conifer-Oak Forest and Woodland
+7178,1,North Pacific Hypermaritime Western Red-cedar-Western Hemlock Forest,Conifer,Western Red-cedar-Western Hemlock Forest
+7179,1,Northwestern Great Plains-Black Hills Ponderosa Pine Woodland and Savanna,Conifer,"Ponderosa Pine Forest, Woodland and Savanna"
+7191,1,Recently Logged-Herb and Grass Cover,Grassland,Transitional Herbacous Vegetation
+7192,1,Recently Logged-Shrub Cover,Shrubland,Transitional Shrub Vegetation
+7193,1,Recently Logged-Tree Cover,Conifer,Transitional Forest Vegetation
+7195,1,Recently Burned-Herb and Grass Cover,Grassland,Transitional Herbacous Vegetation
+7196,1,Recently Burned-Shrub Cover,Shrubland,Transitional Shrub Vegetation
+7197,1,Recently Burned-Tree Cover,Conifer,Transitional Forest Vegetation
+7198,1,Recently Disturbed Other-Herb and Grass Cover,Grassland,Transitional Herbacous Vegetation
+7199,1,Recently Disturbed Other-Shrub Cover,Shrubland,Transitional Shrub Vegetation
+7200,1,Recently Disturbed Other-Tree Cover,Conifer,Transitional Forest Vegetation
+7207,1,Central Mixedgrass Prairie Shrubland,Shrubland,Mixedgrass Prairie
+7234,1,Mediterranean California Mesic Serpentine Chaparral,Shrubland,Chaparral
+7238,1,Laurentian-Acadian Northern Oak Forest,Hardwood,Red Pine-White Pine Forest and Woodland
+7239,1,Laurentian-Acadian Northern Pine-(Oak) Forest,Conifer-Hardwood,Red Pine-White Pine Forest and Woodland
+7240,1,Laurentian-Acadian Hardwood Forest,Hardwood,Pine-Hemlock-Hardwood Forest
+7241,1,Laurentian-Acadian Pine-Hemlock-Hardwood Forest,Conifer-Hardwood,Pine-Hemlock-Hardwood Forest
+7242,1,Laurentian Oak Barrens,Hardwood,Jack Pine Forest
+7243,1,Laurentian Pine-Oak Barrens,Conifer-Hardwood,Jack Pine Forest
+7247,1,Southern Appalachian Grass Bald,Grassland,Glades and Barrens
+7248,1,Northern Atlantic Coastal Plain Dune and Swale Grassland,Grassland,Atlantic Dunes and Grasslands
+7249,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Shrubland,Riparian,Pocosin
+7250,1,Inter-Mountain Basins Curl-leaf Mountain Mahogany Shrubland,Shrubland,Mountain Mahogany Woodland and Shrubland
+7256,1,Apacherian-Chihuahuan Semi-Desert Grassland,Grassland,Grassland and Steppe
+7260,1,Mediterranean California Lower Montane Black Oak Forest and Woodland,Hardwood,Conifer-Oak Forest and Woodland
+7261,1,Mediterranean California Lower Montane Black Oak-Conifer Forest and Woodland,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+7262,1,East Cascades Oak Forest and Woodland,Hardwood,Conifer-Oak Forest and Woodland
+7263,1,East Cascades Oak-Ponderosa Pine Forest and Woodland,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+7264,1,California Lower Montane Blue Oak Woodland and Savanna,Hardwood,Conifer-Oak Forest and Woodland
+7265,1,California Lower Montane Blue Oak-Foothill Pine Woodland and Savanna,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+7268,1,Eastern Great Plains Tallgrass Aspen Shrubland,Shrubland,"Aspen Forest, Woodland, and Parkland"
+7270,1,Klamath-Siskiyou Xeromorphic Serpentine Chaparral,Shrubland,Chaparral
+7272,1,Eastern Boreal Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+7286,1,Paleozoic Plateau Bluff and Talus Herbaceous,Grassland,Black Oak Woodland and Savanna
+7288,1,Acadian-Appalachian Alpine Tundra Meadow,Grassland,Alpine-Subalpine Barrens
+7289,1,Acadian-Appalachian Subalpine Heath-Krummholz,Shrubland,Alpine-Subalpine Barrens
+7290,1,North-Central Oak Barrens Herbaceous,Grassland,Black Oak Woodland and Savanna
+7291,1,Central Interior Highlands Calcareous Glade and Barrens Herbaceous,Grassland,Glades and Barrens
+7292,1,Open Water,Open Water,Open Water
+7295,1,Quarries-Strip Mines-Gravel Pits-Well and Wind Pads,Quarries-Strip Mines-Gravel Pits-Well and Wind Pads,Quarries-Strip Mines-Gravel Pits-Well and Wind Pads
+7296,1,Developed-Low Intensity,Developed-Low Intensity,Developed-Low Intensity
+7297,1,Developed-Medium Intensity,Developed-Medium Intensity,Developed-Medium Intensity
+7298,1,Developed-High Intensity,Developed-High Intensity,Developed-High Intensity
+7299,1,Developed-Roads,Developed-Roads,Developed-Roads
+7301,1,Laurentian-Acadian Sub-boreal Aspen-Birch Forest,Hardwood,Aspen-Birch Forest
+7302,1,Laurentian-Acadian Northern Hardwoods Forest,Hardwood,Yellow Birch-Sugar Maple Forest
+7303,1,Northeastern Interior Dry-Mesic Oak Forest,Hardwood,White Oak-Red Oak-Hickory Forest and Woodland
+7304,1,Ozark-Ouachita Dry-Mesic Oak Forest,Hardwood,White Oak-Red Oak-Hickory Forest and Woodland
+7305,1,Southern Interior Low Plateau Dry-Mesic Oak Forest,Hardwood,Chestnut Oak Forest and Woodland
+7306,1,East Gulf Coastal Plain Northern Loess Plain Oak-Hickory Upland,Hardwood,White Oak-Beech Forest and Woodland
+7307,1,East Gulf Coastal Plain Northern Dry Upland Hardwood Forest,Hardwood,Coastal Plain Oak Forest
+7308,1,Crosstimbers Oak Forest and Woodland,Hardwood,Post Oak Woodland and Savanna
+7309,1,Southern Appalachian Northern Hardwood Forest,Hardwood,Yellow Birch-Sugar Maple Forest
+7310,1,North-Central Interior Dry-Mesic Oak Forest and Woodland,Hardwood,White Oak-Red Oak-Hickory Forest and Woodland
+7311,1,North-Central Interior Dry Oak Forest and Woodland,Hardwood,Black Oak Woodland and Savanna
+7312,1,Ouachita Montane Oak Forest,Hardwood,Montane Oak Forest
+7313,1,North-Central Interior Beech-Maple Forest,Hardwood,Beech-Maple-Basswood Forest
+7314,1,North-Central Interior Maple-Basswood Forest,Hardwood,Beech-Maple-Basswood Forest
+7315,1,Southern Appalachian Oak Forest,Hardwood,Chestnut Oak Forest and Woodland
+7316,1,Southern Piedmont Mesic Forest,Hardwood,White Oak-Beech Forest and Woodland
+7317,1,Allegheny-Cumberland Dry Oak Forest and Woodland,Hardwood,Chestnut Oak Forest and Woodland
+7318,1,Southern and Central Appalachian Cove Forest,Hardwood,Beech-Maple-Basswood Forest
+7320,1,Central and Southern Appalachian Montane Oak Forest,Hardwood,Montane Oak Forest
+7321,1,South-Central Interior Mesophytic Forest,Hardwood,Beech-Maple-Basswood Forest
+7322,1,Crowley's Ridge Mesic Loess Slope Forest,Hardwood,White Oak-Beech Forest and Woodland
+7323,1,West Gulf Coastal Plain Mesic Hardwood Forest,Hardwood,Sweetgum-Water Oak Forest
+7324,1,Northern Atlantic Coastal Plain Hardwood Forest,Hardwood,Coastal Plain Oak Forest
+7325,1,East Gulf Coastal Plain Northern Mesic Hardwood Slope Forest,Hardwood,Sweetgum-Water Oak Forest
+7326,1,South-Central Interior / Upper Coastal Plain Flatwoods,Hardwood,Hardwood Flatwoods
+7327,1,East Gulf Coastal Plain Northern Loess Bluff Forest,Hardwood,White Oak-Beech Forest and Woodland
+7328,1,Southern Coastal Plain Limestone Forest,Hardwood,Sweetgum-Water Oak Forest
+7329,1,East Gulf Coastal Plain Southern Loess Bluff Forest,Hardwood,White Oak-Beech Forest and Woodland
+7330,1,Southern Coastal Plain Dry Upland Hardwood Forest,Hardwood,Coastal Plain Oak Forest
+7331,1,Eastern Great Plains Tallgrass Aspen Forest and Woodland,Hardwood,"Aspen Forest, Woodland, and Parkland"
+7333,1,South Florida Hardwood Hammock,Hardwood,Hammocks
+7334,1,Ozark-Ouachita Mesic Hardwood Forest,Hardwood,Beech-Maple-Basswood Forest
+7335,1,Southern Atlantic Coastal Plain Dry and Dry-Mesic Oak Forest,Hardwood,Coastal Plain Oak Forest
+7336,1,Southwest Florida Maritime Hammock,Hardwood,Hammocks
+7337,1,Southeast Florida Maritime Hammock,Hardwood,Hammocks
+7338,1,Central and South Texas Coastal Fringe Forest and Woodland,Hardwood,Texas Live Oak
+7339,1,West Gulf Coastal Plain Chenier and Upper Texas Coastal Fringe Forest and Woodland,Hardwood,Texas Live Oak
+7340,1,Appalachian Shale Barrens,Conifer-Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7342,1,Piedmont Hardpan Woodland and Forest,Hardwood,Post Oak Woodland and Savanna
+7343,1,Southern Atlantic Coastal Plain Mesic Hardwood Forest,Hardwood,Sweetgum-Water Oak Forest
+7346,1,Atlantic Coastal Plain Fall-line Sandhills Longleaf Pine Woodland,Conifer,Longleaf Pine Woodland
+7347,1,Atlantic Coastal Plain Upland Longleaf Pine Woodland,Conifer,Longleaf Pine Woodland
+7348,1,West Gulf Coastal Plain Upland Longleaf Pine Forest and Woodland,Conifer,Longleaf Pine Woodland
+7349,1,East Gulf Coastal Plain Interior Upland Longleaf Pine Woodland,Conifer,Longleaf Pine Woodland
+7350,1,Central and Southern Appalachian Spruce-Fir Forest,Conifer,Spruce-Fir-Hardwood Forest
+7351,1,Southeastern Interior Longleaf Pine Woodland,Conifer,Longleaf Pine Woodland
+7352,1,Southern Appalachian Montane Pine Forest and Woodland,Conifer,Pitch Pine Woodlands
+7353,1,Southern Appalachian Low-Elevation Pine Forest,Conifer,Virginia Pine Forest
+7354,1,Northeastern Interior Pine Barrens,Conifer,Pitch Pine Woodlands
+7355,1,Northern Atlantic Coastal Plain Pitch Pine Barrens,Conifer,Pitch Pine Woodlands
+7356,1,Florida Longleaf Pine Sandhill,Conifer,Longleaf Pine Woodland
+7357,1,Southern Coastal Plain Mesic Slope Forest,Hardwood,Sweetgum-Water Oak Forest
+7358,1,Bastrop Lost Pines Forest and Woodland,Conifer,Shortleaf Pine Woodland
+7360,1,South Florida Pine Rockland,Conifer,Pine Flatwoods
+7361,1,Central Atlantic Coastal Plain Maritime Forest,Hardwood,Maritime Forest
+7362,1,Laurentian-Acadian Northern Pine Forest,Conifer,Red Pine-White Pine Forest and Woodland
+7363,1,Central Interior Highlands Dry Acidic Glade and Barrens,Conifer-Hardwood,Glades and Barrens
+7364,1,Ozark-Ouachita Dry Oak Woodland,Hardwood,Post Oak Woodland and Savanna
+7366,1,Laurentian-Acadian Pine-Hemlock Forest,Conifer,Pine-Hemlock-Hardwood Forest
+7367,1,Ozark-Ouachita Shortleaf Pine Forest and Woodland,Conifer,Shortleaf Pine-Oak Forest and Woodland
+7368,1,Southern Piedmont Dry Pine Forest,Conifer,Chestnut Oak-Virginia Pine Forest and Woodland
+7369,1,Central Appalachian Dry Pine Forest,Conifer,Chestnut Oak-Virginia Pine Forest and Woodland
+7370,1,Appalachian Hemlock Forest,Conifer,Pine-Hemlock-Hardwood Forest
+7371,1,West Gulf Coastal Plain Pine Forest,Conifer,Shortleaf Pine Woodland
+7372,1,East Gulf Coastal Plain Interior Shortleaf Pine Forest,Conifer,Shortleaf Pine-Oak Forest and Woodland
+7373,1,Acadian Low-Elevation Spruce-Fir Forest,Conifer,Spruce-Fir-Hardwood Forest
+7374,1,Acadian-Appalachian Montane Spruce-Fir Forest,Conifer-Hardwood,Spruce-Fir-Hardwood Forest
+7375,1,Eastern Serpentine Woodland,Conifer-Hardwood,Glades and Barrens
+7376,1,Southern Ridge and Valley / Cumberland Dry Calcareous Forest,Hardwood,White Oak-Red Oak-Hickory Forest and Woodland
+7377,1,Central Appalachian Pine Rocky Woodland,Conifer,Chestnut Oak-Virginia Pine Forest and Woodland
+7378,1,West Gulf Coastal Plain Sandhill Shortleaf Pine Forest and Woodland,Conifer,Shortleaf Pine Woodland
+7379,1,Northern Atlantic Coastal Plain Maritime Forest,Hardwood,Maritime Forest
+7380,1,East Gulf Coastal Plain Maritime Forest,Hardwood,Maritime Forest
+7381,1,Lower Mississippi River Dune Woodland and Forest,Hardwood,Post Oak Woodland and Savanna
+7382,1,Southern Atlantic Coastal Plain Maritime Forest,Hardwood,Maritime Forest
+7383,1,Edwards Plateau Limestone Savanna and Woodland,Hardwood,Post Oak Woodland and Savanna
+7384,1,Mississippi Delta Maritime Forest,Hardwood,Maritime Forest
+7385,1,Great Plains Wooded Draw and Ravine Woodland,Riparian,Western Riparian Woodland and Shrubland
+7386,1,Acadian-Appalachian Alpine Tundra Shrubland,Shrubland,Alpine-Subalpine Barrens
+7387,1,Florida Peninsula Inland Scrub Shrubland,Shrubland,Southern Scrub Oak
+7389,1,Acadian-Appalachian Subalpine Woodland,Conifer,Alpine-Subalpine Barrens
+7390,1,Tamaulipan Mixed Deciduous Thornscrub,Shrubland,Desert Scrub
+7391,1,Tamaulipan Mesquite Upland Woodland,Hardwood,Mesquite Woodland and Scrub
+7392,1,Tamaulipan Calcareous Thornscrub,Shrubland,Desert Scrub
+7393,1,Edwards Plateau Limestone Shrubland,Shrubland,Juniper-Oak
+7394,1,North-Central Interior Oak Savanna,Hardwood,Bur Oak Woodland and Savanna
+7395,1,North-Central Oak Barrens Woodland,Hardwood,Black Oak Woodland and Savanna
+7396,1,Great Plains Wooded Draw and Ravine Shrubland,Riparian,Western Riparian Woodland and Shrubland
+7397,1,Nashville Basin Limestone Glade and Woodland,Conifer-Hardwood,Glades and Barrens
+7398,1,Cumberland Sandstone Glade and Barrens,Conifer-Hardwood,Glades and Barrens
+7399,1,Northern Atlantic Coastal Plain Grassland,Grassland,Heathland and Grassland
+7400,1,Central Appalachian Alkaline Glade and Woodland,Conifer-Hardwood,Glades and Barrens
+7401,1,Central Interior Highlands Calcareous Glade and Barrens Woodland,Conifer-Hardwood,Glades and Barrens
+7403,1,West Gulf Coastal Plain Catahoula Barrens,Conifer-Hardwood,Glades and Barrens
+7405,1,West Gulf Coastal Plain Nepheline Syenite Glade,Conifer-Hardwood,Glades and Barrens
+7406,1,Southern Piedmont Dry Oak Forest,Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7407,1,Laurentian Pine Barrens,Conifer,Jack Pine Forest
+7408,1,Alabama Ketona Glade and Woodland,Conifer-Hardwood,Glades and Barrens
+7409,1,Great Lakes Alvar,Grassland,Great Lakes Alvar
+7410,1,Llano Uplift Acidic Forest and Woodland,Conifer-Hardwood,Glades and Barrens
+7411,1,Great Lakes Wet-Mesic Lakeplain Prairie,Riparian,Inland Marshes and Prairies
+7412,1,North-Central Interior Sand and Gravel Tallgrass Prairie,Grassland,Tallgrass Prairie
+7413,1,Bluegrass Savanna and Woodland Prairie,Grassland,Prairies and Barrens
+7414,1,Southern Appalachian Shrub Bald,Shrubland,Glades and Barrens
+7415,1,Arkansas Valley Prairie,Grassland,Prairies and Barrens
+7416,1,Western Highland Rim Prairie and Barrens,Grassland,Prairies and Barrens
+7417,1,Eastern Highland Rim Prairie and Barrens,Grassland,Prairies and Barrens
+7418,1,Pennyroyal Karst Plain Prairie and Barrens,Grassland,Prairies and Barrens
+7419,1,Southern Ridge and Valley Patch Prairie,Grassland,Prairies and Barrens
+7420,1,Northern Tallgrass Prairie,Grassland,Tallgrass Prairie
+7421,1,Central Tallgrass Prairie,Grassland,Tallgrass Prairie
+7422,1,Texas Blackland Tallgrass Prairie,Grassland,Tallgrass Prairie
+7423,1,Southeastern Great Plains Tallgrass Prairie,Grassland,Tallgrass Prairie
+7424,1,East-Central Texas Plains Xeric Sandyland,Grassland,Prairies and Barrens
+7425,1,Florida Dry Prairie Grassland,Grassland,Prairies and Barrens
+7426,1,Southern Atlantic Coastal Plain Dune and Maritime Grassland,Grassland,Atlantic Dunes and Grasslands
+7428,1,West Gulf Coastal Plain Northern Calcareous Prairie,Grassland,Prairies and Barrens
+7429,1,West Gulf Coastal Plain Southern Calcareous Prairie,Grassland,Prairies and Barrens
+7430,1,Southern Coastal Plain Blackland Prairie,Grassland,Prairies and Barrens
+7431,1,Southwest Florida Dune and Coastal Grassland,Grassland,Atlantic Dunes and Grasslands
+7434,1,Texas-Louisiana Coastal Prairie,Riparian,Inland Marshes and Prairies
+7435,1,East Gulf Coastal Plain Dune and Coastal Grassland,Grassland,Atlantic Dunes and Grasslands
+7436,1,Northern Atlantic Coastal Plain Dune and Swale Shrubland,Shrubland,Atlantic Dunes and Grasslands
+7437,1,Texas Coast Dune and Coastal Grassland,Grassland,Atlantic Dunes and Grasslands
+7438,1,Tamaulipan Savanna Grassland,Grassland,Grassland
+7439,1,Tamaulipan Lomas,Shrubland,Grassland
+7441,1,Bluegrass Savanna and Woodland,Hardwood,Prairies and Barrens
+7442,1,Arkansas Valley Prairie and Woodland,Hardwood,Prairies and Barrens
+7444,1,Eastern Boreal Floodplain Woodland,Riparian,Eastern Floodplain Forests
+7445,1,South Florida Dwarf Cypress Savanna,Riparian,Cypress
+7446,1,South Florida Pine Flatwoods,Conifer,Pine Flatwoods
+7447,1,South Florida Cypress Dome,Riparian,Cypress
+7448,1,Southern Piedmont Dry Oak-(Pine) Forest,Conifer-Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7449,1,Central Atlantic Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,Riparian,Pine Flatwoods
+7450,1,Southern Atlantic Coastal Plain Wet Pine Savanna and Flatwoods,Riparian,Pine Flatwoods
+7451,1,West Gulf Coastal Plain Wet Longleaf Pine Savanna and Flatwoods,Riparian,Pine Flatwoods
+7452,1,Atlantic Coastal Plain Peatland Pocosin and Canebrake Woodland,Riparian,Pocosin
+7453,1,Central Florida Pine Flatwoods,Conifer,Pine Flatwoods
+7454,1,East Gulf Coastal Plain Near-Coast Pine Flatwoods,Conifer,Pine Flatwoods
+7455,1,East Gulf Coastal Plain Southern Loblolly Flatwoods,Conifer,Pine Flatwoods
+7456,1,Northern Atlantic Coastal Plain Pitch Pine Lowland,Riparian,Pitch Pine Woodlands
+7457,1,South-Central Interior / Upper Coastal Plain Wet Flatwoods,Riparian,Hardwood Flatwoods
+7458,1,West Gulf Coastal Plain Pine Flatwoods,Conifer,Pine Flatwoods
+7459,1,Atlantic Coastal Plain Clay-Based Carolina Bay Wetland,Riparian,Cypress
+7460,1,Southern Coastal Plain Nonriverine Cypress Dome,Riparian,Cypress
+7461,1,Southern Coastal Plain Seepage Swamp and Baygall Woodland,Riparian,Atlantic Swamp Forests
+7462,1,West Gulf Coastal Plain Seepage Swamp and Baygall,Riparian,Atlantic Swamp Forests
+7463,1,Central Appalachian Dry Oak Forest,Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7464,1,Acadian Sub-Boreal Spruce Barrens,Conifer,Spruce Flats and Barrens
+7465,1,Acadian Sub-Boreal Spruce Flat,Conifer,Spruce Flats and Barrens
+7466,1,Great Lakes Wooded Dune and Swale,Riparian,Inland Marshes and Prairies
+7467,1,Tamaulipan Floodplain Woodland,Riparian,Eastern Floodplain Forests
+7468,1,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall Woodland,Riparian,Atlantic Swamp Forests
+7469,1,Atlantic Coastal Plain Streamhead Seepage Swamp-Pocosin-Baygall Shrubland,Riparian,Atlantic Swamp Forests
+7471,1,Southwest Florida Coastal Strand Shrubland,Shrubland,Hammocks
+7472,1,Southeast Florida Coastal Strand Shrubland,Shrubland,Hammocks
+7474,1,Tamaulipan Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+7475,1,Tamaulipan Floodplain Herbaceous ,Riparian,Eastern Floodplain Forests
+7476,1,Tamaulipan Riparian Woodland,Riparian,Eastern Small Stream Riparian Forests
+7481,1,Laurentian-Acadian Alkaline Conifer-Hardwood Swamp,Riparian,Atlantic Swamp Forests
+7482,1,Great Plains Prairie Pothole,Riparian,Depressional Wetland
+7483,1,South Florida Everglades Sawgrass Marsh,Riparian,Atlantic Coastal Marsh
+7484,1,South Florida Wet Marl Prairie,Riparian,Inland Marshes and Prairies
+7485,1,East Gulf Coastal Plain Wet Prairie,Riparian,Inland Marshes and Prairies
+7486,1,Texas Saline Coastal Prairie,Riparian,Inland Marshes and Prairies
+7487,1,Texas-Louisiana Coastal Prairie Pondshore,Riparian,Inland Marshes and Prairies
+7488,1,Eastern Great Plains Wet Meadow-Prairie-Marsh,Riparian,Depressional Wetland
+7489,1,Floridian Highlands Freshwater Marsh,Riparian,Inland Marshes and Prairies
+7500,1,South Texas Salt and Brackish Tidal Flat,Sparsely Vegetated,Sparse Vegetation
+7501,1,Southern Atlantic Coastal Plain Nonriverine Swamp and Wet Hardwood Forest,Riparian,Atlantic Swamp Forests
+7502,1,Central Appalachian Dry Oak-Pine Forest,Conifer-Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7503,1,Chihuahuan Loamy Plains Desert Grassland,Grassland,Grassland
+7504,1,Chihuahuan-Sonoran Desert Bottomland and Swale Grassland,Riparian,Depressional Wetland
+7505,1,Ouachita Novaculite Glade and Woodland,Hardwood,Post Oak Woodland and Savanna
+7506,1,West Gulf Coastal Plain Nonriverine Wet Hardwood Flatwoods,Riparian,Hardwood Flatwoods
+7507,1,Ozark-Ouachita Shortleaf Pine-Bluestem Woodland,Conifer,Shortleaf Pine Woodland
+7509,1,Mississippi River Alluvial Plain Dry-Mesic Loess Slope Forest,Hardwood,White Oak-Beech Forest and Woodland
+7510,1,Crowley's Ridge Sand Forest,Conifer-Hardwood,Shortleaf Pine-Oak Forest and Woodland
+7511,1,Appalachian Northern Hardwood Forest,Hardwood,Pine-Hemlock-Hardwood Forest
+7512,1,Appalachian (Hemlock)-Northern Hardwood Forest,Conifer-Hardwood,Pine-Hemlock-Hardwood Forest
+7513,1,Lower Mississippi River Flatwoods,Riparian,Pine Flatwoods
+7514,1,Central Florida Herbaceous Pondshore,Riparian,Depressional Wetland
+7515,1,Southern Coastal Plain Herbaceous Seep and Bog,Riparian,Inland Marshes and Prairies
+7516,1,Atlantic Coastal Plain Sandhill Seep,Riparian,Inland Marshes and Prairies
+7517,1,Paleozoic Plateau Bluff and Talus Woodland,Hardwood,Black Oak Woodland and Savanna
+7518,1,North-Central Interior Wet Flatwoods,Riparian,Hardwood Flatwoods
+7519,1,East-Central Texas Plains Post Oak Savanna and Woodland,Hardwood,Post Oak Woodland and Savanna
+7522,1,Northern Atlantic Coastal Plain Heathland,Shrubland,Heathland and Grassland
+7523,1,Edwards Plateau Dry-Mesic Slope Forest and Woodland,Conifer-Hardwood,Juniper-Oak
+7524,1,Edwards Plateau Mesic Canyon,Hardwood,Bigtooth Maple Woodland
+7525,1,Edwards Plateau Riparian Forest and Woodland,Riparian,Eastern Small Stream Riparian Forests
+7527,1,East Gulf Coastal Plain Interior Oak Forest,Hardwood,Shortleaf Pine-Oak Forest and Woodland
+7545,1,East Gulf Coastal Plain Near-Coast Pine Wet Flatwoods,Riparian,Pine Flatwoods
+7546,1,East Gulf Coastal Plain Interior Shortleaf Pine-Oak Forest,Conifer-Hardwood,Shortleaf Pine-Oak Forest and Woodland
+7547,1,Central Florida Pine Wet Flatwoods,Riparian,Pine Flatwoods
+7548,1,South Florida Pine Wet Flatwoods,Riparian,Pine Flatwoods
+7554,1,Acadian Low-Elevation Hardwood Forest,Hardwood,Spruce-Fir-Hardwood Forest
+7555,1,Acadian Low-Elevation Spruce-Fir-Hardwood Forest,Conifer-Hardwood,Spruce-Fir-Hardwood Forest
+7556,1,Central Appalachian Oak Rocky Woodland,Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7557,1,Central Appalachian Pine-Oak Rocky Woodland,Conifer-Hardwood,Chestnut Oak-Virginia Pine Forest and Woodland
+7560,1,Tamaulipan Mesquite Upland Scrub,Shrubland,Desert Scrub
+7561,1,Llano Uplift Acidic Herbaceous Glade,Grassland,Glades and Barrens
+7562,1,Tamaulipan Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+7563,1,Edwards Plateau Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+7564,1,Edwards Plateau Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+7565,1,Florida Peninsula Inland Scrub Woodland,Conifer,Southern Scrub Oak
+7566,1,Florida Dry Prairie Shruband,Shrubland,Prairies and Barrens
+7567,1,Southern Coastal Plain Blackland Prairie Woodland,Conifer-Hardwood,Prairies and Barrens
+7571,1,Southern Coastal Plain Seepage Swamp and Baygall Shrubland,Riparian,Atlantic Swamp Forests
+7573,1,Tamaulipan Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+7578,1,East Gulf Coastal Plain Wet Savanna,Riparian,Inland Marshes and Prairies
+7582,1,Ozark-Ouachita Oak Forest and Woodland,Hardwood,Shortleaf Pine-Oak Forest and Woodland
+7583,1,Ozark-Ouachita Shortleaf Pine-Oak Forest and Woodland,Conifer-Hardwood,Shortleaf Pine-Oak Forest and Woodland
+7584,1,West Gulf Coastal Plain Hardwood Forest,Hardwood,Shortleaf Pine Woodland
+7585,1,West Gulf Coastal Plain Pine-Hardwood Forest,Conifer-Hardwood,Shortleaf Pine Woodland
+7586,1,West Gulf Coastal Plain Sandhill Oak Forest and Woodland,Hardwood,Shortleaf Pine Woodland
+7587,1,West Gulf Coastal Plain Sandhill Oak and Shortleaf Pine Forest and Woodland,Conifer-Hardwood,Shortleaf Pine Woodland
+7588,1,East Gulf Coastal Plain Southern Hardwood Flatwoods,Hardwood,Pine Flatwoods
+7589,1,East Gulf Coastal Plain Southern Loblolly-Hardwood Flatwoods,Conifer-Hardwood,Pine Flatwoods
+7590,1,West Gulf Coastal Plain Hardwood Flatwoods,Hardwood,Pine Flatwoods
+7591,1,West Gulf Coastal Plain Pine-Hardwood Flatwoods,Conifer-Hardwood,Pine Flatwoods
+7662,1,Temperate Pacific Freshwater Emergent Marsh,Riparian,Freshwater Marsh
+7663,1,North Pacific Shrub Swamp,Shrubland,Shrub Swamp
+7668,1,Temperate Pacific Tidal Salt and Brackish Marsh,Riparian,Tidal Marsh
+7733,1,North Pacific Montane Massive Bedrock-Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+7734,1,North Pacific Alpine and Subalpine Bedrock and Scree,Sparsely Vegetated,Sparse Vegetation
+7735,1,North American Glacier and Ice Field,Snow-Ice,Snow-Ice
+7861,1,Caribbean Coastal Mangrove,Riparian,Mangrove
+7867,1,Caribbean Estuary Mangrove,Riparian,Mangrove
+7900,1,Western Cool Temperate Urban Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7901,1,Western Cool Temperate Urban Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7902,1,Western Cool Temperate Urban Mixed Forest,Developed,Developed-Upland Mixed Forest
+7903,1,Western Cool Temperate Urban Herbaceous,Developed,Developed-Upland Herbaceous
+7904,1,Western Cool Temperate Urban Shrubland,Developed,Developed-Upland Shrubland
+7905,1,Eastern Cool Temperate Urban Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7906,1,Eastern Cool Temperate Urban Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7907,1,Eastern Cool Temperate Urban Mixed Forest,Developed,Developed-Upland Mixed Forest
+7908,1,Eastern Cool Temperate Urban Herbaceous,Developed,Developed-Upland Herbaceous
+7909,1,Eastern Cool Temperate Urban Shrubland,Developed,Developed-Upland Shrubland
+7910,1,Western Warm Temperate Urban Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7911,1,Western Warm Temperate Urban Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7912,1,Western Warm Temperate Urban Mixed Forest,Developed,Developed-Upland Mixed Forest
+7913,1,Western Warm Temperate Urban Herbaceous,Developed,Developed-Upland Herbaceous
+7914,1,Western Warm Temperate Urban Shrubland,Developed,Developed-Upland Shrubland
+7915,1,Eastern Warm Temperate Urban Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7916,1,Eastern Warm Temperate Urban Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7917,1,Eastern Warm Temperate Urban Mixed Forest,Developed,Developed-Upland Mixed Forest
+7918,1,Eastern Warm Temperate Urban Herbaceous,Developed,Developed-Upland Herbaceous
+7919,1,Eastern Warm Temperate Urban Shrubland,Developed,Developed-Upland Shrubland
+7920,1,Western Cool Temperate Developed Ruderal Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7921,1,Western Cool Temperate Developed Ruderal Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7922,1,Western Cool Temperate Developed Ruderal Mixed Forest,Developed,Developed-Upland Mixed Forest
+7923,1,Western Cool Temperate Developed Ruderal Shrubland,Developed,Developed-Upland Shrubland
+7924,1,Western Cool Temperate Developed Ruderal Grassland,Developed,Developed-Upland Herbaceous
+7925,1,Western Warm Temperate Developed Ruderal Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7926,1,Western Warm Temperate Developed Ruderal Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7927,1,Western Warm Temperate Developed Ruderal Mixed Forest,Developed,Developed-Upland Mixed Forest
+7928,1,Western Warm Temperate Developed Ruderal Shrubland,Developed,Developed-Upland Shrubland
+7929,1,Western Warm Temperate Developed Ruderal Grassland,Developed,Developed-Upland Herbaceous
+7930,1,Eastern Cool Temperate Developed Ruderal Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7931,1,Eastern Cool Temperate Developed Ruderal Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7932,1,Eastern Cool Temperate Developed Ruderal Mixed Forest,Developed,Developed-Upland Mixed Forest
+7933,1,Eastern Cool Temperate Developed Ruderal Shrubland,Developed,Developed-Upland Shrubland
+7934,1,Eastern Cool Temperate Developed Ruderal Grassland,Developed,Developed-Upland Herbaceous
+7935,1,Eastern Warm Temperate Developed Ruderal Deciduous Forest,Developed,Developed-Upland Deciduous Forest
+7936,1,Eastern Warm Temperate Developed Ruderal Evergreen Forest,Developed,Developed-Upland Evergreen Forest
+7937,1,Eastern Warm Temperate Developed Ruderal Mixed Forest,Developed,Developed-Upland Mixed Forest
+7938,1,Eastern Warm Temperate Developed Ruderal Shrubland,Developed,Developed-Upland Shrubland
+7939,1,Eastern Warm Temperate Developed Ruderal Grassland,Developed,Developed-Upland Herbaceous
+7940,1,Western Cool Temperate Developed Ruderal Deciduous Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7941,1,Western Cool Temperate Developed Ruderal Evergreen Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7942,1,Western Cool Temperate Developed Ruderal Mixed Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7943,1,Western Cool Temperate Developed Ruderal Shrub Wetland,Developed,Developed-Wetland Shrubland
+7944,1,Western Cool Temperate Developed Ruderal Herbaceous Wetland,Developed,Developed-Wetland Herbaceous
+7945,1,Western Warm Temperate Developed Ruderal Deciduous Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7946,1,Western Warm Temperate Developed Ruderal Evergreen Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7947,1,Western Warm Temperate Developed Ruderal Mixed Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7948,1,Western Warm Temperate Developed Ruderal Shrub Wetland,Developed,Developed-Wetland Shrubland
+7949,1,Western Warm Temperate Developed Ruderal Herbaceous Wetland,Developed,Developed-Wetland Herbaceous
+7950,1,Eastern Cool Temperate Developed Ruderal Deciduous Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7951,1,Eastern Cool Temperate Developed Ruderal Evergreen Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7952,1,Eastern Cool Temperate Developed Ruderal Mixed Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7953,1,Eastern Cool Temperate Developed Ruderal Shrub Wetland,Developed,Developed-Wetland Shrubland
+7954,1,Eastern Cool Temperate Developed Ruderal Herbaceous Wetland,Developed,Developed-Wetland Herbaceous
+7955,1,Eastern Warm Temperate Developed Ruderal Deciduous Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7956,1,Eastern Warm Temperate Developed Ruderal Evergreen Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7957,1,Eastern Warm Temperate Developed Ruderal Mixed Forested Wetland,Developed,Developed-Wetland Mixed Forest
+7958,1,Eastern Warm Temperate Developed Ruderal Shrub Wetland,Developed,Developed-Wetland Shrubland
+7959,1,Eastern Warm Temperate Developed Ruderal Herbaceous Wetland,Developed,Developed-Wetland Herbaceous
+7960,1,Western Cool Temperate Orchard,Agricultural,Agricultural-Orchard
+7961,1,Western Cool Temperate Vineyard,Agricultural,Agricultural-Vineyard
+7962,1,Western Cool Temperate Bush fruit and berries,Agricultural,Agricultural-Bush fruit and berries
+7963,1,Western Cool Temperate Row Crop - Close Grown Crop,Agricultural,Agricultural-Row Crop-Close Grown Crop
+7964,1,Western Cool Temperate Row Crop,Agricultural,Agricultural-Row Crop
+7965,1,Western Cool Temperate Close Grown Crop,Agricultural,Agricultural-Close Grown Crop
+7966,1,Western Cool Temperate Fallow/Idle Cropland,Agricultural,Agricultural-Fallow/Idle Cropland
+7967,1,Western Cool Temperate Pasture and Hayland,Agricultural,Agricultural-Pasture and Hayland
+7968,1,Western Cool Temperate Wheat,Agricultural,Agricultural-Wheat
+7970,1,Eastern Cool Temperate Orchard,Agricultural,Agricultural-Orchard
+7971,1,Eastern Cool Temperate Vineyard,Agricultural,Agricultural-Vineyard
+7972,1,Eastern Cool Temperate Bush fruit and berries,Agricultural,Agricultural-Bush fruit and berries
+7973,1,Eastern Cool Temperate Row Crop - Close Grown Crop,Agricultural,Agricultural-Row Crop-Close Grown Crop
+7974,1,Eastern Cool Temperate Row Crop,Agricultural,Agricultural-Row Crop
+7975,1,Eastern Cool Temperate Close Grown Crop,Agricultural,Agricultural-Close Grown Crop
+7976,1,Eastern Cool Temperate Fallow/Idle Cropland,Agricultural,Agricultural-Fallow/Idle Cropland
+7977,1,Eastern Cool Temperate Pasture and Hayland,Agricultural,Agricultural-Pasture and Hayland
+7978,1,Eastern Cool Temperate Wheat,Agricultural,Agricultural-Wheat
+7979,1,Eastern Cool Temperate Aquaculture,Agricultural,Agricultual-Aquaculture
+7980,1,Western Warm Temperate Orchard,Agricultural,Agricultural-Orchard
+7981,1,Western Warm Temperate Vineyard,Agricultural,Agricultural-Vineyard
+7982,1,Western Warm Temperate Bush fruit and berries,Agricultural,Agricultural-Bush fruit and berries
+7983,1,Western Warm Temperate Row Crop - Close Grown Crop,Agricultural,Agricultural-Row Crop-Close Grown Crop
+7984,1,Western Warm Temperate Row Crop,Agricultural,Agricultural-Row Crop
+7985,1,Western Warm Temperate Close Grown Crop,Agricultural,Agricultural-Close Grown Crop
+7986,1,Western Warm Temperate Fallow/Idle Cropland,Agricultural,Agricultural-Fallow/Idle Cropland
+7987,1,Western Warm Temperate Pasture and Hayland,Agricultural,Agricultural-Pasture and Hayland
+7988,1,Western Warm Temperate Wheat,Agricultural,Agricultural-Wheat
+7989,1,Western Warm Temperate Aquaculture,Agricultural,Agricultual-Aquaculture
+7990,1,Eastern Warm Temperate Orchard,Agricultural,Agricultural-Orchard
+7991,1,Eastern Warm Temperate Vineyard,Agricultural,Agricultural-Vineyard
+7992,1,Eastern Warm Temperate Bush fruit and berries,Agricultural,Agricultural-Bush fruit and berries
+7993,1,Eastern Warm Temperate Row Crop - Close Grown Crop,Agricultural,Agricultural-Row Crop-Close Grown Crop
+7994,1,Eastern Warm Temperate Row Crop,Agricultural,Agricultural-Row Crop
+7995,1,Eastern Warm Temperate Close Grown Crop,Agricultural,Agricultural-Close Grown Crop
+7996,1,Eastern Warm Temperate Fallow/Idle Cropland,Agricultural,Agricultural-Fallow/Idle Cropland
+7997,1,Eastern Warm Temperate Pasture and Hayland,Agricultural,Agricultural-Pasture and Hayland
+7998,1,Eastern Warm Temperate Wheat,Agricultural,Agricultural-Wheat
+7999,1,Eastern Warm Temperate Aquaculture,Agricultural,Agricultual-Aquaculture
+9001,1,Colorado Plateau Mixed Bedrock Canyon and Tableland,Sparsely Vegetated,Sparse Vegetation
+9002,1,Columbia Basin Foothill Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9003,1,Great Basin Foothill and Lower Montane Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9004,1,Inter-Mountain Basins Active and Stabilized Dune,Sparsely Vegetated,Sparse Vegetation
+9005,1,Inter-Mountain Basins Alkaline Closed Depression,Riparian,Depressional Wetland
+9006,1,Inter-Mountain Basins Cliff and Canyon,Sparsely Vegetated,Sparse Vegetation
+9008,1,Inter-Mountain Basins Playa,Sparsely Vegetated,Sparse Vegetation
+9009,1,Inter-Mountain Basins Shale Badland,Sparsely Vegetated,Sparse Vegetation
+9010,1,Inter-Mountain Basins Wash,Sparsely Vegetated,Sparse Vegetation
+9011,1,North American Arid West Emergent Marsh,Riparian,Freshwater Marsh
+9012,1,Northern Rocky Mountain Lower Montane Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9014,1,Northwestern Great Plains Floodplain Forest and Woodland,Riparian,Western Riparian Woodland and Shrubland
+9015,1,Northwestern Great Plains Riparian Forest ,Riparian,Western Riparian Woodland and Shrubland
+9016,1,Rocky Mountain Alpine Bedrock and Scree,Sparsely Vegetated,Sparse Vegetation
+9017,1,Rocky Mountain Alpine-Montane Wet Meadow,Riparian,Western Herbaceous Wetland
+9018,1,Rocky Mountain Cliff Canyon and Massive Bedrock,Sparsely Vegetated,Sparse Vegetation
+9019,1,Rocky Mountain Lower Montane-Foothill Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9021,1,Rocky Mountain Subalpine-Montane Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9022,1,Rocky Mountain Subalpine-Montane Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9023,1,Western Great Plains Badlands,Sparsely Vegetated,Sparse Vegetation
+9024,1,Western Great Plains Cliff and Outcrop,Sparsely Vegetated,Sparse Vegetation
+9025,1,Western Great Plains Closed Depression Wetland,Riparian,Depressional Wetland
+9026,1,Western Great Plains Floodplain Forest and Woodland,Riparian,Western Riparian Woodland and Shrubland
+9027,1,Western Great Plains Open Freshwater Depression Wetland,Riparian,Depressional Wetland
+9028,1,Western Great Plains Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9029,1,Western Great Plains Saline Depression Wetland,Riparian,Depressional Wetland
+9030,1,Columbia Plateau Silver Sagebrush Seasonally Flooded Shrub-Steppe,Riparian,Western Riparian Woodland and Shrubland
+9032,1,Columbia Plateau Ash and Tuff Badland,Sparsely Vegetated,Sparse Vegetation
+9033,1,Inter-Mountain Basins Volcanic Rock and Cinder Land,Sparsely Vegetated,Sparse Vegetation
+9034,1,North American Warm Desert Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9035,1,North American Warm Desert Lower Montane Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9036,1,Acadian Coastal Salt Marsh,Riparian,Atlantic Coastal Marsh
+9037,1,Acadian Estuary Marsh,Riparian,Atlantic Coastal Marsh
+9038,1,Acadian Maritime Bog,Riparian,Peatland Forests
+9039,1,Acadian-Appalachian Conifer Seepage Forest,Riparian,Atlantic Swamp Forests
+9040,1,Acadian-North Atlantic Rocky Coast,Sparsely Vegetated,Sparse Vegetation
+9041,1,Atlantic Coastal Plain Blackwater Stream Floodplain Forest,Riparian,Eastern Small Stream Riparian Forests
+9042,1,Atlantic Coastal Plain Brownwater Stream Floodplain Forest,Riparian,Eastern Small Stream Riparian Forests
+9044,1,Atlantic Coastal Plain Embayed Region Tidal Freshwater Marsh,Riparian,Atlantic Coastal Marsh
+9045,1,Atlantic Coastal Plain Embayed Region Tidal Salt and Brackish Marsh,Riparian,Atlantic Coastal Marsh
+9047,1,Atlantic Coastal Plain Indian River Lagoon Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9048,1,Atlantic Coastal Plain Northern Bog,Riparian,Shrub and Herbaceous Peatlands
+9050,1,Atlantic Coastal Plain Small Blackwater River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9051,1,Atlantic Coastal Plain Small Brownwater River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9055,1,Boreal-Laurentian Bog,Riparian,Peatland Forests
+9056,1,Boreal-Laurentian Conifer Acidic Swamp and Treed Poor Fen,Riparian,Peatland Forests
+9057,1,Boreal-Laurentian-Acadian Acidic Basin Fen,Riparian,Inland Marshes and Prairies
+9059,1,Central Appalachian River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9060,1,Central Appalachian Stream and Riparian Woodland,Riparian,Eastern Small Stream Riparian Forests
+9061,1,Central Atlantic Coastal Plain Sandy Beach,Sparsely Vegetated,Sparse Vegetation
+9062,1,Central California Coast Ranges Cliff and Canyon,Sparsely Vegetated,Sparse Vegetation
+9063,1,Central Florida Wet Prairie and Herbaceous Seep,Riparian,Inland Marshes and Prairies
+9064,1,Central Interior Acidic Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+9065,1,Central Interior Calcareous Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+9066,1,Central Interior Highlands and Appalachian Sinkhole and Depression Pond,Riparian,Atlantic Swamp Forests
+9068,1,Central Texas Coastal Prairie Riparian Forest,Riparian,Eastern Small Stream Riparian Forests
+9069,1,Central Texas Coastal Prairie River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9071,1,Columbia Bottomlands Forest and Woodland,Riparian,Eastern Floodplain Forests
+9073,1,Cumberland Acidic Cliff and Rockhouse,Sparsely Vegetated,Sparse Vegetation
+9075,1,Cumberland Seepage Forest,Riparian,Atlantic Swamp Forests
+9077,1,East Gulf Coastal Plain Depression Pondshore,Riparian,Depressional Wetland
+9080,1,East Gulf Coastal Plain Freshwater Tidal Wooded Swamp,Riparian,Atlantic Swamp Forests
+9082,1,East Gulf Coastal Plain Large River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9083,1,East Gulf Coastal Plain Northern Seepage Swamp,Riparian,Atlantic Swamp Forests
+9085,1,East Gulf Coastal Plain Small Stream and River Floodplain Forest,Riparian,Eastern Small Stream Riparian Forests
+9088,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce Forest,Conifer,Jack Pine Forest
+9089,1,Laurentian-Acadian Sub-boreal Mesic Balsam Fir-Spruce Forest,Conifer,Spruce-Fir-Hardwood Forest
+9091,1,Edwards Plateau Cliff,Sparsely Vegetated,Sparse Vegetation
+9092,1,Edwards Plateau Floodplain Terrace Forest and Woodland,Riparian,Eastern Floodplain Forests
+9094,1,Florida Big Bend Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9095,1,Florida Big Bend Salt and Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9097,1,Florida Panhandle Beach Vegetation,Sparsely Vegetated,Sparse Vegetation
+9098,1,Florida River Floodplain Marsh,Riparian,Inland Marshes and Prairies
+9099,1,Great Lakes Acidic Rocky Shore and Cliff,Sparsely Vegetated,Sparse Vegetation
+9100,1,Great Lakes Alkaline Rocky Shore and Cliff,Sparsely Vegetated,Sparse Vegetation
+9101,1,Great Lakes Dune,Sparsely Vegetated,Sparse Vegetation
+9102,1,Great Lakes Freshwater Estuary and Delta,Riparian,Inland Marshes and Prairies
+9103,1,Gulf Coast Chenier Plain Beach,Sparsely Vegetated,Sparse Vegetation
+9104,1,Gulf Coast Chenier Plain Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9105,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9106,1,High Allegheny Wetland,Riparian,Atlantic Swamp Forests
+9110,1,Klamath-Siskiyou Cliff and Outcrop,Sparsely Vegetated,Sparse Vegetation
+9111,1,Laurentian Acidic Rocky Outcrop Woodland,Conifer,Jack Pine Forest
+9112,1,Laurentian Jack Pine-Red Pine Forest,Conifer,Jack Pine Forest
+9113,1,Laurentian-Acadian Acidic Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+9114,1,Laurentian-Acadian Alkaline Fen,Riparian,Inland Marshes and Prairies
+9115,1,Laurentian-Acadian Calcareous Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+9116,1,Laurentian-Acadian Calcareous Rocky Outcrop Woodland,Conifer-Hardwood,Glades and Barrens
+9117,1,Laurentian-Acadian Floodplain Forest,Riparian,Eastern Floodplain Forests
+9118,1,Laurentian-Acadian Freshwater Marsh,Riparian,Inland Marshes and Prairies
+9119,1,Laurentian-Acadian Lakeshore Beach,Sparsely Vegetated,Sparse Vegetation
+9120,1,Laurentian-Acadian Wet Meadow,Riparian,Wet Meadow
+9121,1,Llano Estacado Caprock Escarpment and Breaks Shrubland and Steppe,Shrubland,Grassland and Steppe
+9122,1,Louisiana Beach,Sparsely Vegetated,Sparse Vegetation
+9125,1,Mediterranean California Alpine Bedrock and Scree,Sparsely Vegetated,Sparse Vegetation
+9129,1,Mediterranean California Foothill and Lower Montane Riparian Woodland,Riparian,Western Riparian Woodland and Shrubland
+9130,1,Mediterranean California Northern Coastal Dune,Sparsely Vegetated,Sparse Vegetation
+9133,1,Mediterranean California Serpentine Foothill and Lower Montane Riparian Woodland and Seep,Riparian,Western Riparian Woodland and Shrubland
+9134,1,Mediterranean California Southern Coastal Dune,Sparsely Vegetated,Sparse Vegetation
+9136,1,Mississippi Delta Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9137,1,Mississippi Delta Salt and Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9138,1,Mississippi River Bottomland Depression,Riparian,Atlantic Swamp Forests
+9139,1,Mississippi River High Floodplain (Bottomland) Forest,Riparian,Eastern Floodplain Forests
+9140,1,Mississippi River Low Floodplain (Bottomland) Forest,Riparian,Eastern Floodplain Forests
+9141,1,Mississippi River Riparian Forest,Riparian,Eastern Floodplain Forests
+9142,1,Mississippi Sound Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9143,1,Mississippi Sound Salt and Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9145,1,North American Warm Desert Active and Stabilized Dune,Sparsely Vegetated,Sparse Vegetation
+9146,1,North American Warm Desert Badland,Sparsely Vegetated,Sparse Vegetation
+9147,1,North American Warm Desert Bedrock Cliff and Outcrop,Sparsely Vegetated,Sparse Vegetation
+9148,1,North American Warm Desert Cienega,Riparian,Western Herbaceous Wetland
+9150,1,North American Warm Desert Pavement,Sparsely Vegetated,Sparse Vegetation
+9151,1,North American Warm Desert Playa,Sparsely Vegetated,Sparse Vegetation
+9152,1,North American Warm Desert Riparian Mesquite Bosque Woodland,Riparian,Western Riparian Woodland and Shrubland
+9153,1,North American Warm Desert Volcanic Rockland,Sparsely Vegetated,Sparse Vegetation
+9154,1,North American Warm Desert Wash Woodland,Riparian,Western Riparian Woodland and Shrubland
+9160,1,North Pacific Active Volcanic Rock and Cinder Land,Sparsely Vegetated,Sparse Vegetation
+9165,1,North Pacific Hardwood-Conifer Swamp,Riparian,Western Red-cedar-Western Hemlock Forest
+9166,1,North Pacific Herbaceous Bald and Bluff,Grassland,Prairies and Barrens
+9167,1,North Pacific Hypermaritime Herbaceous Headland,Grassland,Pacific Coastal Scrub
+9170,1,North Pacific Lowland Mixed Hardwood-Conifer Forest,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+9171,1,North Pacific Maritime Coastal Sand Dune and Strand,Sparsely Vegetated,Sparse Vegetation
+9173,1,North-Central Appalachian Acidic Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+9174,1,North-Central Appalachian Acidic Swamp,Riparian,Atlantic Swamp Forests
+9175,1,North-Central Appalachian Circumneutral Cliff and Talus,Sparsely Vegetated,Sparse Vegetation
+9176,1,North-Central Appalachian Seepage Fen,Riparian,Inland Marshes and Prairies
+9177,1,North-Central Interior and Appalachian Acidic Peatland Woodland,Riparian,Atlantic Swamp Forests
+9178,1,North-Central Interior and Appalachian Rich Swamp,Riparian,Atlantic Swamp Forests
+9179,1,North-Central Interior Floodplain Forest,Riparian,Eastern Floodplain Forests
+9180,1,North-Central Interior Freshwater Marsh,Riparian,Inland Marshes and Prairies
+9181,1,North-Central Interior Quartzite Glade,Conifer-Hardwood,Glades and Barrens
+9182,1,North-Central Interior Shrub Alkaline Fen,Riparian,Inland Marshes and Prairies
+9183,1,North-Central Interior Shrub Swamp,Riparian,Inland Marshes and Prairies
+9184,1,Northeastern Erosional Bluff,Sparsely Vegetated,Sparse Vegetation
+9185,1,Northern Appalachian-Acadian Conifer-Hardwood Acidic Swamp,Riparian,Atlantic Swamp Forests
+9186,1,Northern Appalachian-Acadian Rocky Heath Outcrop Woodland,Conifer,Alpine-Subalpine Barrens
+9187,1,Northern Atlantic Coastal Plain Basin Peat Swamp,Riparian,Atlantic Swamp Forests
+9188,1,Northern Atlantic Coastal Plain Basin Swamp and Wet Hardwood Forest,Riparian,Atlantic Swamp Forests
+9189,1,Northern Atlantic Coastal Plain Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9190,1,Northern Atlantic Coastal Plain Calcareous Ravine,Hardwood,Coastal Plain Oak Forest
+9191,1,Northern Atlantic Coastal Plain Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9192,1,Northern Atlantic Coastal Plain Pond,Riparian,Eastern Small Stream Riparian Forests
+9193,1,Northern Atlantic Coastal Plain Sandy Beach,Sparsely Vegetated,Sparse Vegetation
+9195,1,Northern Atlantic Coastal Plain Riparian and Floodplain Forest,Riparian,Eastern Small Stream Riparian Forests
+9197,1,Northern Atlantic Coastal Plain Tidal Salt Marsh,Riparian,Atlantic Coastal Marsh
+9198,1,Northern Atlantic Coastal Plain Tidal Swamp,Riparian,Atlantic Swamp Forests
+9202,1,Northern Great Lakes Coastal Marsh,Riparian,Inland Marshes and Prairies
+9203,1,Northern Great Lakes Interdunal Wetland,Riparian,Inland Marshes and Prairies
+9207,1,Ozark-Ouachita Riparian Forest,Riparian,Eastern Small Stream Riparian Forests
+9208,1,Panhandle Florida Limestone Glade,Conifer-Hardwood,Glades and Barrens
+9209,1,Piedmont Seepage Wetland,Riparian,Atlantic Swamp Forests
+9210,1,Piedmont Upland Depression Swamp,Riparian,Atlantic Swamp Forests
+9211,1,Red River Large Floodplain Forest,Riparian,Eastern Floodplain Forests
+9213,1,Sierra Nevada Cliff and Canyon,Sparsely Vegetated,Sparse Vegetation
+9216,1,South Florida Bayhead Swamp,Riparian,Atlantic Swamp Forests
+9218,1,South Florida Hydric Hammock,Riparian,Atlantic Swamp Forests
+9220,1,South Florida Pond-apple/Popash Slough,Riparian,Eastern Small Stream Riparian Forests
+9221,1,South Florida Shell Hash Beach,Sparsely Vegetated,Sparse Vegetation
+9222,1,South Florida Slough Gator Hole and Willow Head Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9223,1,South-Central Interior Large Floodplain Forest,Riparian,Eastern Floodplain Forests
+9224,1,South-Central Interior Small Stream and Riparian Forest,Riparian,Eastern Small Stream Riparian Forests
+9226,1,Southeast Florida Beach,Sparsely Vegetated,Sparse Vegetation
+9227,1,Southeastern Coastal Plain Cliff,Sparsely Vegetated,Sparse Vegetation
+9228,1,Southeastern Coastal Plain Interdunal Wetland,Riparian,Inland Marshes and Prairies
+9229,1,Southeastern Coastal Plain Natural Lakeshore,Riparian,Cypress
+9230,1,Southeastern Great Plains Floodplain Forest and Woodland,Riparian,Eastern Floodplain Forests
+9231,1,Southeastern Great Plains Riparian Forest and Woodland,Riparian,Eastern Floodplain Forests
+9232,1,Southern and Central Appalachian Bog and Fen,Riparian,Atlantic Swamp Forests
+9233,1,Southern and Central Appalachian Mafic Glade and Barrens,Conifer-Hardwood,Glades and Barrens
+9234,1,Southern Appalachian Granitic Dome,Sparsely Vegetated,Sparse Vegetation
+9237,1,Southern Appalachian Seepage Wetland,Riparian,Inland Marshes and Prairies
+9239,1,Southern Atlantic Coastal Plain Depression Pondshore,Riparian,Depressional Wetland
+9240,1,Southern Atlantic Coastal Plain Florida Beach,Sparsely Vegetated,Sparse Vegetation
+9241,1,Southern Atlantic Coastal Plain Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9242,1,Southern Atlantic Coastal Plain Large River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9243,1,Southern Atlantic Coastal Plain Salt and Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9244,1,Southern Atlantic Coastal Plain Sea Island Beach,Sparsely Vegetated,Sparse Vegetation
+9245,1,Southern Atlantic Coastal Plain Tidal Wooded Swamp,Riparian,Atlantic Swamp Forests
+9246,1,Southern California Coast Ranges Cliff and Canyon,Sparsely Vegetated,Sparse Vegetation
+9247,1,Southern Coastal Plain Blackwater River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9248,1,Southern Coastal Plain Hydric Hammock,Riparian,Atlantic Swamp Forests
+9249,1,Southern Coastal Plain Nonriverine Basin Swamp,Riparian,Atlantic Swamp Forests
+9250,1,Southern Coastal Plain Oak Dome and Hammock,Riparian,Coastal Plain Oak Forest
+9251,1,Southern Coastal Plain Sinkhole,Sparsely Vegetated,Sparse Vegetation
+9256,1,Southern Piedmont Glade and Barrens,Conifer-Hardwood,Glades and Barrens
+9257,1,Southern Piedmont Granite Flatrock and Outcrop,Sparsely Vegetated,Sparse Vegetation
+9258,1,Southern Piedmont Large Floodplain Forest,Riparian,Eastern Floodplain Forests
+9259,1,Southern Piedmont Small Floodplain and Riparian Forest,Riparian,Eastern Small Stream Riparian Forests
+9260,1,Southern Ridge and Valley Calcareous Glade and Woodland,Conifer-Hardwood,Glades and Barrens
+9261,1,Southern Ridge and Valley Seepage Fen,Riparian,Inland Marshes and Prairies
+9262,1,Southwest Florida Beach,Sparsely Vegetated,Sparse Vegetation
+9265,1,Southwestern Great Plains Canyon,Sparsely Vegetated,Sparse Vegetation
+9266,1,Tamaulipan Closed Depression Wetland Woodland,Riparian,Depressional Wetland
+9268,1,Tamaulipan Ramadero,Riparian,Eastern Small Stream Riparian Forests
+9270,1,Tamaulipan Saline Thornscrub,Shrubland,Desert Scrub
+9272,1,Temperate Pacific Subalpine-Montane Wet Meadow,Riparian,Inland Marshes and Prairies
+9273,1,Texas Coast Beach,Sparsely Vegetated,Sparse Vegetation
+9274,1,Texas Coast Fresh and Oligohaline Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9275,1,Texas Coast Salt and Brackish Tidal Marsh,Riparian,Atlantic Coastal Marsh
+9282,1,West Gulf Coastal Plain Large River Floodplain Forest,Riparian,Eastern Floodplain Forests
+9283,1,West Gulf Coastal Plain Near-Coast Large River Swamp,Riparian,Atlantic Swamp Forests
+9284,1,West Gulf Coastal Plain Small Stream and River Forest,Riparian,Eastern Small Stream Riparian Forests
+9288,1,Northeastern Interior Calcareous Oak Forest,Hardwood,White Oak-Red Oak-Hickory Forest and Woodland
+9289,1,Madrean Mesic Canyon Forest and Woodland,Conifer-Hardwood,Conifer-Oak Forest and Woodland
+9290,1,Southeastern Great Plains Cliff,Sparsely Vegetated,Sparse Vegetation
+9295,1,Laurentian-Acadian Sub-boreal Dry-Mesic Pine-Black Spruce-Hardwood Forest,Conifer-Hardwood,Jack Pine Forest
+9301,1,California Ruderal Grassland and Meadow,Exotic Herbaceous,Introduced Annual and Biennial Forbland
+9302,1,Californian Ruderal Forest,Exotic Tree-Shrub,Introduced Upland Vegetation-Treed
+9307,1,Great Basin & Intermountain Introduced Annual and Biennial Forbland,Exotic Herbaceous,Introduced Annual and Biennial Forbland
+9308,1,Great Basin & Intermountain Introduced Annual Grassland,Exotic Herbaceous,Introduced Annual Grassland
+9309,1,Great Basin & Intermountain Introduced Perennial Grassland and Forbland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9310,1,North American Warm Desert Ruderal & Planted Scrub,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9311,1,North Pacific Maritime Coastal Sand Dune Ruderal Scrub,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9312,1,Northeastern North American Temperate Forest Plantation,Conifer,Managed Tree Plantation
+9314,1,Northern & Central Native Ruderal Flooded & Swamp Forest,Riparian,Ruderal Forest
+9315,1,Northern & Central Native Ruderal Forest,Conifer-Hardwood,Ruderal Forest
+9316,1,Northern & Central Plains Ruderal & Planted Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9317,1,Northern & Central Ruderal Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9318,1,Northern & Central Ruderal Wet Meadow & Marsh,Riparian,Introduced Herbaceous Wetland Vegetation
+9319,1,Southeastern Exotic Ruderal Forest,Exotic Tree-Shrub,Introduced Upland Vegetation-Treed
+9320,1,Southeastern Native Ruderal Flooded & Swamp Forest,Riparian,Introduced Woody Wetland Vegetation
+9321,1,Southeastern Native Ruderal Forest,Conifer-Hardwood,Introduced Upland Vegetation-Treed
+9322,1,Southeastern North American Temperate Forest Plantation,Conifer,Managed Tree Plantation
+9323,1,Southeastern Ruderal Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9324,1,Southeastern Ruderal Wet Meadow & Marsh,Riparian,Introduced Herbaceous Wetland Vegetation
+9325,1,Great Plains Comanchian Ruderal Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9326,1,Southern Vancouverian Lowland Ruderal Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9327,1,Interior West Ruderal Riparian Forest,Riparian,Introduced Riparian Vegetation
+9328,1,Interior Western North American Temperate Ruderal Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9329,1,Western North American Ruderal Wet Shrubland,Riparian,Introduced Woody Wetland Vegetation
+9332,1,Southeastern Exotic Ruderal Flooded & Swamp Forest,Riparian,Introduced Woody Wetland Vegetation
+9336,1,Great Basin & Intermountain Ruderal Shrubland,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9337,1,California Ruderal Scrub,Exotic Tree-Shrub,Introduced Upland Vegetation-Shrub
+9502,1,Columbia Basin Foothill Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9503,1,Great Basin Foothill and Lower Montane Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9504,1,Columbia Basin Foothill Riparian Herbaceous,Riparian,Western Riparian Woodland and Shrubland
+9505,1,Great Basin Foothill and Lower Montane Riparian Herbaceous,Riparian,Western Riparian Woodland and Shrubland
+9512,1,Northern Rocky Mountain Lower Montane Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9513,1,Northwestern Great Plains Floodplain Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9514,1,Northwestern Great Plains Floodplain Herbaceous,Riparian,Western Riparian Woodland and Shrubland
+9515,1,Northwestern Great Plains Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9516,1,Northwestern Great Plains Riparian Herbaceous,Riparian,Western Herbaceous Wetland
+9519,1,Rocky Mountain Lower Montane-Foothill Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9526,1,Western Great Plains Floodplain Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9527,1,Western Great Plains Floodplain Herbaceous,Riparian,Western Riparian Woodland and Shrubland
+9528,1,Western Great Plains Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9529,1,Western Great Plains Riparian Herbaceous,Riparian,Western Herbaceous Wetland
+9533,1,North American Warm Desert Riparian Herbaceous,Riparian,Western Herbaceous Wetland
+9534,1,North American Warm Desert Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9535,1,North American Warm Desert Lower Montane Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9541,1,Atlantic Coastal Plain Blackwater Stream Floodplain Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9542,1,Atlantic Coastal Plain Blackwater Stream Floodplain Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9559,1,Central Appalachian River Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9560,1,Central Appalachian Stream and Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9561,1,Central Appalachian River Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9562,1,Central Appalachian Stream and Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9568,1,Central Texas Coastal Prairie Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9569,1,Central Texas Coastal Prairie River Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9570,1,Central Texas Coastal Prairie Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9571,1,Central Texas Coastal Prairie River Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9582,1,East Gulf Coastal Plain Large River Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9583,1,East Gulf Coastal Plain Large River Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9585,1,East Gulf Coastal Plain Small Stream and River Floodplain Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9586,1,East Gulf Coastal Plain Small Stream and River Floodplain Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9592,1,Edwards Plateau Floodplain Terrace Shrubland,Riparian,Eastern Floodplain Forests
+9593,1,Edwards Plateau Floodplain Terrace Herbaceous,Riparian,Eastern Floodplain Forests
+9601,1,Great Lakes Dune Grassland,Grassland,Atlantic Dunes and Grasslands
+9604,1,Gulf Coast Chenier Plain Fresh and Oligohaline Tidal Marsh Shrubland,Riparian,Atlantic Coastal Marsh
+9605,1,Gulf Coast Chenier Plain Salt and Brackish Tidal Marsh Shrubland,Riparian,Atlantic Coastal Marsh
+9611,1,Laurentian Acidic Rocky Outcrop Shrubland,Shrubland,Jack Pine Forest
+9616,1,Laurentian-Acadian Calcareous Rocky Outcrop Shrubland,Shrubland,Glades and Barrens
+9617,1,Laurentian-Acadian Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9620,1,Laurentian-Acadian Shrub Swamp,Riparian,Inland Marshes and Prairies
+9629,1,Mediterranean California Foothill and Lower Montane Riparian Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9633,1,Mediterranean California Serpentine Foothill and Lower Montane Riparian Shrubland and Seep,Riparian,Western Riparian Woodland and Shrubland
+9639,1,Mississippi River High Floodplain (Bottomland) Shrubland,Riparian,Eastern Floodplain Forests
+9640,1,Mississippi River Low Floodplain (Bottomland) Shrubland,Riparian,Eastern Floodplain Forests
+9641,1,Mississippi River High Floodplain (Bottomland) Herbaceous,Riparian,Eastern Floodplain Forests
+9642,1,Mississippi River Low Floodplain (Bottomland) Herbaceous,Riparian,Eastern Floodplain Forests
+9652,1,North American Warm Desert Riparian Mesquite Bosque Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9654,1,North American Warm Desert Wash Shrubland,Riparian,Western Riparian Woodland and Shrubland
+9667,1,North Pacific Hypermaritime Shrub Headland,Shrubland,Pacific Coastal Scrub
+9677,1,North-Central Interior and Appalachian Acidic Peatland Shrubland,Riparian,Atlantic Swamp Forests
+9679,1,North-Central Interior Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9682,1,North-Central Interior Graminoid Alkaline Fen,Riparian,Inland Marshes and Prairies
+9683,1,North-Central Interior Wet Meadow,Riparian,Inland Marshes and Prairies
+9686,1,Northern Appalachian-Acadian Rocky Heath Outcrop Shrubland,Shrubland,Alpine-Subalpine Barrens
+9695,1,Northern Atlantic Coastal Plain Riparian and Floodplain Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9696,1,Northern Atlantic Coastal Plain Riparian and Floodplain Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9707,1,Ozark-Ouachita Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9708,1,Ozark-Ouachita Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9722,1,South Florida Slough Gator Hole and Willow Head Woodland,Riparian,Eastern Small Stream Riparian Forests
+9723,1,South-Central Interior Large Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9724,1,South-Central Interior Small Stream and Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9725,1,South-Central Interior Large Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9726,1,South-Central Interior Small Stream and Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9730,1,Southeastern Great Plains Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9731,1,Southeastern Great Plains Riparian Shrubland,Riparian,Eastern Floodplain Forests
+9732,1,Southeastern Great Plains Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9733,1,Southeastern Great Plains Riparian Herbaceous,Riparian,Eastern Floodplain Forests
+9742,1,Southern Atlantic Coastal Plain Large River Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9743,1,Southern Atlantic Coastal Plain Large River Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9758,1,Southern Piedmont Large Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9759,1,Southern Piedmont Small Floodplain and Riparian Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9760,1,Southern Piedmont Large Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9761,1,Southern Piedmont Small Floodplain and Riparian Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9766,1,Tamaulipan Closed Depression Wetland Shrubland,Riparian,Depressional Wetland
+9774,1,Texas Coast Fresh and Oligohaline Tidal Marsh Shrubland,Riparian,Atlantic Coastal Marsh
+9775,1,Texas Coast Salt and Brackish Tidal Marsh Shrubland,Riparian,Atlantic Coastal Marsh
+9782,1,West Gulf Coastal Plain Large River Floodplain Shrubland,Riparian,Eastern Floodplain Forests
+9783,1,West Gulf Coastal Plain Large River Floodplain Herbaceous,Riparian,Eastern Floodplain Forests
+9784,1,West Gulf Coastal Plain Small Stream and River Shrubland,Riparian,Eastern Small Stream Riparian Forests
+9785,1,West Gulf Coastal Plain Small Stream and River Herbaceous,Riparian,Eastern Small Stream Riparian Forests
+9810,1,North American Warm Desert Ruderal & Planted Grassland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9811,1,North Pacific Maritime Coastal Sand Dune Ruderal Herb Vegetation,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9816,1,Northern & Central Plains Ruderal & Planted Grassland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9817,1,Northern & Central Ruderal Meadow,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9823,1,Southeastern Ruderal Grassland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9825,1,Great Plains Comanchian Ruderal Grassland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9826,1,Southern Vancouverian Lowland Ruderal Grassland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9827,1,Interior West Ruderal Riparian Scrub,Riparian,Introduced Riparian Vegetation
+9828,1,Interior Western North American Temperate Ruderal Grassland,Exotic Herbaceous,Introduced Perennial Grassland and Forbland
+9829,1,Western North American Ruderal Wet Meadow & Marsh,Riparian,Introduced Herbaceous Wetland Vegetation
+9993,1,West Gulf Coastal Plain Flatwoods Pond,Riparian,Inland Marshes and Prairies
+9994,1,West Gulf Coastal Plain Herbaceous Seep and Bog,Riparian,Inland Marshes and Prairies
diff --git a/packages/rvd/database/rvd_schema.sql b/packages/rvd/database/rvd_schema.sql
index cb06b23f..ec7ef249 100644
--- a/packages/rvd/database/rvd_schema.sql
+++ b/packages/rvd/database/rvd_schema.sql
@@ -3,7 +3,7 @@ CREATE TABLE ReachCodes (ReachCode INTEGER PRIMARY KEY NOT NULL, Name TEXT NOT N
CREATE TABLE ReachVegetation (ReachID INTEGER REFERENCES Reaches ON DELETE CASCADE NOT NULL, VegetationID INTEGER REFERENCES VegetationTypes (VegetationID) NOT NULL, Area REAL NOT NULL CONSTRAINT CHK_ReachVegetation_Area CHECK (Area > 0), CellCount REAL NOT NULL CONSTRAINT CHK_ReachVegetation_CellCount CHECK (CellCount > 0), PRIMARY KEY (ReachID, VegetationID));
CREATE TABLE MetaData (KeyInfo TEXT PRIMARY KEY NOT NULL, ValueInfo TEXT);
CREATE TABLE Watersheds (WatershedID TEXT PRIMARY KEY NOT NULL UNIQUE, Name TEXT NOT NULL, AreaSqKm REAL CONSTRAINT CHK_HUCs_Area CHECK (AreaSqKm >= 0), States TEXT, Metadata TEXT, Notes TEXT);
-CREATE TABLE VegetationTypes (VegetationID INTEGER PRIMARY KEY NOT NULL, EpochID INTEGER REFERENCES Epochs (EpochID) NOT NULL, Name TEXT NOT NULL, Physiognomy TEXT, Notes TEXT);
+CREATE TABLE VegetationTypes (VegetationID INTEGER PRIMARY KEY NOT NULL, EpochID INTEGER REFERENCES Epochs (EpochID) NOT NULL, Name TEXT NOT NULL, Physiognomy TEXT, LandUseGroup TEXT, Notes TEXT);
CREATE TABLE ConversionProportions (
ConversionID INTEGER PRIMARY KEY,
diff --git a/packages/rvd/docs/_includes/sidebar.html b/packages/rvd/docs/_includes/sidebar.html
new file mode 100644
index 00000000..6754ec79
--- /dev/null
+++ b/packages/rvd/docs/_includes/sidebar.html
@@ -0,0 +1,3 @@
+
+
+Back to riverscapes tools
\ No newline at end of file
diff --git a/packages/rvd/rvd/__version__.py b/packages/rvd/rvd/__version__.py
index 3dc1f76b..d3ec452c 100644
--- a/packages/rvd/rvd/__version__.py
+++ b/packages/rvd/rvd/__version__.py
@@ -1 +1 @@
-__version__ = "0.1.0"
+__version__ = "0.2.0"
diff --git a/packages/rvd/rvd/lib/build_vegetationtypes.py b/packages/rvd/rvd/lib/build_vegetationtypes.py
new file mode 100644
index 00000000..0a83707d
--- /dev/null
+++ b/packages/rvd/rvd/lib/build_vegetationtypes.py
@@ -0,0 +1,23 @@
+import csv
+import sys
+
+
+def main(existing_vegetation_csv, historic_vegetation_csv, out_csv):
+
+ with open(out_csv, 'w', newline='') as csvfile:
+ writer = csv.writer(csvfile)
+ writer.writerow(["VegetationID", "EpochID", "Name", "Physiognomy", "LandUseGroup"])
+ with open(historic_vegetation_csv, 'r') as in_csv:
+ reader = csv.DictReader(in_csv)
+ for row in reader:
+ writer.writerow([row["VALUE"], 2, row["BPS_NAME"], row["GROUPVEG"], ""])
+
+ with open(existing_vegetation_csv, 'r') as in_csv:
+ reader = csv.DictReader(in_csv)
+ for row in reader:
+ writer.writerow([row["VALUE"], 1, row["EVT_Name"], row['EVT_PHYS'], row["EVT_GP_N"]])
+
+
+if __name__ == "__main__":
+
+ main(sys.argv[1], sys.argv[2], sys.argv[3])
diff --git a/packages/rvd/rvd/lib/load_vegetation.py b/packages/rvd/rvd/lib/load_vegetation.py
index e2f6e60c..efca8b54 100644
--- a/packages/rvd/rvd/lib/load_vegetation.py
+++ b/packages/rvd/rvd/lib/load_vegetation.py
@@ -1,10 +1,12 @@
-import rasterio
import os
import xml.etree.ElementTree as ET
+import sqlite3
+import rasterio
import numpy as np
+from rscommons.util import safe_makedirs
-def load_vegetation_raster(rasterpath: str, existing=False, output_folder=None):
+def load_vegetation_raster(rasterpath: str, gpkg: str, existing=False, output_folder=None):
"""[summary]
Args:
@@ -97,22 +99,30 @@ def load_vegetation_raster(rasterpath: str, existing=False, output_folder=None):
"Quarries-Strip Mines-Gravel Pits": 1.0}
# Read xml for reclass - arcgis tends to overwrite this file. use csv instead and make sure to ship with rasters
- root = ET.parse(f"{rasterpath}.aux.xml").getroot()
- ifield_value = int(root.findall(".//FieldDefn/[Name='VALUE']")[0].attrib['index'])
- ifield_conversion_source = int(root.findall(".//FieldDefn/[Name='EVT_PHYS']")[0].attrib['index']) if existing else int(root.findall(".//FieldDefn/[Name='GROUPVEG']")[0].attrib['index'])
- ifield_group_name = int(root.findall(".//FieldDefn/[Name='EVT_GP_N']")[0].attrib['index']) if existing else int(root.findall(".//FieldDefn/[Name='GROUPNAME']")[0].attrib['index'])
+ # root = ET.parse(f"{rasterpath}.aux.xml").getroot()
+ # ifield_value = int(root.findall(".//FieldDefn/[Name='VALUE']")[0].attrib['index'])
+ # ifield_conversion_source = int(root.findall(".//FieldDefn/[Name='EVT_PHYS']")[0].attrib['index']) if existing else int(root.findall(".//FieldDefn/[Name='GROUPVEG']")[0].attrib['index'])
+ # ifield_group_name = int(root.findall(".//FieldDefn/[Name='EVT_GP_N']")[0].attrib['index']) if existing else int(root.findall(".//FieldDefn/[Name='GROUPNAME']")[0].attrib['index'])
- # Load reclass values
+ # conversion_values = {int(n[ifield_value].text): conversion_lookup.setdefault(n[ifield_conversion_source].text, 0) for n in root.findall(".//Row")}
+ # riparian_values = {int(n[ifield_value].text): 1 if n[ifield_conversion_source].text == "Riparian" else 0 for n in root.findall(".//Row")}
+ # native_riparian_values = {int(n[ifield_value].text): 1 if n[ifield_conversion_source].text == "Riparian" and not ("Introduced" in n[ifield_group_name].text) else 0 for n in root.findall(".//Row")}
+ # vegetation_values = {int(n[ifield_value].text): 1 if n[ifield_conversion_source].text in vegetated_classes else 0 for n in root.findall(".//Row")}
+ # lui_values = {int(n[ifield_value].text): lui_lookup.setdefault(n[ifield_group_name].text, 0) for n in root.findall(".//Row")} if existing is True else {}
- conversion_values = {int(n[ifield_value].text): conversion_lookup.setdefault(n[ifield_conversion_source].text, 0) for n in root.findall(".//Row")}
- riparian_values = {int(n[ifield_value].text): 1 if n[ifield_conversion_source].text == "Riparian" else 0 for n in root.findall(".//Row")}
- native_riparian_values = {int(n[ifield_value].text): 1 if n[ifield_conversion_source].text == "Riparian" and not ("Introduced" in n[ifield_group_name].text) else 0 for n in root.findall(".//Row")}
- vegetation_values = {int(n[ifield_value].text): 1 if n[ifield_conversion_source].text in vegetated_classes else 0 for n in root.findall(".//Row")}
- lui_values = {int(n[ifield_value].text): lui_lookup.setdefault(n[ifield_group_name].text, 0) for n in root.findall(".//Row")} if existing is True else {}
+ # Load reclass values
+ with sqlite3.connect(gpkg) as conn:
+ c = conn.cursor()
+ valid_values = [v[0] for v in c.execute("SELECT VegetationID FROM VegetationTypes").fetchall()]
+ conversion_values = {row[0]: conversion_lookup.setdefault(row[1], 0) for row in c.execute('SELECT VegetationID, Physiognomy FROM VegetationTypes').fetchall()}
+ riparian_values = {row[0]: 1 if row[1] == "Riparian" else 0 for row in c.execute('SELECT VegetationID, Physiognomy FROM VegetationTypes').fetchall()}
+ native_riparian_values = {row[0]: 1 if row[1] == "Riparian" and not("Introduced" in row[2]) else 0 for row in c.execute('SELECT VegetationID, Physiognomy, LandUseGroup FROM VegetationTypes').fetchall()}
+ vegetation_values = {row[0]: 1 if row[1] in vegetated_classes else 0 for row in c.execute('SELECT VegetationID, Physiognomy FROM VegetationTypes').fetchall()}
+ lui_values = {row[0]: lui_lookup.setdefault(row[1], 0) for row in c.execute('SELECT VegetationID, LandUseGroup FROM VegetationTypes').fetchall()} if existing else {}
# Read array
with rasterio.open(rasterpath) as raster:
- no_data = raster.nodatavals[0]
+ no_data = int(raster.nodatavals[0])
conversion_values[no_data] = 0
riparian_values[no_data] = 0
native_riparian_values[no_data] = 0
@@ -120,8 +130,13 @@ def load_vegetation_raster(rasterpath: str, existing=False, output_folder=None):
if existing:
lui_values[no_data] = 0.0
+ valid_values.append(no_data)
+ raw_array = raster.read(1, masked=True)
+ for value in np.unique(raw_array):
+ if not isinstance(value, type(np.ma.masked)) and value not in valid_values:
+ raise Exception(f"Vegetation raster value {value} not found in current data dictionary")
+
# Reclass array https://stackoverflow.com/questions/16992713/translate-every-element-in-numpy-array-according-to-key
- raw_array = raster.read(1)
riparian_array = np.vectorize(riparian_values.get)(raw_array)
native_riparian_array = np.vectorize(native_riparian_values.get)(raw_array)
vegetated_array = np.vectorize(vegetation_values.get)(raw_array)
@@ -138,6 +153,7 @@ def load_vegetation_raster(rasterpath: str, existing=False, output_folder=None):
if output_folder:
for raster_name, raster_array in output.items():
if raster_array is not None:
+ safe_makedirs(output_folder)
with rasterio.open(os.path.join(output_folder, f"{'EXISTING' if existing else 'HISTORIC'}_{raster_name}.tiff"),
'w',
driver='GTiff',
diff --git a/packages/rvd/rvd/rvd.py b/packages/rvd/rvd/rvd.py
index 0e2d8b48..81bba52a 100755
--- a/packages/rvd/rvd/rvd.py
+++ b/packages/rvd/rvd/rvd.py
@@ -23,16 +23,14 @@
import numpy as np
from rscommons.database import dict_factory
-from rscommons.util import safe_makedirs, safe_remove_file
+from rscommons.util import safe_makedirs
from rscommons import Logger, RSProject, RSLayer, ModelConfig, dotenv, initGDALOGRErrors, ProgressBar
from rscommons import GeopackageLayer, VectorBase, get_shp_or_gpkg
-from rscommons.build_network import build_network_NEW
-from rscommons.database import create_database_NEW
-from rscommons.reach_attributes import write_attributes, write_reach_attributes
+from rscommons.build_network import build_network
+from rscommons.database import create_database
from rscommons.vector_ops import get_geometry_unary_union, copy_feature_class
from rscommons.thiessen.vor import NARVoronoi
from rscommons.thiessen.shapes import centerline_points, clip_polygons
-from rscommons.vector_ops import write_attributes
from rvd.rvd_report import RVDReport
from rvd.lib.load_vegetation import load_vegetation_raster
@@ -154,7 +152,7 @@ def rvd(huc: int, flowlines_orig: Path, existing_veg_orig: Path, historic_veg_or
}
# Execute the SQL to create the lookup tables in the RVD geopackage SQLite database
- watershed_name = create_database_NEW(huc, outputs_gpkg_path, metadata, cfg.OUTPUT_EPSG, os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'database', 'rvd_schema.sql'))
+ watershed_name = create_database(huc, outputs_gpkg_path, metadata, cfg.OUTPUT_EPSG, os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'database', 'rvd_schema.sql'))
project.add_metadata({'Watershed': watershed_name})
geom_vbottom = get_geometry_unary_union(vbottom_path, spatial_ref=raster_srs)
@@ -185,7 +183,7 @@ def rvd(huc: int, flowlines_orig: Path, existing_veg_orig: Path, historic_veg_or
# Filter the flow lines to just the required features and then segment to desired length
# TODO: These are brat methods that need to be refactored to use VectorBase layers
cleaned_path = os.path.join(outputs_gpkg_path, LayerTypes['OUTPUTS'].sub_layers['RVD'].rel_path)
- build_network_NEW(flowlines_path, flowareas_path, cleaned_path, waterbodies_path=waterbodies_path, epsg=cfg.OUTPUT_EPSG, reach_codes=reach_codes)
+ build_network(flowlines_path, flowareas_path, cleaned_path, waterbodies_path=waterbodies_path, epsg=cfg.OUTPUT_EPSG, reach_codes=reach_codes)
# Generate Voroni polygons
log.info("Calculating Voronoi Polygons...")
@@ -222,8 +220,8 @@ def rvd(huc: int, flowlines_orig: Path, existing_veg_orig: Path, historic_veg_or
# Load Vegetation Rasters
log.info(f"Loading Existing and Historic Vegetation Rasters")
vegetation = {}
- vegetation["EXISTING"] = load_vegetation_raster(prj_existing_path, True, output_folder=os.path.join(output_folder, 'Intermediates'))
- vegetation["HISTORIC"] = load_vegetation_raster(prj_historic_path, False, output_folder=os.path.join(output_folder, 'Intermediates'))
+ vegetation["EXISTING"] = load_vegetation_raster(prj_existing_path, outputs_gpkg_path, True, output_folder=os.path.join(output_folder, 'Intermediates'))
+ vegetation["HISTORIC"] = load_vegetation_raster(prj_historic_path, outputs_gpkg_path, False, output_folder=os.path.join(output_folder, 'Intermediates'))
if vegetation["EXISTING"]["RAW"].shape != vegetation["HISTORIC"]["RAW"].shape:
raise Exception('Vegetation raster shapes are not equal Existing={} Historic={}. Cannot continue'.format(vegetation["EXISTING"]["RAW"].shape, vegetation["HISTORIC"]["RAW"].shape))
@@ -321,7 +319,7 @@ def rvd(huc: int, flowlines_orig: Path, existing_veg_orig: Path, historic_veg_or
log.info('Insert values to GPKG tables')
# TODO move this to write_attirubtes method
- with get_shp_or_gpkg(flowlines_orig, write=True) as in_layer:
+ with get_shp_or_gpkg(outputs_gpkg_path, layer_name='Reaches', write=True) as in_layer:
# Create each field and store the name and index in a list of tuples
field_indices = [(field, in_layer.create_field(field, field_type)) for field, field_type in {
"FromConifer": ogr.OFTReal,
@@ -378,15 +376,30 @@ def rvd(huc: int, flowlines_orig: Path, existing_veg_orig: Path, historic_veg_or
with sqlite3.connect(outputs_gpkg_path) as conn:
cursor = conn.cursor()
+ errs = 0
for reachid, epochs in unique_vegetation_counts.items():
for epoch in epochs.values():
insert_values = [[reachid, int(vegetationid), float(count * cell_area), int(count)] for vegetationid, count in zip(epoch[0], epoch[1]) if vegetationid != 0]
- cursor.executemany('''INSERT INTO ReachVegetation (
- ReachID,
- VegetationID,
- Area,
- CellCount)
- VALUES (?,?,?,?)''', insert_values)
+ try:
+ cursor.executemany('''INSERT INTO ReachVegetation (
+ ReachID,
+ VegetationID,
+ Area,
+ CellCount)
+ VALUES (?,?,?,?)''', insert_values)
+ # Sqlite can't report on SQL errors so we have to print good log messages to help intuit what the problem is
+ except sqlite3.IntegrityError as err:
+ # THis is likely a constraint error.
+ errstr = "Integrity Error when inserting records: ReachID: {} VegetationIDs: {}".format(reachid, str(list(epoch[0])))
+ log.error(errstr)
+ errs += 1
+ except sqlite3.Error as err:
+ # This is any other kind of error
+ errstr = "SQL Error when inserting records: ReachID: {} VegetationIDs: {} ERROR: {}".format(reachid, str(list(epoch[0])), str(err))
+ log.error(errstr)
+ errs += 1
+ if errs > 0:
+ raise Exception('Errors were found inserting records into the database. Cannot continue.')
conn.commit()
# Add intermediates and the report to the XML
@@ -395,7 +408,7 @@ def rvd(huc: int, flowlines_orig: Path, existing_veg_orig: Path, historic_veg_or
# Add the report to the XML
report_path = os.path.join(project.project_dir, LayerTypes['REPORT'].rel_path)
- project.add_project_vector(proj_nodes['Outputs'], LayerTypes['REPORT'], replace=True)
+ project.add_report(proj_nodes['Outputs'], LayerTypes['REPORT'], replace=True)
report = RVDReport(report_path, project, output_folder)
report.write()
@@ -507,6 +520,7 @@ def create_project(huc, output_dir):
project.add_metadata({
'HUC{}'.format(len(huc)): str(huc),
+ 'HUC': str(huc),
'RVDVersion': cfg.version,
'RVDTimestamp': str(int(time.time()))
})
diff --git a/packages/vbet/.vscode/launch.json b/packages/vbet/.vscode/launch.json
index b63b43ea..5f731716 100644
--- a/packages/vbet/.vscode/launch.json
+++ b/packages/vbet/.vscode/launch.json
@@ -9,7 +9,8 @@
"id": "HUC",
"description": "What HUC?",
// "default": "17070202" // North Fork John Day
- "default": "17060304" // Really small HUC
+ "default": "17060304", // Really small HUC
+ // "default": "10190002" // VBET TAKING TOO LONG
// "default": "17060103" // Asotin
}
],
@@ -31,6 +32,22 @@
"--verbose"
]
},
+ {
+ "name": "Run Floodplain Connectivity (BETA)",
+ "type": "python",
+ "request": "launch",
+ "module": "vbet.floodplain_connectivity",
+ "console": "integratedTerminal",
+ "args": [
+ "{env:DATA_ROOT}/rs_context/${input:HUC}/hydrology/hydrology.gpkg/network_intersected_300m",
+ "{env:DATA_ROOT}/vbet/${input:HUC}/outputs/vbet.gpkg/vbet_50",
+ "{env:DATA_ROOT}/rs_context/${input:HUC}/transportation/roads.shp",
+ "{env:DATA_ROOT}/rs_context/${input:HUC}/transportation/railways.shp",
+ "{env:DATA_ROOT}/vbet/${input:HUC}/connectivity",
+ "--debug_gpkg", "{env:DATA_ROOT}/vbet/${input:HUC}/connectivity/debug.gpkg",
+ "--verbose"
+ ]
+ },
{
"name": "Write report",
"type": "python",
diff --git a/packages/vbet/database/data/inputs.sql b/packages/vbet/database/data/inputs.sql
new file mode 100644
index 00000000..7284cc9b
--- /dev/null
+++ b/packages/vbet/database/data/inputs.sql
@@ -0,0 +1,4 @@
+INSERT INTO inputs (input_id, name, description) VALUES (1, 'Slope', 'slope (degrees)');
+INSERT INTO inputs (input_id, name, description) VALUES (2, 'HAND', 'Height above nearest drainage (metres)');
+INSERT INTO inputs (input_id, name, description) VALUES (3, 'Channel', 'Distance from flow network (metres)');
+INSERT INTO inputs (input_id, name, description) VALUES (4, 'Flow Areas', 'Distance from flow areas (metres)');
\ No newline at end of file
diff --git a/packages/vbet/database/data/intersect/intersect/inflections.sql b/packages/vbet/database/data/intersect/intersect/inflections.sql
new file mode 100644
index 00000000..6ee04bb1
--- /dev/null
+++ b/packages/vbet/database/data/intersect/intersect/inflections.sql
@@ -0,0 +1,10 @@
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (1, 0, 1);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (1, 12, 0);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (2, 0, 1);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (2, 50, 0);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (3, 0, 1);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (3, 10, 0.5);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (3, 30, 0);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (4, 0, 1);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (4, 50, 0.5);
+INSERT INTO inflections (transform_id, input_value, output_value) VALUES (4, 100, 0);
\ No newline at end of file
diff --git a/packages/vbet/database/data/intersect/transforms.sql b/packages/vbet/database/data/intersect/transforms.sql
new file mode 100644
index 00000000..7ae174fa
--- /dev/null
+++ b/packages/vbet/database/data/intersect/transforms.sql
@@ -0,0 +1,4 @@
+INSERT INTO transforms (transform_id, type_id, input_id, name, description) VALUES (1, 1, 'Default Slope', NULL);
+INSERT INTO transforms (transform_id, type_id, input_id, name, description) VALUES (2, 2, 'Default HAND', NULL);
+INSERT INTO transforms (transform_id, type_id, input_id, name, description) VALUES (3, 3, 'Default Channel', NULL);
+INSERT INTO transforms (transform_id, type_id, input_id, name, description) VALUES (4, 4, 'Default Flow Areas', NULL);
diff --git a/packages/vbet/database/data/transform_types.sql b/packages/vbet/database/data/transform_types.sql
new file mode 100644
index 00000000..94d20efc
--- /dev/null
+++ b/packages/vbet/database/data/transform_types.sql
@@ -0,0 +1 @@
+INSERT INTO transform_types (type_id, name, description) VALUES (1, 'Inflection Points', 'List of x,y inflection points.');
\ No newline at end of file
diff --git a/packages/vbet/database/vbet_schema.sql b/packages/vbet/database/vbet_schema.sql
new file mode 100644
index 00000000..7a9b131a
--- /dev/null
+++ b/packages/vbet/database/vbet_schema.sql
@@ -0,0 +1,40 @@
+CREATE TABLE inputs (
+ input_id INTEGER PRIMARY KEY UNIQUE NOT NULL,
+ name TEXT UNIQUE NOT NULL,
+ description TEXT,
+ metadata TEXT
+);
+
+CREATE TABLE transform_types (
+ type_id INTEGER PRIMARY KEY UNIQUE NOT NULL,
+ name TEXT UNIQUE NOT NULL,
+ description TEXT,
+ metadata TEXT
+);
+
+CREATE TABLE transforms (
+ transform_id INTEGER PRIMARY KEY UNIQUE NOT NULL,
+ type_id INTEGER NOT NULL,
+ input_id INTEGER NOT NULL,
+ name TEXT UNIQUE NOT NULL,
+ description TEXT,
+ metadata TEXT,
+
+ CONSTRAINT fk_transforms_type_id FOREIGN KEY (type_id) REFERENCES transform_types(type_id),
+ CONSTRAINT fk_transforms_input_id FOREIGN KEY (input_id) REFERENCES inputs(input_id) ON DELETE CASCADE
+);
+
+CREATE TABLE inflections (
+ inflection_id INTEGER PRIMARY KEY UNIQUE NOT NULL,
+ transform_id INTEGER NOT NULL,
+ input_value REAL NOT NULL,
+ output_value REAL NOT NULL,
+
+ CONSTRAINT fk_inflections_transform_id FOREIGN KEY (transform_id) REFERENCES transforms(transform_id) ON DELETE CASCADE,
+ CONSTRAINT ck_inflections_output_value CHECK (output_value >= 0 AND output_value <= 1)
+);
+
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('inputs', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('transform_types', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('transforms', 'attributes');
+INSERT INTO gpkg_contents (table_name, data_type) VALUES ('inflections', 'attributes');
diff --git a/packages/vbet/docs/_config.yml b/packages/vbet/docs/_config.yml
index 46807c9d..94a2c2de 100644
--- a/packages/vbet/docs/_config.yml
+++ b/packages/vbet/docs/_config.yml
@@ -27,6 +27,7 @@ defaults:
# Files/Folders to exclude from publishing
exclude:
+ - vendor
- src
- LICENSE
- README.md
diff --git a/packages/vbet/docs/_includes/sidebar.html b/packages/vbet/docs/_includes/sidebar.html
index 5fae5132..6754ec79 100644
--- a/packages/vbet/docs/_includes/sidebar.html
+++ b/packages/vbet/docs/_includes/sidebar.html
@@ -1 +1,3 @@
-
\ No newline at end of file
+
+
+Back to riverscapes tools
\ No newline at end of file
diff --git a/packages/vbet/vbet/__version__.py b/packages/vbet/vbet/__version__.py
index 3dc1f76b..493f7415 100644
--- a/packages/vbet/vbet/__version__.py
+++ b/packages/vbet/vbet/__version__.py
@@ -1 +1 @@
-__version__ = "0.1.0"
+__version__ = "0.3.0"
diff --git a/packages/vbet/vbet/floodplain_connectivity.py b/packages/vbet/vbet/floodplain_connectivity.py
new file mode 100644
index 00000000..4c124b2b
--- /dev/null
+++ b/packages/vbet/vbet/floodplain_connectivity.py
@@ -0,0 +1,252 @@
+# Name: Floodplain Connectivity
+#
+# Purpose: Identify sections of VBET polygon that are connected/disconnected
+# to floodplain.
+#
+# Author: Kelly Whitehead
+#
+# Date: December 08, 2020
+# -------------------------------------------------------------------------------
+import os
+import sys
+from typing import List
+import argparse
+import traceback
+from osgeo import ogr
+from shapely.geometry import MultiPolygon, MultiLineString, LineString, Point, MultiPoint, Polygon
+from shapely.ops import polygonize, unary_union
+
+from rscommons import ProgressBar, Logger, dotenv, initGDALOGRErrors, GeopackageLayer
+from rscommons.util import safe_makedirs
+from rscommons.vector_ops import get_geometry_unary_union, load_geometries
+
+
+Path = str
+
+initGDALOGRErrors()
+
+
+def floodplain_connectivity(vbet_network: Path, vbet_polygon: Path, roads: Path, railroads: Path, output_dir: Path, debug_gpkg: Path = None):
+ """[summary]
+
+ Args:
+ vbet_network (Path): Filtered Flowline network used to generate VBET. Final selection is based on this intersection.
+ vbet_polygon (Path): Vbet polygons with clipped NHD Catchments
+ roads (Path): Road network
+ railroads (Path): railroad network
+ out_polygon (Path): Output path and layer name for floodplain polygons
+ debug_gpkg (Path, optional): geopackage for saving debug layers (may substantially increase processing time). Defaults to None.
+ """
+
+ log = Logger('Floodplain Connectivity')
+ log.info("Starting Floodplain Connectivity Script")
+
+ out_polygon = os.path.join(output_dir, 'fconn.gpkg/outputs')
+
+ # Prepare vbet and catchments
+ geom_vbet = get_geometry_unary_union(vbet_polygon)
+ geoms_raw_vbet = list(load_geometries(vbet_polygon, None).values())
+ listgeoms = []
+ for geom in geoms_raw_vbet:
+ if geom.geom_type == "MultiPolygon":
+ for g in geom:
+ listgeoms.append(g)
+ else:
+ listgeoms.append(geom)
+ geoms_vbet = MultiPolygon(listgeoms)
+
+ # Clip Transportation Network by VBET
+ log.info("Merging Transportation Networks")
+ # merge_feature_classes([roads, railroads], geom_vbet, os.path.join(debug_gpkg, "Transportation")) TODO: error when calling this method
+ geom_roads = get_geometry_unary_union(roads)
+ geom_railroads = get_geometry_unary_union(railroads)
+ geom_transportation = geom_roads.union(geom_railroads) if geom_railroads is not None else geom_roads
+ log.info("Clipping Transportation Network by VBET")
+ geom_transportation_clipped = geom_vbet.intersection(geom_transportation)
+ if debug_gpkg:
+ quicksave(debug_gpkg, "Clipped_Transportation", geom_transportation_clipped, ogr.wkbLineString)
+
+ # Split Valley Edges at transportation intersections
+ log.info("Splitting Valley Edges at transportation network intersections")
+ geom_vbet_edges = MultiLineString([geom.exterior for geom in geoms_vbet] + [g for geom in geoms_vbet for g in geom.interiors])
+ geom_vbet_interior_pts = MultiPoint([Polygon(g).representative_point() for geom in geom_vbet for g in geom.interiors])
+
+ if debug_gpkg:
+ quicksave(debug_gpkg, "Valley_Edges_Raw", geom_vbet_edges, ogr.wkbLineString)
+
+ vbet_splitpoints = []
+ vbet_splitlines = []
+ counter = 0
+ for geom_edge in geom_vbet_edges:
+ counter += 1
+ log.info('Splitting edge features {}/{}'.format(counter, len(geom_vbet_edges)))
+ if geom_edge.is_valid:
+ if not geom_edge.intersects(geom_transportation):
+ vbet_splitlines = vbet_splitlines + [geom_edge]
+ continue
+ pts = geom_transportation.intersection(geom_edge)
+ if pts.is_empty:
+ vbet_splitlines = vbet_splitlines + [geom_edge]
+ continue
+ if isinstance(pts, Point):
+ pts = [pts]
+ geom_boundaries = [geom_edge]
+
+ progbar = ProgressBar(len(geom_boundaries), 50, "Processing")
+ counter = 0
+ for pt in pts:
+ # TODO: I tried to break this out but I'm not sure
+ new_boundaries = []
+ for line in geom_boundaries:
+ if line is not None:
+ split_line = line_splitter(line, pt)
+ progbar.total += len(split_line)
+ for new_line in split_line:
+ counter += 1
+ progbar.update(counter)
+ if new_line is not None:
+ new_boundaries.append(new_line)
+ geom_boundaries = new_boundaries
+ # TODO: Not sure this is having the intended effect
+ # geom_boundaries = [new_line for line in geom_boundaries if line is not None for new_line in line_splitter(line, pt) if new_line is not None]
+ progbar.finish()
+ vbet_splitlines = vbet_splitlines + geom_boundaries
+ vbet_splitpoints = vbet_splitpoints + [pt for pt in pts]
+
+ if debug_gpkg:
+ quicksave(debug_gpkg, "Split_Points", vbet_splitpoints, ogr.wkbPoint)
+ quicksave(debug_gpkg, "Valley_Edges_Split", vbet_splitlines, ogr.wkbLineString)
+
+ # Generate Polygons from lines
+ log.info("Generating Floodplain Polygons")
+ geom_lines = unary_union(vbet_splitlines + [geom_tc for geom_tc in geom_transportation_clipped])
+ geoms_areas = [geom for geom in polygonize(geom_lines) if not any(geom.contains(pt) for pt in geom_vbet_interior_pts)]
+
+ if debug_gpkg:
+ quicksave(debug_gpkg, "Split_Polygons", geoms_areas, ogr.wkbPolygon)
+
+ # Select Polygons by flowline intersection
+ log.info("Selecting connected floodplains")
+ geom_vbet_network = get_geometry_unary_union(vbet_network)
+ geoms_connected = []
+ geoms_disconnected = []
+ progbar = ProgressBar(len(geoms_areas), 50, f"Running polygon selection")
+ counter = 0
+ for geom in geoms_areas:
+ progbar.update(counter)
+ counter += 1
+ if geom_vbet_network.intersects(geom):
+ geoms_connected.append(geom)
+ else:
+ geoms_disconnected.append(geom)
+
+ log.info("Union connected floodplains")
+ geoms_connected_output = [geom for geom in list(unary_union(geoms_connected))]
+ geoms_disconnected_output = [geom for geom in list(unary_union(geoms_disconnected))]
+
+ # Save Outputs
+ log.info("Save Floodplain Output")
+ with GeopackageLayer(out_polygon, write=True) as out_lyr:
+ out_lyr.create_layer(ogr.wkbPolygon, epsg=4326)
+ out_lyr.create_field("Connected", ogr.OFTInteger)
+ progbar = ProgressBar(len(geoms_connected_output) + len(geoms_disconnected_output), 50, f"saving {out_lyr.ogr_layer_name} features")
+ counter = 0
+ for shape in geoms_connected_output:
+ progbar.update(counter)
+ counter += 1
+ out_lyr.create_feature(shape, attributes={"Connected": 1})
+ for shape in geoms_disconnected_output:
+ progbar.update(counter)
+ counter += 1
+ out_lyr.create_feature(shape, attributes={"Connected": 0})
+
+
+def line_splitter(line: LineString, pt: Point) -> List[LineString]:
+ """Split a shapley line at a point. Return list of LineStrings split at point
+
+ Args:
+ line (LineString): Line to split
+ pt ([Point]): Point to split line
+
+ Returns:
+ List(LineString): List of linestrings
+ """
+ # TODO: pt. inside line bounding box might be quicker.
+ # line.envelope.contains(pt)
+ if pt.buffer(0.000001).intersects(line):
+ distance = line.project(pt)
+ coords = list(line.coords)
+ if distance == 0.0 or distance == line.length:
+ return [line]
+ for i, p in enumerate(coords):
+ lim = len(coords) - 1
+ pd = line.project(Point(p))
+ if pd == distance:
+ if i == lim:
+ return [line]
+ else:
+ lines = [
+ LineString(coords[:i + 1]),
+ LineString(coords[i:])]
+ return lines
+ if pd > distance:
+ cp = line.interpolate(distance)
+ lines = [
+ LineString(coords[:i] + [(cp.x, cp.y)]),
+ LineString([(cp.x, cp.y)] + coords[i:])]
+ return lines
+ return [line]
+ else:
+ return [line]
+
+
+def quicksave(gpkg, name, geoms, geom_type):
+ with GeopackageLayer(gpkg, name, write=True) as out_lyr:
+ out_lyr.create_layer(geom_type, epsg=4326)
+ progbar = ProgressBar(len(geoms), 50, f"saving {out_lyr.ogr_layer_name} features")
+ counter = 0
+ for shape in geoms:
+ progbar.update(counter)
+ counter += 1
+ out_lyr.create_feature(shape)
+
+
+def main():
+ # TODO Add transportation networks to vbet inputs
+ # TODO Prepare clipped NHD Catchments as vbet polygons input
+
+ parser = argparse.ArgumentParser(
+ description='Floodplain Connectivity (BETA)',
+ # epilog="This is an epilog"
+ )
+ parser.add_argument('vbet_network', help='Vector line network', type=str)
+ parser.add_argument('vbet_polygon', help='Vector polygon layer', type=str)
+ parser.add_argument('roads', help='Vector line network', type=str)
+ parser.add_argument('railroads', help='Vector line network', type=str)
+ parser.add_argument('output_dir', help='Folder where output project will be created', type=str)
+ parser.add_argument('--debug_gpkg', help='Debug geopackage', type=str)
+ parser.add_argument('--verbose', help='(optional) a little extra logging ', action='store_true', default=False)
+
+ args = dotenv.parse_args_env(parser)
+
+ # make sure the output folder exists
+ safe_makedirs(args.output_dir)
+
+ # Initiate the log file
+ log = Logger('FLOOD_CONN')
+ log.setup(logPath=os.path.join(args.output_dir, 'floodplain_connectivity.log'), verbose=args.verbose)
+ log.title('Floodplain Connectivity (BETA)')
+
+ try:
+ floodplain_connectivity(args.vbet_network, args.vbet_polygon, args.roads, args.railroads, args.output_dir, args.debug_gpkg)
+
+ except Exception as e:
+ log.error(e)
+ traceback.print_exc(file=sys.stdout)
+ sys.exit(1)
+
+ sys.exit(0)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/packages/vbet/vbet/vbet.py b/packages/vbet/vbet/vbet.py
index 0283c6a7..b6bed528 100644
--- a/packages/vbet/vbet/vbet.py
+++ b/packages/vbet/vbet/vbet.py
@@ -17,21 +17,19 @@
import traceback
import datetime
import time
-import json
-import shutil
-from osgeo import gdal
-from osgeo import ogr
-from shapely.geometry import mapping, Polygon
-from shapely.ops import unary_union
+from tempfile import NamedTemporaryFile
+from osgeo import gdal, ogr
import rasterio
-from rasterio import features
import numpy as np
+from scipy import interpolate
from rscommons.util import safe_makedirs, parse_metadata
from rscommons import RSProject, RSLayer, ModelConfig, ProgressBar, Logger, dotenv, initGDALOGRErrors
-from rscommons import GeopackageLayer, VectorBase
-from rscommons.vector_ops import polygonize, get_num_pts, get_num_rings, get_geometry_unary_union, remove_holes, buffer_by_field, copy_feature_class
+from rscommons import GeopackageLayer
+from rscommons.vector_ops import polygonize, buffer_by_field, copy_feature_class
from vbet.vbet_network import vbet_network
from vbet.vbet_report import VBETReport
+from vbet.vbet_raster_ops import rasterize, proximity_raster, translate
+from vbet.vbet_outputs import threshold, sanitize
from vbet.__version__ import __version__
initGDALOGRErrors()
@@ -40,11 +38,23 @@
thresh_vals = {"50": 0.5, "60": 0.6, "70": 0.7, "80": 0.8, "90": 0.9, "100": 1}
+# Transformation Curve Inputs
+tcurve_slope = {"values": np.array([0.0, 12.0]),
+ "output": np.array([1.0, 0.0])}
+tcurve_hand = {"values": np.array([0, 50]),
+ "output": np.array([1.0, 0.0])}
+tcurve_fa_dist = {"values": np.array([0, 2]), # Cells
+ "output": np.array([1.0, 0.0])}
+tcurve_ch_dist = {"values": np.array([0, 2, 3]),
+ "output": np.array([1.0, 0.5, 0.0])}
+
LayerTypes = {
'SLOPE_RASTER': RSLayer('Slope Raster', 'SLOPE_RASTER', 'Raster', 'inputs/slope.tif'),
'HAND_RASTER': RSLayer('Hand Raster', 'HAND_RASTER', 'Raster', 'inputs/hand.tif'),
'HILLSHADE': RSLayer('DEM Hillshade', 'HILLSHADE', 'Raster', 'inputs/dem_hillshade.tif'),
'CHANNEL_RASTER': RSLayer('Channel Raster', 'CHANNEL_RASTER', 'Raster', 'inputs/channel.tif'),
+ 'CHANNEL_BUFFER_RASTER': RSLayer('Channel Raster', 'CHANNEL_BUFFER_RASTER', 'Raster', 'inputs/channelbuffer.tif'),
+ 'FLOW_AREA_RASTER': RSLayer('Flow Area Raster', 'FLOW_AREA_RASTER', 'Raster', 'inputs/flowarea.tif'),
'INPUTS': RSLayer('Inputs', 'INPUTS', 'Geopackage', 'inputs/vbet_inputs.gpkg', {
'FLOWLINES': RSLayer('NHD Flowlines', 'FLOWLINES', 'Vector', 'flowlines'),
'FLOW_AREA': RSLayer('NHD Flow Areas', 'FLOW_AREA', 'Vector', 'flow_areas'),
@@ -52,10 +62,19 @@
'SLOPE_EV': RSLayer('Evidence Raster', 'SLOPE_EV_TMP', 'Raster', 'intermediates/nLoE_Slope.tif'),
'HAND_EV': RSLayer('Evidence Raster', 'HAND_EV_TMP', 'Raster', 'intermediates/nLoE_HAND.tif'),
'CHANNEL_MASK': RSLayer('Evidence Raster', 'CH_MASK', 'Raster', 'intermediates/nLOE_Channels.tif'),
+ 'CHANNEL_DISTANCE': RSLayer('Evidence Raster', "CH_DIST", "Raster", "intermediates/nLOE_ChannelDist.tif"),
+ 'FLOW_AREA_DISTANCE': RSLayer('Evidence Raster', "FA_DIST", "Raster", "intermediates/nLOE_FlowAreaDist.tif"),
+ 'SLOPE_TRANSFORM': RSLayer('Evidence Raster', "SLOPE_TC", "Raster", "intermediates/T_Slope.tif"),
+ 'HAND_TRANSFORM': RSLayer('Evidence Raster', "HAND_TC", "Raster", "intermediates/T_Hand.tif"),
+ 'CHANNEL_DISTANCE_TRANSFORM': RSLayer('Evidence Raster', "CHAN_DIST_TC", "Raster", "intermediates/T_ChannelDist.tif"),
+ 'FLOWAREA_DISTANCE_TRANSFORM': RSLayer('Evidence Raster', "FA_DIST_TC", "Raster", "intermediates/T_FlowAreaDist.tif"),
+ 'TOPOGRAPHIC_EVIDENCE': RSLayer('Evidence Raster', 'TOPO_EVIDENCE', 'Raster', 'intermediates/TopographicEvidence.tif'),
+ 'CHANNEL_EVIDENCE': RSLayer('Evidence Raster', 'CHANNEL_EVIDENCE', 'Raster', 'intermediates/ChannelEvidence.tif'),
'EVIDENCE': RSLayer('Evidence Raster', 'EVIDENCE', 'Raster', 'intermediates/Evidence.tif'),
'COMBINED_VRT': RSLayer('Combined VRT', 'COMBINED_VRT', 'VRT', 'intermediates/slope-hand-channel.vrt'),
'INTERMEDIATES': RSLayer('Intermediates', 'Intermediates', 'Geopackage', 'intermediates/vbet_intermediates.gpkg', {
'VBET_NETWORK': RSLayer('VBET Network', 'VBET_NETWORK', 'Vector', 'vbet_network'),
+ 'VBET_NETWORK_BUFFERED': RSLayer('VBET Network', 'VBET_NETWORK', 'Vector', 'vbet_network_buffered'),
'CHANNEL_POLYGON': RSLayer('Combined VRT', 'CHANNEL_POLYGON', 'Vector', 'channel')
# We also add all tht raw thresholded shapes here but they get added dynamically later
}),
@@ -94,97 +113,117 @@ def vbet(huc, flowlines_orig, flowareas_orig, orig_slope, max_slope, orig_hand,
project.add_project_geopackage(proj_nodes['Inputs'], LayerTypes['INPUTS'])
# Create a copy of the flow lines with just the perennial and also connectors inside flow areas
+ fcodes = [33400, 46003, 46006, 46007, 55800] # TODO expose included fcodes as a tool parameter?
+
+ network_path = os.path.join(intermediates_gpkg_path, LayerTypes['INTERMEDIATES'].sub_layers['VBET_NETWORK'].rel_path)
+ vbet_network(flowlines_path, flowareas_path, network_path, cfg.OUTPUT_EPSG, fcodes)
+
+ # Create a VRT that combines all the evidence rasters
+ log.info('Creating combined evidence VRT')
+ vrtpath = os.path.join(project_folder, LayerTypes['COMBINED_VRT'].rel_path)
+ vrt_options = gdal.BuildVRTOptions(resampleAlg='nearest', separate=True, resolution='average')
+
+ gdal.BuildVRT(vrtpath, [
+ proj_slope,
+ proj_hand
+ ], options=vrt_options)
+
+ slope_ev = os.path.join(project_folder, LayerTypes['SLOPE_EV'].rel_path)
+ hand_ev = os.path.join(project_folder, LayerTypes['HAND_EV'].rel_path)
- vbet_network(flowlines_path, flowareas_path, intermediates_gpkg_path, cfg.OUTPUT_EPSG)
+ # Generate the evidence raster from the VRT. This is a little annoying but reading across
+ # different dtypes in one VRT is not supported in GDAL > 3.0 so we dump them into individual rasters
+ translate(vrtpath, slope_ev, 1)
+ translate(vrtpath, hand_ev, 2)
# Get raster resolution as min buffer and apply bankfull width buffer to reaches
- with rasterio.open(proj_slope) as raster:
+ with rasterio.open(slope_ev) as raster:
t = raster.transform
min_buffer = (t[0] + abs(t[4])) / 2
log.info("Buffering Polyine by bankfull width buffers")
- reach_polygon = buffer_by_field('{}/vbet_network'.format(intermediates_gpkg_path), "BFwidth", cfg.OUTPUT_EPSG, min_buffer)
-
- # Create channel polygon by combining the reach polygon with the flow area polygon
- area_polygon = get_geometry_unary_union(flowareas_path, cfg.OUTPUT_EPSG)
- log.info('Unioning reach and area polygons')
- # Union the buffered reach and area polygons
- if area_polygon is None or area_polygon.area == 0:
- log.warning('Area of the area polygon is 0, we will disregard it')
- channel_polygon = reach_polygon
- else:
- channel_polygon = unary_union([reach_polygon, area_polygon])
- reach_polygon = None # free up some memory
- area_polygon = None
+ network_path_buffered = os.path.join(intermediates_gpkg_path, LayerTypes['INTERMEDIATES'].sub_layers['VBET_NETWORK_BUFFERED'].rel_path)
+ buffer_by_field(network_path, network_path_buffered, "BFwidth", cfg.OUTPUT_EPSG, min_buffer)
# Rasterize the channel polygon and write to raster
log.info('Writing channel raster using slope as a template')
+ flow_area_raster = os.path.join(project_folder, LayerTypes['FLOW_AREA_RASTER'].rel_path)
+ channel_buffer_raster = os.path.join(project_folder, LayerTypes['CHANNEL_BUFFER_RASTER'].rel_path)
channel_raster = os.path.join(project_folder, LayerTypes['CHANNEL_RASTER'].rel_path)
- with rasterio.open(proj_slope) as slope_src:
- chl_meta = slope_src.meta
- chl_meta['dtype'] = rasterio.uint8
- chl_meta['nodata'] = 0
- chl_meta['compress'] = 'deflate'
- image = features.rasterize([(mapping(channel_polygon), 1)], out_shape=slope_src.shape, transform=slope_src.transform, fill=0)
- with rasterio.open(channel_raster, 'w', **chl_meta) as dst:
- dst.write(image, indexes=1)
- project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['CHANNEL_RASTER'])
- # Create a VRT that combines all the evidence rasters
- log.info('Creating combined evidence VRT')
- vrtpath = os.path.join(project_folder, LayerTypes['COMBINED_VRT'].rel_path)
- vrt_options = gdal.BuildVRTOptions(resampleAlg='nearest', separate=True, resolution='average')
+ rasterize(network_path_buffered, channel_buffer_raster, slope_ev)
+ project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['CHANNEL_BUFFER_RASTER'])
- gdal.BuildVRT(vrtpath, [
- proj_slope,
- proj_hand,
- channel_raster
- ], options=vrt_options)
+ rasterize(flowareas_path, flow_area_raster, slope_ev)
+ project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['FLOW_AREA_RASTER'])
- # Generate the evidence raster from the VRT. This is a little annoying but reading across
- # different dtypes in one VRT is not supported in GDAL > 3.0 so we dump them into individual rasters
- slope_ev = os.path.join(project_folder, LayerTypes['SLOPE_EV'].rel_path)
- translateoptions = gdal.TranslateOptions(gdal.ParseCommandLine("-of Gtiff -b 1 -co COMPRESS=DEFLATE"))
- gdal.Translate(slope_ev, vrtpath, options=translateoptions)
+ # Open evidence rasters concurrently. We're looping over windows so this shouldn't affect
+ # memory consumption too much
+ with rasterio.open(channel_buffer_raster) as ch_buff, rasterio.open(flow_area_raster) as fl_arr:
+ # All 3 rasters should have the same extent and properties. They differ only in dtype
+ out_meta = ch_buff.meta
+ out_meta['compress'] = 'deflate'
- hand_ev = os.path.join(project_folder, LayerTypes['HAND_EV'].rel_path)
- translateoptions = gdal.TranslateOptions(gdal.ParseCommandLine("-of Gtiff -b 2 -co COMPRESS=DEFLATE"))
- gdal.Translate(hand_ev, vrtpath, options=translateoptions)
+ with rasterio.open(channel_raster, 'w', **out_meta) as out_raster:
+ progbar = ProgressBar(len(list(ch_buff.block_windows(1))), 50, "Combining flow area and buffered network rasters")
+ counter = 0
+ # Again, these rasters should be orthogonal so their windows should also line up
+ for ji, window in ch_buff.block_windows(1):
+ progbar.update(counter)
+ counter += 1
+ # These rasterizations don't begin life with a mask.
+ ch_buff_data = ch_buff.read(1, window=window, masked=True)
+ fl_arr_data = fl_arr.read(1, window=window, masked=True)
+
+ out_raster.write(ch_buff_data | fl_arr_data, window=window, indexes=1)
- channel_msk = os.path.join(project_folder, LayerTypes['CHANNEL_MASK'].rel_path)
- translateoptions = gdal.TranslateOptions(gdal.ParseCommandLine("-of Gtiff -b 3 -co COMPRESS=DEFLATE"))
- gdal.Translate(channel_msk, vrtpath, options=translateoptions)
+ progbar.finish()
+ project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['CHANNEL_RASTER'])
+ channel_dist_raster = os.path.join(project_folder, LayerTypes['CHANNEL_DISTANCE'].rel_path)
+ fa_dist_raster = os.path.join(project_folder, LayerTypes['FLOW_AREA_DISTANCE'].rel_path)
+ proximity_raster(channel_buffer_raster, channel_dist_raster)
+ proximity_raster(flow_area_raster, fa_dist_raster)
+
+ slope_transform_raster = os.path.join(project_folder, LayerTypes['SLOPE_TRANSFORM'].rel_path)
+ hand_transform_raster = os.path.join(project_folder, LayerTypes['HAND_TRANSFORM'].rel_path)
+ chan_dist_transform_raster = os.path.join(project_folder, LayerTypes['CHANNEL_DISTANCE_TRANSFORM'].rel_path)
+ fa_dist_transform_raster = os.path.join(project_folder, LayerTypes['FLOWAREA_DISTANCE_TRANSFORM'].rel_path)
+ topo_evidence_raster = os.path.join(project_folder, LayerTypes['TOPOGRAPHIC_EVIDENCE'].rel_path)
+ channel_evidence_raster = os.path.join(project_folder, LayerTypes['CHANNEL_EVIDENCE'].rel_path)
evidence_raster = os.path.join(project_folder, LayerTypes['EVIDENCE'].rel_path)
# Open evidence rasters concurrently. We're looping over windows so this shouldn't affect
# memory consumption too much
- with rasterio.open(slope_ev) as slp_src, rasterio.open(hand_ev) as hand_src:
+ with rasterio.open(slope_ev) as slp_src, \
+ rasterio.open(hand_ev) as hand_src, \
+ rasterio.open(channel_dist_raster) as cdist_src, \
+ rasterio.open(fa_dist_raster) as fadist_src:
# All 3 rasters should have the same extent and properties. They differ only in dtype
out_meta = slp_src.meta
# Rasterio can't write back to a VRT so rest the driver and number of bands for the output
out_meta['driver'] = 'GTiff'
out_meta['count'] = 1
out_meta['compress'] = 'deflate'
- chl_meta['dtype'] = rasterio.uint8
+ # out_meta['dtype'] = rasterio.uint8
# We use this to buffer the output
cell_size = abs(slp_src.get_transform()[1])
- # Evidence raster logic
- def ffunc(x, y):
-
- # Retain slope less than threshold. Invert and scale 0 (high slope) to 1 (low slope).
- z1 = 1 + (x / (-1 * max_slope))
- z1.mask = np.ma.mask_or(z1.mask, z1 < 0)
+ # Transform Functions
+ f_slope = interpolate.interp1d(tcurve_slope['values'], tcurve_slope['output'], bounds_error=False, fill_value=0.0)
+ f_hand = interpolate.interp1d(tcurve_hand['values'], tcurve_hand['output'], bounds_error=False, fill_value=0.0)
+ f_chan_dist = interpolate.interp1d(tcurve_ch_dist['values'], tcurve_ch_dist['output'], bounds_error=False, fill_value=0.0)
+ f_fa_dist = interpolate.interp1d(tcurve_fa_dist['values'], tcurve_fa_dist['output'], bounds_error=False, fill_value=0.0)
- # Retain HAND under threshold. Invert and scale to 0 (high HAND) to 1 (low HAND).
- z2 = 1 + (y / (-1 * max_hand))
- z2.mask = np.ma.mask_or(z2.mask, z2 < 0)
- z3 = z1 * z2
- return z3
+ with rasterio.open(evidence_raster, 'w', **out_meta) as dest_evidence, \
+ rasterio.open(topo_evidence_raster, "w", **out_meta) as dest, \
+ rasterio.open(channel_evidence_raster, 'w', **out_meta) as dest_channel, \
+ rasterio.open(slope_transform_raster, "w", **out_meta) as slope_ev_out, \
+ rasterio.open(hand_transform_raster, 'w', **out_meta) as hand_ev_out, \
+ rasterio.open(chan_dist_transform_raster, 'w', **out_meta) as chan_dist_ev_out, \
+ rasterio.open(fa_dist_transform_raster, 'w', **out_meta) as fa_dist_ev_out:
- with rasterio.open(evidence_raster, "w", **out_meta) as dest:
progbar = ProgressBar(len(list(slp_src.block_windows(1))), 50, "Calculating evidence layer")
counter = 0
# Again, these rasters should be orthogonal so their windows should also line up
@@ -193,192 +232,89 @@ def ffunc(x, y):
counter += 1
slope_data = slp_src.read(1, window=window, masked=True)
hand_data = hand_src.read(1, window=window, masked=True)
+ cdist_data = cdist_src.read(1, window=window, masked=True)
+ fadist_data = fadist_src.read(1, window=window, masked=True)
+
+ slope_transform = np.ma.MaskedArray(f_slope(slope_data.data), mask=slope_data.mask)
+ hand_transform = np.ma.MaskedArray(f_hand(hand_data.data), mask=hand_data.mask)
+ channel_dist_transform = np.ma.MaskedArray(f_chan_dist(cdist_data.data), mask=cdist_data.mask)
+ fa_dist_transform = np.ma.MaskedArray(f_fa_dist(fadist_data.data), mask=fadist_data.mask)
+
+ fvals_topo = slope_transform * hand_transform
+ fvals_channel = np.maximum(channel_dist_transform, fa_dist_transform)
+ fvals_evidence = np.maximum(fvals_topo, fvals_channel)
# Fill the masked values with the appropriate nodata vals
- fvals = ffunc(slope_data, hand_data)
# Unthresholded in the base band (mostly for debugging)
- dest.write(np.ma.filled(np.float32(fvals), out_meta['nodata']), window=window, indexes=1)
+ dest.write(np.ma.filled(np.float32(fvals_topo), out_meta['nodata']), window=window, indexes=1)
+ slope_ev_out.write(slope_transform.astype('float32').filled(out_meta['nodata']), window=window, indexes=1)
+ hand_ev_out.write(hand_transform.astype('float32').filled(out_meta['nodata']), window=window, indexes=1)
+ chan_dist_ev_out.write(channel_dist_transform.astype('float32').filled(out_meta['nodata']), window=window, indexes=1)
+ fa_dist_ev_out.write(fa_dist_transform.astype('float32').filled(out_meta['nodata']), window=window, indexes=1)
+
+ dest_channel.write(np.ma.filled(np.float32(fvals_channel), out_meta['nodata']), window=window, indexes=1)
+ dest_evidence.write(np.ma.filled(np.float32(fvals_evidence), out_meta['nodata']), window=window, indexes=1)
progbar.finish()
- # Hand and slope are duplicated so we can safely remove them
- # rasterio.shutil.delete(slope_ev)
- # rasterio.shutil.delete(hand_ev)
# The remaining rasters get added to the project
- project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['EVIDENCE'])
+ project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['TOPOGRAPHIC_EVIDENCE'])
+ project.add_project_raster(proj_nodes['Intermediates'], LayerTypes['CHANNEL_EVIDENCE'])
# Get the length of a meter (roughly)
- degree_factor = GeopackageLayer.rough_convert_metres_to_raster_units(proj_slope, 1)
+ degree_factor = GeopackageLayer.rough_convert_metres_to_raster_units(slope_ev, 1)
buff_dist = cell_size
min_hole_degrees = min_hole_area_m * (degree_factor ** 2)
- # Create our threshold rasters in a temporary folder
- # These files get immediately polygonized so they are of very little value afterwards
- tmp_folder = os.path.join(project_folder, 'tmp')
- safe_makedirs(tmp_folder)
-
# Get the full paths to the geopackages
intermed_gpkg_path = os.path.join(project_folder, LayerTypes['INTERMEDIATES'].rel_path)
vbet_path = os.path.join(project_folder, LayerTypes['VBET'].rel_path)
for str_val, thr_val in thresh_vals.items():
- thresh_raster_path = os.path.join(tmp_folder, 'evidence_mask_{}.tif'.format(str_val))
- with rasterio.open(evidence_raster) as fval_src, rasterio.open(channel_msk) as ch_msk_src:
- out_meta = fval_src.meta
- out_meta['count'] = 1
- out_meta['compress'] = 'deflate'
- out_meta['dtype'] = rasterio.uint8
- out_meta['nodata'] = 0
-
- log.info('Thresholding at {}'.format(thr_val))
- with rasterio.open(thresh_raster_path, "w", **out_meta) as dest:
- progbar = ProgressBar(len(list(fval_src.block_windows(1))), 50, "Thresholding at {}".format(thr_val))
- counter = 0
- for ji, window in fval_src.block_windows(1):
- progbar.update(counter)
- counter += 1
- fval_data = fval_src.read(1, window=window, masked=True)
- ch_data = ch_msk_src.read(1, window=window, masked=True)
- # Fill an array with "1" values to give us a nice mask for polygonize
- fvals_mask = np.full(fval_data.shape, np.uint8(1))
-
- # Create a raster with 1.0 as a value everywhere in the same shape as fvals
- new_fval_mask = np.ma.mask_or(fval_data.mask, fval_data < thr_val)
- masked_arr = np.ma.array(fvals_mask, mask=[new_fval_mask & ch_data.mask])
- dest.write(np.ma.filled(masked_arr, out_meta['nodata']), window=window, indexes=1)
- progbar.finish()
-
- plgnize_id = 'THRESH_{}'.format(str_val)
- plgnize_lyr = RSLayer('Raw Threshold at {}%'.format(str_val), plgnize_id, 'Vector', plgnize_id.lower())
- # Add a project node for this thresholded vector
- LayerTypes['INTERMEDIATES'].add_sub_layer(plgnize_id, plgnize_lyr)
-
- vbet_id = 'VBET_{}'.format(str_val)
- vbet_lyr = RSLayer('Threshold at {}%'.format(str_val), vbet_id, 'Vector', vbet_id.lower())
- # Add a project node for this thresholded vector
- LayerTypes['VBET'].add_sub_layer(vbet_id, vbet_lyr)
-
- # Now polygonize the raster
- log.info('Polygonizing')
- polygonize(thresh_raster_path, 1, '{}/{}'.format(intermed_gpkg_path, plgnize_lyr.rel_path), cfg.OUTPUT_EPSG)
+ with NamedTemporaryFile(suffix='.tif', mode="w+", delete=True) as tempfile:
+ log.debug('Temporary threshold raster: {}'.format(tempfile.name))
+ threshold(evidence_raster, thr_val, tempfile.name)
+
+ plgnize_id = 'THRESH_{}'.format(str_val)
+ plgnize_lyr = RSLayer('Raw Threshold at {}%'.format(str_val), plgnize_id, 'Vector', plgnize_id.lower())
+ # Add a project node for this thresholded vector
+ LayerTypes['INTERMEDIATES'].add_sub_layer(plgnize_id, plgnize_lyr)
+
+ vbet_id = 'VBET_{}'.format(str_val)
+ vbet_lyr = RSLayer('Threshold at {}%'.format(str_val), vbet_id, 'Vector', vbet_id.lower())
+ # Add a project node for this thresholded vector
+ LayerTypes['VBET'].add_sub_layer(vbet_id, vbet_lyr)
+ # Now polygonize the raster
+ log.info('Polygonizing')
+ polygonize(tempfile.name, 1, '{}/{}'.format(intermed_gpkg_path, plgnize_lyr.rel_path), cfg.OUTPUT_EPSG)
+ log.info('Done')
# Now the final sanitization
log.info('Sanitizing')
sanitize(
'{}/{}'.format(intermed_gpkg_path, plgnize_lyr.rel_path),
- channel_polygon,
'{}/{}'.format(vbet_path, vbet_lyr.rel_path),
min_hole_degrees,
buff_dist
)
log.info('Completed thresholding at {}'.format(thr_val))
- # ======================================================================
- # TODO: Remove this when we don't need shapefiles anymore
- # This just copies the layer directly from the geopackage so it
- # should be quick.
- # ======================================================================
- legacy_shapefile_path = os.path.join(os.path.dirname(vbet_path), '{}.shp'.format(vbet_id.lower()))
- log.info('Writing Legacy Shapefile: {}'.format(legacy_shapefile_path))
- copy_feature_class('{}/{}'.format(vbet_path, vbet_lyr.rel_path), legacy_shapefile_path)
-
# Now add our Geopackages to the project XML
project.add_project_geopackage(proj_nodes['Intermediates'], LayerTypes['INTERMEDIATES'])
project.add_project_geopackage(proj_nodes['Outputs'], LayerTypes['VBET'])
- # Channel mask is duplicated from inputs so we delete it.
- rasterio.shutil.delete(channel_msk)
-
report_path = os.path.join(project.project_dir, LayerTypes['REPORT'].rel_path)
project.add_report(proj_nodes['Outputs'], LayerTypes['REPORT'], replace=True)
report = VBETReport(report_path, project, project_folder)
report.write()
- # No need to keep the masks around
- try:
- shutil.rmtree(tmp_folder)
-
- except OSError as e:
- print("Error cleaning up tmp dir: {}".format(e.strerror))
-
# Incorporate project metadata to the riverscapes project
project.add_metadata(meta)
log.info('VBET Completed Successfully')
-def sanitize(in_path: str, channel_poly: Polygon, out_path: str, min_hole_sq_deg: float, buff_dist: float):
- """
- It's important to make sure we have the right kinds of geometries. Here we:
- 1. Buffer out then back in by the same amount. TODO: THIS IS SUPER SLOW.
- 2. Simply: for some reason area isn't calculated on inner rings so we need to simplify them first
- 3. Remove small holes: Do we have donuts? Filter anythign smaller than a certain area
-
- Args:
- in_path (str): [description]
- channel_poly (Polygon): [description]
- out_path (str): [description]
- min_hole_sq_deg (float): [description]
- buff_dist (float): [description]
- """
- log = Logger('VBET Simplify')
-
- with GeopackageLayer(in_path) as in_lyr, \
- GeopackageLayer(out_path, write=True) as out_lyr:
-
- out_lyr.create_layer(ogr.wkbPolygon, spatial_ref=in_lyr.spatial_ref)
-
- geoms = []
- pts = 0
- square_buff = buff_dist * buff_dist
-
- # NOTE: Order of operations really matters here.
- for inFeature, _counter, _progbar in in_lyr.iterate_features("Sanitizing", clip_shape=channel_poly):
- geom = VectorBase.ogr2shapely(inFeature)
-
- # First check. Just make sure this is a valid shape we can work with
- if geom.is_empty or geom.area < square_buff:
- # debug_writer(geom, '{}_C_BROKEN.geojson'.format(counter))
- continue
-
- pts += len(geom.exterior.coords)
- f_geom = geom
-
- # 1. Buffer out then back in by the same amount. TODO: THIS IS SUPER SLOW.
- f_geom = geom.buffer(buff_dist, resolution=1).buffer(-buff_dist, resolution=1)
- # debug_writer(f_geom, '{}_B_AFTER_BUFFER.geojson'.format(counter))
-
- # 2. Simply: for some reason area isn't calculated on inner rings so we need to simplify them first
- f_geom = f_geom.simplify(buff_dist, preserve_topology=True)
-
- # 3. Remove small holes: Do we have donuts? Filter anythign smaller than a certain area
- f_geom = remove_holes(f_geom, min_hole_sq_deg)
-
- # Second check here for validity after simplification
- if not f_geom.is_empty and f_geom.is_valid and f_geom.area > 0:
- geoms.append(f_geom)
- # debug_writer(f_geom, '{}_Z_FINAL.geojson'.format(counter))
- log.debug('simplified: pts: {} ==> {}, rings: {} ==> {}'.format(
- get_num_pts(geom), get_num_pts(f_geom), get_num_rings(geom), get_num_rings(f_geom))
- )
- else:
- log.warning('Invalid GEOM')
- # debug_writer(f_geom, '{}_Z_REJECTED.geojson'.format(counter))
- # print('loop')
-
- # 5. Now we can do unioning fairly cheaply
- log.info('Unioning {} geometries'.format(len(geoms)))
- new_geom = unary_union(geoms)
-
- log.info('Writing to disk')
- outFeature = ogr.Feature(out_lyr.ogr_layer_def)
-
- outFeature.SetGeometry(ogr.CreateGeometryFromJson(json.dumps(mapping(new_geom))))
- out_lyr.ogr_layer.CreateFeature(outFeature)
- outFeature = None
-
-
def create_project(huc, output_dir):
project_name = 'VBET for HUC {}'.format(huc)
project = RSProject(cfg, output_dir)
diff --git a/packages/vbet/vbet/vbet_network.py b/packages/vbet/vbet/vbet_network.py
index 3bf11828..420b744b 100644
--- a/packages/vbet/vbet/vbet_network.py
+++ b/packages/vbet/vbet/vbet_network.py
@@ -12,46 +12,55 @@
# -------------------------------------------------------------------------------
from osgeo import ogr
from shapely.geometry.base import BaseGeometry
-from rscommons import Logger, VectorBase
+from rscommons import Logger, VectorBase, GeopackageLayer
from rscommons.vector_ops import get_geometry_unary_union
from rscommons import get_shp_or_gpkg
-def vbet_network(flow_lines_path: str, flow_areas_path: str, out_path: str, epsg: int = None):
+def vbet_network(flow_lines_path: str, flow_areas_path: str, out_path: str, epsg: int = None, fcodes: list = [46006]):
log = Logger('VBET Network')
log.info('Generating perennial network')
- with get_shp_or_gpkg(flow_lines_path) as flow_lines_lyr, \
- get_shp_or_gpkg(out_path, layer_name='vbet_network', write=True) as vbet_net:
+ with get_shp_or_gpkg(out_path, write=True) as vbet_net, \
+ get_shp_or_gpkg(flow_lines_path) as flow_lines_lyr:
# Add input Layer Fields to the output Layer if it is the one we want
vbet_net.create_layer_from_ref(flow_lines_lyr, epsg=epsg)
# Perennial features
log.info('Incorporating perennial features')
- include_features(flow_lines_lyr, vbet_net, "FCode = '46006'")
+ fcode_filter = "FCode = " + " or FCode = ".join([f"'{fcode}'" for fcode in fcodes]) if len(fcodes) > 0 else "" # e.g. "FCode = '46006' or FCode = '55800'"
+ fids = include_features(flow_lines_lyr, vbet_net, fcode_filter)
# Flow area features
polygon = get_geometry_unary_union(flow_areas_path, epsg=epsg)
if polygon is not None:
log.info('Incorporating flow areas.')
- include_features(flow_lines_lyr, vbet_net, "FCode <> '46006'", polygon)
+ include_features(flow_lines_lyr, vbet_net, "FCode <> '46006'", polygon, excluded_fids=fids)
fcount = flow_lines_lyr.ogr_layer.GetFeatureCount()
log.info('VBET network generated with {} features'.format(fcount))
-def include_features(source_layer: VectorBase, out_layer: VectorBase, attribute_filter: str = None, clip_shape: BaseGeometry = None):
+def include_features(source_layer: VectorBase, out_layer: VectorBase, attribute_filter: str = None, clip_shape: BaseGeometry = None, excluded_fids: list = []):
+
+ included_fids = []
for feature, _counter, _progbar in source_layer.iterate_features('Including Features', write_layers=[out_layer], attribute_filter=attribute_filter, clip_shape=clip_shape):
out_feature = ogr.Feature(out_layer.ogr_layer_def)
- # Add field values from input Layer
- for i in range(0, out_layer.ogr_layer_def.GetFieldCount()):
- out_feature.SetField(out_layer.ogr_layer_def.GetFieldDefn(i).GetNameRef(), feature.GetField(i))
+ if feature.GetFID() not in excluded_fids:
+
+ included_fids.append(feature.GetFID())
+
+ # Add field values from input Layer
+ for i in range(0, out_layer.ogr_layer_def.GetFieldCount()):
+ out_feature.SetField(out_layer.ogr_layer_def.GetFieldDefn(i).GetNameRef(), feature.GetField(i))
+
+ geom = feature.GetGeometryRef()
+ out_feature.SetGeometry(geom.Clone())
+ out_layer.ogr_layer.CreateFeature(out_feature)
- geom = feature.GetGeometryRef()
- out_feature.SetGeometry(geom.Clone())
- out_layer.ogr_layer.CreateFeature(out_feature)
+ return included_fids
diff --git a/packages/vbet/vbet/vbet_outputs.py b/packages/vbet/vbet/vbet_outputs.py
new file mode 100644
index 00000000..78f6d6ad
--- /dev/null
+++ b/packages/vbet/vbet/vbet_outputs.py
@@ -0,0 +1,125 @@
+from operator import attrgetter
+from osgeo import ogr
+import rasterio
+import numpy as np
+from shapely.ops import unary_union
+from rscommons import ProgressBar, Logger, GeopackageLayer, VectorBase
+from rscommons.vector_ops import get_num_pts, get_num_rings, remove_holes
+from vbet.__version__ import __version__
+
+
+def threshold(evidence_raster_path: str, thr_val: float, thresh_raster_path: str):
+ """Threshold a raster to greater than or equal to a threshold value
+
+ Args:
+ evidence_raster_path (str): [description]
+ thr_val (float): [description]
+ thresh_raster_path (str): [description]
+ """
+ log = Logger('threshold')
+ with rasterio.open(evidence_raster_path) as fval_src:
+ out_meta = fval_src.meta
+ out_meta['count'] = 1
+ out_meta['compress'] = 'deflate'
+ out_meta['dtype'] = rasterio.uint8
+ out_meta['nodata'] = 0
+
+ log.info('Thresholding at {}'.format(thr_val))
+ with rasterio.open(thresh_raster_path, "w", **out_meta) as dest:
+ progbar = ProgressBar(len(list(fval_src.block_windows(1))), 50, "Thresholding at {}".format(thr_val))
+ counter = 0
+ for ji, window in fval_src.block_windows(1):
+ progbar.update(counter)
+ counter += 1
+ fval_data = fval_src.read(1, window=window, masked=True)
+ # Fill an array with "1" values to give us a nice mask for polygonize
+ fvals_mask = np.full(fval_data.shape, np.uint8(1))
+
+ # Create a raster with 1.0 as a value everywhere in the same shape as fvals
+ new_fval_mask = np.ma.mask_or(fval_data.mask, fval_data < thr_val)
+ masked_arr = np.ma.array(fvals_mask, mask=[new_fval_mask]) # & ch_data.mask])
+ dest.write(np.ma.filled(masked_arr, out_meta['nodata']), window=window, indexes=1)
+ progbar.finish()
+
+
+def sanitize(in_path: str, out_path: str, min_hole_sq_deg: float, buff_dist: float):
+ """
+ It's important to make sure we have the right kinds of geometries. Here we:
+ 1. Buffer out then back in by the same amount. TODO: THIS IS SUPER SLOW.
+ 2. Simply: for some reason area isn't calculated on inner rings so we need to simplify them first
+ 3. Remove small holes: Do we have donuts? Filter anythign smaller than a certain area
+
+ Args:
+ in_path (str): [description]
+ out_path (str): [description]
+ min_hole_sq_deg (float): [description]
+ buff_dist (float): [description]
+ """
+ log = Logger('VBET Simplify')
+
+ with GeopackageLayer(out_path, write=True) as out_lyr, \
+ GeopackageLayer(in_path) as in_lyr:
+
+ out_lyr.create_layer(ogr.wkbPolygon, spatial_ref=in_lyr.spatial_ref)
+
+ geoms = []
+ pts = 0
+ square_buff = buff_dist * buff_dist
+
+ # NOTE: Order of operations really matters here.
+ in_rings = 0
+ out_rings = 0
+ in_pts = 0
+ out_pts = 0
+
+ for in_feat, _counter, _progbar in in_lyr.iterate_features("Sanitizing"):
+ geom = VectorBase.ogr2shapely(in_feat)
+
+ # First check. Just make sure this is a valid shape we can work with
+ if geom.is_empty or geom.area < square_buff:
+ # debug_writer(geom, '{}_C_BROKEN.geojson'.format(counter))
+ continue
+
+ pts += len(geom.exterior.coords)
+ f_geom = geom
+
+ # 1. Buffer out then back in by the same amount. TODO: THIS IS SUPER SLOW.
+ f_geom = geom.buffer(buff_dist, resolution=1).buffer(-buff_dist, resolution=1)
+ # debug_writer(f_geom, '{}_B_AFTER_BUFFER.geojson'.format(counter))
+
+ # 2. Simply: for some reason area isn't calculated on inner rings so we need to simplify them first
+ f_geom = f_geom.simplify(buff_dist, preserve_topology=True)
+
+ # 3. Remove small holes: Do we have donuts? Filter anythign smaller than a certain area
+ f_geom = remove_holes(f_geom, min_hole_sq_deg)
+
+ # Second check here for validity after simplification
+ if not f_geom.is_empty and f_geom.is_valid and f_geom.area > 0:
+ geoms.append(f_geom)
+ in_rings += get_num_pts(geom)
+ out_rings += get_num_pts(f_geom)
+ in_pts += get_num_rings(geom)
+ out_pts += get_num_rings(f_geom)
+ # debug_writer(f_geom, '{}_Z_FINAL.geojson'.format(counter))
+ else:
+ log.warning('Invalid GEOM')
+ # debug_writer(f_geom, '{}_Z_REJECTED.geojson'.format(counter))
+ # print('loop')
+
+ log.debug('simplified: pts: {} ==> {}, rings: {} ==> {}'.format(in_pts, out_pts, in_rings, out_rings))
+
+ # 5. Now we can do unioning fairly cheaply
+ log.info('Unioning {} geometries'.format(len(geoms)))
+ new_geom = unary_union(geoms)
+
+ # Find the biggest area and just use that object thereby discarding all the little polygons that don't
+ # touch the main one
+ if new_geom.type == 'MultiPolygon':
+ new_geom = max(list(new_geom), key=attrgetter('area'))
+
+ log.info('Writing to disk')
+ out_feat = ogr.Feature(out_lyr.ogr_layer_def)
+
+ out_feat.SetGeometry(VectorBase.shapely2ogr(new_geom))
+ out_lyr.ogr_layer.CreateFeature(out_feat)
+ out_feat = None
diff --git a/packages/vbet/vbet/vbet_raster_ops.py b/packages/vbet/vbet/vbet_raster_ops.py
new file mode 100644
index 00000000..788a16ec
--- /dev/null
+++ b/packages/vbet/vbet/vbet_raster_ops.py
@@ -0,0 +1,141 @@
+from tempfile import NamedTemporaryFile
+from osgeo import gdal
+import rasterio
+import numpy as np
+from rscommons import ProgressBar, Logger, VectorBase, Timer
+
+
+def rasterize(in_lyr_path, out_raster_path, template_path):
+ """Rasterizing an input
+
+ Args:
+ in_lyr_path ([type]): [description]
+ out_raster_ ([type]): [description]
+ template_path ([type]): [description]
+ """
+ log = Logger('VBETRasterize')
+ ds_path, lyr_path = VectorBase.path_sorter(in_lyr_path)
+
+ progbar = ProgressBar(100, 50, "Rasterizing ")
+
+ with rasterio.open(template_path) as raster:
+ t = raster.transform
+ raster_bounds = raster.bounds
+
+ def poly_progress(progress, _msg, _data):
+ progbar.update(int(progress * 100))
+
+ # Rasterize the features (roads, rail etc) and calculate a raster of Euclidean distance from these features
+ progbar.update(0)
+
+ # Rasterize the polygon to a temporary file
+ with NamedTemporaryFile(suffix='.tif', mode="w+", delete=True) as tempfile:
+ log.debug('Temporary file: {}'.format(tempfile.name))
+ gdal.Rasterize(
+ tempfile.name,
+ ds_path,
+ layers=[lyr_path],
+ xRes=t[0], yRes=t[4],
+ burnValues=1, outputType=gdal.GDT_Int16,
+ creationOptions=['COMPRESS=LZW'],
+ # outputBounds --- assigned output bounds: [minx, miny, maxx, maxy]
+ outputBounds=[raster_bounds.left, raster_bounds.bottom, raster_bounds.right, raster_bounds.top],
+ callback=poly_progress
+ )
+ progbar.finish()
+
+ # Now mask the output correctly
+ mask_rasters_nodata(tempfile.name, template_path, out_raster_path)
+
+
+def mask_rasters_nodata(in_raster_path, nodata_raster_path, out_raster_path):
+ """Apply the nodata values of one raster to another of identical size
+
+ Args:
+ in_raster_path ([type]): [description]
+ nodata_raster_path ([type]): [description]
+ out_raster_path ([type]): [description]
+ """
+ log = Logger('mask_rasters_nodata')
+
+ with rasterio.open(nodata_raster_path) as nd_src, rasterio.open(in_raster_path) as data_src:
+ # All 3 rasters should have the same extent and properties. They differ only in dtype
+ out_meta = data_src.meta
+ out_meta['nodata'] = -9999
+ out_meta['compress'] = 'deflate'
+
+ with rasterio.open(out_raster_path, 'w', **out_meta) as out_src:
+ progbar = ProgressBar(len(list(data_src.block_windows(1))), 50, "Applying nodata mask")
+ counter = 0
+ # Again, these rasters should be orthogonal so their windows should also line up
+ for ji, window in data_src.block_windows(1):
+ progbar.update(counter)
+ counter += 1
+ # These rasterizations don't begin life with a mask.
+ mask = nd_src.read(1, window=window, masked=True).mask
+ data = data_src.read(1, window=window)
+ # Fill everywhere the mask reads true with a nodata value
+ output = np.ma.masked_array(data, mask)
+ out_src.write(output.filled(out_meta['nodata']), window=window, indexes=1)
+
+ progbar.finish()
+ log.info('Complete')
+
+
+# Compute Proximity for channel rasters
+def proximity_raster(src_raster_path: str, out_raster_path: str, dist_units="PIXEL"):
+ """Create a proximity raster
+
+ Args:
+ src_raster_path ([type]): [description]
+ out_raster_path ([type]): [description]
+ dist_units (str, optional): set to "GEO" for distance in length . Defaults to "PIXEL".
+ """
+ log = Logger('proximity_raster')
+ tmr = Timer()
+ src_ds = gdal.Open(src_raster_path)
+ srcband = src_ds.GetRasterBand(1)
+
+ drv = gdal.GetDriverByName('GTiff')
+ with NamedTemporaryFile(suffix=".tif", mode="w+", delete=True) as tempfile:
+ dst_ds = drv.Create(tempfile.name,
+ src_ds.RasterXSize, src_ds.RasterYSize, 1,
+ gdal.GetDataTypeByName('Float32'))
+
+ dst_ds.SetGeoTransform(src_ds.GetGeoTransform())
+ dst_ds.SetProjection(src_ds.GetProjectionRef())
+
+ dstband = dst_ds.GetRasterBand(1)
+
+ log.info('Creating proximity raster')
+ gdal.ComputeProximity(srcband, dstband, ["VALUES=1", f"DISTUNITS={dist_units}", "COMPRESS=DEFLATE"])
+
+ srcband = None
+ dstband = None
+ src_ds = None
+ dst_ds = None
+
+ # Preserve the nodata from the source
+ mask_rasters_nodata(tempfile.name, src_raster_path, out_raster_path)
+ log.info('completed in {}'.format(tmr.toString()))
+
+
+def translate(vrtpath_in: str, raster_out_path: str, band: int):
+ """GDAL translate Operation from VRT
+
+ Args:
+ vrtpath_in ([type]): [description]
+ raster_out_path ([type]): [description]
+ band ([int]): raster band
+ """
+ log = Logger('translate')
+ tmr = Timer()
+ progbar = ProgressBar(100, 50, "Translating ")
+
+ def translate_progress(progress, _msg, _data):
+ progbar.update(int(progress * 100))
+
+ translateoptions = gdal.TranslateOptions(gdal.ParseCommandLine("-of Gtiff -b {} -co COMPRESS=DEFLATE".format(band)))
+ gdal.Translate(raster_out_path, vrtpath_in, options=translateoptions, callback=translate_progress)
+
+ log.info('completed in {}'.format(tmr.toString()))
diff --git a/scripts/bootstrap-win.sh b/scripts/bootstrap-win.sh
old mode 100644
new mode 100755
diff --git a/scripts/dockerBuild.sh b/scripts/dockerBuild.sh
new file mode 100755
index 00000000..c01fd4a7
--- /dev/null
+++ b/scripts/dockerBuild.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+set -eu
+IFS=$'\n\t'
+
+# This overly complicated setup retrieves the Account number into a variable
+# This has no bearing on what actually gets uploaded
+IMGNAME=riverscapes/riverscapes-tools
+
+# Build us a fresh copy of the docker image. If there's nothing to update then this will be short
+# Otherwise it will be long
+docker build \
+ --build-arg CACHEBREAKER="$(date)" \
+ -t $IMGNAME . | tee docker_build.log
diff --git a/scripts/dockerRun.sh b/scripts/dockerRun.sh
new file mode 100755
index 00000000..91e6970a
--- /dev/null
+++ b/scripts/dockerRun.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -eu
+IFS=$'\n\t'
+
+# This overly complicated setup retrieves the Account number into a variable
+# This has no bearing on what actually gets uploaded
+# ./scripts/dockerRun.sh /Users/matt/Work/data/bratDockerShare/
+IMGNAME=cybercastor/rstools
+
+docker run \
+ --env-file .env.docker \
+ --env SHELL_SCRIPT="$(<$2)" \
+ --env RS_CONFIG="$(<~/.riverscapes)" \
+ --mount type=bind,source=$1,target=/shared \
+ --mount type=bind,source=$1,target=/task \
+ --mount type=bind,source=$1,target=/usr/local/data \
+ -it $IMGNAME:latest \
+ /bin/bash | tee docker_run.log
diff --git a/scripts/docs-bundler.sh b/scripts/docs-bundler.sh
new file mode 100755
index 00000000..1b96cd72
--- /dev/null
+++ b/scripts/docs-bundler.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -eu
+ORIGPWD=`pwd`
+
+echo "Publishing $ORIGPWD/docs"
+cd $ORIGPWD/docs
+bundle install --jobs 4 --retry 3 --verbose
+
+echo "Now looping over derivative sites..."
+for docsfolder in $ORIGPWD/packages/*/docs ; do
+ echo "Publishing $docsfolder"
+ if [ -d "$docsfolder" ]; then
+ cd $docsfolder
+ bundle install --jobs 4 --retry 3 --verbose
+ fi;
+done
+echo "Complete"
diff --git a/scripts/docs-publish.sh b/scripts/docs-publish.sh
new file mode 100755
index 00000000..ca91aed4
--- /dev/null
+++ b/scripts/docs-publish.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -eu
+ORIGPWD=`pwd`
+
+echo "Publishing $ORIGPWD/docs"
+cd $ORIGPWD/docs
+bundle exec jekyll build --verbose
+
+echo "Now looping over derivative sites..."
+for docsfolder in $ORIGPWD/packages/*/docs ; do
+ echo "Publishing $docsfolder"
+ if [ -d "$docsfolder" ]; then
+ cd $docsfolder
+ bundle exec jekyll build --verbose
+ fi;
+done
+echo "Complete"
diff --git a/scripts/publish.sh b/scripts/publish.sh
deleted file mode 100755
index 30cd9fe9..00000000
--- a/scripts/publish.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-set -eu
-ORIGPWD=`pwd`
-
-function jekyllbuild () {
- cd $1
- bundle install
- bundle exec jekyll build
-}
-
-jekyllbuild $ORIGPWD/docs
-
-for file in $ORIGPWD/packages/*/docs ; do
- if [[ -d "$file" && ! -L "$file" ]]; then
- jekyllbuild $file
- fi;
-done
-
-# cd $ORIGPWD
-# git checkout gh-pages
-# rm -fr site
-# mv PUBLIC site
-# git add site
-# git commit -m "Publish"
-# git push
\ No newline at end of file
diff --git a/scripts/testscript.sh b/scripts/testscript.sh
new file mode 100755
index 00000000..e9058f7b
--- /dev/null
+++ b/scripts/testscript.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+set -eu
+IFS=$'\n\t'
+
+# These environment variables need to be present before the script starts
+(: "${HUC?}")
+
+echo "HUC: $HUC"
+
+# Drop into our venv immediately
+source /usr/local/venv/bin/activate
+
+# Define some folders that we can easily clean up later
+RSC_TASK_DIR=/data/rs_context/$HUC
+
+VBET_TASK_DIR=/data/vbet/$HUC
+
+##########################################################################################
+# First Run RS_Context
+##########################################################################################
+
+rscontext $HUC \
+ /shared/NationalDatasets/landfire/200/us_200evt.tif \
+ /shared/NationalDatasets/landfire/200/us_200bps.tif \
+ /shared/NationalDatasets/ownership/surface_management_agency.shp \
+ /shared/NationalDatasets/ownership/FairMarketValue.tif \
+ /shared/NationalDatasets/ecoregions/us_eco_l3_state_boundaries.shp \
+ /shared/download/prism \
+ $RSC_TASK_DIR \
+ /shared/download/ \
+ --verbose
+
+echo "<>"
+
+##########################################################################################
+# Now Run VBET
+##########################################################################################
+
+vbet $HUC \
+ $RSC_TASK_DIR/hydrology/hydrology.gpkg/network_intersected_300m \
+ $RSC_TASK_DIR/hydrology/NHDArea.shp \
+ $RSC_TASK_DIR/topography/slope.tif \
+ $RSC_TASK_DIR/topography/hand.tif \
+ $RSC_TASK_DIR/topography/dem_hillshade.tif \
+ $VBET_TASK_DIR \
+ --verbose
+
+echo "<>"