diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 35b083e..e1731e9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ repos: - id: pre-commit-update - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.17 + rev: v0.15.22 hooks: - id: ruff-check args: [--fix] diff --git a/Makefile b/Makefile index bc1e42f..d2dab2e 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,28 @@ ifeq ($(DC_ENV),ci) UV_FLAGS = "--system" endif +PYTHON ?= python3 + +# The test targets below need pytest + GDAL + the pinned soil-id-db. They run +# natively only when THIS interpreter ($(PYTHON)) has pytest AND the *pinned* +# GDAL version (so results match CI and the pinned image); otherwise they +# transparently re-run themselves in a GDAL-capable container against the pinned +# soil-id-db image (see scripts/run_in_container.sh), so the same `make test*` +# command works on macOS and on CI alike. +# +# The version gate matters: snapshots are GDAL-version-sensitive, so a native +# Homebrew GDAL of a *different* version must NOT take the native path — it would +# produce snapshots that disagree with CI. It also naturally routes macOS to the +# container, since the interpreter with GDAL (Homebrew) lacks pytest and the +# venv with pytest lacks GDAL. Set NATIVE=1 to force native (also set inside the +# runner container, where the versions do match, to prevent infinite recursion). +GDAL_PIN := $(shell sed -n 's/^gdal==\([0-9.]*\).*/\1/p' requirements.txt) +ifeq ($(NATIVE),1) + NATIVE_OK := 1 +else + NATIVE_OK := $(shell $(PYTHON) -c 'import pytest, osgeo.gdal as g; raise SystemExit(g.__version__ != "$(GDAL_PIN)")' >/dev/null 2>&1 && echo 1) +endif + install: uv pip install -r requirements.txt $(UV_FLAGS) @@ -37,19 +59,29 @@ clean: # run the standard test suite (unit + integration, no api_snapshots) test: + @if [ "$(NATIVE_OK)" != "1" ]; then exec ./scripts/run_in_container.sh test; fi; \ if [ -z "$(PATTERN)" ]; then \ - pytest soil_id -m "not api_snapshot"; \ + $(PYTHON) -m pytest soil_id -m "not api_snapshot"; \ else \ - pytest soil_id -m "not api_snapshot" -k "$(PATTERN)"; \ + $(PYTHON) -m pytest soil_id -m "not api_snapshot" -k "$(PATTERN)"; \ fi # All tests except api_snapshot and integration (no live external APIs) test_unit: - pytest soil_id -m "not api_snapshot and not integration" + @if [ "$(NATIVE_OK)" != "1" ]; then exec ./scripts/run_in_container.sh test_unit; fi; \ + $(PYTHON) -m pytest soil_id -m "not api_snapshot and not integration" # update the unit test snapshots (but not the API snapshots) test_update_unit_snapshots: - pytest soil_id -m "not api_snapshot and not integration" --snapshot-update; \ + @if [ "$(NATIVE_OK)" != "1" ]; then exec ./scripts/run_in_container.sh test_update_unit_snapshots; fi; \ + $(PYTHON) -m pytest soil_id -m "not api_snapshot and not integration" --snapshot-update + +# Regenerate the unit-test output snapshots reproducibly in a GDAL-capable +# container, against the pinned soil-id-db image CI uses. Wraps +# test_update_unit_snapshots for machines where GDAL won't build natively +# (e.g. macOS). See scripts/regen_snapshots.sh. +regen_snapshots: + ./scripts/regen_snapshots.sh # Integration smoke tests only (full live API run, no output validation) test_integration: diff --git a/README.md b/README.md index e058563..d87ca59 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,17 @@ There are several smaller test suites: - The unit and integration tests can be run together with `make test` for convenience: this is what must pass for a PR to be mergeable. - The API snapshots themselves can be checked against the live API for drift using `make test_api_snapshot`. They can be updated to the new live API values using `make test_update_api_snapshots`. +> **macOS note:** GDAL doesn't build under uv/pip on macOS, so `make test`, +> `make test_unit`, and `make test_update_unit_snapshots` automatically re-run +> themselves in a GDAL-capable container against the pinned `soil-id-db` image +> (the one CI uses) — the command is the same as on Linux/CI, it just needs +> Docker. They run natively only when the local interpreter has pytest **and the +> pinned GDAL version** (a mismatched Homebrew GDAL would produce snapshots that +> disagree with CI, so it's routed to the container instead). Set `NATIVE=1` to +> force the local interpreter, or `PYTHON=…` to pick one. To regenerate and +> verify the output snapshots in one step, use `make regen_snapshots`. See +> `scripts/README.md`. + ### Bulk test There is a large suite of integration tests which takes many hours to run. It comes in the format of two scripts: diff --git a/scripts/README.md b/scripts/README.md index 3fa63db..3cd2f6b 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,5 +1,51 @@ # soil-id scripts +## Containerized tests / snapshots on macOS + +GDAL doesn't build under uv/pip on macOS, and the output snapshots are +environment-sensitive — they must be produced against an interpreter matching CI +**and** the exact pinned `soil-id-db` image CI uses (`docker-compose.yml` +`db.image`), **not** the `:latest` your local terraso-backend runs. Two pieces make +this transparent: + +- **`snapshot-runner.Dockerfile`** — a runner image mirroring the CI `test` job + (Ubuntu + ubuntugis + Python 3.13 + the pinned requirements). Built once, layer-cached + on the requirements files. +- **`run_in_container.sh`** — starts the pinned DB on a private network (no host port, so + it can't collide with a running terraso-backend on 5432), then runs the given Makefile + target(s) in the runner with the repo bind-mounted read-write, and tears everything + down afterward. + +You don't normally call `run_in_container.sh` directly: the Makefile's `test`, +`test_unit`, and `test_update_unit_snapshots` targets **auto-detect** whether the local +interpreter has pytest **and the pinned GDAL version** and, if not, delegate to it — so +the same `make …` command works on macOS and CI. The version gate matters because +snapshots are GDAL-version-sensitive: a Homebrew GDAL of a different version is routed to +the container rather than silently producing snapshots that disagree with CI. Set +`NATIVE=1` to force the local interpreter (set automatically inside the runner to avoid +recursion), or `PYTHON=…` to choose the interpreter. + +## `regen_snapshots.sh` + +Regenerates the unit-test **output** snapshots +(`soil_id/tests/{us,global}/__snapshots__/test_soil_location[...].json`) **and verifies +them** in one DB session: it runs `make test_update_unit_snapshots test_unit` (update, +then re-run without `--snapshot-update`; the second pass must pass clean or the snapshots +are non-deterministic), then shows `git status` for the snapshot dirs. + +```sh +make regen_snapshots # regenerate + verify +./scripts/regen_snapshots.sh --no-verify +REBUILD=1 make regen_snapshots # force-rebuild the runner image (after a deps bump) +``` + +> Not to be confused with `make test_update_api_snapshots`, which refreshes the +> **input** fixtures (raw SoilWeb/elevation API responses under +> `__snapshots__/test_api_snapshots`) by hitting the **live** external APIs. That's a +> different, drift-prone operation and is not what re-baselining algorithm output needs. + +--- + ## `wrb_descriptions_sync.py` Syncs the WRB soil **Description**/**Management** narratives from the diff --git a/scripts/regen_snapshots.sh b/scripts/regen_snapshots.sh new file mode 100755 index 0000000..cf364df --- /dev/null +++ b/scripts/regen_snapshots.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Copyright © 2024 Technology Matters +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see https://www.gnu.org/licenses/. + +# --------------------------------------------------------------------------- +# Regenerate the unit-test *output* snapshots (soil_id/tests/{us,global}/ +# __snapshots__/test_soil_location[...].json) reproducibly, then verify them. +# +# The snapshot command is just `make test_update_unit_snapshots`; the fiddly +# part is the environment (GDAL, which won't build on macOS, + the exact pinned +# soil-id-db image CI uses). scripts/run_in_container.sh supplies that. Here we: +# 1. Regenerate + verify in one container/DB session: +# `make test_update_unit_snapshots test_unit` — update, then re-run without +# --snapshot-update. The verify pass MUST pass clean, or the snapshots are +# non-deterministic and untrustworthy. +# 2. Show `git status` for the snapshot dirs. +# +# Usage: +# scripts/regen_snapshots.sh # regenerate + verify (default) +# scripts/regen_snapshots.sh --no-verify +# REBUILD=1 scripts/regen_snapshots.sh # force rebuild of the runner image +# --------------------------------------------------------------------------- + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$REPO_ROOT" + +VERIFY=1 +for arg in "$@"; do + case "$arg" in + --no-verify) VERIFY=0 ;; + -h|--help) sed -n '19,40p' "$0"; exit 0 ;; + *) echo "unknown arg: $arg" >&2; exit 2 ;; + esac +done + +log() { printf '\n\033[1;34m==> %s\033[0m\n' "$*"; } + +# Update, then (unless --no-verify) re-run the same tests without +# --snapshot-update to prove determinism — both in one DB session. +if [ "$VERIFY" -eq 1 ]; then + log "Regenerating unit snapshots + verifying determinism" + if ./scripts/run_in_container.sh test_update_unit_snapshots test_unit; then + echo " verification passed — snapshots are deterministic" + else + printf '\033[1;31m%s\033[0m\n' \ + "verification FAILED: snapshots differ on a second run (non-determinism). Do not commit." >&2 + exit 1 + fi +else + log "Regenerating unit snapshots (no verify)" + ./scripts/run_in_container.sh test_update_unit_snapshots +fi + +log "Snapshot changes:" +git -c color.status=always status --short \ + soil_id/tests/us/__snapshots__ soil_id/tests/global/__snapshots__ || true +echo +echo "Review the diff, then commit. Snapshots were generated against the pinned" +echo "image in docker-compose.yml, so they should match CI." diff --git a/scripts/run_in_container.sh b/scripts/run_in_container.sh new file mode 100755 index 0000000..58c8970 --- /dev/null +++ b/scripts/run_in_container.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Copyright © 2024 Technology Matters +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see https://www.gnu.org/licenses/. + +# --------------------------------------------------------------------------- +# Run one or more Makefile targets inside a GDAL-capable container, against the +# pinned soil-id-db image, on machines where the native env can't run the tests +# (GDAL doesn't build under uv/pip on macOS). +# +# The Makefile's test targets call this automatically when the local interpreter +# doesn't have pytest + the *pinned* GDAL version (see the NATIVE_OK guard in the +# Makefile), so `make test_unit`, `make test_update_unit_snapshots`, etc. work +# identically on macOS and CI. You normally don't invoke it directly. +# +# It: +# 1. Builds the CI-faithful runner image (scripts/snapshot-runner.Dockerfile), +# layer-cached on the requirements files. +# 2. Starts the pinned soil-id-db (docker-compose.yml `db.image` — the one CI +# uses, NOT your local :latest) on a private throwaway network with no host +# port published (avoids colliding with a running terraso-backend on 5432). +# 3. Runs `make NATIVE=1` in the runner with the repo bind-mounted +# read-write (so snapshots land in your working tree). NATIVE=1 makes the +# in-container make run pytest directly instead of recursing back here. +# 4. Tears the DB + network down (including the anonymous data volume). +# +# Usage: +# scripts/run_in_container.sh test_unit +# scripts/run_in_container.sh test_update_unit_snapshots test_unit +# REBUILD=1 scripts/run_in_container.sh test_unit # force runner-image rebuild +# --------------------------------------------------------------------------- + +[ "$#" -ge 1 ] || { echo "usage: $0 [make-target...]" >&2; exit 2; } + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$REPO_ROOT" + +RUNNER_IMAGE="${RUNNER_IMAGE:-soil-id-snapshot-runner:latest}" +RUNNER_DOCKERFILE="scripts/snapshot-runner.Dockerfile" +PLATFORM="${PLATFORM:-linux/amd64}" + +# The pinned DB and runner run on a private, throwaway network and talk by +# container name. We deliberately avoid `docker compose up` / the compose host +# port (5432), which collides with a running terraso-backend Postgres. +NETWORK="${NETWORK:-soil-id-snapshot-net}" +DB_CONTAINER="${DB_CONTAINER:-soil-id-snapshot-db}" +# Pinned image read straight from docker-compose.yml so it stays in lockstep +# with the pin CI uses (do not point at your local :latest). +DB_IMAGE="$(awk '/^[[:space:]]*image:/{print $2; exit}' docker-compose.yml)" + +log() { printf '\n\033[1;34m==> %s\033[0m\n' "$*"; } +die() { printf '\033[1;31merror: %s\033[0m\n' "$*" >&2; exit 1; } + +command -v docker >/dev/null || die "docker not found on PATH" + +# Data/ must be present (US path reads shapefiles + Munsell CSV). +if [ ! -f Data/gsmsoilmu_a_us.shp ] || [ ! -f Data/LandPKS_munsell_rgb_lab.csv ]; then + die "Data/ is missing required files. Run 'make download_soil_data' first." +fi + +# --- Build the runner image (cheap when the deps layer is cached) -------------- +if [ -n "${REBUILD:-}" ] || ! docker image inspect "$RUNNER_IMAGE" >/dev/null 2>&1; then + log "Building runner image $RUNNER_IMAGE (mirrors CI: Ubuntu + ubuntugis + Python 3.13)" + docker build --platform "$PLATFORM" -f "$RUNNER_DOCKERFILE" -t "$RUNNER_IMAGE" . +else + log "Reusing runner image $RUNNER_IMAGE (set REBUILD=1 to force a rebuild)" +fi + +# --- Start the pinned soil-id-db (private network, no host port) ---------------- +cleanup() { + # -v removes the anonymous data volume too; without it each run leaks ~3.7GB. + docker rm -fv "$DB_CONTAINER" >/dev/null 2>&1 || true + docker network rm "$NETWORK" >/dev/null 2>&1 || true +} +trap cleanup EXIT + +# Fresh network + DB each run so a stale container can't serve wrong data. +docker rm -fv "$DB_CONTAINER" >/dev/null 2>&1 || true +docker network inspect "$NETWORK" >/dev/null 2>&1 || docker network create "$NETWORK" >/dev/null + +log "Starting pinned soil-id-db ($DB_IMAGE)" +docker run -d --name "$DB_CONTAINER" --platform "$PLATFORM" \ + --network "$NETWORK" \ + -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=soil_id \ + "$DB_IMAGE" >/dev/null + +log "Waiting for the DB to accept connections" +for i in $(seq 1 60); do + if docker exec "$DB_CONTAINER" pg_isready -U postgres -d soil_id >/dev/null 2>&1; then + echo " db ready" + break + fi + [ "$i" -eq 60 ] && die "DB did not become ready in time" + sleep 2 +done + +# --- Run the requested make target(s) in the runner ----------------------------- +# NATIVE=1 so the in-container make runs pytest directly (no recursion). DB_* is +# what soil_id/config.py reads; the runner reaches the DB by name on NETWORK. +log "Running in container: make $* NATIVE=1" +docker run --rm \ + --platform "$PLATFORM" \ + --network "$NETWORK" \ + -v "$REPO_ROOT:/src" -w /src \ + -e DB_HOST="$DB_CONTAINER" -e DB_PORT=5432 -e DB_NAME=soil_id \ + -e DB_USERNAME=postgres -e DB_PASSWORD=postgres \ + "$RUNNER_IMAGE" make "$@" NATIVE=1 diff --git a/scripts/snapshot-runner.Dockerfile b/scripts/snapshot-runner.Dockerfile new file mode 100644 index 0000000..a265d2f --- /dev/null +++ b/scripts/snapshot-runner.Dockerfile @@ -0,0 +1,56 @@ +# Copyright © 2024 Technology Matters +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see https://www.gnu.org/licenses/. + +# Runner image for regenerating soil-id test snapshots off the machine's native +# environment (GDAL does not build under uv/pip on macOS). This mirrors the CI +# "test" job (.github/workflows/build.yml) as closely as practical so the +# snapshots it produces match what CI validates: +# - Ubuntu 24.04 + ubuntugis-unstable -> same libgdal as CI +# - Python 3.13 -> same interpreter series as CI (3.13.7) +# - `make install` / `make install_dev` -> the exact pinned requirements +# +# Only requirements are baked in (layer-cached on the requirements files); the +# soil-id source and Data/ are bind-mounted at run time by regen_snapshots.sh. +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive +ENV PATH="/root/.local/bin:${PATH}" +# uv --system installs must target the 3.13 we register as default python3 below. +ENV UV_SYSTEM_PYTHON=1 +ENV UV_BREAK_SYSTEM_PACKAGES=1 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + software-properties-common curl ca-certificates git make gcc g++ \ + && add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable \ + && add-apt-repository -y ppa:deadsnakes/ppa \ + && apt-get update && apt-get install -y --no-install-recommends \ + libgdal-dev gdal-bin \ + python3.13 python3.13-dev python3.13-venv \ + && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.13 1 \ + && update-alternatives --install /usr/bin/python python /usr/bin/python3.13 1 \ + && rm -rf /var/lib/apt/lists/* + +# uv (used by the Makefile install targets) +RUN curl -LsSf https://astral.sh/uv/install.sh | sh + +WORKDIR /src + +# Install the pinned deps. Keyed on the requirements files so this layer is +# reused until they change. `DC_ENV=ci` makes the Makefile pass uv `--system`. +COPY requirements.txt requirements-dev.txt Makefile ./ +COPY requirements/ requirements/ +RUN make install DC_ENV=ci && make install_dev DC_ENV=ci + +CMD ["bash"] diff --git a/soil_id/services.py b/soil_id/services.py index 679e5c7..820daf0 100644 --- a/soil_id/services.py +++ b/soil_id/services.py @@ -142,13 +142,14 @@ def get_soilgrids_classification_data(lon, lat): return result -def get_soilweb_data(lon, lat): +def get_soilweb_data(lon, lat, radius_m=1000): """ Fetch SSURGO data from the SoilWeb API for a specified longitude and latitude. Args: lon (float): Longitude of the location for which to fetch soil data. lat (float): Latitude of the location for which to fetch soil data. + radius_m (int, optional): Radius in meters to search for soil data around the specified location. Default is 1000 meters. Returns: dict: A dictionary containing soil data or error information if the request fails. @@ -158,7 +159,7 @@ def get_soilweb_data(lon, lat): "q": "spn", # Query type - static for this function's purpose "lon": lon, "lat": lat, - "r": 1000, # Radius (in TODO: units) + "r": radius_m, # Radius in meters } result = None diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-1.75,13.6].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-1.75,13.6].json index eba3467..830358f 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-1.75,13.6].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-1.75,13.6].json @@ -193,13 +193,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -680,16 +680,35 @@ "model": "v2" }, "soilRank": [ + { + "component": "Dystric gleysols", + "componentData": "Data Complete", + "componentID": 148189, + "name": "Dystric gleysols", + "not_displayed": false, + "rank_data": "1", + "rank_data_group": "1", + "rank_data_loc": "1", + "rank_data_loc_group": "1", + "rank_loc": 6, + "rank_loc_group": 6, + "score_data": 1.0, + "score_data_group": 1.0, + "score_data_loc": 0.508, + "score_data_loc_group": 0.508, + "score_loc": 0.017, + "score_loc_group": 0.017 + }, { "component": "Haplic ferralsols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 156034, "name": "Haplic ferralsols", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "1", - "rank_data_loc_group": "1", + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "2", + "rank_data_loc_group": "2", "rank_loc": 2, "rank_loc_group": 2, "score_data": 0.571, @@ -707,8 +726,8 @@ "not_displayed": false, "rank_data": "6", "rank_data_group": "6", - "rank_data_loc": "2", - "rank_data_loc_group": "2", + "rank_data_loc": "3", + "rank_data_loc_group": "3", "rank_loc": 1, "rank_loc_group": 1, "score_data": 0.35, @@ -724,10 +743,10 @@ "componentID": 144042, "name": "Ferralic cambisols", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", - "rank_data_loc": "3", - "rank_data_loc_group": "3", + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "4", + "rank_data_loc_group": "4", "rank_loc": 4, "rank_loc_group": 4, "score_data": 0.621, @@ -743,10 +762,10 @@ "componentID": 148190, "name": "Dystric fluvisols", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", - "rank_data_loc": "4", - "rank_data_loc_group": "4", + "rank_data": "3", + "rank_data_group": "3", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": 5, "rank_loc_group": 5, "score_data": 0.571, @@ -756,28 +775,9 @@ "score_loc": 0.017, "score_loc_group": 0.017 }, - { - "component": "Dystric gleysols", - "componentData": "Missing Data", - "componentID": 148189, - "name": "Dystric gleysols", - "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": 6, - "rank_loc_group": 6, - "score_data": 0.519, - "score_data_group": 0.519, - "score_data_loc": 0.268, - "score_data_loc_group": 0.268, - "score_loc": 0.017, - "score_loc_group": 0.017 - }, { "component": "Gleyic acrisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 144045, "name": "Gleyic acrisols", "not_displayed": false, @@ -796,7 +796,7 @@ }, { "component": "Xanthic ferralsols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 156033, "name": "Xanthic ferralsols", "not_displayed": false, diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.07856,15.107436].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.07856,15.107436].json index 0f5a4b0..928d8d6 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.07856,15.107436].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.07856,15.107436].json @@ -287,13 +287,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -386,8 +386,8 @@ "sl3": "Clay loam", "sl4": "Clay loam", "sl5": "Clay loam", - "sl6": "Unknown", - "sl7": "Unknown" + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -677,13 +677,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -771,13 +771,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1260,7 +1260,7 @@ "soilRank": [ { "component": "Xanthic ferralsols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 105399, "name": "Xanthic ferralsols2", "not_displayed": false, @@ -1279,7 +1279,7 @@ }, { "component": "Haplic ferralsols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 105423, "name": "Haplic ferralsols", "not_displayed": false, @@ -1296,41 +1296,22 @@ "score_loc": 0.181, "score_loc_group": 0.181 }, - { - "component": "Chromic luvisols", - "componentData": "Data Complete", - "componentID": 105244, - "name": "Chromic luvisols", - "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", - "rank_data_loc": "3", - "rank_data_loc_group": "3", - "rank_loc": "7", - "rank_loc_group": "7", - "score_data": 0.738, - "score_data_group": 0.738, - "score_data_loc": 0.394, - "score_data_loc_group": 0.394, - "score_loc": 0.05, - "score_loc_group": 0.05 - }, { "component": "Rhodic ferralsols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 105425, "name": "Rhodic ferralsols", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "4", - "rank_data_loc_group": "4", + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "3", + "rank_data_loc_group": "3", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.681, - "score_data_group": 0.681, - "score_data_loc": 0.391, - "score_data_loc_group": 0.391, + "score_data": 0.8, + "score_data_group": 0.8, + "score_data_loc": 0.45, + "score_data_loc_group": 0.45, "score_loc": 0.1, "score_loc_group": 0.1 }, @@ -1340,16 +1321,16 @@ "componentID": 105396, "name": "Haplic acrisols", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", - "rank_data_loc": "5", - "rank_data_loc_group": "5", + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "4", + "rank_data_loc_group": "4", "rank_loc": "8", "rank_loc_group": "8", - "score_data": 0.681, - "score_data_group": 0.681, - "score_data_loc": 0.353, - "score_data_loc_group": 0.353, + "score_data": 0.8, + "score_data_group": 0.8, + "score_data_loc": 0.413, + "score_data_loc_group": 0.413, "score_loc": 0.025, "score_loc_group": 0.025 }, @@ -1359,38 +1340,57 @@ "componentID": 105395, "name": "Ferralic cambisols", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data": "7", + "rank_data_group": "7", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": "6", "rank_loc_group": "6", - "score_data": 0.5, - "score_data_group": 0.5, - "score_data_loc": 0.284, - "score_data_loc_group": 0.284, + "score_data": 0.642, + "score_data_group": 0.642, + "score_data_loc": 0.355, + "score_data_loc_group": 0.355, "score_loc": 0.069, "score_loc_group": 0.069 }, { "component": "Haplic lixisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 105245, "name": "Haplic lixisols", "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", - "rank_data_loc": "7", - "rank_data_loc_group": "7", + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": "9", "rank_loc_group": "9", - "score_data": 0.433, - "score_data_group": 0.433, - "score_data_loc": 0.229, - "score_data_loc_group": 0.229, + "score_data": 0.6, + "score_data_group": 0.6, + "score_data_loc": 0.313, + "score_data_loc_group": 0.313, "score_loc": 0.025, "score_loc_group": 0.025 }, + { + "component": "Chromic luvisols", + "componentData": "Data Complete", + "componentID": 105244, + "name": "Chromic luvisols", + "not_displayed": false, + "rank_data": "9", + "rank_data_group": "9", + "rank_data_loc": "7", + "rank_data_loc_group": "7", + "rank_loc": "7", + "rank_loc_group": "7", + "score_data": 0.371, + "score_data_group": 0.371, + "score_data_loc": 0.21, + "score_data_loc_group": 0.21, + "score_loc": 0.05, + "score_loc_group": 0.05 + }, { "component": "Eutric leptosols", "componentData": "Missing Data", @@ -1416,41 +1416,22 @@ "componentID": 105416, "name": "Lithic leptosols", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "9", "rank_data_loc_group": "9", "rank_loc": "4", "rank_loc_group": "4", - "score_data": 0.681, - "score_data_group": 0.681, + "score_data": 0.8, + "score_data_group": 0.8, "score_data_loc": 0.001, "score_data_loc_group": 0.001, "score_loc": 0.138, "score_loc_group": 0.138 }, - { - "component": "Haplic ferralsols", - "componentData": "Missing Data", - "componentID": 105398, - "name": "Haplic ferralsols2", - "not_displayed": true, - "rank_data": "Not Displayed", - "rank_data_group": "2", - "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "2", - "rank_loc": "Not Displayed", - "rank_loc_group": "2", - "score_data": 0.738, - "score_data_group": 1.0, - "score_data_loc": 0.459, - "score_data_loc_group": 0.591, - "score_loc": 0.181, - "score_loc_group": 0.181 - }, { "component": "Xanthic ferralsols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 105422, "name": "Xanthic ferralsols", "not_displayed": true, @@ -1460,9 +1441,9 @@ "rank_data_loc_group": "1", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.433, + "score_data": 0.6, "score_data_group": 1.0, - "score_data_loc": 0.351, + "score_data_loc": 0.434, "score_data_loc_group": 0.634, "score_loc": 0.269, "score_loc_group": 0.269 @@ -1474,37 +1455,56 @@ "name": "Ferralic cambisols2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "8", + "rank_data_group": "7", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "6", + "rank_data_loc_group": "5", "rank_loc": "Not Displayed", "rank_loc_group": "6", - "score_data": 0.433, - "score_data_group": 0.5, - "score_data_loc": 0.251, - "score_data_loc_group": 0.284, + "score_data": 0.6, + "score_data_group": 0.642, + "score_data_loc": 0.334, + "score_data_loc_group": 0.355, "score_loc": 0.069, "score_loc_group": 0.069 }, { "component": "Rhodic ferralsols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 105419, "name": "Rhodic ferralsols2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "7", + "rank_data_group": "6", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "4", + "rank_data_loc_group": "3", "rank_loc": "Not Displayed", "rank_loc_group": "5", - "score_data": 0.308, - "score_data_group": 0.681, - "score_data_loc": 0.204, - "score_data_loc_group": 0.391, + "score_data": 0.548, + "score_data_group": 0.8, + "score_data_loc": 0.324, + "score_data_loc_group": 0.45, "score_loc": 0.1, "score_loc_group": 0.1 }, + { + "component": "Haplic ferralsols", + "componentData": "Data Complete", + "componentID": 105398, + "name": "Haplic ferralsols2", + "not_displayed": true, + "rank_data": "Not Displayed", + "rank_data_group": "2", + "rank_data_loc": "Not Displayed", + "rank_data_loc_group": "2", + "rank_loc": "Not Displayed", + "rank_loc_group": "2", + "score_data": 0.371, + "score_data_group": 1.0, + "score_data_loc": 0.276, + "score_data_loc_group": 0.591, + "score_loc": 0.181, + "score_loc_group": 0.181 + }, { "component": "Eutric leptosols", "componentData": "Missing Data", @@ -1517,7 +1517,7 @@ "rank_data_loc_group": "8", "rank_loc": "Not Displayed", "rank_loc_group": "3", - "score_data": 0.738, + "score_data": 0.371, "score_data_group": 1.0, "score_data_loc": 0.001, "score_data_loc_group": 0.001, diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.950086,17.573093].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.950086,17.573093].json index 99110c4..1bc60f0 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.950086,17.573093].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-10.950086,17.573093].json @@ -198,8 +198,8 @@ "sl3": "Clay loam", "sl4": "Clay loam", "sl5": "Clay loam", - "sl6": "Unknown", - "sl7": "Unknown" + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -381,13 +381,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1053,7 +1053,7 @@ }, { "component": "Haplic ferralsols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 104788, "name": "Haplic ferralsols", "not_displayed": false, @@ -1108,41 +1108,22 @@ "score_loc": 0.029, "score_loc_group": 0.029 }, - { - "component": "Eutric fluvisols", - "componentData": "Data Complete", - "componentID": 104795, - "name": "Eutric fluvisols", - "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": 9, - "rank_loc_group": 9, - "score_data": 0.903, - "score_data_group": 0.903, - "score_data_loc": 0.473, - "score_data_loc_group": 0.473, - "score_loc": 0.043, - "score_loc_group": 0.043 - }, { "component": "Gleyic arenosols", "componentData": "Data Complete", "componentID": 104793, "name": "Gleyic arenosols", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data": "7", + "rank_data_group": "7", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": 5, "rank_loc_group": 5, - "score_data": 0.673, - "score_data_group": 0.673, - "score_data_loc": 0.372, - "score_data_loc_group": 0.372, + "score_data": 0.837, + "score_data_group": 0.837, + "score_data_loc": 0.454, + "score_data_loc_group": 0.454, "score_loc": 0.071, "score_loc_group": 0.071 }, @@ -1152,16 +1133,16 @@ "componentID": 104796, "name": "Dystric fluvisols", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "7", - "rank_data_loc_group": "7", + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": 8, "rank_loc_group": 8, - "score_data": 0.673, - "score_data_group": 0.673, - "score_data_loc": 0.358, - "score_data_loc_group": 0.358, + "score_data": 0.837, + "score_data_group": 0.837, + "score_data_loc": 0.44, + "score_data_loc_group": 0.44, "score_loc": 0.043, "score_loc_group": 0.043 }, @@ -1171,71 +1152,90 @@ "componentID": 104797, "name": "Fibric histosols", "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", - "rank_data_loc": "8", - "rank_data_loc_group": "8", + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": 11, "rank_loc_group": 11, - "score_data": 0.629, - "score_data_group": 0.629, - "score_data_loc": 0.322, - "score_data_loc_group": 0.322, + "score_data": 0.739, + "score_data_group": 0.739, + "score_data_loc": 0.377, + "score_data_loc_group": 0.377, "score_loc": 0.014, "score_loc_group": 0.014 }, { "component": "Xanthic ferralsols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 104789, "name": "Xanthic ferralsols", "not_displayed": false, - "rank_data": "10", - "rank_data_group": "10", - "rank_data_loc": "9", - "rank_data_loc_group": "9", + "rank_data": "9", + "rank_data_group": "9", + "rank_data_loc": "8", + "rank_data_loc_group": "8", "rank_loc": 7, "rank_loc_group": 7, - "score_data": 0.516, - "score_data_group": 0.516, - "score_data_loc": 0.28, - "score_data_loc_group": 0.28, + "score_data": 0.621, + "score_data_group": 0.621, + "score_data_loc": 0.332, + "score_data_loc_group": 0.332, "score_loc": 0.043, "score_loc_group": 0.043 }, { "component": "Rhodic ferralsols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 104787, "name": "Rhodic ferralsols", "not_displayed": false, - "rank_data": "11", - "rank_data_group": "11", - "rank_data_loc": "10", - "rank_data_loc_group": "10", + "rank_data": "10", + "rank_data_group": "10", + "rank_data_loc": "9", + "rank_data_loc_group": "9", "rank_loc": 4, "rank_loc_group": 4, - "score_data": 0.383, - "score_data_group": 0.383, - "score_data_loc": 0.238, - "score_data_loc_group": 0.238, + "score_data": 0.516, + "score_data_group": 0.516, + "score_data_loc": 0.304, + "score_data_loc_group": 0.304, "score_loc": 0.093, "score_loc_group": 0.093 }, + { + "component": "Eutric fluvisols", + "componentData": "Data Complete", + "componentID": 104795, + "name": "Eutric fluvisols", + "not_displayed": false, + "rank_data": "11", + "rank_data_group": "11", + "rank_data_loc": "10", + "rank_data_loc_group": "10", + "rank_loc": 9, + "rank_loc_group": 9, + "score_data": 0.484, + "score_data_group": 0.484, + "score_data_loc": 0.264, + "score_data_loc_group": 0.264, + "score_loc": 0.043, + "score_loc_group": 0.043 + }, { "component": "Eutric leptosols", "componentData": "Missing Data", "componentID": 104791, "name": "Eutric leptosols", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "11", "rank_data_loc_group": "11", "rank_loc": 6, "rank_loc_group": 6, - "score_data": 0.845, - "score_data_group": 0.845, + "score_data": 0.883, + "score_data_group": 0.883, "score_data_loc": 0.001, "score_data_loc_group": 0.001, "score_loc": 0.057, diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-19.13333,145.5125].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-19.13333,145.5125].json index 6a1078d..13f2f0c 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-19.13333,145.5125].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-19.13333,145.5125].json @@ -475,9 +475,9 @@ } }, "texture": { - "sl1": "Loamy sand", - "sl2": "Loamy sand", - "sl3": "Loamy sand", + "sl1": "Sandy loam", + "sl2": "Sandy loam", + "sl3": "Sandy loam", "sl4": "Sandy loam", "sl5": "Sandy clay loam", "sl6": "Sandy clay loam", @@ -1415,9 +1415,9 @@ } }, "texture": { - "sl1": "Loamy sand", - "sl2": "Loamy sand", - "sl3": "Loamy sand", + "sl1": "Sandy loam", + "sl2": "Sandy loam", + "sl3": "Sandy loam", "sl4": "Sandy loam", "sl5": "Sandy loam", "sl6": "Sandy loam", @@ -1509,13 +1509,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1820,10 +1820,10 @@ "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "1", - "score_data": 0.919, - "score_data_group": 0.919, - "score_data_loc": 0.523, - "score_data_loc_group": 0.523, + "score_data": 0.943, + "score_data_group": 0.943, + "score_data_loc": 0.535, + "score_data_loc_group": 0.535, "score_loc": 0.126, "score_loc_group": 0.126 }, @@ -1839,16 +1839,16 @@ "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "7", - "score_data": 0.919, - "score_data_group": 0.919, - "score_data_loc": 0.479, - "score_data_loc_group": 0.479, + "score_data": 0.943, + "score_data_group": 0.943, + "score_data_loc": 0.491, + "score_data_loc_group": 0.491, "score_loc": 0.039, "score_loc_group": 0.039 }, { "component": "Dystric planosols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 148585, "name": "Dystric planosols", "not_displayed": false, @@ -1858,31 +1858,31 @@ "rank_data_loc_group": "3", "rank_loc": "11", "rank_loc_group": "11", - "score_data": 0.919, - "score_data_group": 0.919, - "score_data_loc": 0.463, - "score_data_loc_group": 0.463, + "score_data": 0.943, + "score_data_group": 0.943, + "score_data_loc": 0.476, + "score_data_loc_group": 0.476, "score_loc": 0.008, "score_loc_group": 0.008 }, { - "component": "Albic arenosols", + "component": "Eutric planosols", "componentData": "Data Complete", - "componentID": 148914, - "name": "Albic arenosols2", + "componentID": 149085, + "name": "Eutric planosols", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "7", + "rank_data_group": "7", "rank_data_loc": "4", "rank_data_loc_group": "4", - "rank_loc": "Not Displayed", - "rank_loc_group": "3", - "score_data": 0.821, - "score_data_group": 0.821, - "score_data_loc": 0.457, - "score_data_loc_group": 0.457, - "score_loc": 0.094, - "score_loc_group": 0.094 + "rank_loc": "2", + "rank_loc_group": "2", + "score_data": 0.83, + "score_data_group": 0.83, + "score_data_loc": 0.475, + "score_data_loc_group": 0.475, + "score_loc": 0.12, + "score_loc_group": 0.12 }, { "component": "Haplic luvisols", @@ -1890,16 +1890,16 @@ "componentID": 149088, "name": "Haplic luvisols", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "5", "rank_data_loc_group": "5", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.753, - "score_data_group": 0.753, - "score_data_loc": 0.42, - "score_data_loc_group": 0.42, + "score_data": 0.862, + "score_data_group": 0.862, + "score_data_loc": 0.474, + "score_data_loc_group": 0.474, "score_loc": 0.087, "score_loc_group": 0.087 }, @@ -1909,38 +1909,19 @@ "componentID": 148918, "name": "Acrisols2", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "6", "rank_data_loc_group": "6", "rank_loc": "Not Displayed", "rank_loc_group": "8", - "score_data": 0.753, - "score_data_group": 0.753, - "score_data_loc": 0.395, - "score_data_loc_group": 0.395, + "score_data": 0.862, + "score_data_group": 0.862, + "score_data_loc": 0.449, + "score_data_loc_group": 0.449, "score_loc": 0.037, "score_loc_group": 0.037 }, - { - "component": "Eutric planosols", - "componentData": "Data Complete", - "componentID": 149085, - "name": "Eutric planosols", - "not_displayed": false, - "rank_data": "10", - "rank_data_group": "10", - "rank_data_loc": "7", - "rank_data_loc_group": "7", - "rank_loc": "2", - "rank_loc_group": "2", - "score_data": 0.657, - "score_data_group": 0.657, - "score_data_loc": 0.389, - "score_data_loc_group": 0.389, - "score_loc": 0.12, - "score_loc_group": 0.12 - }, { "component": "Dystric regosols", "componentData": "Data Complete", @@ -1949,14 +1930,14 @@ "not_displayed": false, "rank_data": "8", "rank_data_group": "8", - "rank_data_loc": "8", - "rank_data_loc_group": "8", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": "6", "rank_loc_group": "6", - "score_data": 0.722, - "score_data_group": 0.722, - "score_data_loc": 0.388, - "score_data_loc_group": 0.388, + "score_data": 0.813, + "score_data_group": 0.813, + "score_data_loc": 0.433, + "score_data_loc_group": 0.433, "score_loc": 0.054, "score_loc_group": 0.054 }, @@ -1966,16 +1947,16 @@ "componentID": 148586, "name": "Eutric cambisols", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", - "rank_data_loc": "9", - "rank_data_loc_group": "9", + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "8", + "rank_data_loc_group": "8", "rank_loc": "12", "rank_loc_group": "12", - "score_data": 0.757, - "score_data_group": 0.757, - "score_data_loc": 0.382, - "score_data_loc_group": 0.382, + "score_data": 0.83, + "score_data_group": 0.83, + "score_data_loc": 0.419, + "score_data_loc_group": 0.419, "score_loc": 0.008, "score_loc_group": 0.008 }, @@ -1987,36 +1968,55 @@ "not_displayed": false, "rank_data": "9", "rank_data_group": "9", - "rank_data_loc": "10", - "rank_data_loc_group": "10", + "rank_data_loc": "9", + "rank_data_loc_group": "9", "rank_loc": "10", "rank_loc_group": "10", - "score_data": 0.722, - "score_data_group": 0.722, - "score_data_loc": 0.369, - "score_data_loc_group": 0.369, + "score_data": 0.813, + "score_data_group": 0.813, + "score_data_loc": 0.414, + "score_data_loc_group": 0.414, "score_loc": 0.016, "score_loc_group": 0.016 }, { "component": "Ferralsols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 148959, "name": "Ferralsols", "not_displayed": false, - "rank_data": "11", - "rank_data_group": "11", - "rank_data_loc": "11", - "rank_data_loc_group": "11", + "rank_data": "10", + "rank_data_group": "10", + "rank_data_loc": "10", + "rank_data_loc_group": "10", "rank_loc": "9", "rank_loc_group": "9", - "score_data": 0.625, - "score_data_group": 0.625, - "score_data_loc": 0.326, - "score_data_loc_group": 0.326, + "score_data": 0.769, + "score_data_group": 0.769, + "score_data_loc": 0.398, + "score_data_loc_group": 0.398, "score_loc": 0.027, "score_loc_group": 0.027 }, + { + "component": "Albic arenosols", + "componentData": "Data Complete", + "componentID": 148957, + "name": "Albic arenosols", + "not_displayed": false, + "rank_data": "11", + "rank_data_group": "11", + "rank_data_loc": "11", + "rank_data_loc_group": "11", + "rank_loc": "3", + "rank_loc_group": "3", + "score_data": 0.678, + "score_data_group": 0.678, + "score_data_loc": 0.386, + "score_data_loc_group": 0.386, + "score_loc": 0.094, + "score_loc_group": 0.094 + }, { "component": "Cambic arenosols", "componentData": "Data Complete", @@ -2029,10 +2029,10 @@ "rank_data_loc_group": "12", "rank_loc": "4", "rank_loc_group": "4", - "score_data": 0.413, - "score_data_group": 0.413, - "score_data_loc": 0.25, - "score_data_loc_group": 0.25, + "score_data": 0.572, + "score_data_group": 0.572, + "score_data_loc": 0.33, + "score_data_loc_group": 0.33, "score_loc": 0.088, "score_loc_group": 0.088 }, @@ -2048,16 +2048,35 @@ "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "1", - "score_data": 0.919, - "score_data_group": 0.919, - "score_data_loc": 0.523, - "score_data_loc_group": 0.523, + "score_data": 0.943, + "score_data_group": 0.943, + "score_data_loc": 0.535, + "score_data_loc_group": 0.535, "score_loc": 0.126, "score_loc_group": 0.126 }, + { + "component": "Eutric planosols", + "componentData": "Data Complete", + "componentID": 148917, + "name": "Eutric planosols2", + "not_displayed": true, + "rank_data": "Not Displayed", + "rank_data_group": "7", + "rank_data_loc": "Not Displayed", + "rank_data_loc_group": "4", + "rank_loc": "Not Displayed", + "rank_loc_group": "2", + "score_data": 0.813, + "score_data_group": 0.83, + "score_data_loc": 0.467, + "score_data_loc_group": 0.475, + "score_loc": 0.12, + "score_loc_group": 0.12 + }, { "component": "Chromic luvisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 149086, "name": "Chromic luvisols", "not_displayed": true, @@ -2067,32 +2086,13 @@ "rank_data_loc_group": "1", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.625, - "score_data_group": 0.919, - "score_data_loc": 0.376, - "score_data_loc_group": 0.523, + "score_data": 0.769, + "score_data_group": 0.943, + "score_data_loc": 0.448, + "score_data_loc_group": 0.535, "score_loc": 0.126, "score_loc_group": 0.126 }, - { - "component": "Eutric planosols", - "componentData": "Data Complete", - "componentID": 148917, - "name": "Eutric planosols2", - "not_displayed": true, - "rank_data": "Not Displayed", - "rank_data_group": "10", - "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "7", - "rank_loc": "Not Displayed", - "rank_loc_group": "2", - "score_data": 0.622, - "score_data_group": 0.657, - "score_data_loc": 0.371, - "score_data_loc_group": 0.389, - "score_loc": 0.12, - "score_loc_group": 0.12 - }, { "component": "Haplic luvisols", "componentData": "Data Complete", @@ -2100,53 +2100,34 @@ "name": "Haplic luvisols2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "7", + "rank_data_group": "5", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "5", "rank_loc": "Not Displayed", "rank_loc_group": "5", - "score_data": 0.625, - "score_data_group": 0.753, - "score_data_loc": 0.356, - "score_data_loc_group": 0.42, + "score_data": 0.769, + "score_data_group": 0.862, + "score_data_loc": 0.428, + "score_data_loc_group": 0.474, "score_loc": 0.087, "score_loc_group": 0.087 }, - { - "component": "Albic arenosols", - "componentData": "Data Complete", - "componentID": 148957, - "name": "Albic arenosols", - "not_displayed": true, - "rank_data": "Not Displayed", - "rank_data_group": "4", - "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "4", - "rank_loc": "3", - "rank_loc_group": "3", - "score_data": 0.557, - "score_data_group": 0.821, - "score_data_loc": 0.326, - "score_data_loc_group": 0.457, - "score_loc": 0.094, - "score_loc_group": 0.094 - }, { "component": "Acrisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 148960, "name": "Acrisols", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "6", + "rank_data_group": "4", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "6", "rank_loc": "8", "rank_loc_group": "8", - "score_data": 0.587, - "score_data_group": 0.753, - "score_data_loc": 0.312, - "score_data_loc_group": 0.395, + "score_data": 0.78, + "score_data_group": 0.862, + "score_data_loc": 0.409, + "score_data_loc_group": 0.449, "score_loc": 0.037, "score_loc_group": 0.037 }, @@ -2162,12 +2143,31 @@ "rank_data_loc_group": "2", "rank_loc": "7", "rank_loc_group": "7", - "score_data": 0.557, - "score_data_group": 0.919, - "score_data_loc": 0.298, - "score_data_loc_group": 0.479, + "score_data": 0.678, + "score_data_group": 0.943, + "score_data_loc": 0.359, + "score_data_loc_group": 0.491, "score_loc": 0.039, "score_loc_group": 0.039 + }, + { + "component": "Albic arenosols", + "componentData": "Data Complete", + "componentID": 148914, + "name": "Albic arenosols2", + "not_displayed": true, + "rank_data": "Not Displayed", + "rank_data_group": "11", + "rank_data_loc": "Not Displayed", + "rank_data_loc_group": "11", + "rank_loc": "Not Displayed", + "rank_loc_group": "3", + "score_data": 0.428, + "score_data_group": 0.678, + "score_data_loc": 0.261, + "score_data_loc_group": 0.386, + "score_loc": 0.094, + "score_loc_group": 0.094 } ] } diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-2.06972,37.29].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-2.06972,37.29].json index 1a47e83..326d506 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-2.06972,37.29].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-2.06972,37.29].json @@ -193,13 +193,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -569,13 +569,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1039,11 +1039,11 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", "sl6": "Clay loam", "sl7": "Clay loam" } @@ -1339,15 +1339,72 @@ }, "soilRank": [ { - "component": "Calcaric cambisols", - "componentData": "Missing Data", - "componentID": 111282, - "name": "Calcaric cambisols", + "component": "Dystric regosols", + "componentData": "Data Complete", + "componentID": 111300, + "name": "Dystric regosols", "not_displayed": false, "rank_data": "1", "rank_data_group": "1", "rank_data_loc": "1", "rank_data_loc_group": "1", + "rank_loc": "4", + "rank_loc_group": "4", + "score_data": 0.944, + "score_data_group": 0.944, + "score_data_loc": 0.5, + "score_data_loc_group": 0.5, + "score_loc": 0.055, + "score_loc_group": 0.055 + }, + { + "component": "Eutric fluvisols", + "componentData": "Data Complete", + "componentID": 111317, + "name": "Eutric fluvisols", + "not_displayed": false, + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "2", + "rank_data_loc_group": "2", + "rank_loc": "12", + "rank_loc_group": "12", + "score_data": 0.944, + "score_data_group": 0.944, + "score_data_loc": 0.48, + "score_data_loc_group": 0.48, + "score_loc": 0.015, + "score_loc_group": 0.015 + }, + { + "component": "Calcic vertisols", + "componentData": "Data Complete", + "componentID": 111275, + "name": "Calcic vertisols", + "not_displayed": false, + "rank_data": "3", + "rank_data_group": "3", + "rank_data_loc": "3", + "rank_data_loc_group": "3", + "rank_loc": "6", + "rank_loc_group": "6", + "score_data": 0.8, + "score_data_group": 0.8, + "score_data_loc": 0.42, + "score_data_loc_group": 0.42, + "score_loc": 0.04, + "score_loc_group": 0.04 + }, + { + "component": "Calcaric cambisols", + "componentData": "Data Complete", + "componentID": 111282, + "name": "Calcaric cambisols", + "not_displayed": false, + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "4", + "rank_data_loc_group": "4", "rank_loc": "9", "rank_loc_group": "9", "score_data": 0.653, @@ -1363,10 +1420,10 @@ "componentID": 111008, "name": "Calcic solonchaks", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", - "rank_data_loc": "2", - "rank_data_loc_group": "2", + "rank_data": "5", + "rank_data_group": "5", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": "11", "rank_loc_group": "11", "score_data": 0.653, @@ -1377,23 +1434,23 @@ "score_loc_group": 0.019 }, { - "component": "Calcic vertisols", - "componentData": "No Data", - "componentID": 111275, - "name": "Calcic vertisols", + "component": "Ferralic arenosols", + "componentData": "Data Complete", + "componentID": 111274, + "name": "Ferralic arenosols", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", - "rank_data_loc": "3", - "rank_data_loc_group": "3", - "rank_loc": "6", - "rank_loc_group": "6", - "score_data": 0.602, - "score_data_group": 0.602, - "score_data_loc": 0.321, - "score_data_loc_group": 0.321, - "score_loc": 0.04, - "score_loc_group": 0.04 + "rank_data": "7", + "rank_data_group": "7", + "rank_data_loc": "6", + "rank_data_loc_group": "6", + "rank_loc": "1", + "rank_loc_group": "1", + "score_data": 0.563, + "score_data_group": 0.563, + "score_data_loc": 0.335, + "score_data_loc_group": 0.335, + "score_loc": 0.107, + "score_loc_group": 0.107 }, { "component": "Dystric cambisols", @@ -1401,10 +1458,10 @@ "componentID": 111624, "name": "Dystric cambisols2", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "4", - "rank_data_loc_group": "4", + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": "Not Displayed", "rank_loc_group": "8", "score_data": 0.604, @@ -1414,41 +1471,22 @@ "score_loc": 0.034, "score_loc_group": 0.034 }, - { - "component": "Ferralic arenosols", - "componentData": "Data Complete", - "componentID": 111274, - "name": "Ferralic arenosols", - "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": "1", - "rank_loc_group": "1", - "score_data": 0.521, - "score_data_group": 0.521, - "score_data_loc": 0.314, - "score_data_loc_group": 0.314, - "score_loc": 0.107, - "score_loc_group": 0.107 - }, { "component": "Chromic cambisols", "componentData": "Data Complete", "componentID": 111306, "name": "Chromic cambisols", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "8", + "rank_data_loc_group": "8", "rank_loc": "3", "rank_loc_group": "3", - "score_data": 0.525, - "score_data_group": 0.525, - "score_data_loc": 0.297, - "score_data_loc_group": 0.297, + "score_data": 0.552, + "score_data_group": 0.552, + "score_data_loc": 0.311, + "score_data_loc_group": 0.311, "score_loc": 0.07, "score_loc_group": 0.07 }, @@ -1458,79 +1496,41 @@ "componentID": 111239, "name": "Haplic acrisols", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", - "rank_data_loc": "7", - "rank_data_loc_group": "7", + "rank_data": "9", + "rank_data_group": "9", + "rank_data_loc": "9", + "rank_data_loc_group": "9", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.53, - "score_data_group": 0.53, - "score_data_loc": 0.289, - "score_data_loc_group": 0.289, + "score_data": 0.54, + "score_data_group": 0.54, + "score_data_loc": 0.293, + "score_data_loc_group": 0.293, "score_loc": 0.047, "score_loc_group": 0.047 }, - { - "component": "Dystric regosols", - "componentData": "Data Complete", - "componentID": 111300, - "name": "Dystric regosols", - "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", - "rank_data_loc": "8", - "rank_data_loc_group": "8", - "rank_loc": "4", - "rank_loc_group": "4", - "score_data": 0.501, - "score_data_group": 0.501, - "score_data_loc": 0.278, - "score_data_loc_group": 0.278, - "score_loc": 0.055, - "score_loc_group": 0.055 - }, { "component": "Eutric vertisols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 111333, "name": "Eutric vertisols", "not_displayed": false, "rank_data": "10", "rank_data_group": "10", - "rank_data_loc": "9", - "rank_data_loc_group": "9", + "rank_data_loc": "10", + "rank_data_loc_group": "10", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.451, - "score_data_group": 0.451, - "score_data_loc": 0.264, - "score_data_loc_group": 0.264, + "score_data": 0.478, + "score_data_group": 0.478, + "score_data_loc": 0.278, + "score_data_loc_group": 0.278, "score_loc": 0.077, "score_loc_group": 0.077 }, - { - "component": "Eutric fluvisols", - "componentData": "Data Complete", - "componentID": 111317, - "name": "Eutric fluvisols", - "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", - "rank_data_loc": "10", - "rank_data_loc_group": "10", - "rank_loc": "12", - "rank_loc_group": "12", - "score_data": 0.501, - "score_data_group": 0.501, - "score_data_loc": 0.258, - "score_data_loc_group": 0.258, - "score_loc": 0.015, - "score_loc_group": 0.015 - }, { "component": "Chromic luvisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 111210, "name": "Chromic luvisols", "not_displayed": false, @@ -1540,10 +1540,10 @@ "rank_data_loc_group": "11", "rank_loc": "7", "rank_loc_group": "7", - "score_data": 0.341, - "score_data_group": 0.341, - "score_data_loc": 0.188, - "score_data_loc_group": 0.188, + "score_data": 0.351, + "score_data_group": 0.351, + "score_data_loc": 0.193, + "score_data_loc_group": 0.193, "score_loc": 0.036, "score_loc_group": 0.036 }, @@ -1559,10 +1559,10 @@ "rank_data_loc_group": "12", "rank_loc": "10", "rank_loc_group": "10", - "score_data": 0.181, - "score_data_group": 0.181, - "score_data_loc": 0.105, - "score_data_loc_group": 0.105, + "score_data": 0.219, + "score_data_group": 0.219, + "score_data_loc": 0.124, + "score_data_loc_group": 0.124, "score_loc": 0.028, "score_loc_group": 0.028 }, @@ -1573,14 +1573,14 @@ "name": "Dystric cambisols", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "3", + "rank_data_group": "6", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "4", + "rank_data_loc_group": "7", "rank_loc": "8", "rank_loc_group": "8", - "score_data": 0.451, + "score_data": 0.478, "score_data_group": 0.604, - "score_data_loc": 0.243, + "score_data_loc": 0.256, "score_data_loc_group": 0.319, "score_loc": 0.034, "score_loc_group": 0.034 @@ -1597,10 +1597,10 @@ "rank_data_loc_group": "11", "rank_loc": "Not Displayed", "rank_loc_group": "7", - "score_data": 0.0, - "score_data_group": 0.341, - "score_data_loc": 0.018, - "score_data_loc_group": 0.188, + "score_data": 0.043, + "score_data_group": 0.351, + "score_data_loc": 0.039, + "score_data_loc_group": 0.193, "score_loc": 0.036, "score_loc_group": 0.036 } diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-24.53333,33.36667].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-24.53333,33.36667].json index 3a84dd3..d33afc1 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-24.53333,33.36667].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[-24.53333,33.36667].json @@ -851,9 +851,9 @@ } }, "texture": { - "sl1": "Loamy sand", - "sl2": "Loamy sand", - "sl3": "Loamy sand", + "sl1": "Sandy loam", + "sl2": "Sandy loam", + "sl3": "Sandy loam", "sl4": "Sandy loam", "sl5": "Sandy clay loam", "sl6": "Sandy clay loam", @@ -1039,13 +1039,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1162,10 +1162,10 @@ "rank_data_loc_group": "1", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.9, - "score_data_group": 0.9, - "score_data_loc": 0.539, - "score_data_loc_group": 0.539, + "score_data": 0.924, + "score_data_group": 0.924, + "score_data_loc": 0.551, + "score_data_loc_group": 0.551, "score_loc": 0.178, "score_loc_group": 0.178 }, @@ -1181,10 +1181,10 @@ "rank_data_loc_group": "2", "rank_loc": "4", "rank_loc_group": "4", - "score_data": 0.9, - "score_data_group": 0.9, - "score_data_loc": 0.514, - "score_data_loc_group": 0.514, + "score_data": 0.924, + "score_data_group": 0.924, + "score_data_loc": 0.526, + "score_data_loc_group": 0.526, "score_loc": 0.127, "score_loc_group": 0.127 }, @@ -1200,10 +1200,10 @@ "rank_data_loc_group": "3", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.9, - "score_data_group": 0.9, - "score_data_loc": 0.505, - "score_data_loc_group": 0.505, + "score_data": 0.924, + "score_data_group": 0.924, + "score_data_loc": 0.516, + "score_data_loc_group": 0.516, "score_loc": 0.109, "score_loc_group": 0.109 }, @@ -1219,13 +1219,32 @@ "rank_data_loc_group": "4", "rank_loc": "6", "rank_loc_group": "6", - "score_data": 0.9, - "score_data_group": 0.9, - "score_data_loc": 0.5, - "score_data_loc_group": 0.5, + "score_data": 0.924, + "score_data_group": 0.924, + "score_data_loc": 0.512, + "score_data_loc_group": 0.512, "score_loc": 0.1, "score_loc_group": 0.1 }, + { + "component": "Salic fluvisols", + "componentData": "Data Complete", + "componentID": 113476, + "name": "Salic fluvisols", + "not_displayed": false, + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "5", + "rank_data_loc_group": "5", + "rank_loc": "1", + "rank_loc_group": "1", + "score_data": 0.818, + "score_data_group": 0.818, + "score_data_loc": 0.5, + "score_data_loc_group": 0.5, + "score_loc": 0.182, + "score_loc_group": 0.182 + }, { "component": "Eutric planosols", "componentData": "Data Complete", @@ -1234,92 +1253,73 @@ "not_displayed": false, "rank_data": "2", "rank_data_group": "2", - "rank_data_loc": "5", - "rank_data_loc_group": "5", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": "7", "rank_loc_group": "7", - "score_data": 0.9, - "score_data_group": 0.9, - "score_data_loc": 0.487, - "score_data_loc_group": 0.487, + "score_data": 0.924, + "score_data_group": 0.924, + "score_data_loc": 0.498, + "score_data_loc_group": 0.498, "score_loc": 0.073, "score_loc_group": 0.073 }, { - "component": "Eutric fluvisols", - "componentData": "Data Complete", - "componentID": 113211, - "name": "Eutric fluvisols2", - "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", - "rank_data_loc": "6", - "rank_data_loc_group": "6", - "rank_loc": "Not Displayed", - "rank_loc_group": "3", - "score_data": 0.813, - "score_data_group": 0.813, - "score_data_loc": 0.47, - "score_data_loc_group": 0.47, - "score_loc": 0.127, - "score_loc_group": 0.127 - }, - { - "component": "Salic fluvisols", + "component": "Gleyic solonetz", "componentData": "Data Complete", - "componentID": 113476, - "name": "Salic fluvisols", + "componentID": 113054, + "name": "Gleyic solonetz", "not_displayed": false, "rank_data": "7", "rank_data_group": "7", "rank_data_loc": "7", "rank_data_loc_group": "7", - "rank_loc": "1", - "rank_loc_group": "1", - "score_data": 0.756, - "score_data_group": 0.756, - "score_data_loc": 0.469, - "score_data_loc_group": 0.469, - "score_loc": 0.182, - "score_loc_group": 0.182 + "rank_loc": "8", + "rank_loc_group": "8", + "score_data": 0.697, + "score_data_group": 0.697, + "score_data_loc": 0.376, + "score_data_loc_group": 0.376, + "score_loc": 0.055, + "score_loc_group": 0.055 }, { - "component": "Gleyic solonetz", + "component": "Umbric gleysols", "componentData": "Data Complete", - "componentID": 113054, - "name": "Gleyic solonetz", + "componentID": 113478, + "name": "Umbric gleysols", "not_displayed": false, "rank_data": "8", "rank_data_group": "8", "rank_data_loc": "8", "rank_data_loc_group": "8", - "rank_loc": "8", - "rank_loc_group": "8", - "score_data": 0.576, - "score_data_group": 0.576, - "score_data_loc": 0.315, - "score_data_loc_group": 0.315, - "score_loc": 0.055, - "score_loc_group": 0.055 + "rank_loc": "9", + "rank_loc_group": "9", + "score_data": 0.697, + "score_data_group": 0.697, + "score_data_loc": 0.367, + "score_data_loc_group": 0.367, + "score_loc": 0.036, + "score_loc_group": 0.036 }, { - "component": "Umbric gleysols", - "componentData": "Missing Data", - "componentID": 113478, - "name": "Umbric gleysols", + "component": "Eutric fluvisols", + "componentData": "Data Complete", + "componentID": 113479, + "name": "Eutric fluvisols", "not_displayed": false, "rank_data": "9", "rank_data_group": "9", "rank_data_loc": "9", "rank_data_loc_group": "9", - "rank_loc": "9", - "rank_loc_group": "9", - "score_data": 0.576, - "score_data_group": 0.576, - "score_data_loc": 0.306, - "score_data_loc_group": 0.306, - "score_loc": 0.036, - "score_loc_group": 0.036 + "rank_loc": "3", + "rank_loc_group": "3", + "score_data": 0.534, + "score_data_group": 0.534, + "score_data_loc": 0.331, + "score_data_loc_group": 0.331, + "score_loc": 0.127, + "score_loc_group": 0.127 }, { "component": "Gleyic arenosols", @@ -1333,10 +1333,10 @@ "rank_data_loc_group": "10", "rank_loc": "10", "rank_loc_group": "10", - "score_data": 0.244, - "score_data_group": 0.244, - "score_data_loc": 0.129, - "score_data_loc_group": 0.129, + "score_data": 0.534, + "score_data_group": 0.534, + "score_data_loc": 0.274, + "score_data_loc_group": 0.274, "score_loc": 0.013, "score_loc_group": 0.013 }, @@ -1352,29 +1352,29 @@ "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.576, - "score_data_group": 0.9, - "score_data_loc": 0.377, - "score_data_loc_group": 0.539, + "score_data": 0.697, + "score_data_group": 0.924, + "score_data_loc": 0.437, + "score_data_loc_group": 0.551, "score_loc": 0.178, "score_loc_group": 0.178 }, { "component": "Eutric fluvisols", "componentData": "Data Complete", - "componentID": 113479, - "name": "Eutric fluvisols", + "componentID": 113211, + "name": "Eutric fluvisols2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "6", + "rank_data_group": "9", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "6", - "rank_loc": "3", + "rank_data_loc_group": "9", + "rank_loc": "Not Displayed", "rank_loc_group": "3", - "score_data": 0.244, - "score_data_group": 0.813, - "score_data_loc": 0.186, - "score_data_loc_group": 0.47, + "score_data": 0.182, + "score_data_group": 0.534, + "score_data_loc": 0.155, + "score_data_loc_group": 0.331, "score_loc": 0.127, "score_loc_group": 0.127 } diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[15.73333,120.31667].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[15.73333,120.31667].json index 927c41c..3c6d8f5 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[15.73333,120.31667].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[15.73333,120.31667].json @@ -103,9 +103,9 @@ "sl2": "Sandy clay loam", "sl3": "Sandy clay loam", "sl4": "Clay loam", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1101,13 +1101,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } } ] @@ -1120,7 +1120,7 @@ "soilRank": [ { "component": "Haplic nitisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 141607, "name": "Haplic nitisols", "not_displayed": false, @@ -1130,10 +1130,10 @@ "rank_data_loc_group": "1", "rank_loc": 1, "rank_loc_group": 1, - "score_data": 0.475, - "score_data_group": 0.475, - "score_data_loc": 0.323, - "score_data_loc_group": 0.323, + "score_data": 0.648, + "score_data_group": 0.648, + "score_data_loc": 0.409, + "score_data_loc_group": 0.409, "score_loc": 0.17, "score_loc_group": 0.17 }, @@ -1143,35 +1143,35 @@ "componentID": 142290, "name": "Eutric cambisols", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", + "rank_data": "2", + "rank_data_group": "2", "rank_data_loc": "2", "rank_data_loc_group": "2", "rank_loc": 2, "rank_loc_group": 2, - "score_data": 0.515, - "score_data_group": 0.515, - "score_data_loc": 0.317, - "score_data_loc_group": 0.317, + "score_data": 0.687, + "score_data_group": 0.687, + "score_data_loc": 0.404, + "score_data_loc_group": 0.404, "score_loc": 0.12, "score_loc_group": 0.12 }, { "component": "Gleyic cambisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 142288, "name": "Gleyic cambisols", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "3", "rank_data_loc_group": "3", "rank_loc": 4, "rank_loc_group": 4, - "score_data": 0.515, - "score_data_group": 0.515, - "score_data_loc": 0.317, - "score_data_loc_group": 0.317, + "score_data": 0.687, + "score_data_group": 0.687, + "score_data_loc": 0.404, + "score_data_loc_group": 0.404, "score_loc": 0.12, "score_loc_group": 0.12 }, @@ -1181,54 +1181,35 @@ "componentID": 142291, "name": "Dystric cambisols", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "1", + "rank_data_group": "1", "rank_data_loc": "4", "rank_data_loc_group": "4", "rank_loc": 5, "rank_loc_group": 5, - "score_data": 0.515, - "score_data_group": 0.515, - "score_data_loc": 0.307, - "score_data_loc_group": 0.307, + "score_data": 0.687, + "score_data_group": 0.687, + "score_data_loc": 0.394, + "score_data_loc_group": 0.394, "score_loc": 0.1, "score_loc_group": 0.1 }, - { - "component": "Gleysols", - "componentData": "Missing Data", - "componentID": 142293, - "name": "Gleysols", - "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": 10, - "rank_loc_group": 10, - "score_data": 0.566, - "score_data_group": 0.566, - "score_data_loc": 0.293, - "score_data_loc_group": 0.293, - "score_loc": 0.02, - "score_loc_group": 0.02 - }, { "component": "Eutric fluvisols", "componentData": "Data Complete", "componentID": 142740, "name": "Eutric fluvisols", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": 7, "rank_loc_group": 7, - "score_data": 0.464, - "score_data_group": 0.464, - "score_data_loc": 0.267, - "score_data_loc_group": 0.267, + "score_data": 0.636, + "score_data_group": 0.636, + "score_data_loc": 0.353, + "score_data_loc_group": 0.353, "score_loc": 0.07, "score_loc_group": 0.07 }, @@ -1238,76 +1219,76 @@ "componentID": 141609, "name": "Haplic acrisols", "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", - "rank_data_loc": "7", - "rank_data_loc_group": "7", + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": 3, "rank_loc_group": 3, - "score_data": 0.402, - "score_data_group": 0.402, - "score_data_loc": 0.261, - "score_data_loc_group": 0.261, + "score_data": 0.575, + "score_data_group": 0.575, + "score_data_loc": 0.347, + "score_data_loc_group": 0.347, "score_loc": 0.12, "score_loc_group": 0.12 }, { "component": "Eutric gleysols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 142741, "name": "Eutric gleysols", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", - "rank_data_loc": "8", - "rank_data_loc_group": "8", + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": 9, "rank_loc_group": 9, - "score_data": 0.451, - "score_data_group": 0.451, - "score_data_loc": 0.24, - "score_data_loc_group": 0.24, + "score_data": 0.653, + "score_data_group": 0.653, + "score_data_loc": 0.342, + "score_data_loc_group": 0.342, "score_loc": 0.03, "score_loc_group": 0.03 }, + { + "component": "Gleysols", + "componentData": "Data Complete", + "componentID": 142293, + "name": "Gleysols", + "not_displayed": false, + "rank_data": "7", + "rank_data_group": "7", + "rank_data_loc": "8", + "rank_data_loc_group": "8", + "rank_loc": 10, + "rank_loc_group": 10, + "score_data": 0.587, + "score_data_group": 0.587, + "score_data_loc": 0.303, + "score_data_loc_group": 0.303, + "score_loc": 0.02, + "score_loc_group": 0.02 + }, { "component": "Humic acrisols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 142155, "name": "Humic acrisols", "not_displayed": false, - "rank_data": "10", - "rank_data_group": "10", + "rank_data": "9", + "rank_data_group": "9", "rank_data_loc": "9", "rank_data_loc_group": "9", "rank_loc": 12, "rank_loc_group": 12, - "score_data": 0.337, - "score_data_group": 0.337, - "score_data_loc": 0.174, - "score_data_loc_group": 0.174, + "score_data": 0.508, + "score_data_group": 0.508, + "score_data_loc": 0.259, + "score_data_loc_group": 0.259, "score_loc": 0.01, "score_loc_group": 0.01 }, - { - "component": "Haplic luvisols", - "componentData": "Data Complete", - "componentID": 141610, - "name": "Haplic luvisols", - "not_displayed": false, - "rank_data": "11", - "rank_data_group": "11", - "rank_data_loc": "10", - "rank_data_loc_group": "10", - "rank_loc": 8, - "rank_loc_group": 8, - "score_data": 0.208, - "score_data_group": 0.208, - "score_data_loc": 0.124, - "score_data_loc_group": 0.124, - "score_loc": 0.04, - "score_loc_group": 0.04 - }, { "component": "Gleyic luvisols", "componentData": "Data Complete", @@ -1316,31 +1297,50 @@ "not_displayed": false, "rank_data": "12", "rank_data_group": "12", - "rank_data_loc": "11", - "rank_data_loc_group": "11", + "rank_data_loc": "10", + "rank_data_loc_group": "10", "rank_loc": 6, "rank_loc_group": 6, - "score_data": 0.157, - "score_data_group": 0.157, - "score_data_loc": 0.118, - "score_data_loc_group": 0.118, + "score_data": 0.379, + "score_data_group": 0.379, + "score_data_loc": 0.23, + "score_data_loc_group": 0.23, "score_loc": 0.08, "score_loc_group": 0.08 }, + { + "component": "Haplic luvisols", + "componentData": "Data Complete", + "componentID": 141610, + "name": "Haplic luvisols", + "not_displayed": false, + "rank_data": "11", + "rank_data_group": "11", + "rank_data_loc": "11", + "rank_data_loc_group": "11", + "rank_loc": 8, + "rank_loc_group": 8, + "score_data": 0.398, + "score_data_group": 0.398, + "score_data_loc": 0.219, + "score_data_loc_group": 0.219, + "score_loc": 0.04, + "score_loc_group": 0.04 + }, { "component": "Lithic leptosols", "componentData": "Missing Data", "componentID": 142152, "name": "Lithic leptosols", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "10", + "rank_data_group": "10", "rank_data_loc": "12", "rank_data_loc_group": "12", "rank_loc": 11, "rank_loc_group": 11, - "score_data": 0.465, - "score_data_group": 0.465, + "score_data": 0.471, + "score_data_group": 0.471, "score_data_loc": 0.001, "score_data_loc_group": 0.001, "score_loc": 0.02, diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[37.33333,-5.4].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[37.33333,-5.4].json index 7cb5818..105c1ec 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[37.33333,-5.4].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[37.33333,-5.4].json @@ -99,13 +99,13 @@ } }, "texture": { - "sl1": "Unknown", - "sl2": "Unknown", - "sl3": "Unknown", - "sl4": "Unknown", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl1": "Clay", + "sl2": "Clay", + "sl3": "Clay", + "sl4": "Clay", + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1189,15 +1189,34 @@ }, "soilRank": [ { - "component": "Calcaric cambisols", + "component": "Calcaric regosols", "componentData": "Data Complete", - "componentID": 157533, - "name": "Calcaric cambisols", + "componentID": 157495, + "name": "Calcaric regosols", "not_displayed": false, "rank_data": "1", "rank_data_group": "1", "rank_data_loc": "1", "rank_data_loc_group": "1", + "rank_loc": "9", + "rank_loc_group": "9", + "score_data": 1.0, + "score_data_group": 1.0, + "score_data_loc": 0.521, + "score_data_loc_group": 0.521, + "score_loc": 0.043, + "score_loc_group": 0.043 + }, + { + "component": "Calcaric cambisols", + "componentData": "Data Complete", + "componentID": 157533, + "name": "Calcaric cambisols", + "not_displayed": false, + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "2", + "rank_data_loc_group": "2", "rank_loc": "2", "rank_loc_group": "2", "score_data": 0.548, @@ -1209,14 +1228,14 @@ }, { "component": "Eutric vertisols", - "componentData": "No Data", + "componentData": "Data Complete", "componentID": 157428, "name": "Eutric vertisols", "not_displayed": false, "rank_data": "6", "rank_data_group": "6", - "rank_data_loc": "2", - "rank_data_loc_group": "2", + "rank_data_loc": "3", + "rank_data_loc_group": "3", "rank_loc": "1", "rank_loc_group": "1", "score_data": 0.337, @@ -1226,25 +1245,6 @@ "score_loc": 0.278, "score_loc_group": 0.278 }, - { - "component": "Calcaric regosols", - "componentData": "Data Complete", - "componentID": 157511, - "name": "Calcaric regosols2", - "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "3", - "rank_data_loc_group": "3", - "rank_loc": "Not Displayed", - "rank_loc_group": "9", - "score_data": 0.396, - "score_data_group": 0.396, - "score_data_loc": 0.22, - "score_data_loc_group": 0.22, - "score_loc": 0.043, - "score_loc_group": 0.043 - }, { "component": "Eutric regosols", "componentData": "Data Complete", @@ -1323,7 +1323,7 @@ }, { "component": "Dystric planosols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 157549, "name": "Dystric planosols", "not_displayed": false, @@ -1365,8 +1365,8 @@ "componentID": 157535, "name": "Lithic leptosols", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "10", "rank_data_loc_group": "10", "rank_loc": "7", @@ -1404,14 +1404,14 @@ "name": "Calcaric cambisols2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "1", + "rank_data_group": "2", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "1", + "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.339, + "score_data": 0.386, "score_data_group": 0.548, - "score_data_loc": 0.303, + "score_data_loc": 0.327, "score_data_loc_group": 0.408, "score_loc": 0.268, "score_loc_group": 0.268 @@ -1419,19 +1419,19 @@ { "component": "Calcaric regosols", "componentData": "Data Complete", - "componentID": 157495, - "name": "Calcaric regosols", + "componentID": 157511, + "name": "Calcaric regosols2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "3", + "rank_data_group": "1", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "3", - "rank_loc": "9", + "rank_data_loc_group": "1", + "rank_loc": "Not Displayed", "rank_loc_group": "9", - "score_data": 0.366, - "score_data_group": 0.396, - "score_data_loc": 0.205, - "score_data_loc_group": 0.22, + "score_data": 0.438, + "score_data_group": 1.0, + "score_data_loc": 0.24, + "score_data_loc_group": 0.521, "score_loc": 0.043, "score_loc_group": 0.043 } diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[48.71667,126.13333].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[48.71667,126.13333].json index 32b653f..84a1838 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[48.71667,126.13333].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[48.71667,126.13333].json @@ -701,7 +701,7 @@ }, { "component": "Gleyic phaeozems", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 103605, "name": "Gleyic phaeozems", "not_displayed": false, diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[7.3318,-1.4631].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[7.3318,-1.4631].json index 767cacb..aa1f2d1 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[7.3318,-1.4631].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[7.3318,-1.4631].json @@ -1128,7 +1128,7 @@ "soilRank": [ { "component": "Eutric gleysols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 134228, "name": "Eutric gleysols", "not_displayed": false, @@ -1147,7 +1147,7 @@ }, { "component": "Dystric gleysols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 133232, "name": "Dystric gleysols", "not_displayed": false, @@ -1185,7 +1185,7 @@ }, { "component": "Dystric planosols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 133240, "name": "Dystric planosols", "not_displayed": false, @@ -1242,7 +1242,7 @@ }, { "component": "Ferric acrisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 133233, "name": "Ferric acrisols", "not_displayed": false, @@ -1318,7 +1318,7 @@ }, { "component": "Dystric plinthosols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 133239, "name": "Dystric plinthosols", "not_displayed": false, diff --git a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[8.48333,76.95].json b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[8.48333,76.95].json index 3cfde77..14bdfb4 100644 --- a/soil_id/tests/global/__snapshots__/test_global/test_soil_location[8.48333,76.95].json +++ b/soil_id/tests/global/__snapshots__/test_global/test_soil_location[8.48333,76.95].json @@ -385,9 +385,9 @@ "sl2": "Sandy clay loam", "sl3": "Sandy clay loam", "sl4": "Clay loam", - "sl5": "Unknown", - "sl6": "Unknown", - "sl7": "Unknown" + "sl5": "Clay", + "sl6": "Clay", + "sl7": "Clay" } }, { @@ -1024,16 +1024,35 @@ "model": "v2" }, "soilRank": [ + { + "component": "Haplic solonchaks", + "componentData": "Data Complete", + "componentID": 136284, + "name": "Haplic solonchaks", + "not_displayed": false, + "rank_data": "1", + "rank_data_group": "1", + "rank_data_loc": "1", + "rank_data_loc_group": "1", + "rank_loc": 9, + "rank_loc_group": 9, + "score_data": 0.804, + "score_data_group": 0.804, + "score_data_loc": 0.43, + "score_data_loc_group": 0.43, + "score_loc": 0.055, + "score_loc_group": 0.055 + }, { "component": "Haplic nitisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 136007, "name": "Haplic nitisols", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", - "rank_data_loc": "1", - "rank_data_loc_group": "1", + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "2", + "rank_data_loc_group": "2", "rank_loc": 4, "rank_loc_group": 4, "score_data": 0.524, @@ -1043,16 +1062,35 @@ "score_loc": 0.112, "score_loc_group": 0.112 }, + { + "component": "Albic arenosols", + "componentData": "Data Complete", + "componentID": 136286, + "name": "Albic arenosols", + "not_displayed": false, + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "3", + "rank_data_loc_group": "3", + "rank_loc": 7, + "rank_loc_group": 7, + "score_data": 0.577, + "score_data_group": 0.577, + "score_data_loc": 0.316, + "score_data_loc_group": 0.316, + "score_loc": 0.055, + "score_loc_group": 0.055 + }, { "component": "Calcaric regosols", "componentData": "Data Complete", "componentID": 136285, "name": "Calcaric regosols", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", - "rank_data_loc": "2", - "rank_data_loc_group": "2", + "rank_data": "3", + "rank_data_group": "3", + "rank_data_loc": "4", + "rank_data_loc_group": "4", "rank_loc": 8, "rank_loc_group": 8, "score_data": 0.568, @@ -1064,14 +1102,14 @@ }, { "component": "Ferric acrisols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 136010, "name": "Ferric acrisols", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "3", - "rank_data_loc_group": "3", + "rank_data": "5", + "rank_data_group": "5", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": 6, "rank_loc_group": 6, "score_data": 0.484, @@ -1083,14 +1121,14 @@ }, { "component": "Gleysols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 136282, "name": "Gleysols", "not_displayed": false, "rank_data": "8", "rank_data_group": "8", - "rank_data_loc": "4", - "rank_data_loc_group": "4", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": 2, "rank_loc_group": 2, "score_data": 0.401, @@ -1100,35 +1138,16 @@ "score_loc": 0.155, "score_loc_group": 0.155 }, - { - "component": "Albic arenosols", - "componentData": "Data Complete", - "componentID": 136286, - "name": "Albic arenosols", - "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": 7, - "rank_loc_group": 7, - "score_data": 0.444, - "score_data_group": 0.444, - "score_data_loc": 0.25, - "score_data_loc_group": 0.25, - "score_loc": 0.055, - "score_loc_group": 0.055 - }, { "component": "Dystric plinthosols", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 134462, "name": "Dystric plinthosols", "not_displayed": false, "rank_data": "9", "rank_data_group": "9", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": 3, "rank_loc_group": 3, "score_data": 0.349, @@ -1138,33 +1157,14 @@ "score_loc": 0.134, "score_loc_group": 0.134 }, - { - "component": "Haplic solonchaks", - "componentData": "Data Complete", - "componentID": 136284, - "name": "Haplic solonchaks", - "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "7", - "rank_data_loc_group": "7", - "rank_loc": 9, - "rank_loc_group": 9, - "score_data": 0.427, - "score_data_group": 0.427, - "score_data_loc": 0.241, - "score_data_loc_group": 0.241, - "score_loc": 0.055, - "score_loc_group": 0.055 - }, { "component": "Dystric fluvisols", "componentData": "Data Complete", "componentID": 136009, "name": "Dystric fluvisols", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "7", + "rank_data_group": "7", "rank_data_loc": "8", "rank_data_loc_group": "8", "rank_loc": 10, @@ -1226,8 +1226,8 @@ "rank_data_loc_group": "11", "rank_loc": 11, "rank_loc_group": 11, - "score_data": 0.432, - "score_data_group": 0.432, + "score_data": 0.478, + "score_data_group": 0.478, "score_data_loc": 0.001, "score_data_loc_group": 0.001, "score_loc": 0.022, diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[33.81246789,-101.9733687].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[33.81246789,-101.9733687].json index 8b1a6bf..78d7dcd 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[33.81246789,-101.9733687].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[33.81246789,-101.9733687].json @@ -2,17 +2,17 @@ "list": { "AWS_PIW90": 5.12, "Soil Data Value": [ - [ - "rfv_class_30", - 0.12794865070214412 - ], [ "texture_0", - 0.0 + 2.2159469253138058 ], [ "texture_30", - 0.0 + 2.2159469253138058 + ], + [ + "rfv_class_30", + 0.12794865070214412 ], [ "rfv_class_0", @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R077CY022TX" + "R077CY027TX" ], "ecoclassname": [ - "Deep Hardland 16-21 Pz" + "Playa 16-21 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY022TX" + "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY027TX" ] } }, @@ -209,13 +209,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R077CY022TX" + "R077CY027TX" ], "ecoclassname": [ - "Deep Hardland 16-21 Pz" + "Playa 16-21 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY022TX" + "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY027TX" ] } }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R077CY036TX" + "R077CY022TX" ], "ecoclassname": [ - "Sandy Loam 16-21 Pz" + "Deep Hardland 16-21 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY036TX" + "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY022TX" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R077CY027TX" + "R077CY022TX" ], "ecoclassname": [ - "Playa 16-21 Pz" + "Deep Hardland 16-21 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY027TX" + "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY022TX" ] } }, @@ -433,13 +433,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R077CY027TX" + "R077CY036TX" ], "ecoclassname": [ - "Playa 16-21 Pz" + "Sandy Loam 16-21 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY027TX" + "https://edit.sc.egov.usda.gov/catalogs/esd/077C/R077CY036TX" ] } }, @@ -659,20 +659,20 @@ "soilRank": [ { "component": "Randall", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 27108933, "name": "Randall", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "9", + "rank_data_group": "9", "rank_data_loc": "1", "rank_data_loc_group": "1", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.533, - "score_data_group": 0.533, - "score_data_loc": 0.504, - "score_data_loc_group": 0.504, + "score_data": 0.437, + "score_data_group": 0.437, + "score_data_loc": 0.456, + "score_data_loc_group": 0.456, "score_loc": 0.474, "score_loc_group": 0.474 }, @@ -682,16 +682,16 @@ "componentID": 27108855, "name": "Acuff2", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "1", + "rank_data_group": "1", "rank_data_loc": "2", "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.504, - "score_data_group": 0.504, - "score_data_loc": 0.379, - "score_data_loc_group": 0.379, + "score_data": 0.583, + "score_data_group": 0.583, + "score_data_loc": 0.418, + "score_data_loc_group": 0.418, "score_loc": 0.253, "score_loc_group": 0.253 }, @@ -701,56 +701,37 @@ "componentID": 27108854, "name": "Olton", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "6", + "rank_data_group": "6", "rank_data_loc": "3", "rank_data_loc_group": "3", "rank_loc": "3", "rank_loc_group": "3", - "score_data": 0.546, - "score_data_group": 0.546, - "score_data_loc": 0.336, - "score_data_loc_group": 0.336, + "score_data": 0.488, + "score_data_group": 0.488, + "score_data_loc": 0.307, + "score_data_loc_group": 0.307, "score_loc": 0.126, "score_loc_group": 0.126 }, { - "component": "Friona", + "component": "Mclean", "componentData": "Data Complete", - "componentID": 27108892, - "name": "Friona", + "componentID": 27108934, + "name": "Mclean", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "4", "rank_data_loc_group": "4", - "rank_loc": "7", - "rank_loc_group": "7", - "score_data": 0.57, - "score_data_group": 0.57, - "score_data_loc": 0.292, - "score_data_loc_group": 0.292, - "score_loc": 0.014, - "score_loc_group": 0.014 - }, - { - "component": "Estacado", - "componentData": "Data Complete", - "componentID": 27108891, - "name": "Estacado", - "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": "6", - "rank_loc_group": "6", - "score_data": 0.548, - "score_data_group": 0.548, - "score_data_loc": 0.285, - "score_data_loc_group": 0.285, - "score_loc": 0.021, - "score_loc_group": 0.021 + "rank_loc": "4", + "rank_loc_group": "4", + "score_data": 0.518, + "score_data_group": 0.518, + "score_data_loc": 0.289, + "score_data_loc_group": 0.289, + "score_loc": 0.059, + "score_loc_group": 0.059 }, { "component": "Amarillo", @@ -760,52 +741,33 @@ "not_displayed": false, "rank_data": "2", "rank_data_group": "2", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": "8", "rank_loc_group": "8", - "score_data": 0.553, - "score_data_group": 0.553, - "score_data_loc": 0.282, - "score_data_loc_group": 0.282, + "score_data": 0.541, + "score_data_group": 0.541, + "score_data_loc": 0.276, + "score_data_loc_group": 0.276, "score_loc": 0.011, "score_loc_group": 0.011 }, - { - "component": "Mclean", - "componentData": "Missing Data", - "componentID": 27108934, - "name": "Mclean", - "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "7", - "rank_data_loc_group": "7", - "rank_loc": "4", - "rank_loc_group": "4", - "score_data": 0.5, - "score_data_group": 0.5, - "score_data_loc": 0.28, - "score_data_loc_group": 0.28, - "score_loc": 0.059, - "score_loc_group": 0.059 - }, { "component": "Lockney", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 27108935, "name": "Lockney", "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", - "rank_data_loc": "8", - "rank_data_loc_group": "8", + "rank_data": "3", + "rank_data_group": "3", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.447, - "score_data_group": 0.447, - "score_data_loc": 0.239, - "score_data_loc_group": 0.239, + "score_data": 0.519, + "score_data_group": 0.519, + "score_data_loc": 0.274, + "score_data_loc_group": 0.274, "score_loc": 0.03, "score_loc_group": 0.03 }, @@ -815,19 +777,57 @@ "componentID": 27108856, "name": "Pullman", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", - "rank_data_loc": "9", - "rank_data_loc_group": "9", + "rank_data": "5", + "rank_data_group": "5", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": "9", "rank_loc_group": "9", - "score_data": 0.462, - "score_data_group": 0.462, - "score_data_loc": 0.237, - "score_data_loc_group": 0.237, + "score_data": 0.505, + "score_data_group": 0.505, + "score_data_loc": 0.258, + "score_data_loc_group": 0.258, "score_loc": 0.011, "score_loc_group": 0.011 }, + { + "component": "Estacado", + "componentData": "Data Complete", + "componentID": 27108891, + "name": "Estacado", + "not_displayed": false, + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "8", + "rank_data_loc_group": "8", + "rank_loc": "6", + "rank_loc_group": "6", + "score_data": 0.444, + "score_data_group": 0.444, + "score_data_loc": 0.233, + "score_data_loc_group": 0.233, + "score_loc": 0.021, + "score_loc_group": 0.021 + }, + { + "component": "Friona", + "componentData": "Data Complete", + "componentID": 27108892, + "name": "Friona", + "not_displayed": false, + "rank_data": "7", + "rank_data_group": "7", + "rank_data_loc": "9", + "rank_data_loc_group": "9", + "rank_loc": "7", + "rank_loc_group": "7", + "score_data": 0.45, + "score_data_group": 0.45, + "score_data_loc": 0.232, + "score_data_loc_group": 0.232, + "score_loc": 0.014, + "score_loc_group": 0.014 + }, { "component": "Acuff", "componentData": "Data Complete", @@ -835,15 +835,15 @@ "name": "Acuff", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "6", + "rank_data_group": "1", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "2", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.49, - "score_data_group": 0.504, - "score_data_loc": 0.372, - "score_data_loc_group": 0.379, + "score_data": 0.512, + "score_data_group": 0.583, + "score_data_loc": 0.383, + "score_data_loc_group": 0.418, "score_loc": 0.253, "score_loc_group": 0.253 }, @@ -854,15 +854,15 @@ "name": "Estacado2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "3", + "rank_data_group": "8", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "5", + "rank_data_loc_group": "8", "rank_loc": "Not Displayed", "rank_loc_group": "6", - "score_data": 0.441, - "score_data_group": 0.548, - "score_data_loc": 0.231, - "score_data_loc_group": 0.285, + "score_data": 0.43, + "score_data_group": 0.444, + "score_data_loc": 0.226, + "score_data_loc_group": 0.233, "score_loc": 0.021, "score_loc_group": 0.021 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[34.92816,-114.80764].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[34.92816,-114.80764].json index 787dc2c..ea02704 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[34.92816,-114.80764].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[34.92816,-114.80764].json @@ -3,20 +3,20 @@ "AWS_PIW90": 9.72, "Soil Data Value": [ [ - "rfv_class_30", - 1.7725548033578953 + "texture_0", + 1.7822287189138013 ], [ - "rfv_class_0", - 1.368995593589281 + "texture_30", + 1.7822287189138013 ], [ - "texture_0", - 0.0 + "rfv_class_30", + 1.7725548033578953 ], [ - "texture_30", - 0.0 + "rfv_class_0", + 1.368995593589281 ] ], "metadata": { diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[35.59918,-120.491439].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[35.59918,-120.491439].json index 8583b38..51ac2b9 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[35.59918,-120.491439].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[35.59918,-120.491439].json @@ -4,11 +4,11 @@ "Soil Data Value": [ [ "texture_0", - 0.0 + 0.9165173278449512 ], [ "texture_30", - 0.0 + 0.9165173278449512 ], [ "rfv_class_0", @@ -134,8 +134,8 @@ "nirrcapscl": "e", "nirrcapunit": "nan", "rfvInfill": "No", - "sdeURL": "https://casoilresource.lawr.ucdavis.edu/sde/?series=balcom", - "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#balcom", + "sdeURL": "https://casoilresource.lawr.ucdavis.edu/sde/?series=los_osos", + "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#los_osos", "slope": 40.0, "taxsubgrp": "Typic Argixerolls", "textureInfill": "Yes" @@ -271,73 +271,73 @@ "componentID": 26734851, "name": "Balcom3", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "1", + "rank_data_group": "1", "rank_data_loc": "1", "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "1", - "score_data": 0.541, - "score_data_group": 0.541, - "score_data_loc": 0.396, - "score_data_loc_group": 0.396, + "score_data": 0.389, + "score_data_group": 0.389, + "score_data_loc": 0.32, + "score_data_loc_group": 0.32, "score_loc": 0.252, "score_loc_group": 0.252 }, { "component": "Los osos", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 26735225, "name": "Los osos2", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", + "rank_data": "2", + "rank_data_group": "2", "rank_data_loc": "2", "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.558, - "score_data_group": 0.558, - "score_data_loc": 0.341, - "score_data_loc_group": 0.341, + "score_data": 0.389, + "score_data_group": 0.389, + "score_data_loc": 0.257, + "score_data_loc_group": 0.257, "score_loc": 0.125, "score_loc_group": 0.125 }, { "component": "Balcom", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 26734862, "name": "Balcom2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "2", + "rank_data_group": "1", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "1", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.37, - "score_data_group": 0.541, - "score_data_loc": 0.311, - "score_data_loc_group": 0.396, + "score_data": 0.348, + "score_data_group": 0.389, + "score_data_loc": 0.3, + "score_data_loc_group": 0.32, "score_loc": 0.252, "score_loc_group": 0.252 }, { "component": "Los osos", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 26735232, "name": "Los osos", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "1", + "rank_data_group": "2", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "2", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.363, - "score_data_group": 0.558, - "score_data_loc": 0.244, - "score_data_loc_group": 0.341, + "score_data": 0.348, + "score_data_group": 0.389, + "score_data_loc": 0.237, + "score_data_loc_group": 0.257, "score_loc": 0.125, "score_loc_group": 0.125 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.422,-122.084].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.422,-122.084].json index 48f4cb3..c181a0f 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.422,-122.084].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.422,-122.084].json @@ -3,20 +3,20 @@ "AWS_PIW90": 5.95, "Soil Data Value": [ [ - "rfv_class_0", - 1.2450871546455828 + "texture_0", + 1.8550579506959675 ], [ - "rfv_class_30", - 0.7766173768825435 + "texture_30", + 1.8550579506959675 ], [ - "texture_0", - 0.0 + "rfv_class_0", + 1.2450871546455828 ], [ - "texture_30", - 0.0 + "rfv_class_30", + 0.7766173768825435 ] ], "metadata": { @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "R014XG903CA" ], "ecoclassname": [ - "" + "Salt Marsh" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/014X/R014XG903CA" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "R014XG903CA" ], "ecoclassname": [ - "" + "Salt Marsh" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/014X/R014XG903CA" ] } }, @@ -209,13 +209,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R014XG903CA" + "" ], "ecoclassname": [ - "Salt Marsh" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/014X/R014XG903CA" + "" ] } }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R014XG903CA" + "" ], "ecoclassname": [ - "Salt Marsh" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/014X/R014XG903CA" + "" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R014XG903CA" + "" ], "ecoclassname": [ - "Salt Marsh" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/014X/R014XG903CA" + "" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "R014XG903CA" ], "ecoclassname": [ - "" + "Salt Marsh" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/014X/R014XG903CA" ] } }, @@ -435,7 +435,7 @@ "soilRank": [ { "component": "Xerorthents", - "componentData": "Data Complete", + "componentData": "Missing Data", "componentID": 26701975, "name": "Xerorthents", "not_displayed": false, @@ -445,10 +445,10 @@ "rank_data_loc_group": "1", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.75, - "score_data_group": 0.75, - "score_data_loc": 0.568, - "score_data_loc_group": 0.568, + "score_data": 0.794, + "score_data_group": 0.794, + "score_data_loc": 0.59, + "score_data_loc_group": 0.59, "score_loc": 0.386, "score_loc_group": 0.386 }, @@ -464,92 +464,92 @@ "rank_data_loc_group": "2", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.534, - "score_data_group": 0.534, - "score_data_loc": 0.462, - "score_data_loc_group": 0.462, + "score_data": 0.504, + "score_data_group": 0.504, + "score_data_loc": 0.447, + "score_data_loc_group": 0.447, "score_loc": 0.39, "score_loc_group": 0.39 }, { - "component": "Aquic xerorthents", + "component": "Embarcadero", "componentData": "Data Complete", - "componentID": 26701978, - "name": "Aquic xerorthents", + "componentID": 26701952, + "name": "Embarcadero", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", + "rank_data": "2", + "rank_data_group": "2", "rank_data_loc": "3", "rank_data_loc_group": "3", + "rank_loc": "6", + "rank_loc_group": "6", + "score_data": 0.781, + "score_data_group": 0.781, + "score_data_loc": 0.396, + "score_data_loc_group": 0.396, + "score_loc": 0.012, + "score_loc_group": 0.012 + }, + { + "component": "Aquic xerorthents", + "componentData": "Missing Data", + "componentID": 26701978, + "name": "Aquic xerorthents", + "not_displayed": false, + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "4", + "rank_data_loc_group": "4", "rank_loc": "3", "rank_loc_group": "3", - "score_data": 0.626, - "score_data_group": 0.626, - "score_data_loc": 0.395, - "score_data_loc_group": 0.395, + "score_data": 0.618, + "score_data_group": 0.618, + "score_data_loc": 0.391, + "score_data_loc_group": 0.391, "score_loc": 0.165, "score_loc_group": 0.165 }, { "component": "Bayshore", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 26701953, "name": "Bayshore", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", - "rank_data_loc": "4", - "rank_data_loc_group": "4", + "rank_data": "3", + "rank_data_group": "3", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.709, - "score_data_group": 0.709, - "score_data_loc": 0.364, - "score_data_loc_group": 0.364, + "score_data": 0.62, + "score_data_group": 0.62, + "score_data_loc": 0.319, + "score_data_loc_group": 0.319, "score_loc": 0.019, "score_loc_group": 0.019 }, { "component": "Clear lake", - "componentData": "Missing Data", + "componentData": "Data Complete", "componentID": 26701951, "name": "Clear lake", "not_displayed": false, "rank_data": "5", "rank_data_group": "5", - "rank_data_loc": "5", - "rank_data_loc_group": "5", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": "4", "rank_loc_group": "4", - "score_data": 0.617, - "score_data_group": 0.617, - "score_data_loc": 0.323, - "score_data_loc_group": 0.323, + "score_data": 0.584, + "score_data_group": 0.584, + "score_data_loc": 0.306, + "score_data_loc_group": 0.306, "score_loc": 0.029, "score_loc_group": 0.029 }, - { - "component": "Embarcadero", - "componentData": "Missing Data", - "componentID": 26701952, - "name": "Embarcadero", - "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", - "rank_data_loc": "6", - "rank_data_loc_group": "6", - "rank_loc": "6", - "rank_loc_group": "6", - "score_data": 0.62, - "score_data_group": 0.62, - "score_data_loc": 0.316, - "score_data_loc_group": 0.316, - "score_loc": 0.012, - "score_loc_group": 0.012 - }, { "component": "Xerorthents", - "componentData": "Data Complete", + "componentData": "Missing Data", "componentID": 26701976, "name": "Xerorthents2", "not_displayed": true, @@ -559,10 +559,10 @@ "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.672, - "score_data_group": 0.75, - "score_data_loc": 0.529, - "score_data_loc_group": 0.568, + "score_data": 0.711, + "score_data_group": 0.794, + "score_data_loc": 0.548, + "score_data_loc_group": 0.59, "score_loc": 0.386, "score_loc_group": 0.386 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.48216451,-99.55016693].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.48216451,-99.55016693].json index f28d357..f65d5fb 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.48216451,-99.55016693].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[37.48216451,-99.55016693].json @@ -3,20 +3,20 @@ "AWS_PIW90": 5.17, "Soil Data Value": [ [ - "rfv_class_30", - 0.33402123132077044 + "texture_0", + 2.6090686562429717 ], [ - "rfv_class_0", - 0.27699134340154963 + "texture_30", + 2.6090686562429717 ], [ - "texture_0", - 0.0 + "rfv_class_30", + 0.33402123132077044 ], [ - "texture_30", - 0.0 + "rfv_class_0", + 0.27699134340154963 ] ], "metadata": { @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY101KS" + "R073XY100KS" ], "ecoclassname": [ - "Limy Slopes" + "Loamy Plains" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY101KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY100KS" ] } }, @@ -209,13 +209,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY108KS" + "R073XY100KS" ], "ecoclassname": [ - "Loamy Floodplain" + "Loamy Plains" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY108KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY100KS" ] } }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY112KS" + "R073XY108KS" ], "ecoclassname": [ - "Shallow Limy" + "Loamy Floodplain" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY112KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY108KS" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY101KS" + "R079XY112KS" ], "ecoclassname": [ - "Limy Slopes" + "Limy Plains" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY101KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/079X/R079XY112KS" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY100KS" + "R073XY101KS" ], "ecoclassname": [ - "Loamy Plains" + "Limy Slopes" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY100KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY101KS" ] } }, @@ -433,13 +433,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY100KS" + "R073XY108KS" ], "ecoclassname": [ - "Loamy Plains" + "Loamy Floodplain" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY100KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY108KS" ] } }, @@ -545,13 +545,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY100KS" + "R073XY103KS" ], "ecoclassname": [ - "Loamy Plains" + "Subirrigated" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY100KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY103KS" ] } }, @@ -601,13 +601,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY103KS" + "R073XY112KS" ], "ecoclassname": [ - "Subirrigated" + "Shallow Limy" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY103KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY112KS" ] } }, @@ -769,13 +769,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R073XY108KS" + "R073XY100KS" ], "ecoclassname": [ - "Loamy Floodplain" + "Loamy Plains" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY108KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY100KS" ] } }, @@ -825,13 +825,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R079XY112KS" + "R073XY101KS" ], "ecoclassname": [ - "Limy Plains" + "Limy Slopes" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/079X/R079XY112KS" + "https://edit.sc.egov.usda.gov/catalogs/esd/073X/R073XY101KS" ] } }, @@ -881,22 +881,41 @@ "model": "v2" }, "soilRank": [ + { + "component": "Uly", + "componentData": "Data Complete", + "componentID": 26356233, + "name": "Uly", + "not_displayed": false, + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "1", + "rank_data_loc_group": "1", + "rank_loc": "1", + "rank_loc_group": "1", + "score_data": 0.61, + "score_data_group": 0.61, + "score_data_loc": 0.452, + "score_data_loc_group": 0.452, + "score_loc": 0.295, + "score_loc_group": 0.295 + }, { "component": "Harney", "componentData": "Data Complete", "componentID": 26356234, "name": "Harney", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", - "rank_data_loc": "1", - "rank_data_loc_group": "1", + "rank_data": "3", + "rank_data_group": "3", + "rank_data_loc": "2", + "rank_data_loc_group": "2", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.65, - "score_data_group": 0.65, - "score_data_loc": 0.457, - "score_data_loc_group": 0.457, + "score_data": 0.598, + "score_data_group": 0.598, + "score_data_loc": 0.431, + "score_data_loc_group": 0.431, "score_loc": 0.263, "score_loc_group": 0.263 }, @@ -906,244 +925,225 @@ "componentID": 26356406, "name": "Coly2", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", - "rank_data_loc": "2", - "rank_data_loc_group": "2", + "rank_data": "5", + "rank_data_group": "5", + "rank_data_loc": "3", + "rank_data_loc_group": "3", "rank_loc": "Not Displayed", "rank_loc_group": "3", - "score_data": 0.662, - "score_data_group": 0.662, - "score_data_loc": 0.439, - "score_data_loc_group": 0.439, + "score_data": 0.537, + "score_data_group": 0.537, + "score_data_loc": 0.376, + "score_data_loc_group": 0.376, "score_loc": 0.215, "score_loc_group": 0.215 }, { - "component": "Uly", - "componentData": "Data Complete", - "componentID": 26356407, - "name": "Uly2", - "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", - "rank_data_loc": "3", - "rank_data_loc_group": "3", - "rank_loc": "Not Displayed", - "rank_loc_group": "1", - "score_data": 0.571, - "score_data_group": 0.571, - "score_data_loc": 0.433, - "score_data_loc_group": 0.433, - "score_loc": 0.295, - "score_loc_group": 0.295 - }, - { - "component": "Penden", + "component": "Canlon", "componentData": "Data Complete", - "componentID": 26356232, - "name": "Penden", + "componentID": 26356405, + "name": "Canlon", "not_displayed": false, "rank_data": "1", "rank_data_group": "1", "rank_data_loc": "4", "rank_data_loc_group": "4", - "rank_loc": "7", - "rank_loc_group": "7", - "score_data": 0.667, - "score_data_group": 0.667, - "score_data_loc": 0.341, - "score_data_loc_group": 0.341, - "score_loc": 0.016, - "score_loc_group": 0.016 + "rank_loc": "11", + "rank_loc_group": "11", + "score_data": 0.688, + "score_data_group": 0.688, + "score_data_loc": 0.345, + "score_data_loc_group": 0.345, + "score_loc": 0.002, + "score_loc_group": 0.002 }, { - "component": "Canlon", + "component": "Case", "componentData": "Data Complete", - "componentID": 26356405, - "name": "Canlon", + "componentID": 26356380, + "name": "Case", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "5", "rank_data_loc_group": "5", - "rank_loc": "11", - "rank_loc_group": "11", - "score_data": 0.659, - "score_data_group": 0.659, - "score_data_loc": 0.331, - "score_data_loc_group": 0.331, - "score_loc": 0.002, - "score_loc_group": 0.002 + "rank_loc": "6", + "rank_loc_group": "6", + "score_data": 0.554, + "score_data_group": 0.554, + "score_data_loc": 0.289, + "score_data_loc_group": 0.289, + "score_loc": 0.023, + "score_loc_group": 0.023 }, { - "component": "Wakeen", + "component": "Tobin", "componentData": "Data Complete", - "componentID": 26356435, - "name": "Wakeen", + "componentID": 26356404, + "name": "Tobin", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "7", + "rank_data_group": "7", "rank_data_loc": "6", "rank_data_loc_group": "6", - "rank_loc": "9", - "rank_loc_group": "9", - "score_data": 0.612, - "score_data_group": 0.612, - "score_data_loc": 0.311, - "score_data_loc_group": 0.311, - "score_loc": 0.01, - "score_loc_group": 0.01 + "rank_loc": "5", + "rank_loc_group": "5", + "score_data": 0.499, + "score_data_group": 0.499, + "score_data_loc": 0.278, + "score_data_loc_group": 0.278, + "score_loc": 0.057, + "score_loc_group": 0.057 }, { - "component": "Aquolls", + "component": "Penden", "componentData": "Data Complete", - "componentID": 26356437, - "name": "Aquolls", + "componentID": 26356232, + "name": "Penden", "not_displayed": false, "rank_data": "6", "rank_data_group": "6", "rank_data_loc": "7", "rank_data_loc_group": "7", - "rank_loc": "10", - "rank_loc_group": "10", - "score_data": 0.594, - "score_data_group": 0.594, - "score_data_loc": 0.298, - "score_data_loc_group": 0.298, - "score_loc": 0.003, - "score_loc_group": 0.003 + "rank_loc": "7", + "rank_loc_group": "7", + "score_data": 0.526, + "score_data_group": 0.526, + "score_data_loc": 0.271, + "score_data_loc_group": 0.271, + "score_loc": 0.016, + "score_loc_group": 0.016 }, { - "component": "Tobin", - "componentData": "Data Complete", - "componentID": 26356404, - "name": "Tobin", + "component": "Aquolls", + "componentData": "Missing Data", + "componentID": 26356437, + "name": "Aquolls", "not_displayed": false, - "rank_data": "10", - "rank_data_group": "10", + "rank_data": "8", + "rank_data_group": "8", "rank_data_loc": "8", "rank_data_loc_group": "8", - "rank_loc": "5", - "rank_loc_group": "5", - "score_data": 0.538, - "score_data_group": 0.538, - "score_data_loc": 0.297, - "score_data_loc_group": 0.297, - "score_loc": 0.057, - "score_loc_group": 0.057 + "rank_loc": "10", + "rank_loc_group": "10", + "score_data": 0.477, + "score_data_group": 0.477, + "score_data_loc": 0.24, + "score_data_loc_group": 0.24, + "score_loc": 0.003, + "score_loc_group": 0.003 }, { - "component": "Bridgeport", + "component": "Holdrege", "componentData": "Data Complete", - "componentID": 26356378, - "name": "Bridgeport", + "componentID": 26356377, + "name": "Holdrege", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", + "rank_data": "11", + "rank_data_group": "11", "rank_data_loc": "9", "rank_data_loc_group": "9", - "rank_loc": "8", - "rank_loc_group": "8", - "score_data": 0.566, - "score_data_group": 0.566, - "score_data_loc": 0.289, - "score_data_loc_group": 0.289, - "score_loc": 0.012, - "score_loc_group": 0.012 + "rank_loc": "4", + "rank_loc_group": "4", + "score_data": 0.362, + "score_data_group": 0.362, + "score_data_loc": 0.233, + "score_data_loc_group": 0.233, + "score_loc": 0.104, + "score_loc_group": 0.104 }, { - "component": "Case", + "component": "Wakeen", "componentData": "Data Complete", - "componentID": 26356380, - "name": "Case", + "componentID": 26356435, + "name": "Wakeen", "not_displayed": false, "rank_data": "9", "rank_data_group": "9", "rank_data_loc": "10", "rank_data_loc_group": "10", - "rank_loc": "6", - "rank_loc_group": "6", - "score_data": 0.553, - "score_data_group": 0.553, - "score_data_loc": 0.288, - "score_data_loc_group": 0.288, - "score_loc": 0.023, - "score_loc_group": 0.023 + "rank_loc": "9", + "rank_loc_group": "9", + "score_data": 0.434, + "score_data_group": 0.434, + "score_data_loc": 0.222, + "score_data_loc_group": 0.222, + "score_loc": 0.01, + "score_loc_group": 0.01 }, { - "component": "Holdrege", + "component": "Bridgeport", "componentData": "Data Complete", - "componentID": 26356377, - "name": "Holdrege", + "componentID": 26356378, + "name": "Bridgeport", "not_displayed": false, - "rank_data": "11", - "rank_data_group": "11", + "rank_data": "10", + "rank_data_group": "10", "rank_data_loc": "11", "rank_data_loc_group": "11", - "rank_loc": "4", - "rank_loc_group": "4", - "score_data": 0.44, - "score_data_group": 0.44, - "score_data_loc": 0.272, - "score_data_loc_group": 0.272, - "score_loc": 0.104, - "score_loc_group": 0.104 + "rank_loc": "8", + "rank_loc_group": "8", + "score_data": 0.42, + "score_data_group": 0.42, + "score_data_loc": 0.216, + "score_data_loc_group": 0.216, + "score_loc": 0.012, + "score_loc_group": 0.012 }, { - "component": "Harney", + "component": "Uly", "componentData": "Data Complete", - "componentID": 26356408, - "name": "Harney3", + "componentID": 26356407, + "name": "Uly2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "4", + "rank_data_group": "2", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "1", "rank_loc": "Not Displayed", - "rank_loc_group": "2", - "score_data": 0.585, - "score_data_group": 0.65, - "score_data_loc": 0.424, - "score_data_loc_group": 0.457, - "score_loc": 0.263, - "score_loc_group": 0.263 + "rank_loc_group": "1", + "score_data": 0.573, + "score_data_group": 0.61, + "score_data_loc": 0.434, + "score_data_loc_group": 0.452, + "score_loc": 0.295, + "score_loc_group": 0.295 }, { - "component": "Uly", + "component": "Harney", "componentData": "Data Complete", - "componentID": 26356233, - "name": "Uly", + "componentID": 26356436, + "name": "Harney2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "7", + "rank_data_group": "3", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "3", - "rank_loc": "1", - "rank_loc_group": "1", - "score_data": 0.535, - "score_data_group": 0.571, - "score_data_loc": 0.415, - "score_data_loc_group": 0.433, - "score_loc": 0.295, - "score_loc_group": 0.295 + "rank_data_loc_group": "2", + "rank_loc": "Not Displayed", + "rank_loc_group": "2", + "score_data": 0.512, + "score_data_group": 0.598, + "score_data_loc": 0.388, + "score_data_loc_group": 0.431, + "score_loc": 0.263, + "score_loc_group": 0.263 }, { "component": "Harney", - "componentData": "Missing Data", - "componentID": 26356436, - "name": "Harney2", + "componentData": "Data Complete", + "componentID": 26356408, + "name": "Harney3", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "4", + "rank_data_group": "3", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "1", + "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.55, - "score_data_group": 0.65, - "score_data_loc": 0.407, - "score_data_loc_group": 0.457, + "score_data": 0.496, + "score_data_group": 0.598, + "score_data_loc": 0.38, + "score_data_loc_group": 0.431, "score_loc": 0.263, "score_loc_group": 0.263 }, @@ -1154,15 +1154,15 @@ "name": "Coly", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "2", + "rank_data_group": "5", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "2", + "rank_data_loc_group": "3", "rank_loc": "3", "rank_loc_group": "3", - "score_data": 0.597, - "score_data_group": 0.662, - "score_data_loc": 0.406, - "score_data_loc_group": 0.439, + "score_data": 0.526, + "score_data_group": 0.537, + "score_data_loc": 0.371, + "score_data_loc_group": 0.376, "score_loc": 0.215, "score_loc_group": 0.215 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[39.26009312,-85.50621214].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[39.26009312,-85.50621214].json index 025084d..cce75e0 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[39.26009312,-85.50621214].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[39.26009312,-85.50621214].json @@ -3,20 +3,20 @@ "AWS_PIW90": 5.16, "Soil Data Value": [ [ - "rfv_class_30", - 1.0417872772025576 + "texture_0", + 3.4119924578614564 ], [ - "rfv_class_0", - 1.0174644063857206 + "texture_30", + 3.4119924578614564 ], [ - "texture_0", - 0.0 + "rfv_class_30", + 1.0417872772025576 ], [ - "texture_30", - 0.0 + "rfv_class_0", + 1.0174644063857206 ] ], "metadata": { @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA008IN" + "F111XA009IN" ], "ecoclassname": [ - "Wet Till Ridge" + "Till Ridge" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA009IN" ] } }, @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F111XA008IN" ], "ecoclassname": [ - "" + "Wet Till Ridge" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F114XB503IN" ], "ecoclassname": [ - "" + "Till Upland Forest" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/114X/F114XB503IN" ] } }, @@ -209,13 +209,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F114XB503IN" + "F111XA008IN" ], "ecoclassname": [ - "Till Upland Forest" + "Wet Till Ridge" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/114X/F114XB503IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" ] } }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F111XA007IN" ], "ecoclassname": [ - "" + "Till Depression Flatwood" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA007IN" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA008IN" + "F111XA007IN" ], "ecoclassname": [ - "Wet Till Ridge" + "Till Depression Flatwood" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA007IN" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA007IN" + "F111XD010IN" ], "ecoclassname": [ - "Till Depression Flatwood" + "Till Ridge" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA007IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XD010IN" ] } }, @@ -433,13 +433,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA009IN" + "" ], "ecoclassname": [ - "Till Ridge" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA009IN" + "" ] } }, @@ -489,13 +489,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA008IN" + "" ], "ecoclassname": [ - "Wet Till Ridge" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" + "" ] } }, @@ -545,13 +545,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA008IN" + "" ], "ecoclassname": [ - "Wet Till Ridge" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" + "" ] } }, @@ -601,13 +601,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA009IN" + "" ], "ecoclassname": [ - "Till Ridge" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA009IN" + "" ] } }, @@ -657,13 +657,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XD010IN" + "" ], "ecoclassname": [ - "Till Ridge" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XD010IN" + "" ] } }, @@ -713,13 +713,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA006IN" + "F111XD010IN" ], "ecoclassname": [ - "Till Depression" + "Till Ridge" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA006IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XD010IN" ] } }, @@ -769,13 +769,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XD010IN" + "F111XA009IN" ], "ecoclassname": [ "Till Ridge" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XD010IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA009IN" ] } }, @@ -825,13 +825,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F111XA008IN" ], "ecoclassname": [ - "" + "Wet Till Ridge" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" ] } }, @@ -881,13 +881,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F111XA008IN" ], "ecoclassname": [ - "" + "Wet Till Ridge" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA008IN" ] } }, @@ -937,13 +937,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F111XA007IN" + "F111XA006IN" ], "ecoclassname": [ - "Till Depression Flatwood" + "Till Depression" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA007IN" + "https://edit.sc.egov.usda.gov/catalogs/esd/111X/F111XA006IN" ] } }, @@ -994,118 +994,118 @@ }, "soilRank": [ { - "component": "Fincastle", + "component": "Hennepin", "componentData": "Data Complete", - "componentID": 26772402, - "name": "Fincastle", + "componentID": 26772448, + "name": "Hennepin3", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "1", + "rank_data_group": "1", "rank_data_loc": "1", "rank_data_loc_group": "1", - "rank_loc": "2", - "rank_loc_group": "2", - "score_data": 0.653, - "score_data_group": 0.653, - "score_data_loc": 0.353, - "score_data_loc_group": 0.353, - "score_loc": 0.054, - "score_loc_group": 0.054 + "rank_loc": "Not Displayed", + "rank_loc_group": "1", + "score_data": 0.678, + "score_data_group": 0.678, + "score_data_loc": 0.37, + "score_data_loc_group": 0.37, + "score_loc": 0.061, + "score_loc_group": 0.061 }, { "component": "Crosby", "componentData": "Data Complete", - "componentID": 26772436, - "name": "Crosby", + "componentID": 26772446, + "name": "Crosby3", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", + "rank_data": "2", + "rank_data_group": "2", "rank_data_loc": "2", "rank_data_loc_group": "2", - "rank_loc": "4", + "rank_loc": "Not Displayed", "rank_loc_group": "4", - "score_data": 0.651, - "score_data_group": 0.651, - "score_data_loc": 0.349, - "score_data_loc_group": 0.349, + "score_data": 0.657, + "score_data_group": 0.657, + "score_data_loc": 0.352, + "score_data_loc_group": 0.352, "score_loc": 0.048, "score_loc_group": 0.048 }, { - "component": "Bonnell", + "component": "Fincastle", "componentData": "Data Complete", - "componentID": 26772426, - "name": "Bonnell", + "componentID": 26772402, + "name": "Fincastle", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "3", "rank_data_loc_group": "3", - "rank_loc": "9", - "rank_loc_group": "9", - "score_data": 0.671, - "score_data_group": 0.671, - "score_data_loc": 0.336, - "score_data_loc_group": 0.336, - "score_loc": 0.002, - "score_loc_group": 0.002 + "rank_loc": "2", + "rank_loc_group": "2", + "score_data": 0.641, + "score_data_group": 0.641, + "score_data_loc": 0.348, + "score_data_loc_group": 0.348, + "score_loc": 0.054, + "score_loc_group": 0.054 }, { - "component": "Grayford", + "component": "Brookston", "componentData": "Data Complete", - "componentID": 26772427, - "name": "Grayford", + "componentID": 26772434, + "name": "Brookston", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "4", "rank_data_loc_group": "4", - "rank_loc": "11", - "rank_loc_group": "11", - "score_data": 0.648, - "score_data_group": 0.648, - "score_data_loc": 0.325, - "score_data_loc_group": 0.325, - "score_loc": 0.001, - "score_loc_group": 0.001 + "rank_loc": "6", + "rank_loc_group": "6", + "score_data": 0.647, + "score_data_group": 0.647, + "score_data_loc": 0.328, + "score_data_loc_group": 0.328, + "score_loc": 0.009, + "score_loc_group": 0.009 }, { - "component": "Hennepin", + "component": "Bonnell", "componentData": "Data Complete", - "componentID": 26772442, - "name": "Hennepin", + "componentID": 26772426, + "name": "Bonnell", "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "5", "rank_data_loc_group": "5", - "rank_loc": "1", - "rank_loc_group": "1", - "score_data": 0.582, - "score_data_group": 0.582, - "score_data_loc": 0.322, - "score_data_loc_group": 0.322, - "score_loc": 0.061, - "score_loc_group": 0.061 + "rank_loc": "9", + "rank_loc_group": "9", + "score_data": 0.64, + "score_data_group": 0.64, + "score_data_loc": 0.321, + "score_data_loc_group": 0.321, + "score_loc": 0.002, + "score_loc_group": 0.002 }, { - "component": "Holton", + "component": "Cincinnati", "componentData": "Data Complete", - "componentID": 26772424, - "name": "Holton", + "componentID": 26772423, + "name": "Cincinnati", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "6", + "rank_data_group": "6", "rank_data_loc": "6", "rank_data_loc_group": "6", - "rank_loc": "8", - "rank_loc_group": "8", - "score_data": 0.634, - "score_data_group": 0.634, - "score_data_loc": 0.318, - "score_data_loc_group": 0.318, - "score_loc": 0.002, - "score_loc_group": 0.002 + "rank_loc": "10", + "rank_loc_group": "10", + "score_data": 0.637, + "score_data_group": 0.637, + "score_data_loc": 0.319, + "score_data_loc_group": 0.319, + "score_loc": 0.001, + "score_loc_group": 0.001 }, { "component": "Cyclone", @@ -1113,75 +1113,56 @@ "componentID": 26772441, "name": "Cyclone", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "7", + "rank_data_group": "7", "rank_data_loc": "7", "rank_data_loc_group": "7", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.614, - "score_data_group": 0.614, - "score_data_loc": 0.312, - "score_data_loc_group": 0.312, + "score_data": 0.612, + "score_data_group": 0.612, + "score_data_loc": 0.311, + "score_data_loc_group": 0.311, "score_loc": 0.011, "score_loc_group": 0.011 }, { - "component": "Brookston", + "component": "Celina", "componentData": "Data Complete", - "componentID": 26772434, - "name": "Brookston", + "componentID": 26772498, + "name": "Celina", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", + "rank_data": "8", + "rank_data_group": "8", "rank_data_loc": "8", "rank_data_loc_group": "8", - "rank_loc": "6", - "rank_loc_group": "6", - "score_data": 0.61, - "score_data_group": 0.61, - "score_data_loc": 0.31, - "score_data_loc_group": 0.31, - "score_loc": 0.009, - "score_loc_group": 0.009 + "rank_loc": "7", + "rank_loc_group": "7", + "score_data": 0.605, + "score_data_group": 0.605, + "score_data_loc": 0.304, + "score_data_loc_group": 0.304, + "score_loc": 0.003, + "score_loc_group": 0.003 }, { - "component": "Cincinnati", + "component": "Holton", "componentData": "Data Complete", - "componentID": 26772423, - "name": "Cincinnati", + "componentID": 26772424, + "name": "Holton", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", + "rank_data": "9", + "rank_data_group": "9", "rank_data_loc": "9", "rank_data_loc_group": "9", - "rank_loc": "10", - "rank_loc_group": "10", - "score_data": 0.591, - "score_data_group": 0.591, + "rank_loc": "8", + "rank_loc_group": "8", + "score_data": 0.589, + "score_data_group": 0.589, "score_data_loc": 0.296, "score_data_loc_group": 0.296, - "score_loc": 0.001, - "score_loc_group": 0.001 - }, - { - "component": "Celina", - "componentData": "Data Complete", - "componentID": 26772498, - "name": "Celina", - "not_displayed": false, - "rank_data": "10", - "rank_data_group": "10", - "rank_data_loc": "10", - "rank_data_loc_group": "10", - "rank_loc": "7", - "rank_loc_group": "7", - "score_data": 0.555, - "score_data_group": 0.555, - "score_data_loc": 0.279, - "score_data_loc_group": 0.279, - "score_loc": 0.003, - "score_loc_group": 0.003 + "score_loc": 0.002, + "score_loc_group": 0.002 }, { "component": "Hickory", @@ -1191,17 +1172,36 @@ "not_displayed": false, "rank_data": "12", "rank_data_group": "12", - "rank_data_loc": "11", - "rank_data_loc_group": "11", + "rank_data_loc": "10", + "rank_data_loc_group": "10", "rank_loc": "3", "rank_loc_group": "3", - "score_data": 0.499, - "score_data_group": 0.499, - "score_data_loc": 0.275, - "score_data_loc_group": 0.275, + "score_data": 0.532, + "score_data_group": 0.532, + "score_data_loc": 0.292, + "score_data_loc_group": 0.292, "score_loc": 0.051, "score_loc_group": 0.051 }, + { + "component": "Grayford", + "componentData": "Data Complete", + "componentID": 26772427, + "name": "Grayford", + "not_displayed": false, + "rank_data": "10", + "rank_data_group": "10", + "rank_data_loc": "11", + "rank_data_loc_group": "11", + "rank_loc": "11", + "rank_loc_group": "11", + "score_data": 0.576, + "score_data_group": 0.576, + "score_data_loc": 0.289, + "score_data_loc_group": 0.289, + "score_loc": 0.001, + "score_loc_group": 0.001 + }, { "component": "Jessietown", "componentData": "Data Complete", @@ -1214,88 +1214,69 @@ "rank_data_loc_group": "12", "rank_loc": "12", "rank_loc_group": "12", - "score_data": 0.531, - "score_data_group": 0.531, - "score_data_loc": 0.266, - "score_data_loc_group": 0.266, + "score_data": 0.563, + "score_data_group": 0.563, + "score_data_loc": 0.282, + "score_data_loc_group": 0.282, "score_loc": 0.001, "score_loc_group": 0.001 }, { "component": "Crosby", "componentData": "Data Complete", - "componentID": 26772444, - "name": "Crosby2", - "not_displayed": true, - "rank_data": "Not Displayed", - "rank_data_group": "3", - "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "2", - "rank_loc": "Not Displayed", - "rank_loc_group": "4", - "score_data": 0.609, - "score_data_group": 0.651, - "score_data_loc": 0.328, - "score_data_loc_group": 0.349, - "score_loc": 0.048, - "score_loc_group": 0.048 - }, - { - "component": "Crosby", - "componentData": "Data Complete", - "componentID": 26772446, - "name": "Crosby3", + "componentID": 26772436, + "name": "Crosby", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "3", + "rank_data_group": "2", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "2", - "rank_loc": "Not Displayed", + "rank_loc": "4", "rank_loc_group": "4", - "score_data": 0.597, - "score_data_group": 0.651, - "score_data_loc": 0.322, - "score_data_loc_group": 0.349, + "score_data": 0.642, + "score_data_group": 0.657, + "score_data_loc": 0.345, + "score_data_loc_group": 0.352, "score_loc": 0.048, "score_loc_group": 0.048 }, { "component": "Hennepin", "componentData": "Data Complete", - "componentID": 26772448, - "name": "Hennepin3", + "componentID": 26772420, + "name": "Hennepin2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "9", + "rank_data_group": "1", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "5", + "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "1", - "score_data": 0.54, - "score_data_group": 0.582, - "score_data_loc": 0.301, - "score_data_loc_group": 0.322, + "score_data": 0.591, + "score_data_group": 0.678, + "score_data_loc": 0.326, + "score_data_loc_group": 0.37, "score_loc": 0.061, "score_loc_group": 0.061 }, { - "component": "Hennepin", + "component": "Crosby", "componentData": "Data Complete", - "componentID": 26772420, - "name": "Hennepin2", + "componentID": 26772444, + "name": "Crosby2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "9", + "rank_data_group": "2", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "5", + "rank_data_loc_group": "2", "rank_loc": "Not Displayed", - "rank_loc_group": "1", - "score_data": 0.536, - "score_data_group": 0.582, - "score_data_loc": 0.299, - "score_data_loc_group": 0.322, - "score_loc": 0.061, - "score_loc_group": 0.061 + "rank_loc_group": "4", + "score_data": 0.605, + "score_data_group": 0.657, + "score_data_loc": 0.326, + "score_data_loc_group": 0.352, + "score_loc": 0.048, + "score_loc_group": 0.048 }, { "component": "Cyclone", @@ -1304,17 +1285,36 @@ "name": "Cyclone2", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "6", + "rank_data_group": "7", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "7", "rank_loc": "Not Displayed", "rank_loc_group": "5", - "score_data": 0.555, - "score_data_group": 0.614, - "score_data_loc": 0.283, - "score_data_loc_group": 0.312, + "score_data": 0.56, + "score_data_group": 0.612, + "score_data_loc": 0.285, + "score_data_loc_group": 0.311, "score_loc": 0.011, "score_loc_group": 0.011 + }, + { + "component": "Hennepin", + "componentData": "Data Complete", + "componentID": 26772442, + "name": "Hennepin", + "not_displayed": true, + "rank_data": "Not Displayed", + "rank_data_group": "1", + "rank_data_loc": "Not Displayed", + "rank_data_loc_group": "1", + "rank_loc": "1", + "rank_loc_group": "1", + "score_data": 0.485, + "score_data_group": 0.678, + "score_data_loc": 0.273, + "score_data_loc_group": 0.37, + "score_loc": 0.061, + "score_loc_group": 0.061 } ] } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.494912,-123.064531].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.494912,-123.064531].json index f9978fd..5ec0ecf 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.494912,-123.064531].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.494912,-123.064531].json @@ -3,20 +3,20 @@ "AWS_PIW90": 10.16, "Soil Data Value": [ [ - "rfv_class_30", - 1.4893140246267844 + "texture_0", + 2.5494767523009707 ], [ - "rfv_class_0", - 0.8825277371828062 + "texture_30", + 2.5494767523009707 ], [ - "texture_0", - 0.0 + "rfv_class_30", + 1.4893140246267844 ], [ - "texture_30", - 0.0 + "rfv_class_0", + 0.8825277371828062 ] ], "metadata": { @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ014CA" + "F005XZ003CA" ], "ecoclassname": [ - "Mesic Mountains <40Ppt" + "Terraces" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ014CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ003CA" ] } }, @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ014CA" + "F005XZ024CA" ], "ecoclassname": [ - "Mesic Mountains <40Ppt" + "Ridges" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ014CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ024CA" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ024CA" + "F005XZ003CA" ], "ecoclassname": [ - "Ridges" + "Terraces" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ024CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ003CA" ] } }, @@ -209,13 +209,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R005XY016OR" + "F005XZ014CA" ], "ecoclassname": [ - "Poorly Drained Bottom" + "Mesic Mountains <40Ppt" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/R005XY016OR" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ014CA" ] } }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ003CA" + "F005XZ018CA" ], "ecoclassname": [ - "Terraces" + "Moderately Deep Gravelly Mesic Mountains 40-60Ppt" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ003CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ018CA" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ018CA" + "F005XZ009CA" ], "ecoclassname": [ - "Moderately Deep Gravelly Mesic Mountains 40-60Ppt" + "Very Deep Mesic Hills 40-60Ppt" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ018CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ009CA" ] } }, @@ -433,13 +433,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ009CA" + "F005XZ014CA" ], "ecoclassname": [ - "Very Deep Mesic Hills 40-60Ppt" + "Mesic Mountains <40Ppt" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ009CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ014CA" ] } }, @@ -489,13 +489,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ024CA" + "R005XY016OR" ], "ecoclassname": [ - "Ridges" + "Poorly Drained Bottom" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ024CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/R005XY016OR" ] } }, @@ -530,7 +530,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#gregory", "slope": 2.0, "taxsubgrp": "Pachic Argixerolls", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Gregory series consists of deep, poorly drained soils on terraces. They formed in recent alluvium dominantly from sedimentary and metamorphic rocks. Slopes are 0 to 3 percent. The mean annual precipitation is about 24 inches and the mean annual temperature is about 52 degrees F." }, @@ -545,13 +545,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F005XZ003CA" + "F005XZ024CA" ], "ecoclassname": [ - "Terraces" + "Ridges" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ003CA" + "https://edit.sc.egov.usda.gov/catalogs/esd/005X/F005XZ024CA" ] } }, @@ -607,111 +607,92 @@ "componentID": 27529401, "name": "Ruch", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "1", "rank_data_loc_group": "1", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.539, - "score_data_group": 0.539, - "score_data_loc": 0.403, - "score_data_loc_group": 0.403, + "score_data": 0.686, + "score_data_group": 0.686, + "score_data_loc": 0.476, + "score_data_loc_group": 0.476, "score_loc": 0.266, "score_loc_group": 0.266 }, { "component": "Josephine", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 27529612, "name": "Josephine2", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "2", "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "2", - "score_data": 0.668, - "score_data_group": 0.668, - "score_data_loc": 0.397, - "score_data_loc_group": 0.397, + "score_data": 0.657, + "score_data_group": 0.657, + "score_data_loc": 0.391, + "score_data_loc_group": 0.391, "score_loc": 0.125, "score_loc_group": 0.125 }, { - "component": "Abegg", + "component": "Gregory", "componentData": "Data Complete", - "componentID": 27529265, - "name": "Abegg", + "componentID": 27529400, + "name": "Gregory", "not_displayed": false, "rank_data": "1", "rank_data_group": "1", "rank_data_loc": "3", "rank_data_loc_group": "3", + "rank_loc": "9", + "rank_loc_group": "9", + "score_data": 0.76, + "score_data_group": 0.76, + "score_data_loc": 0.383, + "score_data_loc_group": 0.383, + "score_loc": 0.007, + "score_loc_group": 0.007 + }, + { + "component": "Abegg", + "componentData": "Data Complete", + "componentID": 27529265, + "name": "Abegg", + "not_displayed": false, + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "4", + "rank_data_loc_group": "4", "rank_loc": "3", "rank_loc_group": "3", - "score_data": 0.719, - "score_data_group": 0.719, - "score_data_loc": 0.394, - "score_data_loc_group": 0.394, + "score_data": 0.697, + "score_data_group": 0.697, + "score_data_loc": 0.383, + "score_data_loc_group": 0.383, "score_loc": 0.069, "score_loc_group": 0.069 }, { "component": "Pollard", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 27529611, "name": "Pollard", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "4", - "rank_data_loc_group": "4", - "rank_loc": "7", - "rank_loc_group": "7", - "score_data": 0.665, - "score_data_group": 0.665, - "score_data_loc": 0.345, - "score_data_loc_group": 0.345, - "score_loc": 0.025, - "score_loc_group": 0.025 - }, - { - "component": "Gregory", - "componentData": "Data Complete", - "componentID": 27529400, - "name": "Gregory", - "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "5", "rank_data_loc_group": "5", - "rank_loc": "9", - "rank_loc_group": "9", - "score_data": 0.614, - "score_data_group": 0.614, - "score_data_loc": 0.311, - "score_data_loc_group": 0.311, - "score_loc": 0.007, - "score_loc_group": 0.007 - }, - { - "component": "Colestine", - "componentData": "Data Complete", - "componentID": 27529517, - "name": "Colestine", - "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", - "rank_data_loc": "6", - "rank_data_loc_group": "6", - "rank_loc": "6", - "rank_loc_group": "6", - "score_data": 0.526, - "score_data_group": 0.526, - "score_data_loc": 0.276, - "score_data_loc_group": 0.276, + "rank_loc": "7", + "rank_loc_group": "7", + "score_data": 0.574, + "score_data_group": 0.574, + "score_data_loc": 0.299, + "score_data_loc_group": 0.299, "score_loc": 0.025, "score_loc_group": 0.025 }, @@ -723,14 +704,14 @@ "not_displayed": false, "rank_data": "7", "rank_data_group": "7", - "rank_data_loc": "7", - "rank_data_loc_group": "7", + "rank_data_loc": "6", + "rank_data_loc_group": "6", "rank_loc": "4", "rank_loc_group": "4", - "score_data": 0.476, - "score_data_group": 0.476, - "score_data_loc": 0.263, - "score_data_loc_group": 0.263, + "score_data": 0.542, + "score_data_group": 0.542, + "score_data_loc": 0.296, + "score_data_loc_group": 0.296, "score_loc": 0.05, "score_loc_group": 0.05 }, @@ -740,22 +721,41 @@ "componentID": 27529224, "name": "Offenbacher", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", - "rank_data_loc": "8", - "rank_data_loc_group": "8", + "rank_data": "6", + "rank_data_group": "6", + "rank_data_loc": "7", + "rank_data_loc_group": "7", "rank_loc": "8", "rank_loc_group": "8", - "score_data": 0.472, - "score_data_group": 0.472, - "score_data_loc": 0.245, - "score_data_loc_group": 0.245, + "score_data": 0.567, + "score_data_group": 0.567, + "score_data_loc": 0.292, + "score_data_loc_group": 0.292, "score_loc": 0.017, "score_loc_group": 0.017 }, + { + "component": "Colestine", + "componentData": "Data Complete", + "componentID": 27529517, + "name": "Colestine", + "not_displayed": false, + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "8", + "rank_data_loc_group": "8", + "rank_loc": "6", + "rank_loc_group": "6", + "score_data": 0.429, + "score_data_group": 0.429, + "score_data_loc": 0.227, + "score_data_loc_group": 0.227, + "score_loc": 0.025, + "score_loc_group": 0.025 + }, { "component": "Beekman", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 27529518, "name": "Beekman", "not_displayed": false, @@ -765,10 +765,10 @@ "rank_data_loc_group": "9", "rank_loc": "5", "rank_loc_group": "5", - "score_data": 0.365, - "score_data_group": 0.365, - "score_data_loc": 0.206, - "score_data_loc_group": 0.206, + "score_data": 0.393, + "score_data_group": 0.393, + "score_data_loc": 0.219, + "score_data_loc_group": 0.219, "score_loc": 0.046, "score_loc_group": 0.046 }, @@ -779,15 +779,15 @@ "name": "Josephine", "not_displayed": true, "rank_data": "Not Displayed", - "rank_data_group": "2", + "rank_data_group": "4", "rank_data_loc": "Not Displayed", "rank_data_loc_group": "2", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.542, - "score_data_group": 0.668, - "score_data_loc": 0.334, - "score_data_loc_group": 0.397, + "score_data": 0.582, + "score_data_group": 0.657, + "score_data_loc": 0.354, + "score_data_loc_group": 0.391, "score_loc": 0.125, "score_loc_group": 0.125 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.63413723,-94.31005777].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.63413723,-94.31005777].json index b650423..c979d74 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.63413723,-94.31005777].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[42.63413723,-94.31005777].json @@ -3,20 +3,20 @@ "AWS_PIW90": 2.55, "Soil Data Value": [ [ - "rfv_class_0", - 0.2488625668211104 + "texture_0", + 2.0248583345066042 ], [ - "rfv_class_30", - 0.24530228329929127 + "texture_30", + 2.0248583345066042 ], [ - "texture_0", - 0.0 + "rfv_class_0", + 0.2488625668211104 ], [ - "texture_30", - 0.0 + "rfv_class_30", + 0.24530228329929127 ] ], "metadata": { @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R103XY002MN" + "R103XY004MN" ], "ecoclassname": [ - "Calcareous Upland Prairies" + "Loamy Upland Prairies" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY002MN" + "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY004MN" ] } }, @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R103XY004MN" + "R103XY001MN" ], "ecoclassname": [ - "Loamy Upland Prairies" + "Loamy Wet Prairies" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY004MN" + "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY001MN" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R103XY001MN" + "R103XY004MN" ], "ecoclassname": [ - "Loamy Wet Prairies" + "Loamy Upland Prairies" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY001MN" + "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY004MN" ] } }, @@ -209,13 +209,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R103XY004MN" + "R103XY015MN" ], "ecoclassname": [ - "Loamy Upland Prairies" + "Depressional Marsh" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY004MN" + "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY015MN" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R103XY001MN" + "R103XY002MN" ], "ecoclassname": [ - "Loamy Wet Prairies" + "Calcareous Upland Prairies" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY001MN" + "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY002MN" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R103XY015MN" + "R103XY001MN" ], "ecoclassname": [ - "Depressional Marsh" + "Loamy Wet Prairies" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY015MN" + "https://edit.sc.egov.usda.gov/catalogs/esd/103X/R103XY001MN" ] } }, @@ -434,42 +434,42 @@ }, "soilRank": [ { - "component": "Nicollet", + "component": "Webster", "componentData": "Data Complete", - "componentID": 27398757, - "name": "Nicollet", + "componentID": 27398758, + "name": "Webster", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", + "rank_data": "2", + "rank_data_group": "2", "rank_data_loc": "1", "rank_data_loc_group": "1", - "rank_loc": 1, - "rank_loc_group": 1, - "score_data": 0.369, - "score_data_group": 0.369, - "score_data_loc": 0.385, - "score_data_loc_group": 0.385, - "score_loc": 0.402, - "score_loc_group": 0.402 + "rank_loc": 2, + "rank_loc_group": 2, + "score_data": 0.451, + "score_data_group": 0.451, + "score_data_loc": 0.391, + "score_data_loc_group": 0.391, + "score_loc": 0.331, + "score_loc_group": 0.331 }, { - "component": "Webster", + "component": "Nicollet", "componentData": "Data Complete", - "componentID": 27398758, - "name": "Webster", + "componentID": 27398757, + "name": "Nicollet", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "2", "rank_data_loc_group": "2", - "rank_loc": 2, - "rank_loc_group": 2, - "score_data": 0.287, - "score_data_group": 0.287, - "score_data_loc": 0.309, - "score_data_loc_group": 0.309, - "score_loc": 0.331, - "score_loc_group": 0.331 + "rank_loc": 1, + "rank_loc_group": 1, + "score_data": 0.334, + "score_data_group": 0.334, + "score_data_loc": 0.368, + "score_data_loc_group": 0.368, + "score_loc": 0.402, + "score_loc_group": 0.402 }, { "component": "Clarion", @@ -477,16 +477,16 @@ "componentID": 27398759, "name": "Clarion", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "3", "rank_data_loc_group": "3", "rank_loc": 3, "rank_loc_group": 3, - "score_data": 0.367, - "score_data_group": 0.367, - "score_data_loc": 0.283, - "score_data_loc_group": 0.283, + "score_data": 0.426, + "score_data_group": 0.426, + "score_data_loc": 0.313, + "score_data_loc_group": 0.313, "score_loc": 0.2, "score_loc_group": 0.2 }, @@ -502,31 +502,31 @@ "rank_data_loc_group": "4", "rank_loc": 6, "rank_loc_group": 6, - "score_data": 0.433, - "score_data_group": 0.433, - "score_data_loc": 0.222, - "score_data_loc_group": 0.222, + "score_data": 0.567, + "score_data_group": 0.567, + "score_data_loc": 0.289, + "score_data_loc_group": 0.289, "score_loc": 0.011, "score_loc_group": 0.011 }, { - "component": "Glencoe", + "component": "Okoboji", "componentData": "Data Complete", - "componentID": 27398765, - "name": "Glencoe", + "componentID": 27398760, + "name": "Okoboji", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "5", "rank_data_loc_group": "5", - "rank_loc": 5, - "rank_loc_group": 5, - "score_data": 0.433, - "score_data_group": 0.433, - "score_data_loc": 0.222, - "score_data_loc_group": 0.222, - "score_loc": 0.011, - "score_loc_group": 0.011 + "rank_loc": 4, + "rank_loc_group": 4, + "score_data": 0.337, + "score_data_group": 0.337, + "score_data_loc": 0.188, + "score_data_loc_group": 0.188, + "score_loc": 0.04, + "score_loc_group": 0.04 }, { "component": "Canisteo", @@ -534,37 +534,37 @@ "componentID": 27398763, "name": "Canisteo", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "6", + "rank_data_group": "6", "rank_data_loc": "6", "rank_data_loc_group": "6", "rank_loc": 7, "rank_loc_group": 7, - "score_data": 0.336, - "score_data_group": 0.336, - "score_data_loc": 0.171, - "score_data_loc_group": 0.171, + "score_data": 0.291, + "score_data_group": 0.291, + "score_data_loc": 0.149, + "score_data_loc_group": 0.149, "score_loc": 0.007, "score_loc_group": 0.007 }, { - "component": "Okoboji", - "componentData": "Missing Data", - "componentID": 27398760, - "name": "Okoboji", + "component": "Glencoe", + "componentData": "Data Complete", + "componentID": 27398765, + "name": "Glencoe", "not_displayed": false, "rank_data": "7", "rank_data_group": "7", "rank_data_loc": "7", "rank_data_loc_group": "7", - "rank_loc": 4, - "rank_loc_group": 4, - "score_data": 0.253, - "score_data_group": 0.253, - "score_data_loc": 0.146, - "score_data_loc_group": 0.146, - "score_loc": 0.04, - "score_loc_group": 0.04 + "rank_loc": 5, + "rank_loc_group": 5, + "score_data": 0.268, + "score_data_group": 0.268, + "score_data_loc": 0.139, + "score_data_loc_group": 0.139, + "score_loc": 0.011, + "score_loc_group": 0.011 } ] } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[43.06450312,-119.4596489].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[43.06450312,-119.4596489].json index 2417112..5994a82 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[43.06450312,-119.4596489].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[43.06450312,-119.4596489].json @@ -3,20 +3,20 @@ "AWS_PIW90": 11.53, "Soil Data Value": [ [ - "rfv_class_30", - 1.6875961328426623 + "texture_0", + 2.8079607337604306 ], [ - "rfv_class_0", - 1.304781220223484 + "texture_30", + 2.8079607337604306 ], [ - "texture_30", - 0.35284738420075 + "rfv_class_30", + 1.6875961328426623 ], [ - "texture_0", - 0.0 + "rfv_class_0", + 1.304781220223484 ] ], "metadata": { @@ -82,7 +82,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#lonely", "slope": 19.0, "taxsubgrp": "Xeric Haplocambids", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Lonely series consists of moderately deep, well drained soils that formed in colluvium overlying igneous bedrock. Lonely soils are on dissected rock pediments and mountain sideslopes and have slopes of 2 to 30 percent. The mean annual precipitation is about 10 inches and the mean annual temperature is about 43 degrees F." }, @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R024XY003OR" + "R023XY220OR" ], "ecoclassname": [ - "Sodic Bottom " + "Clayey 10-12 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/024X/R024XY003OR" + "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY220OR" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R023XY212OR" + "R023XY220OR" ], "ecoclassname": [ - "Loamy 10-12 Pz" + "Clayey 10-12 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY212OR" + "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY220OR" ] } }, @@ -194,7 +194,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#actem", "slope": 11.0, "taxsubgrp": "Xeric Argidurids", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Actem series consists of shallow to a duripan, well drained soils that formed in alluvium and colluvium derived from volcanic rocks. Actem soils are on hills and lava plateaus. Slopes are 2 to 20 percent. The mean annual precipitation is about 250 mm and the mean annual temperature is about 7 degrees C." }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R023XY220OR" + "R023XY300OR" ], "ecoclassname": [ - "Clayey 10-12 Pz" + "South Slopes 10-12 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY220OR" + "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY300OR" ] } }, @@ -362,7 +362,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#lonegrave", "slope": 55.0, "taxsubgrp": "Xeric Haplocambids", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Lonegrave series consists of moderately deep, well drained soils that formed in colluvium derived from volcanic rocks. Lonegrave soils are on plateaus, hills, canyonlands, and mountains. Slopes are 5 to 70 percent. The mean annual precipitation is about 280 mm and the mean annual temperature is about 7 degrees C." }, @@ -418,7 +418,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#raz", "slope": 11.0, "taxsubgrp": "Xeric Haplodurids", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Raz series consists of shallow to a duripan, well drained soils that formed in slope alluvium, colluvium and residuum derived from basalt and tuff. Raz soils are on lava plateaus. Slopes are 1 to 20 percent. The mean annual precipitation is about 230 mm and the mean annual temperature is about 7 degrees C." }, @@ -433,13 +433,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R023XY300OR" + "R023XY212OR" ], "ecoclassname": [ - "South Slopes 10-12 Pz" + "Loamy 10-12 Pz" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY300OR" + "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY212OR" ] } }, @@ -474,7 +474,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#brace", "slope": 11.0, "taxsubgrp": "Xeric Argidurids", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Brace series consists of moderately deep to a duripan, well drained soils that formed in slope alluvium, colluvium, and residuum derived from welded rhyolitic tuff and basalt. Brace soils are on structural benches, hills, and lava plateaus. Slopes are 1 to 20 percent. The mean annual precipitation is about 300 mm and the mean annual temperature is about 6 degrees C." }, @@ -489,13 +489,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R023XY220OR" + "R024XY003OR" ], "ecoclassname": [ - "Clayey 10-12 Pz" + "Sodic Bottom " ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/023X/R023XY220OR" + "https://edit.sc.egov.usda.gov/catalogs/esd/024X/R024XY003OR" ] } }, @@ -530,7 +530,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#ausmus", "slope": 1.0, "taxsubgrp": "Aquic Natrargids", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Ausmus series consists of very deep, somewhat poorly drained or moderately well drained soils that formed in alluvium and lacustrine deposits derived from volcanic rocks and volcanic ash. Ausmus soils are on low lake terraces. Slopes are 0 to 2 percent. The mean annual precipitation is about 230 mm and the mean annual temperature is about 6.5 degrees C." }, @@ -551,16 +551,16 @@ "componentID": 27631144, "name": "Lonely", "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "1", "rank_data_loc_group": "1", "rank_loc": 1, "rank_loc_group": 1, - "score_data": 0.61, - "score_data_group": 0.61, - "score_data_loc": 0.439, - "score_data_loc_group": 0.439, + "score_data": 0.682, + "score_data_group": 0.682, + "score_data_loc": 0.475, + "score_data_loc_group": 0.475, "score_loc": 0.267, "score_loc_group": 0.267 }, @@ -570,16 +570,16 @@ "componentID": 27631143, "name": "Robson", "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", + "rank_data": "1", + "rank_data_group": "1", "rank_data_loc": "2", "rank_data_loc_group": "2", "rank_loc": 2, "rank_loc_group": 2, - "score_data": 0.69, - "score_data_group": 0.69, - "score_data_loc": 0.438, - "score_data_loc_group": 0.438, + "score_data": 0.74, + "score_data_group": 0.74, + "score_data_loc": 0.464, + "score_data_loc_group": 0.464, "score_loc": 0.187, "score_loc_group": 0.187 }, @@ -589,16 +589,16 @@ "componentID": 27631363, "name": "Actem", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", + "rank_data": "2", + "rank_data_group": "2", "rank_data_loc": "3", "rank_data_loc_group": "3", "rank_loc": 5, "rank_loc_group": 5, - "score_data": 0.694, - "score_data_group": 0.694, - "score_data_loc": 0.404, - "score_data_loc_group": 0.404, + "score_data": 0.719, + "score_data_group": 0.719, + "score_data_loc": 0.416, + "score_data_loc_group": 0.416, "score_loc": 0.113, "score_loc_group": 0.113 }, @@ -608,75 +608,75 @@ "componentID": 27630911, "name": "Rinconflat", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "4", + "rank_data_group": "4", "rank_data_loc": "4", "rank_data_loc_group": "4", "rank_loc": 4, "rank_loc_group": 4, - "score_data": 0.621, - "score_data_group": 0.621, - "score_data_loc": 0.367, - "score_data_loc_group": 0.367, + "score_data": 0.667, + "score_data_group": 0.667, + "score_data_loc": 0.39, + "score_data_loc_group": 0.39, "score_loc": 0.113, "score_loc_group": 0.113 }, { - "component": "Brace", + "component": "Reallis", "componentData": "Data Complete", - "componentID": 27630932, - "name": "Brace", + "componentID": 27630925, + "name": "Reallis", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", + "rank_data": "5", + "rank_data_group": "5", "rank_data_loc": "5", "rank_data_loc_group": "5", - "rank_loc": 8, - "rank_loc_group": 8, - "score_data": 0.655, - "score_data_group": 0.655, - "score_data_loc": 0.351, - "score_data_loc_group": 0.351, - "score_loc": 0.046, - "score_loc_group": 0.046 + "rank_loc": 3, + "rank_loc_group": 3, + "score_data": 0.653, + "score_data_group": 0.653, + "score_data_loc": 0.383, + "score_data_loc_group": 0.383, + "score_loc": 0.113, + "score_loc_group": 0.113 }, { - "component": "Raz", + "component": "Brace", "componentData": "Data Complete", - "componentID": 27630931, - "name": "Raz", + "componentID": 27630932, + "name": "Brace", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "6", + "rank_data_group": "6", "rank_data_loc": "6", "rank_data_loc_group": "6", - "rank_loc": 7, - "rank_loc_group": 7, - "score_data": 0.629, - "score_data_group": 0.629, + "rank_loc": 8, + "rank_loc_group": 8, + "score_data": 0.65, + "score_data_group": 0.65, "score_data_loc": 0.348, "score_data_loc_group": 0.348, - "score_loc": 0.067, - "score_loc_group": 0.067 + "score_loc": 0.046, + "score_loc_group": 0.046 }, { - "component": "Reallis", + "component": "Raz", "componentData": "Data Complete", - "componentID": 27630925, - "name": "Reallis", + "componentID": 27630931, + "name": "Raz", "not_displayed": false, "rank_data": "8", "rank_data_group": "8", "rank_data_loc": "7", "rank_data_loc_group": "7", - "rank_loc": 3, - "rank_loc_group": 3, - "score_data": 0.579, - "score_data_group": 0.579, - "score_data_loc": 0.346, - "score_data_loc_group": 0.346, - "score_loc": 0.113, - "score_loc_group": 0.113 + "rank_loc": 7, + "rank_loc_group": 7, + "score_data": 0.623, + "score_data_group": 0.623, + "score_data_loc": 0.345, + "score_data_loc_group": 0.345, + "score_loc": 0.067, + "score_loc_group": 0.067 }, { "component": "Ausmus", @@ -690,10 +690,10 @@ "rank_data_loc_group": "8", "rank_loc": 9, "rank_loc_group": 9, - "score_data": 0.602, - "score_data_group": 0.602, - "score_data_loc": 0.303, - "score_data_loc_group": 0.303, + "score_data": 0.641, + "score_data_group": 0.641, + "score_data_loc": 0.323, + "score_data_loc_group": 0.323, "score_loc": 0.005, "score_loc_group": 0.005 }, @@ -709,10 +709,10 @@ "rank_data_loc_group": "9", "rank_loc": 6, "rank_loc_group": 6, - "score_data": 0.437, - "score_data_group": 0.437, - "score_data_loc": 0.262, - "score_data_loc_group": 0.262, + "score_data": 0.531, + "score_data_group": 0.531, + "score_data_loc": 0.309, + "score_data_loc_group": 0.309, "score_loc": 0.087, "score_loc_group": 0.087 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.6508331,-121.5111084].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.6508331,-121.5111084].json index 8fc2ae6..0624850 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.6508331,-121.5111084].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.6508331,-121.5111084].json @@ -65,7 +65,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#hood", "slope": 2.0, "taxsubgrp": "Ultic Haploxeralfs", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Hood series consists of very deep, well drained soils formed in silty or loamy lacustrine deposits. Hood soils are on dissected terraces and terrace escarpments. Slopes are 0 to 65 percent. The mean annual precipitation is 38 inches and mean annual temperature is 50 degrees F." }, @@ -121,7 +121,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#hood", "slope": 30.0, "taxsubgrp": "Ultic Haploxeralfs", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Hood series consists of very deep, well drained soils formed in silty or loamy lacustrine deposits. Hood soils are on dissected terraces and terrace escarpments. Slopes are 0 to 65 percent. The mean annual precipitation is 38 inches and mean annual temperature is 50 degrees F." }, @@ -177,7 +177,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#hood", "slope": 6.0, "taxsubgrp": "Ultic Haploxeralfs", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Hood series consists of very deep, well drained soils formed in silty or loamy lacustrine deposits. Hood soils are on dissected terraces and terrace escarpments. Slopes are 0 to 65 percent. The mean annual precipitation is 38 inches and mean annual temperature is 50 degrees F." }, diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.88932423,-121.0347381].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.88932423,-121.0347381].json index 995ee95..abcfdc0 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.88932423,-121.0347381].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[45.88932423,-121.0347381].json @@ -65,7 +65,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#gunn", "slope": 5.0, "taxsubgrp": "Ultic Haploxeralfs", - "textureInfill": "Yes" + "textureInfill": "No" }, "siteDescription": "Landscape--plateaus, hills\nLandform--structural benches, hillslopes, ridgetops\nSlope--0 to 65 percent\nParent material--loess mixed with colluvium and residuum derived from basalt\nMean annual precipitation--about 530 mm\nMean annual air temperature--about 9 degrees C\nDepth class--deep, very deep\nDrainage class--well drained\nSoil moisture regime--xeric\nSoil temperature regime--mesic\nSoil moisture subclass--typic" }, @@ -121,7 +121,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#gunn", "slope": 19.0, "taxsubgrp": "Ultic Haploxeralfs", - "textureInfill": "Yes" + "textureInfill": "No" }, "siteDescription": "Landscape--plateaus, hills\nLandform--structural benches, hillslopes, ridgetops\nSlope--0 to 65 percent\nParent material--loess mixed with colluvium and residuum derived from basalt\nMean annual precipitation--about 530 mm\nMean annual air temperature--about 9 degrees C\nDepth class--deep, very deep\nDrainage class--well drained\nSoil moisture regime--xeric\nSoil temperature regime--mesic\nSoil moisture subclass--typic" }, @@ -138,7 +138,7 @@ "soilRank": [ { "component": "Gunn", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 26581766, "name": "Gunn2", "not_displayed": false, @@ -148,16 +148,16 @@ "rank_data_loc_group": "1", "rank_loc": "Not Displayed", "rank_loc_group": "1", - "score_data": 0.37, - "score_data_group": 0.37, - "score_data_loc": 0.649, - "score_data_loc_group": 0.649, + "score_data": 0.443, + "score_data_group": 0.443, + "score_data_loc": 0.686, + "score_data_loc_group": 0.686, "score_loc": 0.929, "score_loc_group": 0.929 }, { "component": "Gunn", - "componentData": NaN, + "componentData": "Data Complete", "componentID": 26581758, "name": "Gunn", "not_displayed": true, @@ -167,10 +167,10 @@ "rank_data_loc_group": "1", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.312, - "score_data_group": 0.37, - "score_data_loc": 0.62, - "score_data_loc_group": 0.649, + "score_data": 0.401, + "score_data_group": 0.443, + "score_data_loc": 0.665, + "score_data_loc_group": 0.686, "score_loc": 0.929, "score_loc_group": 0.929 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[47.213922,-69.28246582].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[47.213922,-69.28246582].json index be13f50..9215c03 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[47.213922,-69.28246582].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[47.213922,-69.28246582].json @@ -3,20 +3,20 @@ "AWS_PIW90": 4.73, "Soil Data Value": [ [ - "rfv_class_0", - 1.561554765729544 + "texture_0", + 1.824911885818355 ], [ - "rfv_class_30", - 1.543062149933733 + "rfv_class_0", + 1.561554765729544 ], [ "texture_30", - 0.9908959471041263 + 1.543062149933733 ], [ - "texture_0", - 0.0 + "rfv_class_30", + 1.543062149933733 ] ], "metadata": { @@ -138,7 +138,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#chesuncook", "slope": 20.0, "taxsubgrp": "Aquic Haplorthods", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Chesuncook series consists of very deep, moderately well drained soils on till plains, hills, ridges, and mountains. These soils formed in dense glacial till. Saturated hydraulic conductivity is moderately high or high in the solum, and low to moderately high in the dense substratum. Slope ranges from 3 to 45 percent. Mean annual temperature is about 4 degrees C, and mean annual precipitation is about 1092 mm at the type location." }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F143XY704ME" + "F143XY501ME" ], "ecoclassname": [ - "Shallow Organic Rock Pocket" + "Loamy Slope" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/143X/F143XY704ME" + "https://edit.sc.egov.usda.gov/catalogs/esd/143X/F143XY501ME" ] } }, @@ -194,7 +194,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#elliottsville", "slope": 25.0, "taxsubgrp": "Typic Haplorthods", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Elliottsville series consists of moderately deep, well drained soils formed in glacial till on till plains, hills, ridges and mountains. Permeability is moderate. Slope ranges from 3 to 65 percent. Mean annual temperature is about 3 degrees C, and mean annual precipitation is about 970 mm at the type location." }, @@ -250,7 +250,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#monson", "slope": 40.0, "taxsubgrp": "Lithic Haplorthods", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Monson series consists of shallow, somewhat excessively drained soils formed in glacial till on knolls of till plains, and on hills, ridges and mountains. Estimated saturated hydraulic conductivity is moderate or high. Slope ranges from 3 to 60 percent. Mean annual temperature is about 3 degrees C, and mean annual precipitation is about 965 mm at the type location." }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F143XY501ME" + "F143XY704ME" ], "ecoclassname": [ - "Loamy Slope" + "Shallow Organic Rock Pocket" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/143X/F143XY501ME" + "https://edit.sc.egov.usda.gov/catalogs/esd/143X/F143XY704ME" ] } }, @@ -306,7 +306,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#knob_lock", "slope": 50.0, "taxsubgrp": "Lithic Udifolists", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Knob Lock series consists of very shallow and shallow, well drained through excessively drained organic soils on mountains and hills. They formed in thin organic deposits underlain in most places by a very thin mineral horizon over bedrock. Saturated hydraulic conductivity is moderately high through very high throughout the soil. Slope ranges from 3 through 80 percent. Mean annual precipitation is about 1092 mm and mean annual temperature is about 5 degrees C." }, @@ -362,7 +362,7 @@ "seeURL": "https://casoilresource.lawr.ucdavis.edu/see/#elliottsville", "slope": 40.0, "taxsubgrp": "Typic Haplorthods", - "textureInfill": "No" + "textureInfill": "Yes" }, "siteDescription": "The Elliottsville series consists of moderately deep, well drained soils formed in glacial till on till plains, hills, ridges and mountains. Permeability is moderate. Slope ranges from 3 to 65 percent. Mean annual temperature is about 3 degrees C, and mean annual precipitation is about 970 mm at the type location." }, @@ -389,32 +389,13 @@ "rank_data_loc_group": "1", "rank_loc": "2", "rank_loc_group": "2", - "score_data": 0.737, - "score_data_group": 0.737, - "score_data_loc": 0.521, - "score_data_loc_group": 0.521, + "score_data": 0.679, + "score_data_group": 0.679, + "score_data_loc": 0.492, + "score_data_loc_group": 0.492, "score_loc": 0.306, "score_loc_group": 0.306 }, - { - "component": "Elliottsville", - "componentData": "Data Complete", - "componentID": 26560911, - "name": "Elliottsville", - "not_displayed": false, - "rank_data": "2", - "rank_data_group": "2", - "rank_data_loc": "2", - "rank_data_loc_group": "2", - "rank_loc": "3", - "rank_loc_group": "3", - "score_data": 0.697, - "score_data_group": 0.697, - "score_data_loc": 0.474, - "score_data_loc_group": 0.474, - "score_loc": 0.25, - "score_loc_group": 0.25 - }, { "component": "Knob lock", "componentData": "Data Complete", @@ -423,17 +404,36 @@ "not_displayed": false, "rank_data": "4", "rank_data_group": "4", - "rank_data_loc": "3", - "rank_data_loc_group": "3", + "rank_data_loc": "2", + "rank_data_loc_group": "2", "rank_loc": "Not Displayed", "rank_loc_group": "1", - "score_data": 0.475, - "score_data_group": 0.475, - "score_data_loc": 0.424, - "score_data_loc_group": 0.424, + "score_data": 0.532, + "score_data_group": 0.532, + "score_data_loc": 0.452, + "score_data_loc_group": 0.452, "score_loc": 0.372, "score_loc_group": 0.372 }, + { + "component": "Elliottsville", + "componentData": "Data Complete", + "componentID": 26560911, + "name": "Elliottsville", + "not_displayed": false, + "rank_data": "2", + "rank_data_group": "2", + "rank_data_loc": "3", + "rank_data_loc_group": "3", + "rank_loc": "3", + "rank_loc_group": "3", + "score_data": 0.647, + "score_data_group": 0.647, + "score_data_loc": 0.449, + "score_data_loc_group": 0.449, + "score_loc": 0.25, + "score_loc_group": 0.25 + }, { "component": "Monson", "componentData": "Data Complete", @@ -448,8 +448,8 @@ "rank_loc_group": "4", "score_data": 0.608, "score_data_group": 0.608, - "score_data_loc": 0.34, - "score_data_loc_group": 0.34, + "score_data_loc": 0.339, + "score_data_loc_group": 0.339, "score_loc": 0.071, "score_loc_group": 0.071 }, @@ -462,13 +462,13 @@ "rank_data": "Not Displayed", "rank_data_group": "2", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "2", + "rank_data_loc_group": "3", "rank_loc": "Not Displayed", "rank_loc_group": "3", - "score_data": 0.536, - "score_data_group": 0.697, - "score_data_loc": 0.393, - "score_data_loc_group": 0.474, + "score_data": 0.582, + "score_data_group": 0.647, + "score_data_loc": 0.416, + "score_data_loc_group": 0.449, "score_loc": 0.25, "score_loc_group": 0.25 }, @@ -481,13 +481,13 @@ "rank_data": "Not Displayed", "rank_data_group": "4", "rank_data_loc": "Not Displayed", - "rank_data_loc_group": "3", + "rank_data_loc_group": "2", "rank_loc": "1", "rank_loc_group": "1", - "score_data": 0.406, - "score_data_group": 0.475, - "score_data_loc": 0.389, - "score_data_loc_group": 0.424, + "score_data": 0.404, + "score_data_group": 0.532, + "score_data_loc": 0.388, + "score_data_loc_group": 0.452, "score_loc": 0.372, "score_loc_group": 0.372 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[48.6956,-121.8166].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[48.6956,-121.8166].json index 5cb63cf..a4c007f 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[48.6956,-121.8166].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[48.6956,-121.8166].json @@ -3,20 +3,20 @@ "AWS_PIW90": 17.67, "Soil Data Value": [ [ - "rfv_class_0", - 0.6201391749943385 + "texture_0", + 1.4521501008635898 ], [ - "rfv_class_30", - 0.6201391749943385 + "texture_30", + 1.4521501008635898 ], [ - "texture_0", - 0.0 + "rfv_class_0", + 0.6201391749943385 ], [ - "texture_30", - 0.0 + "rfv_class_30", + 0.6201391749943385 ] ], "metadata": { @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R003XN613WA" + "F003XA305WA" ], "ecoclassname": [ - "Low Mountain Unforested Wetlands" + "Low Glacial Trough Valleys Moist Forest Western Hemlock" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/003X/R003XN613WA" + "https://edit.sc.egov.usda.gov/catalogs/esd/003X/F003XA305WA" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F003XA305WA" + "R003XN613WA" ], "ecoclassname": [ - "Low Glacial Trough Valleys Moist Forest Western Hemlock" + "Low Mountain Unforested Wetlands" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/003X/F003XA305WA" + "https://edit.sc.egov.usda.gov/catalogs/esd/003X/R003XN613WA" ] } }, @@ -221,10 +221,10 @@ "rank_data_loc_group": "1", "rank_loc": 1, "rank_loc_group": 1, - "score_data": 0.496, - "score_data_group": 0.496, - "score_data_loc": 0.491, - "score_data_loc_group": 0.491, + "score_data": 0.525, + "score_data_group": 0.525, + "score_data_loc": 0.505, + "score_data_loc_group": 0.505, "score_loc": 0.486, "score_loc_group": 0.486 }, @@ -240,10 +240,10 @@ "rank_data_loc_group": "2", "rank_loc": 2, "rank_loc_group": 2, - "score_data": 0.229, - "score_data_group": 0.229, - "score_data_loc": 0.294, - "score_data_loc_group": 0.294, + "score_data": 0.243, + "score_data_group": 0.243, + "score_data_loc": 0.301, + "score_data_loc_group": 0.301, "score_loc": 0.36, "score_loc_group": 0.36 }, @@ -259,10 +259,10 @@ "rank_data_loc_group": "3", "rank_loc": 3, "rank_loc_group": 3, - "score_data": 0.352, - "score_data_group": 0.352, - "score_data_loc": 0.253, - "score_data_loc_group": 0.253, + "score_data": 0.362, + "score_data_group": 0.362, + "score_data_loc": 0.258, + "score_data_loc_group": 0.258, "score_loc": 0.154, "score_loc_group": 0.154 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[60.42282639,-158.4018264].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[60.42282639,-158.4018264].json index a554547..217de26 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[60.42282639,-158.4018264].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[60.42282639,-158.4018264].json @@ -3,20 +3,20 @@ "AWS_PIW90": 7.66, "Soil Data Value": [ [ - "rfv_class_30", - 1.338959652390504 + "texture_0", + 2.3604101379998084 ], [ "texture_30", - 0.48238718594988694 + 2.3604101379998084 ], [ - "rfv_class_0", - 0.20970102486621656 + "rfv_class_30", + 1.338959652390504 ], [ - "texture_0", - 0.0 + "rfv_class_0", + 0.20970102486621656 ] ], "metadata": { @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R236XY107AK" + "R236XY140AK" ], "ecoclassname": [ - "Western Alaska Maritime Scrub Gravelly Drainages" + "Subarctic Tussock Tundra Wet Loamy Plains" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/236X/R236XY107AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/236X/R236XY140AK" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F236XY139AK" + "R236XY109AK" ], "ecoclassname": [ - "Boreal Woodland Loamy Rises" + "Subarctic Low Scrub Peat Drainages" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/236X/F236XY139AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/236X/R236XY109AK" ] } }, @@ -265,13 +265,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R236XY140AK" + "F236XY139AK" ], "ecoclassname": [ - "Subarctic Tussock Tundra Wet Loamy Plains" + "Boreal Woodland Loamy Rises" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/236X/R236XY140AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/236X/F236XY139AK" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R236XY109AK" + "R236XY107AK" ], "ecoclassname": [ - "Subarctic Low Scrub Peat Drainages" + "Western Alaska Maritime Scrub Gravelly Drainages" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/236X/R236XY109AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/236X/R236XY107AK" ] } }, diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[62.32776717,-157.2767099].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[62.32776717,-157.2767099].json index a6913fb..cff3ea7 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[62.32776717,-157.2767099].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[62.32776717,-157.2767099].json @@ -3,20 +3,20 @@ "AWS_PIW90": 12.07, "Soil Data Value": [ [ - "rfv_class_0", - 1.7621306108711137 + "texture_0", + 2.639110609771892 ], [ - "rfv_class_30", - 1.6416647689252122 + "texture_30", + 2.2589411072908874 ], [ - "texture_30", - 0.9858150371789198 + "rfv_class_0", + 1.7621306108711137 ], [ - "texture_0", - 0.0 + "rfv_class_30", + 1.6416647689252122 ] ], "metadata": { @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "R230XY630AK" ], "ecoclassname": [ - "" + "Alpine Dwarf Scrub Gravelly Slopes" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY630AK" ] } }, @@ -153,13 +153,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F230XY611AK" ], "ecoclassname": [ - "" + "Boreal Forest Loamy Frozen Slopes" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/F230XY611AK" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F230XY611AK" + "" ], "ecoclassname": [ - "Boreal Forest Loamy Frozen Slopes" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/F230XY611AK" + "" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R230XY630AK" + "" ], "ecoclassname": [ - "Alpine Dwarf Scrub Gravelly Slopes" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY630AK" + "" ] } }, @@ -557,10 +557,10 @@ "rank_data_loc_group": "1", "rank_loc": 1, "rank_loc_group": 1, - "score_data": 0.822, - "score_data_group": 0.822, - "score_data_loc": 0.561, - "score_data_loc_group": 0.561, + "score_data": 0.849, + "score_data_group": 0.849, + "score_data_loc": 0.574, + "score_data_loc_group": 0.574, "score_loc": 0.3, "score_loc_group": 0.3 }, @@ -576,10 +576,10 @@ "rank_data_loc_group": "2", "rank_loc": 2, "rank_loc_group": 2, - "score_data": 0.678, - "score_data_group": 0.678, - "score_data_loc": 0.484, - "score_data_loc_group": 0.484, + "score_data": 0.706, + "score_data_group": 0.706, + "score_data_loc": 0.498, + "score_data_loc_group": 0.498, "score_loc": 0.29, "score_loc_group": 0.29 }, @@ -595,10 +595,10 @@ "rank_data_loc_group": "3", "rank_loc": 3, "rank_loc_group": 3, - "score_data": 0.771, - "score_data_group": 0.771, - "score_data_loc": 0.45, - "score_data_loc_group": 0.45, + "score_data": 0.778, + "score_data_group": 0.778, + "score_data_loc": 0.454, + "score_data_loc_group": 0.454, "score_loc": 0.13, "score_loc_group": 0.13 }, @@ -614,32 +614,13 @@ "rank_data_loc_group": "4", "rank_loc": 4, "rank_loc_group": 4, - "score_data": 0.736, - "score_data_group": 0.736, - "score_data_loc": 0.403, - "score_data_loc_group": 0.403, + "score_data": 0.763, + "score_data_group": 0.763, + "score_data_loc": 0.417, + "score_data_loc_group": 0.417, "score_loc": 0.07, "score_loc_group": 0.07 }, - { - "component": "E30-boreal taiga/tussock-silty frozen slopes", - "componentData": "Missing Data", - "componentID": 27026715, - "name": "E30-boreal taiga/tussock-silty frozen slopes", - "not_displayed": false, - "rank_data": "6", - "rank_data_group": "6", - "rank_data_loc": "5", - "rank_data_loc_group": "5", - "rank_loc": 5, - "rank_loc_group": 5, - "score_data": 0.605, - "score_data_group": 0.605, - "score_data_loc": 0.332, - "score_data_loc_group": 0.332, - "score_loc": 0.06, - "score_loc_group": 0.06 - }, { "component": "E30-boreal scrub-silty frozen drainageways", "componentData": "Missing Data", @@ -648,33 +629,52 @@ "not_displayed": false, "rank_data": "5", "rank_data_group": "5", - "rank_data_loc": "6", - "rank_data_loc_group": "6", + "rank_data_loc": "5", + "rank_data_loc_group": "5", "rank_loc": 7, "rank_loc_group": 7, - "score_data": 0.616, - "score_data_group": 0.616, - "score_data_loc": 0.328, - "score_data_loc_group": 0.328, + "score_data": 0.676, + "score_data_group": 0.676, + "score_data_loc": 0.358, + "score_data_loc_group": 0.358, "score_loc": 0.04, "score_loc_group": 0.04 }, + { + "component": "E30-boreal taiga/tussock-silty frozen slopes", + "componentData": "Missing Data", + "componentID": 27026715, + "name": "E30-boreal taiga/tussock-silty frozen slopes", + "not_displayed": false, + "rank_data": "7", + "rank_data_group": "7", + "rank_data_loc": "6", + "rank_data_loc_group": "6", + "rank_loc": 5, + "rank_loc_group": 5, + "score_data": 0.618, + "score_data_group": 0.618, + "score_data_loc": 0.339, + "score_data_loc_group": 0.339, + "score_loc": 0.06, + "score_loc_group": 0.06 + }, { "component": "E30-boreal subalpine woodland-gravelly colluvial slopes", "componentData": "Missing Data", "componentID": 27026719, "name": "E30-boreal subalpine woodland-gravelly colluvial slopes", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", + "rank_data": "6", + "rank_data_group": "6", "rank_data_loc": "7", "rank_data_loc_group": "7", "rank_loc": 9, "rank_loc_group": 9, - "score_data": 0.567, - "score_data_group": 0.567, - "score_data_loc": 0.298, - "score_data_loc_group": 0.298, + "score_data": 0.646, + "score_data_group": 0.646, + "score_data_loc": 0.338, + "score_data_loc_group": 0.338, "score_loc": 0.03, "score_loc_group": 0.03 }, @@ -690,10 +690,10 @@ "rank_data_loc_group": "8", "rank_loc": 8, "rank_loc_group": 8, - "score_data": 0.565, - "score_data_group": 0.565, - "score_data_loc": 0.298, - "score_data_loc_group": 0.298, + "score_data": 0.594, + "score_data_group": 0.594, + "score_data_loc": 0.312, + "score_data_loc_group": 0.312, "score_loc": 0.03, "score_loc_group": 0.03 }, @@ -709,10 +709,10 @@ "rank_data_loc_group": "9", "rank_loc": 6, "rank_loc_group": 6, - "score_data": 0.494, - "score_data_group": 0.494, - "score_data_loc": 0.272, - "score_data_loc_group": 0.272, + "score_data": 0.518, + "score_data_group": 0.518, + "score_data_loc": 0.284, + "score_data_loc_group": 0.284, "score_loc": 0.05, "score_loc_group": 0.05 } diff --git a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[63.52666854,-156.4422738].json b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[63.52666854,-156.4422738].json index 18e6aea..6449857 100644 --- a/soil_id/tests/us/__snapshots__/test_us/test_soil_location[63.52666854,-156.4422738].json +++ b/soil_id/tests/us/__snapshots__/test_us/test_soil_location[63.52666854,-156.4422738].json @@ -3,20 +3,20 @@ "AWS_PIW90": 16.97, "Soil Data Value": [ [ - "rfv_class_30", - 1.6626417621471414 + "texture_0", + 2.8656850294361527 ], [ - "rfv_class_0", - 1.2739601523701045 + "texture_30", + 2.7789700817384553 ], [ - "texture_30", - 0.46616973466368394 + "rfv_class_30", + 1.6626417621471412 ], [ - "texture_0", - 0.0 + "rfv_class_0", + 1.2739601523701045 ] ], "metadata": { @@ -41,13 +41,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F230XY612AK" + "F230XY611AK" ], "ecoclassname": [ - "Boreal Forest Loamy Slopes" + "Boreal Forest Loamy Frozen Slopes" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/F230XY612AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/F230XY611AK" ] } }, @@ -97,13 +97,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R230XY610AK" + "R230XY601AK" ], "ecoclassname": [ - "Boreal Scrub Silty Frozen Drainages" + "Boreal Forest Flood Plain Complex" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY610AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY601AK" ] } }, @@ -321,13 +321,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R230XY620AK" + "" ], "ecoclassname": [ - "Boreal Peat Frozen Flats Complex" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY620AK" + "" ] } }, @@ -377,13 +377,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "F230XY612AK" ], "ecoclassname": [ - "" + "Boreal Forest Loamy Slopes" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/F230XY612AK" ] } }, @@ -433,13 +433,13 @@ "esd": { "ESD": { "ecoclassid": [ - "F230XY611AK" + "" ], "ecoclassname": [ - "Boreal Forest Loamy Frozen Slopes" + "" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/F230XY611AK" + "" ] } }, @@ -489,13 +489,13 @@ "esd": { "ESD": { "ecoclassid": [ - "R230XY601AK" + "R230XY620AK" ], "ecoclassname": [ - "Boreal Forest Flood Plain Complex" + "Boreal Peat Frozen Flats Complex" ], "edit_url": [ - "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY601AK" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY620AK" ] } }, @@ -545,13 +545,13 @@ "esd": { "ESD": { "ecoclassid": [ - "" + "R230XY610AK" ], "ecoclassname": [ - "" + "Boreal Scrub Silty Frozen Drainages" ], "edit_url": [ - "" + "https://edit.sc.egov.usda.gov/catalogs/esd/230X/R230XY610AK" ] } }, @@ -714,42 +714,42 @@ }, "soilRank": [ { - "component": "E30-boreal taiga-organic frozen peat plateaus", + "component": "E30-boreal taiga-loamy frozen colluvial slopes", "componentData": "Missing Data", - "componentID": 26837488, - "name": "E30-boreal taiga-organic frozen peat plateaus", + "componentID": 26837483, + "name": "E30-boreal taiga-loamy frozen colluvial slopes", "not_displayed": false, - "rank_data": "4", - "rank_data_group": "4", + "rank_data": "10", + "rank_data_group": "10", "rank_data_loc": "1", "rank_data_loc_group": "1", - "rank_loc": 3, - "rank_loc_group": 3, - "score_data": 0.657, - "score_data_group": 0.657, - "score_data_loc": 0.385, - "score_data_loc_group": 0.385, - "score_loc": 0.114, - "score_loc_group": 0.114 + "rank_loc": 1, + "rank_loc_group": 1, + "score_data": 0.643, + "score_data_group": 0.643, + "score_data_loc": 0.457, + "score_data_loc_group": 0.457, + "score_loc": 0.272, + "score_loc_group": 0.272 }, { - "component": "E30-boreal taiga-loamy frozen colluvial slopes", + "component": "E30-boreal forest-silty slopes", "componentData": "Missing Data", - "componentID": 26837483, - "name": "E30-boreal taiga-loamy frozen colluvial slopes", + "componentID": 26837482, + "name": "E30-boreal forest-silty slopes", "not_displayed": false, - "rank_data": "8", - "rank_data_group": "8", + "rank_data": "1", + "rank_data_group": "1", "rank_data_loc": "2", "rank_data_loc_group": "2", - "rank_loc": 1, - "rank_loc_group": 1, - "score_data": 0.481, - "score_data_group": 0.481, - "score_data_loc": 0.377, - "score_data_loc_group": 0.377, - "score_loc": 0.272, - "score_loc_group": 0.272 + "rank_loc": 6, + "rank_loc_group": 6, + "score_data": 0.825, + "score_data_group": 0.825, + "score_data_loc": 0.44, + "score_data_loc_group": 0.44, + "score_loc": 0.056, + "score_loc_group": 0.056 }, { "component": "E30-boreal forest-silty loess slopes", @@ -757,37 +757,37 @@ "componentID": 26837431, "name": "E30-boreal forest-silty loess slopes", "not_displayed": false, - "rank_data": "1", - "rank_data_group": "1", + "rank_data": "3", + "rank_data_group": "3", "rank_data_loc": "3", "rank_data_loc_group": "3", "rank_loc": 7, "rank_loc_group": 7, - "score_data": 0.706, - "score_data_group": 0.706, - "score_data_loc": 0.376, - "score_data_loc_group": 0.376, + "score_data": 0.794, + "score_data_group": 0.794, + "score_data_loc": 0.42, + "score_data_loc_group": 0.42, "score_loc": 0.046, "score_loc_group": 0.046 }, { - "component": "E30-boreal forest-loamy flood plains", + "component": "E30-boreal taiga-organic frozen peat plateaus", "componentData": "Missing Data", - "componentID": 26837486, - "name": "E30-boreal forest-loamy flood plains", + "componentID": 26837488, + "name": "E30-boreal taiga-organic frozen peat plateaus", "not_displayed": false, - "rank_data": "5", - "rank_data_group": "5", + "rank_data": "7", + "rank_data_group": "7", "rank_data_loc": "4", "rank_data_loc_group": "4", - "rank_loc": 5, - "rank_loc_group": 5, - "score_data": 0.649, - "score_data_group": 0.649, - "score_data_loc": 0.36, - "score_data_loc_group": 0.36, - "score_loc": 0.072, - "score_loc_group": 0.072 + "rank_loc": 3, + "rank_loc_group": 3, + "score_data": 0.715, + "score_data_group": 0.715, + "score_data_loc": 0.414, + "score_data_loc_group": 0.414, + "score_loc": 0.114, + "score_loc_group": 0.114 }, { "component": "E30-boreal scrub-gravelly low flood plains", @@ -795,16 +795,16 @@ "componentID": 26837485, "name": "E30-boreal scrub-gravelly low flood plains", "not_displayed": false, - "rank_data": "7", - "rank_data_group": "7", + "rank_data": "9", + "rank_data_group": "9", "rank_data_loc": "5", "rank_data_loc_group": "5", "rank_loc": 2, "rank_loc_group": 2, - "score_data": 0.567, - "score_data_group": 0.567, - "score_data_loc": 0.359, - "score_data_loc_group": 0.359, + "score_data": 0.673, + "score_data_group": 0.673, + "score_data_loc": 0.413, + "score_data_loc_group": 0.413, "score_loc": 0.152, "score_loc_group": 0.152 }, @@ -820,29 +820,48 @@ "rank_data_loc_group": "6", "rank_loc": 12, "rank_loc_group": 12, - "score_data": 0.687, - "score_data_group": 0.687, - "score_data_loc": 0.345, - "score_data_loc_group": 0.345, + "score_data": 0.806, + "score_data_group": 0.806, + "score_data_loc": 0.404, + "score_data_loc_group": 0.404, "score_loc": 0.002, "score_loc_group": 0.002 }, + { + "component": "E30-boreal forest-loamy flood plains", + "componentData": "Missing Data", + "componentID": 26837486, + "name": "E30-boreal forest-loamy flood plains", + "not_displayed": false, + "rank_data": "5", + "rank_data_group": "5", + "rank_data_loc": "7", + "rank_data_loc_group": "7", + "rank_loc": 5, + "rank_loc_group": 5, + "score_data": 0.723, + "score_data_group": 0.723, + "score_data_loc": 0.397, + "score_data_loc_group": 0.397, + "score_loc": 0.072, + "score_loc_group": 0.072 + }, { "component": "E30-boreal subalpine scrub-loamy colluvial slopes", "componentData": "Missing Data", "componentID": 26837433, "name": "E30-boreal subalpine scrub-loamy colluvial slopes", "not_displayed": false, - "rank_data": "3", - "rank_data_group": "3", - "rank_data_loc": "7", - "rank_data_loc_group": "7", + "rank_data": "4", + "rank_data_group": "4", + "rank_data_loc": "8", + "rank_data_loc_group": "8", "rank_loc": 11, "rank_loc_group": 11, - "score_data": 0.673, - "score_data_group": 0.673, - "score_data_loc": 0.338, - "score_data_loc_group": 0.338, + "score_data": 0.745, + "score_data_group": 0.745, + "score_data_loc": 0.374, + "score_data_loc_group": 0.374, "score_loc": 0.002, "score_loc_group": 0.002 }, @@ -854,35 +873,35 @@ "not_displayed": false, "rank_data": "6", "rank_data_group": "6", - "rank_data_loc": "8", - "rank_data_loc_group": "8", + "rank_data_loc": "9", + "rank_data_loc_group": "9", "rank_loc": 9, "rank_loc_group": 9, - "score_data": 0.647, - "score_data_group": 0.647, - "score_data_loc": 0.335, - "score_data_loc_group": 0.335, + "score_data": 0.718, + "score_data_group": 0.718, + "score_data_loc": 0.371, + "score_data_loc_group": 0.371, "score_loc": 0.024, "score_loc_group": 0.024 }, { - "component": "E30-boreal forest-silty slopes", + "component": "E30-boreal scrub-silty frozen drainageways", "componentData": "Missing Data", - "componentID": 26837482, - "name": "E30-boreal forest-silty slopes", + "componentID": 26837432, + "name": "E30-boreal scrub-silty frozen drainageways", "not_displayed": false, - "rank_data": "10", - "rank_data_group": "10", - "rank_data_loc": "9", - "rank_data_loc_group": "9", - "rank_loc": 6, - "rank_loc_group": 6, - "score_data": 0.473, - "score_data_group": 0.473, - "score_data_loc": 0.264, - "score_data_loc_group": 0.264, - "score_loc": 0.056, - "score_loc_group": 0.056 + "rank_data": "8", + "rank_data_group": "8", + "rank_data_loc": "10", + "rank_data_loc_group": "10", + "rank_loc": 10, + "rank_loc_group": 10, + "score_data": 0.713, + "score_data_group": 0.713, + "score_data_loc": 0.368, + "score_data_loc_group": 0.368, + "score_loc": 0.022, + "score_loc_group": 0.022 }, { "component": "E30-boreal scrub/sphagnum-organic depressions", @@ -890,37 +909,18 @@ "componentID": 26837487, "name": "E30-boreal scrub/sphagnum-organic depressions", "not_displayed": false, - "rank_data": "9", - "rank_data_group": "9", - "rank_data_loc": "10", - "rank_data_loc_group": "10", - "rank_loc": 8, - "rank_loc_group": 8, - "score_data": 0.473, - "score_data_group": 0.473, - "score_data_loc": 0.248, - "score_data_loc_group": 0.248, - "score_loc": 0.024, - "score_loc_group": 0.024 - }, - { - "component": "E30-boreal scrub-silty frozen drainageways", - "componentData": "Missing Data", - "componentID": 26837432, - "name": "E30-boreal scrub-silty frozen drainageways", - "not_displayed": false, "rank_data": "11", "rank_data_group": "11", "rank_data_loc": "11", "rank_data_loc_group": "11", - "rank_loc": 10, - "rank_loc_group": 10, - "score_data": 0.361, - "score_data_group": 0.361, - "score_data_loc": 0.192, - "score_data_loc_group": 0.192, - "score_loc": 0.022, - "score_loc_group": 0.022 + "rank_loc": 8, + "rank_loc_group": 8, + "score_data": 0.624, + "score_data_group": 0.624, + "score_data_loc": 0.324, + "score_data_loc_group": 0.324, + "score_loc": 0.024, + "score_loc_group": 0.024 }, { "component": "E30-boreal taiga-silty frozen loess slopes", @@ -934,10 +934,10 @@ "rank_data_loc_group": "12", "rank_loc": 4, "rank_loc_group": 4, - "score_data": 0.211, - "score_data_group": 0.211, - "score_data_loc": 0.148, - "score_data_loc_group": 0.148, + "score_data": 0.517, + "score_data_group": 0.517, + "score_data_loc": 0.301, + "score_data_loc_group": 0.301, "score_loc": 0.086, "score_loc_group": 0.086 } diff --git a/soil_id/us_soil.py b/soil_id/us_soil.py index e01b3a0..ff275d3 100644 --- a/soil_id/us_soil.py +++ b/soil_id/us_soil.py @@ -80,13 +80,15 @@ class SoilListOutputData: ############################################################################################ # list_soils # ############################################################################################ -def list_soils(lon, lat): +def list_soils(lon, lat, sim=True, max_distance_m=1000): # LAB to Munsell conversion look-up table (loaded once at startup) color_ref = soil_id.config.MUNSELL_COLOR_REF LAB_ref = soil_id.config.MUNSELL_LAB_REF_NP munsell_ref = soil_id.config.MUNSELL_REF - out = get_soilweb_data(lon, lat) + if max_distance_m is None: + max_distance_m = 1000 + out = get_soilweb_data(lon, lat, radius_m=max_distance_m) OSD_compkind = ["Series", "Variant", "Family", "Taxadjunct"] # Check if point is in a NOTCOM area, and if so then infill with STATSGO from NRCS SDA @@ -103,8 +105,9 @@ def list_soils(lon, lat): mucompdata_pd = pd.json_normalize(out["spn"]) mucompdata_pd = process_site_data(mucompdata_pd) - # For SSURGO, filter out data for distances over 1000m - mucompdata_pd = mucompdata_pd[mucompdata_pd["distance"] <= 1000] + # For SSURGO, filter out data beyond caller-configured max distance. + # Keep backward-compatible behavior at 1000 m when no value is provided. + mucompdata_pd = mucompdata_pd[mucompdata_pd["distance"] <= float(max_distance_m)] if mucompdata_pd.empty: # Extract STATSGO data at point @@ -244,6 +247,9 @@ def list_soils(lon, lat): mucompdata_pd["compname_grp"] = mucompdata_pd["compname"] # Extract unique cokeys and create a ranking dictionary + muhorzdata_pd["cokey"] = ( + muhorzdata_pd["cokey"].astype(str).str.strip().str.replace(r"\.0+$", "", regex=True) + ) comp_key = mucompdata_pd["cokey"].unique().tolist() cokey_index = {key: index for index, key in enumerate(comp_key)} @@ -300,6 +306,8 @@ def list_soils(lon, lat): ec_lyrs = [] OSD_text_int = [] OSD_rfv_int = [] + osd_text_by_cokey = {} + osd_rfv_by_cokey = {} for group in muhorzdata_group_cokey: # Sort by top horizon depth and remove duplicates @@ -330,20 +338,25 @@ def list_soils(lon, lat): ) mucompdata_pd_group = mucompdata_pd[mucompdata_pd["cokey"].isin(group_sorted["cokey"])] - if ( - group_sorted["sandtotal_r"].isnull().values.all() - or group_sorted["claytotal_r"].isnull().values.all() - ) and (mucompdata_pd_group["compkind"].isin(OSD_compkind).any()): + sand_any_missing = group_sorted["sandtotal_r"].isnull().values.any() + clay_any_missing = group_sorted["claytotal_r"].isnull().values.any() + if (sand_any_missing or clay_any_missing) and ( + mucompdata_pd_group["compkind"].isin(OSD_compkind).any() + ): OSD_text_int.append("Yes") + osd_text_by_cokey[str(group_sorted["cokey"].iloc[0]).strip()] = "Yes" else: OSD_text_int.append("No") + osd_text_by_cokey[str(group_sorted["cokey"].iloc[0]).strip()] = "No" if (group_sorted["total_frag_volume"].isnull().values.all()) and ( mucompdata_pd_group["compkind"].isin(OSD_compkind).any() ): OSD_rfv_int.append("Yes") + osd_rfv_by_cokey[str(group_sorted["cokey"].iloc[0]).strip()] = "Yes" else: OSD_rfv_int.append("No") + osd_rfv_by_cokey[str(group_sorted["cokey"].iloc[0]).strip()] = "No" # extract horizon data hz_dept = group_sorted["hzdept_r"] @@ -442,9 +455,19 @@ def list_soils(lon, lat): mucompdata_pd = mucompdata_pd[mucompdata_pd["cokey"].isin(valid_cokeys)] muhorzdata_pd = muhorzdata_pd[muhorzdata_pd["cokey"].isin(valid_cokeys)] - # Add OSD infilling indicators to mucompdata_pd - mucompdata_pd["OSD_text_int"] = OSD_text_int - mucompdata_pd["OSD_rfv_int"] = OSD_rfv_int + # Add OSD infilling indicators keyed by cokey (avoid positional drift). + def _norm_flag_cokey(value): + return re.sub(r"\.0+$", "", str(value).strip()) + + osd_text_by_cokey = {_norm_flag_cokey(k): v for k, v in osd_text_by_cokey.items()} + osd_rfv_by_cokey = {_norm_flag_cokey(k): v for k, v in osd_rfv_by_cokey.items()} + + mucompdata_pd["OSD_text_int"] = mucompdata_pd["cokey"].map( + lambda c: osd_text_by_cokey.get(_norm_flag_cokey(c), "No") + ) + mucompdata_pd["OSD_rfv_int"] = mucompdata_pd["cokey"].map( + lambda c: osd_rfv_by_cokey.get(_norm_flag_cokey(c), "No") + ) # Merge component bottom depth and clay texture information into mucompdata_pd mucompdata_pd = mucompdata_pd.merge( @@ -669,13 +692,59 @@ def list_soils(lon, lat): group for _, group in OSDhorzdata_pd.groupby("cokey", sort=False) ] - # Initialize empty lists - lab_lyrs = [] - munsell_lyrs = [] - lab_intpl_lyrs = [] + # Build robust cokey-keyed lookup so OSD infill updates always target + # the correct component profile regardless of group ordering. + def _norm_cokey_local(value): + return re.sub(r"\.0+$", "", str(value).strip()) + + profile_idx_by_cokey = { + _norm_cokey_local(df["cokey"].iloc[0]): i + for i, df in enumerate(getProfile_cokey) + if not df.empty + } + osd_text_by_cokey = { + _norm_cokey_local(k): v + for k, v in mucompdata_pd[["cokey", "OSD_text_int"]] + .drop_duplicates("cokey") + .set_index("cokey")["OSD_text_int"] + .to_dict() + .items() + } + osd_rfv_by_cokey = { + _norm_cokey_local(k): v + for k, v in mucompdata_pd[["cokey", "OSD_rfv_int"]] + .drop_duplicates("cokey") + .set_index("cokey")["OSD_rfv_int"] + .to_dict() + .items() + } + comp_max_by_cokey = { + _norm_cokey_local(k): int(v) + for k, v in comp_max_depths[["cokey", "comp_max_bottom"]].to_records(index=False) + } + raw_bottom_depths_by_cokey = {} + for _cokey, _grp in muhorzdata_pd.groupby("cokey", sort=False): + _norm = _norm_cokey_local(_cokey) + _ordered = _grp.sort_values("hzdept_r").drop_duplicates().reset_index(drop=True) + _depths = [float(v) for v in _ordered["hzdepb_r"].tolist() if pd.notnull(v)] + raw_bottom_depths_by_cokey[_norm] = _depths + + n_profiles = len(getProfile_cokey) + # Initialize layer containers sized to the profile set. + lab_lyrs = [None] * n_profiles + munsell_lyrs = [None] * n_profiles + lab_intpl_lyrs = [None] * n_profiles for index, group in enumerate(OSDhorzdata_group_cokey): group_sorted = group.sort_values(by="top").drop_duplicates().reset_index(drop=True) + group_cokey = _norm_cokey_local(group_sorted["cokey"].iloc[0]) + target_idx = profile_idx_by_cokey.get(group_cokey) + if target_idx is None: + # Skip OSD groups that do not map to a known component profile. + continue + osd_text_flag = osd_text_by_cokey.get(group_cokey, "No") + osd_rfv_flag = osd_rfv_by_cokey.get(group_cokey, "No") + comp_max_bottom = comp_max_by_cokey.get(group_cokey, 0) # Remove invalid horizons where top depth is greater than bottom depth group_sorted = group_sorted[ @@ -725,9 +794,6 @@ def list_soils(lon, lat): comp_max_depths_group = comp_max_depths[ comp_max_depths["cokey"].isin(group_sorted["cokey"]) ] - muhorzdata_pd_group = muhorzdata_pd[ - muhorzdata_pd["cokey"].isin(group_sorted["cokey"]) - ] # Check if OSD depth adjustment is needed if OSD_max_bottom < comp_max_depths_group["comp_max_bottom"].iloc[0]: @@ -759,33 +825,46 @@ def list_soils(lon, lat): # Set column names for lab_intpl lab_intpl.columns = ["l", "a", "b"] - lab_intpl_lyrs.append(lab_intpl) + lab_intpl_lyrs[target_idx] = lab_intpl # If all values in lab_intpl are null, append default values to lists if lab_intpl.isnull().values.all(): - lab_lyrs.append(["", "", ""]) - munsell_lyrs.append("") + lab_lyrs[target_idx] = ["", "", ""] + munsell_lyrs[target_idx] = "" else: + # Use the horizon bottom depths that match the stored horizon structure + # Convert string values to float, filtering out empty strings + horizon_bottom_depths = raw_bottom_depths_by_cokey.get(group_cokey, []) + if not horizon_bottom_depths: + horizon_bottom_depths = [ + float(v) if v != "" else np.nan + for v in hzb_lyrs[target_idx].values() + ] + # Filter out NaN values + horizon_bottom_depths = [ + d for d in horizon_bottom_depths if not np.isnan(d) + ] + # Aggregate data for each color dimension l_d = aggregate_data( data=lab_intpl["l"], - bottom_depths=muhorzdata_pd_group["hzdepb_r"].tolist(), + bottom_depths=horizon_bottom_depths, sd=2, ).fillna("") a_d = aggregate_data( data=lab_intpl["a"], - bottom_depths=muhorzdata_pd_group["hzdepb_r"].tolist(), + bottom_depths=horizon_bottom_depths, sd=2, ).fillna("") b_d = aggregate_data( data=lab_intpl["b"], - bottom_depths=muhorzdata_pd_group["hzdepb_r"].tolist(), + bottom_depths=horizon_bottom_depths, sd=2, ).fillna("") # Convert LAB values to a list of triplets lab_parse = [[L, A, B] for L, A, B in zip(l_d, a_d, b_d)] - lab_lyrs.append(dict(zip(l_d.index, lab_parse))) + lab_lyrs[target_idx] = dict(zip(l_d.index, lab_parse)) # Convert LAB triplets to Munsell values munsell_values = [ @@ -796,10 +875,10 @@ def list_soils(lon, lat): ) for lab in lab_parse ] - munsell_lyrs.append(dict(zip(l_d.index, munsell_values))) + munsell_lyrs[target_idx] = dict(zip(l_d.index, munsell_values)) # Extract OSD Texture and Rock Fragment Data - if OSD_text_int[index] == "Yes" or OSD_rfv_int[index] == "Yes": + if osd_text_flag == "Yes" or osd_rfv_flag == "Yes": group_sorted[["hzdept_r", "hzdepb_r", "texture"]] = group_sorted[ ["top", "bottom", "texture_class"] ] @@ -855,9 +934,9 @@ def list_soils(lon, lat): # and component depth is <200cm if OSD_depth_remove: # Remove data based on comp_max_depths - OSD_sand_intpl = OSD_sand_intpl.loc[: comp_max_depths.iloc[index, 2]] - OSD_clay_intpl = OSD_clay_intpl.loc[: comp_max_depths.iloc[index, 2]] - OSD_rfv_intpl = OSD_rfv_intpl.loc[: comp_max_depths.iloc[index, 2]] + OSD_sand_intpl = OSD_sand_intpl.loc[:comp_max_bottom] + OSD_clay_intpl = OSD_clay_intpl.loc[:comp_max_bottom] + OSD_rfv_intpl = OSD_rfv_intpl.loc[:comp_max_bottom] # Create the compname and cokey dataframes compname_df = pd.DataFrame( @@ -885,7 +964,7 @@ def list_soils(lon, lat): ] # Update getProfile_mod based on conditions - getProfile_mod = getProfile_cokey[index] + getProfile_mod = getProfile_cokey[target_idx] compname_check = ( getProfile_mod["compname"] .isin(group_sorted2[["compname"]].iloc[0]) @@ -894,31 +973,50 @@ def list_soils(lon, lat): if ( compname_check - and OSD_text_int[index] == "Yes" + and osd_text_flag == "Yes" and not group_sorted2["c_sandpct_intpl"].isnull().all() ): - getProfile_mod["sandpct_intpl"] = group_sorted2["c_sandpct_intpl"] - getProfile_mod["claypct_intpl"] = group_sorted2["c_claypct_intpl"] + getProfile_mod["sandpct_intpl"] = getProfile_mod["sandpct_intpl"].where( + ~getProfile_mod["sandpct_intpl"].isnull(), + group_sorted2["c_sandpct_intpl"], + ) + getProfile_mod["claypct_intpl"] = getProfile_mod["claypct_intpl"].where( + ~getProfile_mod["claypct_intpl"].isnull(), + group_sorted2["c_claypct_intpl"], + ) if ( compname_check - and OSD_rfv_int[index] == "Yes" + and osd_rfv_flag == "Yes" and not group_sorted2["c_cfpct_intpl"].isnull().all() ): getProfile_mod["rfv_intpl"] = group_sorted2["c_cfpct_intpl"] - getProfile_cokey[index] = getProfile_mod + getProfile_cokey[target_idx] = getProfile_mod + + # Use the horizon bottom depths that match the stored horizon structure + # Convert string values to float, filtering out empty strings + horizon_bottom_depths = raw_bottom_depths_by_cokey.get(group_cokey, []) + if not horizon_bottom_depths: + horizon_bottom_depths = [ + float(v) if v != "" else np.nan + for v in hzb_lyrs[target_idx].values() + ] + # Filter out NaN values + horizon_bottom_depths = [ + d for d in horizon_bottom_depths if not np.isnan(d) + ] # Aggregate sand data snd_d_osd = aggregate_data( data=OSD_sand_intpl.iloc[:, 0], - bottom_depths=muhorzdata_pd_group["hzdepb_r"].tolist(), + bottom_depths=horizon_bottom_depths, ) # Aggregate clay data cly_d_osd = aggregate_data( data=OSD_clay_intpl.iloc[:, 1], - bottom_depths=muhorzdata_pd_group["hzdepb_r"].tolist(), + bottom_depths=horizon_bottom_depths, ) # Calculate texture data based on sand and clay data @@ -931,7 +1029,7 @@ def list_soils(lon, lat): # Aggregate rock fragment data rf_d_osd = aggregate_data( data=OSD_rfv_intpl.c_cfpct_intpl, - bottom_depths=muhorzdata_pd_group["hzdepb_r"].tolist(), + bottom_depths=horizon_bottom_depths, ) # Fill NaN values @@ -940,88 +1038,141 @@ def list_soils(lon, lat): txt_d_osd.fillna(np.nan, inplace=True) rf_d_osd.fillna(np.nan, inplace=True) + def _is_missing_layer_value(value): + return value is None or value == "" or pd.isna(value) + + def _merge_missing_layer_values(existing_layer, osd_layer): + merged_layer = {} + keys = sorted( + set(existing_layer.keys()).union(set(osd_layer.keys())), + key=int, + ) + for k in keys: + existing_val = existing_layer.get(k, np.nan) + osd_val = osd_layer.get(k, np.nan) + merged_layer[k] = ( + osd_val + if _is_missing_layer_value(existing_val) + else existing_val + ) + return merged_layer + # Store aggregated data in dictionaries based on conditions - if OSD_text_int[index] == "Yes": - snd_lyrs[index] = snd_d_osd.to_dict() - cly_lyrs[index] = cly_d_osd.to_dict() - txt_lyrs[index] = txt_d_osd.to_dict() + if osd_text_flag == "Yes": + snd_lyrs[target_idx] = _merge_missing_layer_values( + snd_lyrs[target_idx], snd_d_osd.to_dict() + ) + cly_lyrs[target_idx] = _merge_missing_layer_values( + cly_lyrs[target_idx], cly_d_osd.to_dict() + ) + txt_lyrs[target_idx] = _merge_missing_layer_values( + txt_lyrs[target_idx], txt_d_osd.to_dict() + ) - if OSD_rfv_int[index] == "Yes": - rf_lyrs[index] = rf_d_osd.to_dict() + if osd_rfv_flag == "Yes": + rf_lyrs[target_idx] = rf_d_osd.to_dict() # Update cec, ph, and ec layers if they contain only a single # empty string for lyr in [cec_lyrs, ph_lyrs, ec_lyrs]: - if len(lyr[index]) == 1 and lyr[index][0] == "": - empty_values = [""] * len(hzb_lyrs[index]) - lyr[index] = dict(zip(hzb_lyrs[index], empty_values)) + if ( + len(lyr[target_idx]) == 1 + and list(lyr[target_idx].values())[0] == "" + ): + empty_values = [""] * len(hzb_lyrs[target_idx]) + lyr[target_idx] = dict( + zip(hzb_lyrs[target_idx].keys(), empty_values) + ) else: - OSDhorzdata_group_cokey[index] = group_sorted - # Create an empty dataframe with NaNs for lab_intpl lab_intpl = pd.DataFrame( np.nan, - index=np.arange(comp_max_depths.iloc[index, 2]), + index=np.arange(comp_max_bottom), columns=["l", "a", "b"], ) - lab_intpl_lyrs.append(lab_intpl) + lab_intpl_lyrs[target_idx] = lab_intpl # Create dummy data for lab_lyrs - lab_dummy = [["", "", ""] for _ in range(len(hzb_lyrs[index]))] - lab_lyrs.append(dict(zip(hzb_lyrs[index].keys(), lab_dummy))) + lab_dummy = [["", "", ""] for _ in range(len(hzb_lyrs[target_idx]))] + lab_lyrs[target_idx] = dict(zip(hzb_lyrs[target_idx].keys(), lab_dummy)) # Create dummy data for munsell_lyrs - munsell_dummy = [""] * len(hzb_lyrs[index]) - munsell_lyrs.append(dict(zip(hzb_lyrs[index].keys(), munsell_dummy))) + munsell_dummy = [""] * len(hzb_lyrs[target_idx]) + munsell_lyrs[target_idx] = dict(zip(hzb_lyrs[target_idx].keys(), munsell_dummy)) + + # Fill any still-missing color entries with deterministic empty values. + for profile_cokey, profile_idx in profile_idx_by_cokey.items(): + if lab_intpl_lyrs[profile_idx] is None: + fallback_depth = max(comp_max_by_cokey.get(profile_cokey, 0), 0) + lab_intpl_lyrs[profile_idx] = pd.DataFrame( + np.nan, + index=np.arange(fallback_depth), + columns=["l", "a", "b"], + ) + if lab_lyrs[profile_idx] is None: + keys = list(hzb_lyrs[profile_idx].keys()) + lab_lyrs[profile_idx] = dict(zip(keys, [["", "", ""] for _ in keys])) + if munsell_lyrs[profile_idx] is None: + keys = list(hzb_lyrs[profile_idx].keys()) + munsell_lyrs[profile_idx] = dict(zip(keys, [""] * len(keys))) # Series URL Generation - # Initialize lists to store series URLs - SDE_URL = [] - SEE_URL = [] + # Create a mapping of cokey to URLs for safe lookup + cokey_to_urls = {} - # Group data by 'cokey' - OSDhorzdata_group_cokey = [g for _, g in OSDhorzdata_pd.groupby("cokey", sort=False)] + # Group data by 'cokey' - use sort=True for deterministic ordering + OSDhorzdata_group_cokey = [g for _, g in OSDhorzdata_pd.groupby("cokey", sort=True)] for index, group in enumerate(OSDhorzdata_group_cokey): + cokey = group["cokey"].iloc[0] # Get the cokey for this group + # Check if compkind is not in OSD_compkind or if series contains any null values if ( - mucompdata_pd.loc[index]["compkind"] not in OSD_compkind + mucompdata_pd[mucompdata_pd["cokey"] == cokey]["compkind"].iloc[0] + not in OSD_compkind or group["series"].isnull().any() ): - SDE_URL.append("") - SEE_URL.append("") + cokey_to_urls[cokey] = {"sde": "", "see": ""} else: - # Extract compname, convert to lowercase, remove trailing numbers, and replace - # spaces with underscores + # Extract compname, convert to lowercase, remove trailing numbers, and replace spaces with underscores comp = group["compname"].iloc[0].lower() comp = re.sub(r"\d+$", "", comp) comp = comp.replace(" ", "_") - # Create and append URLs - SDE_URL.append(f"https://casoilresource.lawr.ucdavis.edu/sde/?series={comp}") - SEE_URL.append(f"https://casoilresource.lawr.ucdavis.edu/see/#{comp}") + # Create URLs + cokey_to_urls[cokey] = { + "sde": f"https://casoilresource.lawr.ucdavis.edu/sde/?series={comp}", + "see": f"https://casoilresource.lawr.ucdavis.edu/see/#{comp}", + } else: # Initialize lists to store data layers and URLs lab_lyrs = [] lab_intpl_lyrs = [] munsell_lyrs = [] - SDE_URL = [] - SEE_URL = [] + cokey_to_urls = {} + + comp_max_by_cokey_local = { + re.sub(r"\.0+$", "", str(k).strip()): int(v) + for k, v in comp_max_depths[["cokey", "comp_max_bottom"]].to_records(index=False) + } + + # Initialize fallback layers by profile cokey to avoid positional drift. + for profile_df, horizon_bottoms in zip(getProfile_cokey, hzb_lyrs): + profile_cokey = re.sub(r"\.0+$", "", str(profile_df["cokey"].iloc[0]).strip()) + max_bottom = max(comp_max_by_cokey_local.get(profile_cokey, 0), 0) - # Iterate over each entry in mucompdata_pd - for i in range(len(mucompdata_pd)): # Initialize a DataFrame filled with NaNs lab_intpl = pd.DataFrame( np.nan, - index=np.arange(comp_max_depths.iloc[i, 2]), + index=np.arange(max_bottom), columns=["l", "a", "b"], ) lab_intpl_lyrs.append(lab_intpl) # Create dummy data for lab and munsell layers - keys = list(hzb_lyrs[i].keys()) + keys = list(horizon_bottoms.keys()) lab_dummy = [{"", "", ""} for _ in range(len(keys))] munsell_dummy = [""] * len(keys) @@ -1029,30 +1180,36 @@ def list_soils(lon, lat): lab_lyrs.append(dict(zip(keys, lab_dummy))) munsell_lyrs.append(dict(zip(keys, munsell_dummy))) - # Append empty URLs - SDE_URL.append("") - SEE_URL.append("") + ## Create empty URLs keyed by cokey + cokey_to_urls[profile_df["cokey"].iloc[0]] = {"sde": "", "see": ""} else: # Initialize lists to store data layers and URLs lab_lyrs = [] lab_intpl_lyrs = [] munsell_lyrs = [] - SDE_URL = [] - SEE_URL = [] + cokey_to_urls = {} + + comp_max_by_cokey_local = { + re.sub(r"\.0+$", "", str(k).strip()): int(v) + for k, v in comp_max_depths[["cokey", "comp_max_bottom"]].to_records(index=False) + } + + # Initialize fallback layers by profile cokey to avoid positional drift. + for profile_df, horizon_bottoms in zip(getProfile_cokey, hzb_lyrs): + profile_cokey = re.sub(r"\.0+$", "", str(profile_df["cokey"].iloc[0]).strip()) + max_bottom = max(comp_max_by_cokey_local.get(profile_cokey, 0), 0) - # Iterate over each entry in mucompdata_pd - for i in range(len(mucompdata_pd)): # Initialize a DataFrame filled with NaNs lab_intpl = pd.DataFrame( np.nan, - index=np.arange(comp_max_depths.iloc[i, 2]), + index=np.arange(max_bottom), columns=["l", "a", "b"], ) lab_intpl_lyrs.append(lab_intpl) # Create dummy data for lab and munsell layers - keys = list(hzb_lyrs[i].keys()) + keys = list(horizon_bottoms.keys()) lab_dummy = [{"", "", ""} for _ in range(len(keys))] munsell_dummy = [""] * len(keys) @@ -1060,9 +1217,8 @@ def list_soils(lon, lat): lab_lyrs.append(dict(zip(keys, lab_dummy))) munsell_lyrs.append(dict(zip(keys, munsell_dummy))) - # Append empty URLs - SDE_URL.append("") - SEE_URL.append("") + ## Create empty URLs keyed by cokey + cokey_to_urls[profile_df["cokey"].iloc[0]] = {"sde": "", "see": ""} # Subset datasets to exclude pedons without any depth information cokeys_with_depth = mucompdata_pd[mucompdata_pd["comp_max_bottom"] > 0].cokey.unique() @@ -1084,8 +1240,16 @@ def list_soils(lon, lat): comp_key = mucompdata_pd["cokey"].unique().tolist() cokey_Index = dict(zip(comp_key, range(len(comp_key)))) - # Get indices of components with depth data to exclude profiles with no depth information - indices_with_depth = mucompdata_pd.index.tolist() + # Keep profile-layer structures aligned by component key, not row position. + def _norm_cokey_for_filter(value): + return re.sub(r"\.0+$", "", str(value).strip()) + + depth_cokey_set = {_norm_cokey_for_filter(c) for c in mucompdata_pd["cokey"].tolist()} + profile_cokeys = [ + _norm_cokey_for_filter(df["cokey"].iloc[0]) if not df.empty else "" + for df in getProfile_cokey + ] + keep_profile_positions = [i for i, c in enumerate(profile_cokeys) if c in depth_cokey_set] # Subset layers based on indices with depth layer_lists = [ @@ -1105,8 +1269,8 @@ def list_soils(lon, lat): ] for i, lst in enumerate(layer_lists): - safe_indices = [index for index in indices_with_depth if index < len(lst)] - layer_lists[i] = [lst[index] for index in safe_indices] + safe_positions = [pos for pos in keep_profile_positions if pos < len(lst)] + layer_lists[i] = [lst[pos] for pos in safe_positions] # Unpack the layer lists ( @@ -1132,7 +1296,23 @@ def list_soils(lon, lat): ] # Run soil simulations: functional similarity calculation and soil information value - aws_PIW90, var_imp = soil_sim(muhorzdata_pd) + if sim: + try: + aws_PIW90, var_imp = soil_sim(muhorzdata_pd) + except Exception as e: + # Log the error but continue with None values + import traceback + + error_details = f"soil_sim failed: {type(e).__name__}: {str(e)}" + print(error_details) # Print to stdout + print(traceback.format_exc()) # Print full stack trace + logging.warning(error_details) + aws_PIW90 = None + var_imp = None + else: + # When sim=False, set default values + aws_PIW90 = None + var_imp = None # Create a new column 'soilID_rank' which will be True for the first row in each group sorted # by 'distance' and False for other rows @@ -1171,11 +1351,73 @@ def list_soils(lon, lat): else: ESDcompdata_pd = None + # SDA fallback for SSURGO: SoilWeb ESD coverage has gaps — some cokeys are + # present in the map unit but have no ESD row in the SoilWeb response, leaving + # ecoclassid as NULL after the left-merge above. Without a fallback, those + # components borrow an ecoclassid from a sibling compname via update_esd_data, + # which varies by location and produces inconsistent predictions. + # Query SDA for only the cokeys that are still missing ecoclassid so we get + # authoritative coecoclass data for every component. + missing_cokeys = [] + if ESDcompdata_pd is not None: + null_mask = ESDcompdata_pd["ecoclassid"].isna() | ( + ESDcompdata_pd["ecoclassid"].astype(str).str.strip().isin(["", "nan", "None"]) + ) + missing_cokeys = ESDcompdata_pd.loc[null_mask, "cokey"].unique().tolist() + elif comp_key: + # ESDcompdata_pd is None means SoilWeb returned no ESD at all + missing_cokeys = [str(k) for k in comp_key] + + if missing_cokeys: + _sda_eco_qry = ( + "SELECT cokey, ecoclassid, ecoclassname, " + " FROM coecoclass WHERE cokey IN (" + + ",".join(str(k) for k in missing_cokeys) + + ") ORDER BY cokey, ecoclasstypename, ecoclassid" + ) + _sda_eco_out = sda_return(propQry=_sda_eco_qry) + if _sda_eco_out is not None: + _sda_rows = _sda_eco_out["Table"].iloc[0] + _sda_df = pd.DataFrame(_sda_rows[1:], columns=_sda_rows[0]) + _sda_df[["cokey", "ecoclassid", "ecoclassname"]] = _sda_df[ + ["cokey", "ecoclassid", "ecoclassname"] + ].astype(str) + _sda_df["edit_url"] = ( + NEW_ESD_BASE_URL + + "/" + + _sda_df["ecoclassid"].str[1:5] + + "/" + + _sda_df["ecoclassid"] + ) + if ESDcompdata_pd is not None: + # Drop the null rows and replace with SDA data merged back in + ESDcompdata_pd = ESDcompdata_pd[~null_mask] + _sda_merged = pd.merge( + mucompdata_pd.loc[ + mucompdata_pd["cokey"].astype(str).isin(missing_cokeys), + ["mukey", "cokey", "compname"], + ], + _sda_df, + on="cokey", + how="left", + ) + ESDcompdata_pd = pd.concat([ESDcompdata_pd, _sda_merged], ignore_index=True) + else: + # SoilWeb had no ESD at all; bootstrap from SDA data + if any(_sda_df["cokey"].isin(mucompdata_pd["cokey"])): + ESDcompdata_pd = pd.merge( + mucompdata_pd[["mukey", "cokey", "compname"]], + _sda_df, + on="cokey", + how="left", + ) + elif data_source == "STATSGO": ESDcompdataQry = ( - "SELECT cokey, ecoclassid, ecoclassname FROM coecoclass WHERE cokey IN (" + "SELECT cokey, ecoclassid, ecoclassname, ecoclasstypename" + " FROM coecoclass WHERE cokey IN (" + ",".join(map(str, comp_key)) - + ") ORDER BY cokey" + + ") ORDER BY cokey, ecoclasstypename, ecoclassid" ) ESDcompdata_out = sda_return(propQry=ESDcompdataQry) @@ -1213,36 +1455,86 @@ def list_soils(lon, lat): # Initialize the list for storing ESD components data esd_comp_list = [] + def _norm_esd_cokey(value): + return re.sub(r"\.0+$", "", str(value).strip()) + + def _empty_esd_record(): + return {"ESD": {"ecoclassid": "", "ecoclassname": "", "edit_url": ""}} + + # Keep ESD list alignment keyed to interpolated profiles to avoid positional drift. + profile_cokey_order = [_norm_esd_cokey(df["cokey"].iloc[0]) for df in getProfile_cokey] + # Main logic for handling ESD data based on its presence if ESDcompdata_pd is not None: # Process DataFrame: cleaning and updating ESDcompdata_pd.replace("NULL", np.nan, inplace=True) + # Sort by ecoclasstypename priority then ecoclassid before deduplication so that + # when a component has multiple coecoclass entries the most authoritative one is + # kept consistently regardless of SDA/SoilWeb result ordering. + # + # Priority rationale: + # 1. 'NRCS Rangeland Site' – current national standard (ecoclassid has 'R' prefix) + # 2. 'Range Site' / 'Range' – legacy format, superseded by NRCS standard + # 3. Other/NULL types – lowest priority, kept only if nothing better exists + # + # Within each type, the R-prefixed ecoclassid sorts before legacy ones, then + # alphabetically, so the selection is fully deterministic. + _TYPE_PRIORITY = {"NRCS Rangeland Site": 0} + if "ecoclasstypename" in ESDcompdata_pd.columns: + ESDcompdata_pd["_type_pri"] = ESDcompdata_pd["ecoclasstypename"].map( + lambda t: _TYPE_PRIORITY.get(t, 1) if pd.notna(t) else 1 + ) + else: + ESDcompdata_pd["_type_pri"] = 1 + ESDcompdata_pd["_id_pri"] = ESDcompdata_pd["ecoclassid"].map( + lambda e: 0 if (pd.notna(e) and str(e).upper().startswith("R")) else 1 + ) + ESDcompdata_pd.sort_values( + ["cokey", "_type_pri", "_id_pri", "ecoclassid"], + ascending=[True, True, True, True], + na_position="last", + inplace=True, + ) + ESDcompdata_pd.drop(columns=["_type_pri", "_id_pri"], inplace=True) ESDcompdata_pd.drop_duplicates(subset=["cokey"], keep="first", inplace=True) ESDcompdata_pd = ESDcompdata_pd[ESDcompdata_pd["cokey"].isin(comp_key)] - ESDcompdata_pd["Comp_Rank"] = ESDcompdata_pd["cokey"].map(cokey_Index) - ESDcompdata_pd.sort_values("Comp_Rank", ascending=True, inplace=True) - ESDcompdata_pd.drop(columns="Comp_Rank", inplace=True) + # Use the current mucompdata_pd row order (compname_grp sorted) as the reference, + # NOT cokey_Index which reflects the original pre-sort order. + _mucomp_order = {str(ck): i for i, ck in enumerate(mucompdata_pd["cokey"].tolist())} + ESDcompdata_pd["_mucomp_rank"] = ESDcompdata_pd["cokey"].map(_mucomp_order) + ESDcompdata_pd.sort_values("_mucomp_rank", ascending=True, na_position="last", inplace=True) + ESDcompdata_pd.drop(columns="_mucomp_rank", inplace=True) ESDcompdata_pd["ecoclassname"] = ESDcompdata_pd["ecoclassname"].str.title() # Further processing and checks for missing ESD data ESDcompdata_pd = update_esd_data(ESDcompdata_pd) - # Aggregate the ESD components for output - for _, group in ESDcompdata_pd.groupby("cokey", sort=True): - esd_data = { - "ESD": { - "ecoclassid": group["ecoclassid"].tolist(), - "ecoclassname": group["ecoclassname"].tolist(), - "edit_url": group["edit_url"].tolist(), + # update_esd_data reorders rows by compname_grp; restore mucompdata_pd order. + ESDcompdata_pd["_mucomp_rank"] = ESDcompdata_pd["cokey"].map(_mucomp_order) + ESDcompdata_pd.sort_values("_mucomp_rank", ascending=True, na_position="last", inplace=True) + ESDcompdata_pd.drop(columns="_mucomp_rank", inplace=True) + + # Aggregate keyed ESD records, then materialize in profile cokey order. + esd_by_cokey = {} + for cokey, group in ESDcompdata_pd.groupby("cokey", sort=False): + norm_cokey = _norm_esd_cokey(cokey) + if group["ecoclassname"].isnull().values.any(): + esd_by_cokey[norm_cokey] = _empty_esd_record() + else: + esd_by_cokey[norm_cokey] = { + "ESD": { + "ecoclassid": group["ecoclassid"].tolist(), + "ecoclassname": group["ecoclassname"].tolist(), + "edit_url": group["edit_url"].tolist(), + } } - } - esd_comp_list.append(esd_data) - else: - # Fill the list with empty data if ESDcompdata_pd is not available + esd_comp_list = [ - {"ESD": {"ecoclassid": "", "ecoclassname": "", "edit_url": ""}} - for _ in range(len(mucompdata_pd)) + esd_by_cokey.get(cokey, _empty_esd_record()) for cokey in profile_cokey_order ] + else: + # Fill the list with empty data if ESDcompdata_pd is not available + esd_comp_list = [_empty_esd_record() for _ in profile_cokey_order] if ESDcompdata_pd is not None: # Clean and process the dataframe @@ -1275,8 +1567,7 @@ def list_soils(lon, lat): g for _, g in ESDcompdata_pd.groupby(["compname_grp"], sort=True) ] ecoList_out = [] - for i in range(len(ESDcompdata_pd_comp_grps)): - comp_grps_temp = ESDcompdata_pd_comp_grps[i] + for comp_grps_temp in ESDcompdata_pd_comp_grps: if len(comp_grps_temp) == 1: ecoList_out.append(comp_grps_temp) elif ( @@ -1321,8 +1612,8 @@ def list_soils(lon, lat): ESDcompdata_group_cokey = [ g for _, g in ESDcompdata_pd.groupby(["cokey"], sort=True) ] - for i in range(len(ESDcompdata_group_cokey)): - if ESDcompdata_group_cokey[i]["ecoclassname"].isnull().values.any(): + for cokey_group in ESDcompdata_group_cokey: + if cokey_group["ecoclassname"].isnull().values.any(): esd_comp_list.append( {"ESD": {"ecoclassid": "", "ecoclassname": "", "edit_url": ""}} ) @@ -1330,11 +1621,9 @@ def list_soils(lon, lat): esd_comp_list.append( { "ESD": { - "ecoclassid": ESDcompdata_group_cokey[i]["ecoclassid"].tolist(), - "ecoclassname": ESDcompdata_group_cokey[i][ - "ecoclassname" - ].tolist(), - "edit_url": ESDcompdata_group_cokey[i]["edit_url"].tolist(), + "ecoclassid": cokey_group["ecoclassid"].tolist(), + "ecoclassname": cokey_group["ecoclassname"].tolist(), + "edit_url": cokey_group["edit_url"].tolist(), } } ) @@ -1450,15 +1739,16 @@ def list_soils(lon, lat): "irrcapscl": row["irrcapscl"], "irrcapunit": row["irrcapunit"], "taxsubgrp": row["taxsubgrp"], - "sdeURL": SDE_URL[idx], - "seeURL": SEE_URL[idx], + "sdeURL": cokey_to_urls.get(row["cokey"], {}).get("sde", ""), + "seeURL": cokey_to_urls.get(row["cokey"], {}).get("see", ""), }, "siteDescription": row["brief_narrative"], } for idx, row in mucompdata_cond_prob.iterrows() ] - # Reordering lists using list comprehension and mucomp_index + # Reorder profile lists to match final component order using component keys. + # Positional reordering can drift when grouped operations reorder horizons. lists_to_reorder = [ esd_comp_list, hzt_lyrs, @@ -1473,7 +1763,27 @@ def list_soils(lon, lat): lab_lyrs, munsell_lyrs, ] - reordered_lists = [[lst[i] for i in mucomp_index] for lst in lists_to_reorder] + + def _norm_cokey(value): + return re.sub(r"\.0+$", "", str(value).strip()) + + # getProfile_cokey carries the source component key for each profile list entry. + list_order_cokeys = [_norm_cokey(df["cokey"].iloc[0]) for df in getProfile_cokey] + final_order_cokeys = [_norm_cokey(c) for c in mucompdata_cond_prob["cokey"].tolist()] + + can_key_reorder = ( + len(list_order_cokeys) == len(set(list_order_cokeys)) + and all(len(lst) == len(list_order_cokeys) for lst in lists_to_reorder) + and set(final_order_cokeys).issubset(set(list_order_cokeys)) + ) + + if can_key_reorder: + reordered_lists = [] + for lst in lists_to_reorder: + keyed = dict(zip(list_order_cokeys, lst)) + reordered_lists.append([keyed[c] for c in final_order_cokeys]) + else: + reordered_lists = [[lst[i] for i in mucomp_index] for lst in lists_to_reorder] # Destructuring reordered lists for clarity ( @@ -1491,46 +1801,159 @@ def list_soils(lon, lat): munsell_lyrs, ) = reordered_lists - # Generating output_SoilList - output_SoilList = [ - dict( - zip( - [ - "id", - "site", - "esd", - "top_depth", - "bottom_depth", - "sand", - "clay", - "texture", - "rock_fragments", - "cec", - "ph", - "ec", - "lab", - "munsell", - ], - row, + raw_hz_by_cokey = {} + if data_source == "SSURGO": + for cokey, grp in muhorzdata_pd.groupby("cokey", sort=False): + g = grp.copy() + # Preserve pedogenic horizon ordering by depth. Use original row order + # only as a stable fallback when depth bounds are identical. + g["_row_order"] = np.arange(len(g)) + g = ( + g.sort_values(["hzdept_r", "hzdepb_r", "_row_order"]) + .drop(columns=["_row_order"]) + .drop_duplicates() + .reset_index(drop=True) ) + raw_hz_by_cokey[_norm_cokey(cokey)] = { + "top_depth": dict(zip(g.index, g["hzdept_r"].fillna(""))), + "bottom_depth": dict(zip(g.index, g["hzdepb_r"].fillna(""))), + "sand": dict(zip(g.index, g["sandtotal_r"].fillna(np.nan))), + "clay": dict(zip(g.index, g["claytotal_r"].fillna(np.nan))), + "texture": dict(zip(g.index, g["texture"].fillna(""))), + "rock_fragments": dict(zip(g.index, g["total_frag_volume"].fillna(np.nan))), + "cec": dict(zip(g.index, g["CEC"].fillna(np.nan))), + "ph": dict(zip(g.index, g["pH"].fillna(np.nan))), + "ec": dict(zip(g.index, g["EC"].fillna(np.nan))), + } + + osd_color_by_cokey = {} + if data_source == "SSURGO" and OSDhorzdata_pd is not None: + for cokey, grp in OSDhorzdata_pd.groupby("cokey", sort=False): + g = grp.copy() + g = g.sort_values(["top", "bottom"]).drop_duplicates().reset_index(drop=True) + + # Keep only valid OSD horizons for interpolation. + g = g[g["top"] <= g["bottom"]].reset_index(drop=True) + if g.empty: + continue + + lab_intpl = getProfileLAB(g, color_ref) + lab_intpl.columns = ["l", "a", "b"] + osd_color_by_cokey[_norm_cokey(cokey)] = lab_intpl + + # Generating output_SoilList + output_SoilList = [] + for idx, row in mucompdata_cond_prob.reset_index(drop=True).iterrows(): + top_depth = hzt_lyrs[idx] + bottom_depth = hzb_lyrs[idx] + sand = snd_lyrs[idx] + clay = cly_lyrs[idx] + texture = txt_lyrs[idx] + rock_fragments = rf_lyrs[idx] + cec = cec_lyrs[idx] + ph = ph_lyrs[idx] + ec = ec_lyrs[idx] + lab = lab_lyrs[idx] + munsell = munsell_lyrs[idx] + + if data_source == "SSURGO": + raw_hz = raw_hz_by_cokey.get(_norm_cokey(row["cokey"])) + if raw_hz is not None: + top_depth = raw_hz["top_depth"] + bottom_depth = raw_hz["bottom_depth"] + cec = raw_hz["cec"] + ph = raw_hz["ph"] + ec = raw_hz["ec"] + + if row["OSD_text_int"] == "No": + sand = raw_hz["sand"] + clay = raw_hz["clay"] + texture = raw_hz["texture"] + + if row["OSD_rfv_int"] == "No": + rock_fragments = raw_hz["rock_fragments"] + + # Ensure property layer counts do not exceed component depth layers. + if isinstance(bottom_depth, dict): + depth_len = len(bottom_depth) + + def _align_layer_dict(layer_dict): + if not isinstance(layer_dict, dict): + return layer_dict + ordered_items = sorted(layer_dict.items(), key=lambda kv: int(kv[0])) + return { + i: ordered_items[i][1] + for i in range(min(depth_len, len(ordered_items))) + } + + sand = _align_layer_dict(sand) + clay = _align_layer_dict(clay) + texture = _align_layer_dict(texture) + rock_fragments = _align_layer_dict(rock_fragments) + + # Align color output to this component's final horizon depths. + osd_lab_intpl = osd_color_by_cokey.get(_norm_cokey(row["cokey"])) + if osd_lab_intpl is not None and isinstance(bottom_depth, dict): + depth_pairs = [] + for k, v in bottom_depth.items(): + try: + depth_pairs.append((int(k), float(v))) + except (TypeError, ValueError): + continue + + depth_pairs.sort(key=lambda t: t[0]) + horizon_bottom_depths = [d for _, d in depth_pairs] + + if horizon_bottom_depths: + l_d = aggregate_data( + data=osd_lab_intpl["l"], + bottom_depths=horizon_bottom_depths, + sd=2, + ).fillna("") + a_d = aggregate_data( + data=osd_lab_intpl["a"], + bottom_depths=horizon_bottom_depths, + sd=2, + ).fillna("") + b_d = aggregate_data( + data=osd_lab_intpl["b"], + bottom_depths=horizon_bottom_depths, + sd=2, + ).fillna("") + + lab_parse = [[L, A, B] for L, A, B in zip(l_d, a_d, b_d)] + lab = dict(zip(l_d.index, lab_parse)) + + munsell_values = [ + ( + lab2munsell(color_ref, LAB_ref, lab_triplet) + if lab_triplet[0] != "" + and lab_triplet[1] != "" + and lab_triplet[2] != "" + else "" + ) + for lab_triplet in lab_parse + ] + munsell = dict(zip(l_d.index, munsell_values)) + + output_SoilList.append( + { + "id": ID[idx], + "site": Site[idx], + "esd": esd_comp_list[idx], + "top_depth": top_depth, + "bottom_depth": bottom_depth, + "sand": sand, + "clay": clay, + "texture": texture, + "rock_fragments": rock_fragments, + "cec": cec, + "ph": ph, + "ec": ec, + "lab": lab, + "munsell": munsell, + } ) - for row in zip( - ID, - Site, - esd_comp_list, - hzt_lyrs, - hzb_lyrs, - snd_lyrs, - cly_lyrs, - txt_lyrs, - rf_lyrs, - cec_lyrs, - ph_lyrs, - ec_lyrs, - lab_lyrs, - munsell_lyrs, - ) - ] soil_list_json = { "metadata": { diff --git a/soil_id/utils.py b/soil_id/utils.py index fc344cb..90fea93 100644 --- a/soil_id/utils.py +++ b/soil_id/utils.py @@ -46,6 +46,23 @@ ################################################################################################### +def _normalize_texture_name(field: str) -> str: + """Normalize texture labels to canonical lookup keys.""" + if field is None: + return "" + + texture = str(field).strip().lower() + texture = re.sub(r"\b(very\s+fine|very\s+coarse|fine|medium|coarse)\s+", "", texture) + texture = re.sub(r"\s+", " ", texture).strip() + + # Preserve legacy behavior for labels that collapse to non-standard forms. + aliases = { + "very sandy loam": "sandy loam", + "very sandy clay loam": "sandy clay loam", + } + return aliases.get(texture, texture) + + def getSand(field: str) -> float: """ Given a soil texture name (e.g. "loam", "sand", "clay"), return the approximate @@ -77,8 +94,7 @@ def getSand(field: str) -> float: if field is None: return np.nan - # Convert field to lowercase, then do the lookup in the dictionary - return sand_percentages.get(field.lower(), np.nan) + return sand_percentages.get(_normalize_texture_name(field), np.nan) def getClay(field): @@ -97,7 +113,9 @@ def getClay(field): "clay": 70.0, } - return clay_percentages.get(field.lower() if field else None, np.nan) + if field is None: + return np.nan + return clay_percentages.get(_normalize_texture_name(field), np.nan) def silt_calc(row): @@ -110,6 +128,7 @@ def silt_calc(row): def getTexture(row=None, sand=None, silt=None, clay=None): """ Classify soil texture based on sand, silt, and clay proportions. + Matches the legacy gettt function logic. Parameters: - row (dict): Dictionary-like object with 'sandtotal_r', 'silttotal_r', 'claytotal_r' keys. @@ -118,7 +137,7 @@ def getTexture(row=None, sand=None, silt=None, clay=None): - clay (float): Percentage of clay. Returns: - - str: Soil texture classification. + - str: Soil texture classification, or None if any input is NaN. """ # Handle missing inputs: if not provided individually, try to get from row. @@ -128,10 +147,9 @@ def getTexture(row=None, sand=None, silt=None, clay=None): silt = row.get("silttotal_r", np.nan) clay = row.get("claytotal_r", np.nan) - # Replace any NaN with 0 for the calculation. - sand = np.nan_to_num(sand, nan=0) - silt = np.nan_to_num(silt, nan=0) - clay = np.nan_to_num(clay, nan=0) + # Return None if any value is NaN (matches legacy behavior) + if np.isnan(sand) or np.isnan(silt) or np.isnan(clay): + return None # Calculate derived values. silt_clay = silt + 1.5 * clay @@ -140,16 +158,18 @@ def getTexture(row=None, sand=None, silt=None, clay=None): # Define conditions and corresponding texture classifications. conditions = [ silt_clay < 15, - (silt_clay >= 15) & (silt_clay < 30), - (((7 <= clay) & (clay <= 20)) & (sand > 52)) + (silt_clay >= 15) & (silt_2x_clay < 30), # Fixed: was using silt_clay for both + (((clay >= 7) & (clay <= 20)) & (sand > 52) & (silt_2x_clay >= 30)) | ((clay < 7) & (silt < 50) & (silt_2x_clay >= 30)), - (7 <= clay) & (clay <= 27) & (28 <= silt) & (silt < 50) & (sand <= 52), - (silt >= 50) & (((12 <= clay) & (clay < 27)) | ((silt < 80) & (clay < 12))), + (clay >= 7) & (clay <= 27) & (silt >= 28) & (silt < 50) & (sand <= 52), + ((silt >= 50) & (clay >= 12) & (clay < 27)) | ((silt >= 50) & (silt < 80) & (clay < 12)), (silt >= 80) & (clay < 12), - (20 <= clay) & (clay < 35) & (silt < 28) & (sand > 45), - (27 <= clay) & (clay < 40) & (sand <= 45) & (sand > 20), + (clay >= 20) & (clay < 35) & (silt < 28) & (sand > 45), + (clay >= 27) & (clay < 40) & (sand > 20) & (sand <= 45), + (clay >= 27) & (clay < 40) & (sand <= 20), (clay >= 35) & (sand >= 45), - (clay >= 40) & (silt >= 40) & (sand <= 45), + (clay >= 40) & (silt >= 40), + (clay >= 40) & (sand <= 45) & (silt < 40), ] choices = [ @@ -161,12 +181,14 @@ def getTexture(row=None, sand=None, silt=None, clay=None): "Silt", "Sandy clay loam", "Clay loam", + "Silty clay loam", "Sandy clay", + "Silty clay", "Clay", ] # Compute the texture classification. - result = np.select(conditions, choices, default="Unknown") + result = np.select(conditions, choices, default=None) # Ensure that a plain Python string is returned. if isinstance(result, np.ndarray): @@ -1617,10 +1639,10 @@ def process_horizon_data(muhorzdata_pd): # Infill missing CEC values with ECEC muhorzdata_pd["CEC"] = muhorzdata_pd["cec7_r"].fillna(muhorzdata_pd["ecec_r"]) - # Rename columns for better clarity - muhorzdata_pd = muhorzdata_pd.rename( - columns={"cec7_r": "CEC", "ph1to1h2o_r": "pH", "ec_r": "EC"} - ) + # Rename columns for better clarity. + # Keep the derived CEC column above as the single source of truth to avoid + # duplicate "CEC" column labels in downstream operations. + muhorzdata_pd = muhorzdata_pd.rename(columns={"ph1to1h2o_r": "pH", "ec_r": "EC"}) # Assign textures muhorzdata_pd["texture"] = muhorzdata_pd.apply(getTexture, axis=1) @@ -2305,16 +2327,23 @@ def entropy_score(series): probabilities = value_counts / len(series) return entropy(probabilities, base=2) + # target_col can be passed as ["col"]; normalize to a single column label. + target_name = target_col[0] if isinstance(target_col, (list, tuple)) else target_col + # Calculate entropy of the entire dataset based on the target variable - total_entropy = entropy_score(data[target_col]) + total_entropy = entropy_score(data[target_name]) # Calculate information gain for each feature information_gains = {} for feature_col in feature_cols: # Calculate weighted average of entropies for each unique value of the feature - feature_entropy = data.groupby(feature_col)[target_col].apply(entropy_score) + feature_entropy = data.groupby(feature_col)[target_name].apply(entropy_score) feature_counts = data[feature_col].value_counts() - weighted_feature_entropy = sum((feature_counts / len(data)) * feature_entropy.fillna(0)) + # Align on feature values and sum numeric terms (avoid Python sum over Series labels). + weighted_terms = ( + feature_counts.reindex(feature_entropy.index, fill_value=0) / len(data) + ) * feature_entropy.astype(float).fillna(0) + weighted_feature_entropy = float(weighted_terms.sum()) information_gain = total_entropy - weighted_feature_entropy information_gains[feature_col] = information_gain