From 48d2c27053d0b0a17eff032d7d71a38ed0869d14 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Tue, 25 Aug 2026 13:18:11 -0600 Subject: [PATCH 01/14] feat(cli): implement detect-changes command --- README.md | 16 ++- cli/README.md | 12 ++ cli/src/utrans/cli.py | 8 ++ cli/src/utrans/detect_changes.py | 196 +++++++++++++++++++++++++++++++ cli/tests/test_cli.py | 1 + cli/tests/test_detect_changes.py | 103 ++++++++++++++++ 6 files changed, 331 insertions(+), 5 deletions(-) create mode 100644 cli/src/utrans/detect_changes.py create mode 100644 cli/tests/test_detect_changes.py diff --git a/README.md b/README.md index 4056c98..80fd133 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,17 @@ The following diagram shows the flow of data from the county into UTRANS. flowchart TD subgraph CLI direction TB - updateFeatureClass@{ shape: lean-r , label: "Update Feature Class (County Data)"} --> get-recent-edits - baseFeatureClass@{ shape: lean-r , label: "Base Feature Class (Previously Obtained Data)"} --> get-recent-edits - get-recent-edits --> RoadCenterline_Recents@{ shape: lean-r} - RoadCenterline_Recents --> etl - countyBoundaries@{ shape: lean-r, label: "County Boundaries" } --> etl + updateFeatureClass@{ shape: lean-r , label: "Update Feature Class (--update-features)"} --> getRecentEdits["get-recent-edits"] + countyBaseFeatureClass@{ shape: lean-r , label: "County Base Feature Class (--base-features)"} --> getRecentEdits + getRecentEdits --> RoadCenterline_Recents@{ shape: lean-r , label: "RoadCenterline_Recents (--source-features)"} + + RoadCenterline_Recents --> etl["etl"] + utransRoads@{ shape: lean-r , label: "UTRANS Roads Schema (--utrans-roads)"} --> etl + countyBoundaries@{ shape: lean-r , label: "County Boundaries (--county-boundaries)"} --> etl etl --> etlOutput@{ shape: lean-r , label: "county_etl_YYYYMMDD"} + + etlOutput --> detectChanges["detect-changes"] + utransBaseFeatureClass@{ shape: lean-r , label: "UTRANS Feature Class (--utrans-features)"} --> detectChanges + detectChanges --> productionDfc@{ shape: lean-r , label: "UTRANS/DFC_RESULT"} end ``` diff --git a/cli/README.md b/cli/README.md index 2392ff7..9932961 100644 --- a/cli/README.md +++ b/cli/README.md @@ -56,3 +56,15 @@ utrans etl --county saltlake --source-features "Z:\Documents\gdb\SaltLake.gdb\Ro ``` The output contains complete road features that intersect the selected county boundary; it does not clip features at the boundary. Run `utrans etl --help` for all options. + +### Detect Changes + +Process ETL output against a previous UTRANS road feature class: + +```powershell +utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon.gdb\county_etl" --utrans-features "Z:\Documents\gdb\UTRANS.gdb\Roads" --output-workspace "Z:\Documents\gdb\Carbon.gdb" +``` + +The command uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to the fixed UTRANS DFC feature class on every run. + +Run `utrans detect-changes --help` for the remaining options. diff --git a/cli/src/utrans/cli.py b/cli/src/utrans/cli.py index f741a72..08e0498 100644 --- a/cli/src/utrans/cli.py +++ b/cli/src/utrans/cli.py @@ -6,6 +6,7 @@ import sys from utrans import __version__ +from utrans.detect_changes import main as detect_changes_main from utrans.etl import main as etl_main from utrans.recent_edits import main as recent_edits_main @@ -25,6 +26,10 @@ def build_parser() -> argparse.ArgumentParser: "etl", help="Transform county roads into the UTRANS schema.", ) + subparsers.add_parser( + "detect-changes", + help="Detect and optionally publish changes from ETL-produced roads.", + ) return parser @@ -42,6 +47,9 @@ def main(argv: list[str] | None = None) -> int: if arguments[0] == "etl": print(f"utrans {__version__}") return etl_main(arguments[1:], prog="utrans etl") + if arguments[0] == "detect-changes": + print(f"utrans {__version__}") + return detect_changes_main(arguments[1:], prog="utrans detect-changes") try: parser.parse_args(arguments) diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py new file mode 100644 index 0000000..8d26308 --- /dev/null +++ b/cli/src/utrans/detect_changes.py @@ -0,0 +1,196 @@ +"""Detect and publish changes from an ETL-produced UTRANS feature class.""" + +from __future__ import annotations + +import argparse +import os +import re +from datetime import UTC, datetime +from pathlib import Path +from typing import Literal + +import arcpy + +from utrans.profiles import format_county_help, load_profiles, resolve_county_profile +from utrans.recent_edits import ( + ensure_detect_feature_changes_license, + get_output_workspace, +) +from utrans.utilities import log + +MATCH_FIELDS = "NAME NAME" +COMPARE_FIELDS = ( + "PREDIR PREDIR; POSTTYPE POSTTYPE; NAME NAME; POSTDIR POSTDIR; " + "FROMADDR_L FROMADDR_L; TOADDR_L TOADDR_L; FROMADDR_R FROMADDR_R; " + "TOADDR_R TOADDR_R; A1_PREDIR A1_PREDIR; A1_NAME A1_NAME; " + "A1_POSTTYPE A1_POSTTYPE; A1_POSTDIR A1_POSTDIR; A2_PREDIR A2_PREDIR; " + "A2_NAME A2_NAME; A2_POSTTYPE A2_POSTTYPE; A2_POSTDIR A2_POSTDIR; " + "AN_NAME AN_NAME; AN_POSTDIR AN_POSTDIR" +) +DFC_OUTPUT_NAME = "DFC_RESULT" +STATS_TABLE_NAME = "new_roads_stats" +TEST_OUTPUT_NAME = "TEST_DFC_RESULT" +CHANGE_FILTER = "CHANGE_TYPE NOT IN ('NC', 'D')" +SEARCH_DISTANCE = "50" +CHANGE_TOLERANCE = "50" +APPEND_TARGET = ( + r"Database Connections\DC_TRANSADMIN@UTRANS@utrans.agrc.utah.gov.sde" + "\\" + r"UTRANS.TRANSADMIN.Centerlines_Edit\UTRANS.TRANSADMIN.DFC_RESULT" +) + + +def extract_fips(fips_setting: str) -> str: + """Extract the five-digit FIPS code from a profile value.""" + match = re.search(r"\b\d{5}\b", str(fips_setting)) + if not match: + raise RuntimeError(f"Invalid county FIPS setting: '{fips_setting}'.") + return match.group(0) + + +def _field_exists(feature_class: str, field_name: str) -> bool: + return any( + field.name.upper() == field_name for field in arcpy.ListFields(feature_class) + ) + + +def add_dfc_fields(dfc_output: str, fips: str) -> None: + fields: tuple[tuple[str, Literal["TEXT", "DATE"], int | None], ...] = ( + ("CURRENT_NOTES", "TEXT", 50), + ("PREV__NOTES", "TEXT", 50), + ("EDITOR", "TEXT", 20), + ("EDIT_DATE", "DATE", None), + ("DATE_ADDED", "DATE", None), + ("COFIPS", "TEXT", 5), + ) + for name, field_type, length in fields: + if not _field_exists(dfc_output, name): + if length is None: + arcpy.management.AddField(dfc_output, name, field_type) + else: + arcpy.management.AddField( + dfc_output, name, field_type, field_length=length + ) + + with arcpy.da.UpdateCursor(dfc_output, ["DATE_ADDED", "COFIPS"]) as rows: + for row in rows: + row[0] = datetime.now(UTC) + row[1] = fips + rows.updateRow(row) + + +def _resolve_field_mapping(feature_classes: tuple[str, ...], mapping: str) -> str: + available_fields = [ + {field.name.upper() for field in arcpy.ListFields(feature_class)} + for feature_class in feature_classes + ] + pairs = [] + for token in mapping.split(";"): + update_field, base_field = token.strip().split() + if all( + update_field.upper() in fields and base_field.upper() in fields + for fields in available_fields + ): + pairs.append(f"{update_field} {base_field}") + if not pairs: + raise RuntimeError( + "No fields from the fixed mapping were found in both datasets." + ) + return "; ".join(pairs) + + +def run_detect_changes( + update_features: str, + base_features: str, + fips: str, + output_workspace: str, +) -> tuple[str, str]: + arcpy.env.overwriteOutput = True + dfc_output = os.path.join(output_workspace, DFC_OUTPUT_NAME) + stats_table = os.path.join(output_workspace, STATS_TABLE_NAME) + test_output = os.path.join(output_workspace, TEST_OUTPUT_NAME) + base_layer = "detect_changes_base" + + arcpy.management.MakeFeatureLayer( + base_features, + base_layer, + f"COUNTY_L = '{fips}' OR COUNTY_R = '{fips}'", + ) + try: + datasets = (update_features, base_features) + match_fields = _resolve_field_mapping(datasets, MATCH_FIELDS) + compare_fields = _resolve_field_mapping(datasets, COMPARE_FIELDS) + log("Running DetectFeatureChanges") + arcpy.management.DetectFeatureChanges( + update_features, + base_layer, + dfc_output, + SEARCH_DISTANCE, + match_fields, + stats_table, + CHANGE_TOLERANCE, + compare_fields, + ) + add_dfc_fields(dfc_output, fips) + arcpy.AlterAliasName(dfc_output, "DFC_RESULT") + + changed_layer = "detect_changes_output" + arcpy.management.MakeFeatureLayer(dfc_output, changed_layer, CHANGE_FILTER) + arcpy.management.CopyFeatures(changed_layer, test_output) + arcpy.management.Append(changed_layer, APPEND_TARGET, "NO_TEST") + log(f"Appended changed features to {APPEND_TARGET}") + return dfc_output, test_output + finally: + if arcpy.Exists(base_layer): + arcpy.management.Delete(base_layer) + + +def build_parser(prog: str | None = None): + profiles = load_profiles() + parser = argparse.ArgumentParser( + prog=prog, + description="Detect changes in ETL-produced UTRANS roads.", + ) + parser.add_argument( + "--county", + required=True, + help=f"County profile key: {format_county_help(profiles)}.", + ) + parser.add_argument( + "--update-features", required=True, help="ETL-produced road feature class." + ) + parser.add_argument( + "--utrans-features", required=True, help="UTRANS baseline road feature class." + ) + parser.add_argument("--output-workspace") + parser.add_argument( + "--profiles", type=Path, help="Path to a custom profiles JSON file." + ) + return parser + + +def main(argv=None, *, prog: str | None = None): + parser = build_parser(prog=prog) + args = parser.parse_args(argv) + try: + profiles = load_profiles(args.profiles) + profile = resolve_county_profile(args.county, profiles) + fips = extract_fips(profile.require("fips")) + ensure_detect_feature_changes_license() + output_workspace = args.output_workspace or get_output_workspace( + args.update_features + ) + run_detect_changes( + args.update_features, + args.utrans_features, + fips, + output_workspace, + ) + except RuntimeError as exc: + log(str(exc)) + return 2 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/cli/tests/test_cli.py b/cli/tests/test_cli.py index 53d9021..8ffbc67 100644 --- a/cli/tests/test_cli.py +++ b/cli/tests/test_cli.py @@ -25,6 +25,7 @@ def test_version(capsys): @pytest.mark.parametrize( ("command", "main_name"), [ + ("detect-changes", "detect_changes_main"), ("get-recent-edits", "recent_edits_main"), ("etl", "etl_main"), ], diff --git a/cli/tests/test_detect_changes.py b/cli/tests/test_detect_changes.py new file mode 100644 index 0000000..78956cb --- /dev/null +++ b/cli/tests/test_detect_changes.py @@ -0,0 +1,103 @@ +import os +from unittest.mock import MagicMock, Mock + +from utrans import detect_changes + + +def _cursor(rows): + cursor = MagicMock() + cursor.__enter__.return_value = cursor + cursor.__exit__.return_value = False + cursor.__iter__.return_value = iter(rows) + return cursor + + +def test_extract_fips_from_profile_value(): + assert detect_changes.extract_fips("49035 - Salt Lake") == "49035" + assert detect_changes.extract_fips("56041 - Uinta") == "56041" + + +def test_parser_does_not_require_county_field_configuration(): + parser = detect_changes.build_parser() + + actions = {action.dest for action in parser._actions} + + assert "required_fields" not in actions + assert "match_fields" not in actions + assert "compare_fields" not in actions + assert "base_features" not in actions + assert "search_distance" not in actions + assert "change_tolerance" not in actions + assert "dfc_output_name" not in actions + assert "stats_table_name" not in actions + assert "test_output_name" not in actions + assert "append_target" not in actions + assert "utrans_features" in actions + + +def test_add_dfc_fields_creates_legacy_fields_and_populates_metadata(monkeypatch): + add_field = Mock() + update_cursor = _cursor([[None, None]]) + monkeypatch.setattr(detect_changes.arcpy, "ListFields", Mock(return_value=[])) + monkeypatch.setattr(detect_changes.arcpy.management, "AddField", add_field) + monkeypatch.setattr( + detect_changes.arcpy.da, "UpdateCursor", Mock(return_value=update_cursor) + ) + + detect_changes.add_dfc_fields("dfc", "49035") + + assert [call.args[:3] for call in add_field.call_args_list] == [ + ("dfc", "CURRENT_NOTES", "TEXT"), + ("dfc", "PREV__NOTES", "TEXT"), + ("dfc", "EDITOR", "TEXT"), + ("dfc", "EDIT_DATE", "DATE"), + ("dfc", "DATE_ADDED", "DATE"), + ("dfc", "COFIPS", "TEXT"), + ] + assert update_cursor.__iter__.return_value is not None + assert update_cursor.updateRow.call_count == 1 + assert update_cursor.updateRow.call_args.args[0][1] == "49035" + + +def test_run_detect_changes_uses_shared_filter_and_appends_to_utrans(monkeypatch): + management = detect_changes.arcpy.management + make_feature_layer = Mock() + copy_features = Mock() + append = Mock() + detect_feature_changes = Mock() + monkeypatch.setattr(management, "MakeFeatureLayer", make_feature_layer) + monkeypatch.setattr(management, "CopyFeatures", copy_features) + monkeypatch.setattr(management, "Append", append) + monkeypatch.setattr(management, "DetectFeatureChanges", detect_feature_changes) + monkeypatch.setattr( + detect_changes, + "_resolve_field_mapping", + Mock(side_effect=["NAME NAME", "NAME NAME"]), + ) + monkeypatch.setattr(detect_changes, "add_dfc_fields", Mock()) + monkeypatch.setattr(detect_changes.arcpy, "AlterAliasName", Mock()) + monkeypatch.setattr(detect_changes.arcpy, "Exists", Mock(return_value=False)) + + detect_changes.run_detect_changes("update", "base", "49035", "workspace") + + make_feature_layer.assert_any_call( + "base", "detect_changes_base", "COUNTY_L = '49035' OR COUNTY_R = '49035'" + ) + make_feature_layer.assert_any_call( + os.path.join("workspace", "DFC_RESULT"), + "detect_changes_output", + detect_changes.CHANGE_FILTER, + ) + copy_features.assert_called_once_with( + "detect_changes_output", os.path.join("workspace", "TEST_DFC_RESULT") + ) + append.assert_called_once_with( + "detect_changes_output", detect_changes.APPEND_TARGET, "NO_TEST" + ) + + +def test_extract_fips_rejects_invalid_profile_value(): + import pytest + + with pytest.raises(RuntimeError, match="Invalid county FIPS"): + detect_changes.extract_fips("Salt Lake") From a5cf22ed54d835f72b6d0810de0a745d2f5782a0 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Tue, 25 Aug 2026 15:15:41 -0600 Subject: [PATCH 02/14] fix(cli): remove all superfluous and optional inputs Trying to simplify and streamline here. --- cli/PROFILES.md | 162 +++++++++++-------------------- cli/README.md | 10 +- cli/src/utrans/detect_changes.py | 10 +- cli/src/utrans/etl.py | 39 +++----- cli/src/utrans/recent_edits.py | 93 +++--------------- cli/src/utrans/utilities.py | 13 +++ cli/tests/test_cli.py | 8 ++ cli/tests/test_detect_changes.py | 43 +++++++- cli/tests/test_etl_mappers.py | 6 +- 9 files changed, 157 insertions(+), 227 deletions(-) diff --git a/cli/PROFILES.md b/cli/PROFILES.md index 6d5ba81..eb4f77b 100644 --- a/cli/PROFILES.md +++ b/cli/PROFILES.md @@ -1,16 +1,18 @@ # County Profiles Configuration -`profiles.json` defines flat, per-county settings shared by UTRANS commands. `get-recent-edits` uses its field-mapping settings to run ArcGIS Pro's **Detect Feature Changes** tool between two versions of a county road centerline dataset. `etl` uses the same county key and its `fips` setting to select the matching county transformation. +`profiles.json` defines flat, per-county settings shared by UTRANS commands. `etl` uses the transformation settings to convert county roads into the UTRANS schema. `get-recent-edits` uses its change-detection settings to run ArcGIS Pro's **Detect Feature Changes** tool between two versions of a county road centerline dataset. `detect-changes` uses only `fips` from the profile; its DFC match and comparison fields are fixed by the command. Each key in the JSON object is a county identifier (e.g. `"grand"`, `"davis"`). The script resolves the correct profile at runtime using the `--county` argument. `saltlake` is the Salt Lake County identifier for every command. The former `vecc` identifier is not supported. -## Shared ETL Field +## Profile Fields ### `fips` -**Type:** `string` | **Required by `etl`** +**Type:** `string` | **Required by:** `etl`, `detect-changes` + +**Used by:** `etl`, `detect-changes` The county's five-digit FIPS code plus the name written to `COUNTY_L` and `COUNTY_R` during ETL. For example, `"49035 - Salt Lake"`. @@ -18,6 +20,8 @@ The county's five-digit FIPS code plus the name written to `COUNTY_L` and `COUNT **Type:** `string` | **Required by `etl`** +**Used by:** `etl` + A semicolon-delimited list of `UTRANS_FIELD=COUNTY_FIELD` assignments. These map county source fields into the target schema after colliding source fields have been renamed with an underscore. When the UTRANS destination has a coded-value domain, @@ -33,14 +37,13 @@ are reported with the field and value. ### `value_mappings` -**Type:** `object` | **Optional** — defaults to `{}` +**Type:** `object` | **Optional** - defaults to `{}` + +**Used by:** `etl` Per-target mappings for source values that do not match a UTRANS coded-value -domain code or description. Each target field contains an object mapping the -source value to the desired target value. Field names and source values are -matched case-insensitively after surrounding whitespace is removed. The mapped -target value is then resolved against the destination coded-value domain, so it -can be either a coded value or a domain description. +domain code or description. Field names and source values are matched +case-insensitively after surrounding whitespace is removed. ```json "value_mappings": { @@ -54,15 +57,18 @@ can be either a coded value or a domain description. } ``` -Mappings run after `field_mappings` selects a source field and before normal -destination-domain matching. If no configured mapping or valid domain match is -found, the original source value is handled as an invalid value: it is appended -to `UTRANS_NOTES` and copied only when it fits the target field length. +The mapped value is resolved against the destination coded-value domain. Values +that remain invalid are recorded in `UTRANS_NOTES` and copied only when they fit +the target field length. + +--- ### `rules` **Type:** `string[]` | **Optional** — defaults to `[]` +**Used by:** `etl` + An ordered list of supported post-mapping transformations. Rules run after field and full-address mappings, but before the feature is normalized and appended. Unknown or duplicate names are rejected. @@ -80,6 +86,8 @@ Supported rules: **Type:** `string` | **Optional** +**Used by:** `etl` + Selects a built-in, county-specific transformation for behavior that requires multiple fields or conditional assignments. Handler names are resolved from the CLI's fixed registry; profile files cannot name Python modules or functions. @@ -114,6 +122,8 @@ Currently supported handlers: **Type:** `string` | **Optional** +**Used by:** `etl` + A semicolon-delimited list of `COUNTY_FIELD=TARGET` values used to parse full street names. `TARGET` is `PRIMARY`, `A1`, or `A2`. @@ -121,50 +131,33 @@ names. `TARGET` is `PRIMARY`, `A1`, or `A2`. **Type:** `boolean` | **Optional** — defaults to `false` +**Used by:** `etl` + When `true`, legacy vertical values `1`, `2`, and `3` are translated to `0`, `1`, and `2` before domain-value matching. Invalid values are still preserved when they fit within the destination field length and are always appended to `UTRANS_NOTES`. ### `exclude_if_any` -**Type:** `string` | **Optional** - -A semicolon-delimited list of `COUNTY_FIELD=VALUE,VALUE` exclusions. A feature is -removed when any configured field contains a listed value. +**Type:** `string` or `object` | **Optional** - defaults to no exclusions -County selection is strict: +**Used by:** `etl` -- `--county` must exactly match a top-level key in the active profiles file -- By default, the active profiles file is `cli/profiles.json` -- Use `--profiles ` to supply a custom profiles file -- Matching is case-sensitive -- Aliases and spaced variants are not supported - ---- - -## Fields Reference - -### `match_fields` - -**Type:** `string` | **Required** - -A space-separated field pair (`update_field base_field`) used to confirm that two spatially proximate road segments are the **same road** across the two datasets. This is passed directly to the `match_field` parameter of `DetectFeatureChanges`. - -The tool first finds candidate matches within `--search-distance`, then uses this field to disambiguate — e.g. confirming two nearby segments share the same street name before treating them as the same feature. +Excludes a staged feature when any configured field contains one of the listed +case-insensitive values. The string form uses semicolon-delimited `FIELD=VALUE1,VALUE2` +pairs. The object form maps field names to arrays of values. ```json -"match_fields": "STREETNAME STREETNAME" +"exclude_if_any": "S_SURF=400,410,420,430,440" ``` -When both datasets use the same schema, the field name is repeated. If the schemas differ, the two names can be different (e.g. `"S_NAME STREETNAME"`). - -> **Note:** The specific field chosen per county was determined during original script development and reflects the primary name field in that county's road schema. - --- ### `compare_fields` -**Type:** `string` | **Optional in profile** +**Type:** `string` | **Required** + +**Used by:** `get-recent-edits` A semicolon-delimited list of `update_field base_field` pairs passed to the `compare_fields` parameter of `DetectFeatureChanges`. These are the attribute fields checked for changes after two segments are matched. @@ -176,41 +169,26 @@ A segment is included in the output recents layer if any of these fields differ Fields that don't exist in one or both datasets are silently dropped before the tool runs, with a warning logged. -If omitted from the profile, it must be provided via `--compare-fields` at runtime. +Every active county profile must provide this setting. --- -### `text_fields` - -**Type:** `string[]` | **Optional** — defaults to `[]` +### `match_fields` -Fields that will be text-normalized before change detection runs. Normalization: +**Type:** `string` | **Required** -- Collapses internal whitespace to single spaces -- Trims leading/trailing whitespace -- Converts `None`, `NULL`, and blank values to empty string `""` +**Used by:** `get-recent-edits` -This prevents false positives caused by whitespace or null inconsistencies between datasets. +A space-separated `update_field base_field` pair used to confirm that two +spatially proximate road segments are the same road across the two datasets. +When both datasets use the same schema, the field name is repeated. If the +schemas differ, the two names can be different. ```json -"text_fields": ["PREDIR", "STREETNAME", "STREETTYPE", "SUFDIR"] +"match_fields": "STREETNAME STREETNAME" ``` ---- - -### `numeric_fields` - -**Type:** `string[]` | **Optional** — defaults to `[]` - -Fields that will be numeric-normalized before change detection runs. Normalization: - -- Converts `None`, `NULL`, and blank values to `0` - -This prevents false positives caused by null vs. zero inconsistencies in address range fields. - -```json -"numeric_fields": ["L_F_ADD", "L_T_ADD", "R_F_ADD", "R_T_ADD"] -``` +The specific field is selected per county because source schemas differ. --- @@ -218,7 +196,10 @@ This prevents false positives caused by null vs. zero inconsistencies in address **Type:** `string[]` | **Optional** — defaults to `[]` -A subset of `text_fields` whose values will also be uppercased during normalization. Use this when a county's data may have mixed case values that should compare as equal. +**Used by:** `get-recent-edits` + +A list of string fields whose values will also be uppercased during normalization. +Use this when a county's data may have mixed case values that should compare as equal. ```json "uppercase_normalize_fields": ["STREETNAME", "STREETTYPE", "ACSALIAS"] @@ -230,7 +211,10 @@ A subset of `text_fields` whose values will also be uppercased during normalizat **Type:** `string[]` | **Optional** — defaults to `[]` -Fields that must exist in **both** the update and base feature classes. If any are missing, the script raises an error before doing any work. Useful for counties whose schemas are known to be strict or whose pipelines depend on specific fields being present. +**Used by:** `get-recent-edits` + +Fields that must exist in both the update and base feature classes. If any are +missing, the script raises an error before doing any work. ```json "required_fields": ["RoadName", "LeftFrom", "LeftTo", "RightFrom", "RightTo"] @@ -238,49 +222,13 @@ Fields that must exist in **both** the update and base feature classes. If any a --- -### `dfc_output_name` - -**Type:** `string` | **Optional** — defaults to `"DFC_CountyToCounty"` - -Name of the output feature class written by `DetectFeatureChanges`. Output is placed in the same workspace as the update feature class. - ---- - -### `stats_table_name` - -**Type:** `string` | **Optional** — defaults to `"stats_county_to_county"` - -Name of the statistics table written by `DetectFeatureChanges`. - ---- - -### `recents_name` - -**Type:** `string` | **Optional** — defaults to `"RoadCenterline_Recents"` - -Name of the final output feature class containing only roads that changed (i.e. those where `CHANGE_TYPE <> 'NC'`). This is the primary deliverable of the script. - ---- - ## Minimal Profile Example ```json "example": { + "fips": "49000 - Example", + "field_mappings": "NAME=STREETNAME", "match_fields": "STREETNAME STREETNAME", - "compare_fields": "PREDIR PREDIR; STREETNAME STREETNAME; STREETTYPE STREETTYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD", - "text_fields": ["PREDIR", "STREETNAME", "STREETTYPE"], - "numeric_fields": ["L_F_ADD", "L_T_ADD", "R_F_ADD", "R_T_ADD"] + "compare_fields": "PREDIR PREDIR; STREETNAME STREETNAME; STREETTYPE STREETTYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD" } ``` - -## CLI Overrides - -Most profile values can be overridden at runtime without editing `profiles.json`: - -| Profile field | CLI argument | -| ------------------ | -------------------- | -| `match_fields` | `--match-fields` | -| `compare_fields` | `--compare-fields` | -| `dfc_output_name` | `--dfc-output-name` | -| `stats_table_name` | `--stats-table-name` | -| `recents_name` | `--recents-name` | diff --git a/cli/README.md b/cli/README.md index 9932961..a75490f 100644 --- a/cli/README.md +++ b/cli/README.md @@ -45,6 +45,8 @@ pip install --upgrade pathspec hatchling utrans get-recent-edits --county Carbon --update-features "Z:\Documents\gdb\Carbon20231019.gdb\Roads" --base-features "Z:\Documents\gdb\Carbon20230208.gdb\CC_Roads" ``` +The output is written to the geodatabase containing `--update-features`. + Run `utrans get-recent-edits --help` for the complete option reference and supported county profiles. ### ETL @@ -52,19 +54,19 @@ Run `utrans get-recent-edits --help` for the complete option reference and suppo Convert county roads to the UTRANS schema with explicit inputs: ```powershell -utrans etl --county saltlake --source-features "Z:\Documents\gdb\SaltLake.gdb\RoadCenterline_Recents" --utrans-roads "Z:\schemas\UtahRoadsNGSchema.gdb\Roads_Edit" --output-workspace "Z:\Documents\gdb\output.gdb" --county-boundaries "Database Connections\internal.sde\SGID.BOUNDARIES.Counties" +utrans etl --county saltlake --source-features "Z:\Documents\gdb\SaltLake.gdb\RoadCenterline_Recents" --utrans-roads "Z:\schemas\UtahRoadsNGSchema.gdb\Roads_Edit" --county-boundaries "Database Connections\internal.sde\SGID.BOUNDARIES.Counties" ``` -The output contains complete road features that intersect the selected county boundary; it does not clip features at the boundary. Run `utrans etl --help` for all options. +The output is written to the geodatabase containing `--source-features`. It contains complete road features that intersect the selected county boundary; it does not clip features at the boundary. Run `utrans etl --help` for all options. ### Detect Changes Process ETL output against a previous UTRANS road feature class: ```powershell -utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon.gdb\county_etl" --utrans-features "Z:\Documents\gdb\UTRANS.gdb\Roads" --output-workspace "Z:\Documents\gdb\Carbon.gdb" +utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon.gdb\county_etl" --utrans-features "Z:\Documents\gdb\UTRANS.gdb\Roads" ``` -The command uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to the fixed UTRANS DFC feature class on every run. +The command writes outputs to the geodatabase containing `--update-features`. It uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to the fixed UTRANS DFC. Run `utrans detect-changes --help` for the remaining options. diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py index 8d26308..8daafb5 100644 --- a/cli/src/utrans/detect_changes.py +++ b/cli/src/utrans/detect_changes.py @@ -14,9 +14,8 @@ from utrans.profiles import format_county_help, load_profiles, resolve_county_profile from utrans.recent_edits import ( ensure_detect_feature_changes_license, - get_output_workspace, ) -from utrans.utilities import log +from utrans.utilities import get_output_workspace, log MATCH_FIELDS = "NAME NAME" COMPARE_FIELDS = ( @@ -103,9 +102,9 @@ def run_detect_changes( update_features: str, base_features: str, fips: str, - output_workspace: str, ) -> tuple[str, str]: arcpy.env.overwriteOutput = True + output_workspace = get_output_workspace(update_features) dfc_output = os.path.join(output_workspace, DFC_OUTPUT_NAME) stats_table = os.path.join(output_workspace, STATS_TABLE_NAME) test_output = os.path.join(output_workspace, TEST_OUTPUT_NAME) @@ -162,7 +161,6 @@ def build_parser(prog: str | None = None): parser.add_argument( "--utrans-features", required=True, help="UTRANS baseline road feature class." ) - parser.add_argument("--output-workspace") parser.add_argument( "--profiles", type=Path, help="Path to a custom profiles JSON file." ) @@ -177,14 +175,10 @@ def main(argv=None, *, prog: str | None = None): profile = resolve_county_profile(args.county, profiles) fips = extract_fips(profile.require("fips")) ensure_detect_feature_changes_license() - output_workspace = args.output_workspace or get_output_workspace( - args.update_features - ) run_detect_changes( args.update_features, args.utrans_features, fips, - output_workspace, ) except RuntimeError as exc: log(str(exc)) diff --git a/cli/src/utrans/etl.py b/cli/src/utrans/etl.py index 33be914..354704c 100644 --- a/cli/src/utrans/etl.py +++ b/cli/src/utrans/etl.py @@ -23,16 +23,22 @@ load_profiles, resolve_county_profile, ) -from utrans.utilities import log +from utrans.utilities import get_output_workspace, log + +ETL_OUTPUT_DATE_FORMAT = "%Y%m%d" +COUNTY_BOUNDARY_NAMES = { + "boxelder": "BOX ELDER", + "saltlake": "SALT LAKE", + "sanjuan": "SAN JUAN", +} def _default_output_name(county: str) -> str: - return f"{county}_etl_{datetime.now(UTC):%Y%m%d}" + return f"{county}_etl_{datetime.now(UTC):{ETL_OUTPUT_DATE_FORMAT}}" def _county_boundary_name(county: str) -> str: - names = {"boxelder": "BOX ELDER", "saltlake": "SALT LAKE", "sanjuan": "SAN JUAN"} - return names.get(county, county.upper()) + return COUNTY_BOUNDARY_NAMES.get(county, county.upper()) def _unique_name(prefix: str) -> str: @@ -63,22 +69,19 @@ def _rename_colliding_fields(source_features: str, utrans_roads: str) -> None: def _validate_output(output_features: str) -> None: if arcpy.Exists(output_features): - raise RuntimeError( - f"Output already exists: {output_features}. Choose --output-name with a new name." - ) + raise RuntimeError(f"Output already exists: {output_features}.") def run_etl( source_features: str, utrans_roads: str, - output_workspace: str, county_boundaries: str, county: str, profile: CountyProfile, - output_name: str, - county_boundary_name: str | None = None, ) -> str: """Run the county transformation and export whole roads intersecting its boundary.""" + output_workspace = get_output_workspace(source_features) + output_name = _default_output_name(county) if not arcpy.Exists(source_features): raise RuntimeError(f"Source features do not exist: {source_features}") if not arcpy.Exists(utrans_roads): @@ -113,7 +116,7 @@ def run_etl( arcpy.edit.Densify(staging_output, "ANGLE") arcpy.edit.Generalize(staging_output, "2 Meters") - boundary_name = county_boundary_name or _county_boundary_name(county) + boundary_name = _county_boundary_name(county) boundary_field = field_name_map(county_boundaries).get("NAME") if boundary_field is None: raise RuntimeError("County boundaries must include a NAME field.") @@ -153,20 +156,9 @@ def build_parser(prog: str | None = None) -> argparse.ArgumentParser: required=True, help="UTRANS roads feature class used as the target schema.", ) - parser.add_argument( - "--output-workspace", required=True, help="Geodatabase for the ETL output." - ) parser.add_argument( "--county-boundaries", required=True, help="County boundary feature class." ) - parser.add_argument( - "--output-name", - help="Output feature class name. Defaults to county_etl_YYYYMMDD.", - ) - parser.add_argument( - "--county-boundary-name", - help="Override the NAME value used to select the county boundary.", - ) parser.add_argument( "--profiles", metavar="PATH", help="Custom flat profiles JSON file." ) @@ -182,12 +174,9 @@ def main(argv: list[str] | None = None, *, prog: str | None = None) -> int: run_etl( args.source_features, args.utrans_roads, - args.output_workspace, args.county_boundaries, profile.key, profile, - args.output_name or _default_output_name(profile.key), - args.county_boundary_name, ) except (RuntimeError, TypeError, FileNotFoundError, json.JSONDecodeError) as exc: log(str(exc)) diff --git a/cli/src/utrans/recent_edits.py b/cli/src/utrans/recent_edits.py index b46eeea..9260d55 100644 --- a/cli/src/utrans/recent_edits.py +++ b/cli/src/utrans/recent_edits.py @@ -15,9 +15,14 @@ import arcpy from utrans.profiles import load_profiles as load_shared_profiles -from utrans.utilities import log +from utrans.utilities import get_output_workspace, log NUMERIC_TYPES = {"SmallInteger", "Integer", "Single", "Double", "BigInteger"} +DEFAULT_SEARCH_DISTANCE = "200 Feet" +DEFAULT_CHANGE_TOLERANCE = "40" +DEFAULT_DFC_OUTPUT_NAME = "DFC_CountyToCounty" +DEFAULT_STATS_TABLE_NAME = "stats_county_to_county" +DEFAULT_RECENTS_NAME = "RoadCenterline_Recents" def _detect_field_groups(feature_class: str) -> tuple[list[str], list[str]]: @@ -43,9 +48,6 @@ class CountyProfile: match_fields: str = "" compare_fields: str | None = None uppercase_normalize_fields: set[str] = field(default_factory=set) - dfc_output_name: str = "DFC_CountyToCounty" - stats_table_name: str = "stats_county_to_county" - recents_name: str = "RoadCenterline_Recents" required_fields: list[str] = field(default_factory=list) @@ -57,9 +59,6 @@ def _load_profiles(path: Path | None = None) -> dict[str, CountyProfile]: match_fields=data["match_fields"], compare_fields=data.get("compare_fields"), uppercase_normalize_fields=set(data.get("uppercase_normalize_fields", [])), - dfc_output_name=data.get("dfc_output_name", "DFC_CountyToCounty"), - stats_table_name=data.get("stats_table_name", "stats_county_to_county"), - recents_name=data.get("recents_name", "RoadCenterline_Recents"), required_fields=data.get("required_fields", []), ) @@ -122,14 +121,6 @@ def resolve_field_pairs(update_features, base_features, field_mapping): return resolved_pairs -def get_output_workspace(update_features): - dirname = os.path.dirname(arcpy.Describe(update_features).catalogPath) - desc = arcpy.Describe(dirname) - if hasattr(desc, "datasetType") and desc.datasetType == "FeatureDataset": - dirname = os.path.dirname(dirname) - return dirname - - def _blank_like(value): if value is None: return True @@ -234,19 +225,14 @@ def run_change_detection( profile, update_features, base_features, - search_distance, match_fields, - change_tolerance, compare_fields, - dfc_output_name, - stats_table_name, - recents_name, ): arcpy.env.overwriteOutput = True output_workspace = get_output_workspace(update_features) - dfc_output = os.path.join(output_workspace, dfc_output_name) - stats_table = os.path.join(output_workspace, stats_table_name) - out_feature = os.path.join(output_workspace, recents_name) + dfc_output = os.path.join(output_workspace, DEFAULT_DFC_OUTPUT_NAME) + stats_table = os.path.join(output_workspace, DEFAULT_STATS_TABLE_NAME) + out_feature = os.path.join(output_workspace, DEFAULT_RECENTS_NAME) if profile.required_fields: ensure_required_fields( @@ -265,7 +251,7 @@ def run_change_detection( if not resolved_match_pairs: raise RuntimeError( "No valid match field pairs found between update and base feature classes. " - "Pass --match-fields with fields that exist in both datasets." + "Update the county profile with fields that exist in both datasets." ) resolved_match_fields = "; ".join( [ @@ -280,7 +266,7 @@ def run_change_detection( if not resolved_compare_pairs: raise RuntimeError( "No valid compare field pairs found between update and base feature classes. " - "Pass --compare-fields with fields that exist in both datasets." + "Update the county profile with fields that exist in both datasets." ) resolved_compare_fields = "; ".join( [ @@ -316,15 +302,15 @@ def run_change_detection( update_features, base_features, dfc_output, - search_distance, + DEFAULT_SEARCH_DISTANCE, resolved_match_fields, stats_table, - change_tolerance, + DEFAULT_CHANGE_TOLERANCE, resolved_compare_fields, ) log("DetectFeatureChanges finished") - log(f"Creating changed-road output feature class: {recents_name}") + log(f"Creating changed-road output feature class: {DEFAULT_RECENTS_NAME}") arcpy.env.qualifiedFieldNames = False roads_layer = "roads_lyr" @@ -382,38 +368,6 @@ def build_parser(prog: str | None = None): help="Full path to previous county road feature class.", ) - parser.add_argument( - "--search-distance", - default="200 Feet", - help="Search distance for candidate matches in Detect Feature Changes.", - ) - parser.add_argument( - "--match-fields", - help="Semicolon-delimited field mapping string used for matching.", - ) - parser.add_argument( - "--change-tolerance", - default="40", - help="Change tolerance used by Detect Feature Changes.", - ) - parser.add_argument( - "--compare-fields", - help=( - "Optional semicolon-delimited field mapping string for compare attributes. " - "When omitted, county defaults are used." - ), - ) - parser.add_argument( - "--dfc-output-name", - help="Output feature class name for Detect Feature Changes result.", - ) - parser.add_argument( - "--stats-table-name", - help="Output table name for Detect Feature Changes statistics.", - ) - parser.add_argument( - "--recents-name", help="Output feature class name for selected changed roads." - ) parser.add_argument( "--profiles", default=None, @@ -435,28 +389,13 @@ def main(argv=None, *, prog: str | None = None): ensure_detect_feature_changes_license() - match_fields = args.match_fields or profile.match_fields - compare_fields = ( - args.compare_fields - if args.compare_fields is not None - else profile.compare_fields - ) - dfc_output_name = args.dfc_output_name or profile.dfc_output_name - stats_table_name = args.stats_table_name or profile.stats_table_name - recents_name = args.recents_name or profile.recents_name - run_change_detection( profile_key=profile_key, profile=profile, update_features=update_features, base_features=base_features, - search_distance=args.search_distance, - match_fields=match_fields, - change_tolerance=args.change_tolerance, - compare_fields=compare_fields, - dfc_output_name=dfc_output_name, - stats_table_name=stats_table_name, - recents_name=recents_name, + match_fields=profile.match_fields, + compare_fields=profile.compare_fields, ) except RuntimeError as exc: log(str(exc)) diff --git a/cli/src/utrans/utilities.py b/cli/src/utrans/utilities.py index bf7245a..49edfd7 100644 --- a/cli/src/utrans/utilities.py +++ b/cli/src/utrans/utilities.py @@ -1,6 +1,19 @@ """Small shared utilities for UTRANS commands.""" +import os + +import arcpy + def log(message: str) -> None: """Write a command message to standard output.""" print(message) + + +def get_output_workspace(feature_class: str) -> str: + """Return the containing geodatabase for a feature class.""" + dirname = os.path.dirname(arcpy.Describe(feature_class).catalogPath) + desc = arcpy.Describe(dirname) + if hasattr(desc, "datasetType") and desc.datasetType == "FeatureDataset": + dirname = os.path.dirname(dirname) + return dirname diff --git a/cli/tests/test_cli.py b/cli/tests/test_cli.py index 8ffbc67..0158a46 100644 --- a/cli/tests/test_cli.py +++ b/cli/tests/test_cli.py @@ -51,6 +51,13 @@ def test_get_recent_edits_help(capsys): assert exit_info.value.code == 0 assert "utrans get-recent-edits" in captured.out assert "--update-features" in captured.out + assert "--search-distance" not in captured.out + assert "--match-fields" not in captured.out + assert "--change-tolerance" not in captured.out + assert "--compare-fields" not in captured.out + assert "--dfc-output-name" not in captured.out + assert "--stats-table-name" not in captured.out + assert "--recents-name" not in captured.out def test_etl_help(capsys): @@ -62,6 +69,7 @@ def test_etl_help(capsys): assert "utrans etl" in captured.out assert "--source-features" in captured.out assert "--county-boundaries" in captured.out + assert "--output-workspace" not in captured.out @pytest.mark.parametrize( diff --git a/cli/tests/test_detect_changes.py b/cli/tests/test_detect_changes.py index 78956cb..96d7de2 100644 --- a/cli/tests/test_detect_changes.py +++ b/cli/tests/test_detect_changes.py @@ -1,7 +1,11 @@ import os +from types import SimpleNamespace from unittest.mock import MagicMock, Mock +import pytest + from utrans import detect_changes +from utrans.utilities import get_output_workspace def _cursor(rows): @@ -33,6 +37,38 @@ def test_parser_does_not_require_county_field_configuration(): assert "test_output_name" not in actions assert "append_target" not in actions assert "utrans_features" in actions + assert "output_workspace" not in actions + + +@pytest.mark.parametrize( + ("feature_class", "descriptions", "expected"), + [ + ( + r"C:\data\roads.gdb\roads", + [ + SimpleNamespace(catalogPath=r"C:\data\roads.gdb\roads"), + SimpleNamespace(), + ], + r"C:\data\roads.gdb", + ), + ( + r"C:\data\roads.gdb\transportation\roads", + [ + SimpleNamespace(catalogPath=r"C:\data\roads.gdb\transportation\roads"), + SimpleNamespace(datasetType="FeatureDataset"), + ], + r"C:\data\roads.gdb", + ), + ], +) +def test_get_output_workspace_returns_containing_geodatabase( + monkeypatch, feature_class, descriptions, expected +): + monkeypatch.setattr( + detect_changes.arcpy, "Describe", Mock(side_effect=descriptions) + ) + + assert get_output_workspace(feature_class) == expected def test_add_dfc_fields_creates_legacy_fields_and_populates_metadata(monkeypatch): @@ -78,7 +114,12 @@ def test_run_detect_changes_uses_shared_filter_and_appends_to_utrans(monkeypatch monkeypatch.setattr(detect_changes.arcpy, "AlterAliasName", Mock()) monkeypatch.setattr(detect_changes.arcpy, "Exists", Mock(return_value=False)) - detect_changes.run_detect_changes("update", "base", "49035", "workspace") + monkeypatch.setattr( + detect_changes, + "get_output_workspace", + Mock(return_value="workspace"), + ) + detect_changes.run_detect_changes("update", "base", "49035") make_feature_layer.assert_any_call( "base", "detect_changes_base", "COUNTY_L = '49035' OR COUNTY_R = '49035'" diff --git a/cli/tests/test_etl_mappers.py b/cli/tests/test_etl_mappers.py index 8fe2a57..dfc2a3b 100644 --- a/cli/tests/test_etl_mappers.py +++ b/cli/tests/test_etl_mappers.py @@ -9,11 +9,7 @@ def test_value_mappings_normalizes_fields_and_source_values(): profile = CountyProfile( key="example", - values={ - "value_mappings": { - "oneway": {" One Direction ": "Y"}, - } - }, + values={"value_mappings": {"oneway": {" One Direction ": "Y"}}}, ) assert _value_mappings(profile) == {"ONEWAY": {"ONE DIRECTION": "Y"}} From 5321b92a42b803f57c18b53becf102cf731ddd57 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Wed, 26 Aug 2026 09:18:15 -0600 Subject: [PATCH 03/14] feat(cli): add a script for discovering value_mapping values --- cli/README.md | 39 ++ cli/scripts/county_datasets.csv | 28 + cli/scripts/discover_value_mappings.py | 404 +++++++++++++++ cli/scripts/reviewed-value-mappings.csv | 167 ++++++ cli/scripts/value-mapping-inventory.csv | 654 ++++++++++++++++++++++++ cli/scripts/value-mapping-summary.csv | 99 ++++ 6 files changed, 1391 insertions(+) create mode 100644 cli/scripts/county_datasets.csv create mode 100644 cli/scripts/discover_value_mappings.py create mode 100644 cli/scripts/reviewed-value-mappings.csv create mode 100644 cli/scripts/value-mapping-inventory.csv create mode 100644 cli/scripts/value-mapping-summary.csv diff --git a/cli/README.md b/cli/README.md index a75490f..61a8c05 100644 --- a/cli/README.md +++ b/cli/README.md @@ -70,3 +70,42 @@ utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon The command writes outputs to the geodatabase containing `--update-features`. It uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to the fixed UTRANS DFC. Run `utrans detect-changes --help` for the remaining options. + +### One-use value mapping discovery + +The repository includes a one-use ArcPy script for inventorying county values +that may need `value_mappings`. It uses the local manifest at +`cli/scripts/county_datasets.csv`; the manifest contains machine-specific paths +and should not be added to package configuration. + +Run this from the `utrans-tools` Conda environment with a UTRANS target feature +class whose fields have the production coded-value domains: + +```powershell +python cli/scripts/discover_value_mappings.py discover ` + --target-features "C:\path\to\UTRANS.gdb\Roads" +``` + +The script reads the manifest and profiles from `cli/scripts/` and +`cli/src/utrans/` automatically. It writes +`value-mapping-inventory.csv`, `value-mapping-summary.csv`, and +`reviewed-value-mappings.csv` to the folder where the command is run. The +inventory contains all distinct observed source values, counts, normalized +values, domain resolutions, and statuses. The review CSV contains only +unresolved, non-empty values and includes an `approved_target_value` column. +Enter a valid UTRANS domain code or description for values that should be +mapped; leave it blank for values that should not be mapped. Apply reviewed +mappings directly to `profiles.json`: + +```powershell +python cli/scripts/discover_value_mappings.py apply ` + --target-features "C:\path\to\UTRANS.gdb\Roads" +``` + +Apply mode reads `value-mapping-inventory.csv` and +`reviewed-value-mappings.csv` from the current folder. It applies all rows +marked `review` only when `approved_target_value` is filled in, and skips +approvals that resolve to the same normalized source value. Existing mappings +are preserved; conflicting mappings stop the operation before the file is +written. `value_mappings` should contain translations only, such as +`LANE` to `LN`; values already accepted by the target domain need no entry. diff --git a/cli/scripts/county_datasets.csv b/cli/scripts/county_datasets.csv new file mode 100644 index 0000000..0034df6 --- /dev/null +++ b/cli/scripts/county_datasets.csv @@ -0,0 +1,28 @@ +county,profile,source_features +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025 +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS +Cache,cache,C:\Mac\Home\Documents\working\utrans\county_obtained\Cache\CacheCo_20260824.gdb\CacheCountyRoads +Carbon,carbon,C:\Mac\Home\Documents\working\utrans\county_obtained\Carbon\Carbon20241031.gdb\Roads +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26 +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026 +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025 +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26 +Piute,piute,C:\Mac\Home\Documents\working\utrans\county_obtained\Piute\PiuteCo_20260414.gdb\Roads_2026_April +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21 +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511 +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads +Tooele,tooele,C:\Mac\Home\Documents\working\utrans\county_obtained\Tooele\TooeleCo_20260514.gdb\TCRoads +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline +Wasatch,wasatch,C:\Mac\Home\Documents\working\utrans\county_obtained\Wasatch\WasatchCounty20260604.gdb\WC_ROAD +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409 +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline diff --git a/cli/scripts/discover_value_mappings.py b/cli/scripts/discover_value_mappings.py new file mode 100644 index 0000000..5cb38da --- /dev/null +++ b/cli/scripts/discover_value_mappings.py @@ -0,0 +1,404 @@ +"""Discover county source values that need UTRANS value mappings. + +Run with ArcGIS Pro's Python environment. This is intentionally a one-use +script, not a package entry point. + +The ``discover`` mode reads a county manifest, inspects the source feature +classes, and writes an inventory CSV plus a processing-summary CSV. The +``apply`` mode reads the inventory and a reviewed copy of it, then merges +approved review mappings directly into the profiles JSON file. Values already +marked ``resolved`` need no value mapping and are ignored by ``apply``. + +Required input: + --target-features: A UTRANS feature class whose coded-value domains define + the valid destination values. + +Fixed repository inputs: + ``county_datasets.csv`` and ``../src/utrans/profiles.json`` are resolved + relative to this script. + +Current-working-directory files: + ``discover`` writes ``value-mapping-inventory.csv`` and + ``value-mapping-summary.csv`` and ``reviewed-value-mappings.csv``. + ``apply`` reads + ``reviewed-value-mappings.csv``. +""" + +from __future__ import annotations + +import argparse +import csv +import json +from collections import Counter +from pathlib import Path +from typing import Any + +import arcpy + +INVENTORY_FIELDS = ( + "county", + "profile", + "source_features", + "target_field", + "source_field", + "observed_value", + "normalized_value", + "count", + "resolved_target_value", + "status", +) +SUMMARY_FIELDS = ("county", "profile", "source_features", "status", "detail") +REVIEW_FIELDS = INVENTORY_FIELDS + ("approved_target_value",) +SCRIPT_DIRECTORY = Path(__file__).resolve().parent +DEFAULT_MANIFEST = SCRIPT_DIRECTORY / "county_datasets.csv" +DEFAULT_PROFILES = SCRIPT_DIRECTORY.parent / "src" / "utrans" / "profiles.json" + + +def parse_field_mappings(profile: dict[str, Any], county: str) -> dict[str, str]: + value = profile.get("field_mappings", "") + if not isinstance(value, str): + raise TypeError(f"Profile '{county}' field_mappings must be a string.") + mappings: dict[str, str] = {} + for item in value.split(";"): + item = item.strip() + if not item: + continue + if "=" not in item: + raise TypeError(f"Profile '{county}' has invalid mapping '{item}'.") + target, source = (part.strip() for part in item.split("=", 1)) + mappings[target.upper()] = source + return mappings + + +def target_domains(target_features: str) -> dict[str, dict[str, str]]: + target_description = arcpy.Describe(target_features) + workspace = Path(target_description.catalogPath).parent + workspace_description = arcpy.Describe(str(workspace)) + if getattr(workspace_description, "datasetType", None) == "FeatureDataset": + workspace = workspace.parent + + domains = {domain.name: domain for domain in arcpy.da.ListDomains(str(workspace))} + values: dict[str, dict[str, str]] = {} + for field in arcpy.ListFields(target_features): + if not field.domain or field.domain not in domains: + continue + accepted: dict[str, str] = {} + for code, description in domains[field.domain].codedValues.items(): + code_text = str(code).strip().upper() + accepted[code_text] = str(code) + accepted[str(description).strip().upper()] = str(code) + values[field.name.upper()] = accepted + return values + + +def field_names(feature_class: str) -> dict[str, str]: + return {field.name.upper(): field.name for field in arcpy.ListFields(feature_class)} + + +def observed_values( + feature_class: str, source_field: str +) -> dict[str, tuple[str, int]]: + counts: Counter[str] = Counter() + representatives: dict[str, str] = {} + with arcpy.da.SearchCursor(feature_class, [source_field]) as cursor: + for (value,) in cursor: + if value is None or not str(value).strip(): + continue + raw_value = str(value).strip() + normalized_value = raw_value.upper() + representatives.setdefault(normalized_value, raw_value) + counts[normalized_value] += 1 + return { + normalized_value: (representatives[normalized_value], count) + for normalized_value, count in counts.items() + } + + +def load_manifest(path: Path) -> list[dict[str, str]]: + with path.open(newline="", encoding="utf-8-sig") as manifest_file: + rows = list(csv.DictReader(manifest_file)) + required = {"county", "profile", "source_features"} + if not rows or not required <= set(rows[0]): + raise TypeError( + "Manifest must contain county, profile, and source_features columns." + ) + return [{key: value.strip() for key, value in row.items()} for row in rows] + + +def load_profiles(path: Path) -> dict[str, dict[str, Any]]: + with path.open(encoding="utf-8") as profiles_file: + profiles = json.load(profiles_file) + if not isinstance(profiles, dict): + raise TypeError("Profiles JSON must contain an object keyed by county.") + return profiles + + +def write_csv( + path: Path, fields: tuple[str, ...], rows: list[dict[str, object]] +) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with path.open("w", newline="", encoding="utf-8") as output_file: + writer = csv.DictWriter(output_file, fieldnames=fields) + writer.writeheader() + writer.writerows(rows) + + +def discover( + manifest_path: Path, + profiles_path: Path, + target_features: str, + inventory_path: Path, + summary_path: Path, + reviewed_path: Path, +) -> None: + profiles = load_profiles(profiles_path) + domains = target_domains(target_features) + inventory: list[dict[str, object]] = [] + summary: list[dict[str, str]] = [] + + for manifest_row in load_manifest(manifest_path): + county = manifest_row["county"] + profile_key = manifest_row["profile"] + source_features = manifest_row["source_features"] + if profile_key not in profiles: + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "missing_profile", + "detail": "Profile key was not found.", + } + ) + continue + if not arcpy.Exists(source_features): + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "missing_dataset", + "detail": "Feature class was not found.", + } + ) + continue + + try: + mappings = parse_field_mappings(profiles[profile_key], profile_key) + except (TypeError, ValueError) as exc: + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "invalid_profile", + "detail": str(exc), + } + ) + continue + source_names = field_names(source_features) + domain_mappings = [ + (target, source) for target, source in mappings.items() if target in domains + ] + if not domain_mappings: + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "no_domain_mappings", + "detail": "No mapped target fields have coded-value domains.", + } + ) + continue + + county_rows = 0 + for target, source in sorted(domain_mappings): + actual_source = source_names.get(source.upper()) + if actual_source is None: + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "missing_source_field", + "detail": f"{source} maps to {target}.", + } + ) + continue + counts = observed_values(source_features, actual_source) + if not counts: + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "no_observations", + "detail": f"{actual_source} maps to {target}.", + } + ) + for normalized_value, (observed_value, count) in sorted(counts.items()): + resolved = domains[target].get(normalized_value, "") + inventory.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "target_field": target, + "source_field": actual_source, + "observed_value": observed_value, + "normalized_value": normalized_value, + "count": count, + "resolved_target_value": resolved, + "status": "resolved" if resolved else "review", + } + ) + county_rows += 1 + summary.append( + { + "county": county, + "profile": profile_key, + "source_features": source_features, + "status": "discovered", + "detail": f"{county_rows} observed values.", + } + ) + + inventory.sort( + key=lambda row: ( + str(row["county"]), + str(row["target_field"]), + str(row["source_field"]), + str(row["normalized_value"]), + ) + ) + summary.sort(key=lambda row: row["county"]) + write_csv(inventory_path, INVENTORY_FIELDS, inventory) + write_csv(summary_path, SUMMARY_FIELDS, summary) + review_rows = [ + {**row, "approved_target_value": ""} + for row in inventory + if row["status"] == "review" + ] + write_csv(reviewed_path, REVIEW_FIELDS, review_rows) + print(f"Wrote {len(inventory)} inventory rows to {inventory_path}") + print(f"Wrote {len(summary)} summary rows to {summary_path}") + print(f"Wrote {len(review_rows)} rows for review to {reviewed_path}") + + +def apply_mappings( + profiles_path: Path, + inventory_path: Path, + reviewed_path: Path, + target_features: str, +) -> None: + profiles = load_profiles(profiles_path) + domains = target_domains(target_features) + inventory_rows: dict[tuple[str, str, str], dict[str, str]] = {} + with inventory_path.open(newline="", encoding="utf-8-sig") as inventory_file: + for row in csv.DictReader(inventory_file): + key = ( + row["profile"], + row["target_field"].strip().upper(), + row["normalized_value"].strip().upper(), + ) + inventory_rows[key] = row + + additions: dict[str, dict[str, dict[str, str]]] = {} + with reviewed_path.open(newline="", encoding="utf-8-sig") as reviewed_file: + for row in csv.DictReader(reviewed_file): + approved = row.get("approved_target_value", "").strip() + if not approved: + continue + profile = row["profile"] + target = row["target_field"].strip().upper() + source = row["normalized_value"].strip().upper() + inventory_row = inventory_rows.get((profile, target, source)) + if profile not in profiles or inventory_row is None: + raise ValueError( + f"Reviewed mapping is not present in inventory: {profile}/{target}/{source}" + ) + if inventory_row["status"] != "review": + raise ValueError( + f"Only review rows may have approval: {profile}/{target}/{source}" + ) + if target not in domains or domains[target].get(approved.upper()) is None: + raise ValueError( + f"Approved value '{approved}' is invalid for target field '{target}'." + ) + destination = domains[target][approved.upper()] + if source == destination.strip().upper(): + continue + pending = ( + additions.setdefault(profile, {}).setdefault(target, {}).get(source) + ) + if pending is not None and pending != destination: + raise ValueError( + f"Conflicting approvals for {profile}/{target}/{source}." + ) + additions[profile][target][source] = destination + + for profile, targets in additions.items(): + profile_mappings = profiles[profile].setdefault("value_mappings", {}) + for target, values in targets.items(): + target_mappings = profile_mappings.setdefault(target, {}) + for source, destination in values.items(): + existing = next( + ( + value + for key, value in target_mappings.items() + if str(key).strip().upper() == source + ), + None, + ) + if ( + existing is not None + and str(existing).strip().upper() != destination.upper() + ): + raise ValueError( + f"Conflicting mappings for {profile}/{target}/{source}." + ) + target_mappings[source] = destination + + profiles_path.write_text(json.dumps(profiles, indent=2) + "\n", encoding="utf-8") + print(f"Applied inventory mappings to {profiles_path}") + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "mode", + choices=("discover", "apply"), + help="Run discovery or apply reviewed mappings to profiles.json.", + ) + parser.add_argument( + "--target-features", + required=True, + help="UTRANS target feature class providing coded-value domains.", + ) + return parser + + +def main() -> None: + args = build_parser().parse_args() + working_directory = Path.cwd() + if args.mode == "discover": + discover( + DEFAULT_MANIFEST, + DEFAULT_PROFILES, + args.target_features, + working_directory / "value-mapping-inventory.csv", + working_directory / "value-mapping-summary.csv", + working_directory / "reviewed-value-mappings.csv", + ) + else: + apply_mappings( + DEFAULT_PROFILES, + working_directory / "value-mapping-inventory.csv", + working_directory / "reviewed-value-mappings.csv", + args.target_features, + ) + + +if __name__ == "__main__": + main() diff --git a/cli/scripts/reviewed-value-mappings.csv b/cli/scripts/reviewed-value-mappings.csv new file mode 100644 index 0000000..5dad806 --- /dev/null +++ b/cli/scripts/reviewed-value-mappings.csv @@ -0,0 +1,167 @@ +county,profile,source_features,target_field,source_field,observed_value,normalized_value,count,resolved_target_value,status,approved_target_value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,ATV,ATV,63,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F1,F1,3,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F2,F2,70,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,NT,NT,29,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,X,X,271,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,0,0,6662,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,100,100,778,,review,P +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,110,110,1,,review,P +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,115,115,99,,review,P +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,200,200,322,,review,I +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,210,210,48,,review,I +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,211,211,3,,review,I +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,213,213,29,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,223,223,5,,review,I +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,300,300,539,,review,N +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,310,310,47,,review,N +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,320,320,61,,review,N +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,355,355,9,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,400,400,6,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,430,430,1,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,450,450,30,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,999,999,9,,review,U +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,Cr,CR,1,,review, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,TR,TR,16,,review, +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,VERT_LEVEL,VERTLEVEL,0.0,0.0,11511,,review, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,0,0,510,,review, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Gravel,GRAVEL,1,,review,I +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,33,,review, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Maintain_Native,MAINTAIN_NATIVE,35,,review, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,42,,review,P-ASP +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,0,0,1492,,review, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,STATUS,S_STATUS,A,A,469,,review,ACTIVE +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Asphalt,ASPHALT,20945,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Concrete,CONCRETE,104,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Gravel,GRAVEL,5,,review,I +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cswy,CSWY,1,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pne,PNE,1,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Wy,WY,806,,review,WAY +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,EB,EB,287,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,NB,NB,648,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,SB,SB,621,,review, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,WB,WB,297,,review, +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,300,300,1,,review,N +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,GRAVEL,GRAVEL,2,,review,I +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,37,,review, +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,N,N,1,,review, +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,300,300,3,,review,N +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,320,320,1,,review,N +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,,,1,,review, +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,Maintained Native,MAINTAINED NATIVE,1,,review, +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,6178,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ap,AP,15,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,blm,BLM,23,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,co,CO,6,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,dwr,DWR,1,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,fs,FS,181,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ind,IND,203,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,pr,PR,407,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,rr,RR,7,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sj,SJ,2,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sp,SP,27,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,u,U,5,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,wld,WLD,1,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,100,100,1773,,review,P +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200,200,986,,review,I +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200.00,200.00,1,,review, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,300,300,20968,,review,N +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,0,0,239,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,100,100,3045,,review,P +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,200,200,2739,,review,I +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,300,300,2460,,review,N +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,999,999,4014,,review,U +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,17,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,.,.,1,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,c,C,1,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,DIR,DIR,1,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,LP,LP,6,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RDE,RDE,1,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,TR,TR,5,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,W,W,2,,review, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,WY,WY,9,,review,WAY +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,100,100,1016,,review,P +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,200,200,662,,review,I +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,300,300,3148,,review,N +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,999,999,3,,review,U +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,0,0,1,,review, +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,LP,LP,1,,review, +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,SST,SST,1,,review, +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,TR,TR,2,,review, +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,WY,WY,4,,review,WAY +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,0,0,57,,review, +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Collector,COLLECTOR,50,,review, +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Freeway,FREEWAY,28,,review, +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Highway,HIGHWAY,43,,review, +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Local,LOCAL,712,,review, +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Minor Arterial,MINOR ARTERIAL,90,,review, +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Ramp,RAMP,22,,review, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,0,0,2861,,review, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,100,100,7,,review,P +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,115,115,141,,review,P +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,20,20,1,,review, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,200,200,94,,review,I +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,210,210,234,,review,I +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,211,211,85,,review,I +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,221,221,19,,review,I +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,223,223,19,,review,I +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,300,300,413,,review,N +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,310,310,15,,review,N +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,320,320,78,,review,N +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,430,430,60,,review, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,440,440,2,,review, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,CR,CR,5,,review, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,SPEED_LMT,SPD_LMT,0,0,4020,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,ARIZONA,ARIZONA,11,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,B Road,B ROAD,1053,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,C Road,C ROAD,174,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Colorado,COLORADO,9,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,D Road,D ROAD,5553,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Federal,FEDERAL,27,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,GRAND,GRAND,13,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,NDOT,NDOT,228,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private,PRIVATE,1,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private Road,PRIVATE ROAD,3,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Reservation,RESERVATION,1635,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,State Highway,STATE HIGHWAY,12,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,UDOT,UDOT,3,,review, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,US Highway,US HIGHWAY,16,,review, +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,BIKE,BIKE,30,,review, +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,C,C,1,,review, +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,9008,,review, +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CORR,CORR,35,,review, +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,OFF,OFF,80,,review, +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ON,ON,85,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,?,?,4,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TBD,TBD,16,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TR,TR,2,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TRL,TRL,18,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,0,0,6,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,100,100,19,,review,P +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,115,115,16,,review,P +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,200,200,34,,review,I +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,91409 SEGMENT RANGE COR,91409 SEGMENT RANGE COR,2,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,GRAVEL,GRAVEL,8,,review,I +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,166,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Crushed_agg,IMPROV_CRUSHED_AGG,12,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_gravel,IMPROV_GRAVEL,5,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Mag_chlorid,IMPROV_MAG_CHLORID,1,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Oiled,IMPROV_OILED,16,,review, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,136,,review,P-ASP +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,c,C,1,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CRT,CRT,1,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RR,RR,108,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,0.0,0.0,195,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,1.0,1.0,1,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,10.0,10.0,1,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,15.0,15.0,7,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,19.0,19.0,4,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,25.0,25.0,12513,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,30.0,30.0,493,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,35.0,35.0,911,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,40.0,40.0,476,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,45.0,45.0,116,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,50.0,50.0,261,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,55.0,55.0,164,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,60.0,60.0,4,,review, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,65.0,65.0,15,,review, diff --git a/cli/scripts/value-mapping-inventory.csv b/cli/scripts/value-mapping-inventory.csv new file mode 100644 index 0000000..99e1c98 --- /dev/null +++ b/cli/scripts/value-mapping-inventory.csv @@ -0,0 +1,654 @@ +county,profile,source_features,target_field,source_field,observed_value,normalized_value,count,resolved_target_value,status +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,A,A,239,A,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,ATV,ATV,63,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,B,B,688,B,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,C,C,702,C,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,D,D,914,D,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F,F,5,F,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F1,F1,3,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F2,F2,70,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,NT,NT,29,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,X,X,271,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,0,0,6662,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,100,100,778,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,110,110,1,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,115,115,99,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,200,200,322,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,210,210,48,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,211,211,3,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,213,213,29,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,223,223,5,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,300,300,539,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,310,310,47,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,320,320,61,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,355,355,9,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,400,400,6,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,430,430,1,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,450,450,30,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,999,999,9,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTDIR,SUFDIR,E,E,144,E,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTDIR,SUFDIR,N,N,212,N,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTDIR,SUFDIR,S,S,166,S,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTDIR,SUFDIR,W,W,250,W,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,AVE,AVE,17,AVE,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,Cir,CIR,10,CIR,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,Cr,CR,1,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,CT,CT,2,CT,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,DR,DR,68,DR,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,FWY,FWY,50,FWY,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,HWY,HWY,81,HWY,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,LN,LN,82,LN,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,LOOP,LOOP,3,LOOP,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,PL,PL,2,PL,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,RAMP,RAMP,13,RAMP,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,RD,RD,308,RD,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,ST,ST,511,ST,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,TR,TR,16,,review +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,TRL,TRL,6,TRL,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,Way,WAY,9,WAY,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,VERT_LEVEL,VERTLEVEL,1,1,3,1,resolved +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,VERT_LEVEL,VERTLEVEL,2,2,15,2,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,DOT_CLASS,CLASS,A,A,929,A,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,DOT_CLASS,CLASS,B,B,1623,B,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,DOT_CLASS,CLASS,C,C,5,C,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,DOT_CLASS,CLASS,D,D,593,D,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTDIR,SUF_DIR,E,E,310,E,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTDIR,SUF_DIR,N,N,1288,N,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTDIR,SUF_DIR,S,S,675,S,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTDIR,SUF_DIR,W,W,1594,W,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,AVE,AVE,40,AVE,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,BLVD,BLVD,24,BLVD,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,CIR,CIR,34,CIR,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,CT,CT,5,CT,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,DR,DR,294,DR,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,FWY,FWY,201,FWY,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,LANE,LANE,1,LN,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,LN,LN,45,LN,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,LOOP,LOOP,34,LOOP,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,PL,PL,20,PL,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,RAMP,RAMP,143,RAMP,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,RD,RD,1325,RD,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,ST,ST,325,ST,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,TRL,TRL,4,TRL,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,POSTTYPE,S_TYPE,WAY,WAY,38,WAY,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,PREDIR,PRE_DIR,E,E,503,E,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,PREDIR,PRE_DIR,N,N,1762,N,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,PREDIR,PRE_DIR,S,S,962,S,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,PREDIR,PRE_DIR,W,W,2162,W,resolved +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,VERT_LEVEL,VERTLEVEL,0.0,0.0,11511,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,A2_POSTTYPE,ALIAS2_TYP,RD,RD,15,RD,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_CLASS,CLASS,A,A,7,A,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_CLASS,CLASS,B,B,298,B,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_CLASS,CLASS,C,C,69,C,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_CLASS,CLASS,D,D,220,D,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,0,0,510,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Gravel,GRAVEL,1,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Improved,IMPROVED,393,I,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,33,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Maintain_Native,MAINTAIN_NATIVE,35,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Native,NATIVE,138,N,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Paved,PAVED,132,P,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,42,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,ONEWAY,ONE_WAY,0,0,1665,0,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,AVE,AVE,15,AVE,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,BLVD,BLVD,8,BLVD,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,CIR,CIR,10,CIR,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,DR,DR,43,DR,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,HWY,HWY,77,HWY,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,LANE,LANE,1,LN,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,LN,LN,96,LN,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,LOOP,LOOP,24,LOOP,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,PKWY,PKWY,2,PKWY,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,RD,RD,662,RD,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,ST,ST,38,ST,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,TRL,TRL,3,TRL,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,POSTTYPE,S_TYPE,WAY,WAY,28,WAY,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,PREDIR,PRE_DIR,E,E,178,E,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,PREDIR,PRE_DIR,N,N,154,N,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,PREDIR,PRE_DIR,S,S,166,S,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,PREDIR,PRE_DIR,W,W,135,W,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,0,0,1492,,review +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,10,10,15,10,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,15,15,14,15,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,20,20,14,20,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,25,25,54,25,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,30,30,9,30,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,35,35,8,35,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,40,40,15,40,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,45,45,2,45,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,5,5,6,5,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,55,55,36,55,resolved +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,STATUS,S_STATUS,A,A,469,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Asphalt,ASPHALT,20945,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Concrete,CONCRETE,104,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Dirt,DIRT,85,D,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Gravel,GRAVEL,5,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Unknown,UNKNOWN,46,U,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTDIR,PostDirection,E,E,1770,E,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTDIR,PostDirection,N,N,2928,N,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTDIR,PostDirection,S,S,2571,S,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTDIR,PostDirection,W,W,3745,W,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Ave,AVE,267,AVE,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Blvd,BLVD,185,BLVD,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Bnd,BND,4,BND,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cir,CIR,586,CIR,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cor,COR,3,COR,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Crk,CRK,1,CRK,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cswy,CSWY,1,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Ct,CT,226,CT,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cv,CV,26,CV,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Dr,DR,2881,DR,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Grv,GRV,2,GRV,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Hl,HL,2,HL,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Holw,HOLW,7,HOLW,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Hwy,HWY,94,HWY,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Ln,LN,1172,LN,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Lndg,LNDG,1,LNDG,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Loop,LOOP,52,LOOP,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Mnr,MNR,1,MNR,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Park,PARK,2,PARK,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pass,PASS,3,PASS,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pkwy,PKWY,125,PKWY,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pl,PL,38,PL,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pne,PNE,1,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pt,PT,2,PT,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Rd,RD,1025,RD,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Rte,RTE,2,RTE,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Run,RUN,12,RUN,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,St,ST,1161,ST,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Trce,TRCE,1,TRCE,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Trl,TRL,1,TRL,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Wy,WY,806,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Xing,XING,6,XING,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,E,E,3682,E,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,EB,EB,287,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,N,N,5301,N,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,NB,NB,648,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,S,S,4807,S,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,SB,SB,621,,review +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,W,W,5814,W,resolved +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,WB,WB,297,,review +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,A1_POSTTYPE,ALIAS1TYPE,AVE,AVE,2,AVE,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,A1_POSTTYPE,ALIAS1TYPE,HWY,HWY,43,HWY,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,A1_POSTTYPE,ALIAS1TYPE,LN,LN,11,LN,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,A1_POSTTYPE,ALIAS1TYPE,RD,RD,24,RD,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,A1_POSTTYPE,ALIAS1TYPE,ST,ST,6,ST,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_CLASS,CLASS,A,A,15,A,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_CLASS,CLASS,B,B,3,B,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,300,300,1,,review +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,DIRT,DIRT,1677,D,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,GRAVEL,GRAVEL,2,,review +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,IMPROVED,IMPROVED,1103,I,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,37,,review +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,PAVED,PAVED,1544,P,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTDIR,SUFDIR,E,E,202,E,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTDIR,SUFDIR,N,N,589,N,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTDIR,SUFDIR,S,S,523,S,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTDIR,SUFDIR,W,W,857,W,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,AVE,AVE,11,AVE,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,BLVD,BLVD,2,BLVD,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,CIR,CIR,24,CIR,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,CT,CT,3,CT,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,CV,CV,16,CV,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,DR,DR,79,DR,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,HWY,HWY,28,HWY,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,LN,LN,30,LN,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,LOOP,LOOP,12,LOOP,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,N,N,1,,review +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,RD,RD,525,RD,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,SQ,SQ,1,SQ,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,ST,ST,95,ST,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,TRL,TRL,1,TRL,resolved +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,WAY,WAY,11,WAY,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,A1_POSTTYPE,ALIAS1_TYP,LN,LN,1,LN,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,A1_POSTTYPE,ALIAS1_TYP,RD,RD,12,RD,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,A1_POSTTYPE,ALIAS1_TYP,TRL,TRL,330,TRL,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_CLASS,CLASS,A,A,623,A,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_CLASS,CLASS,B,B,1387,B,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_CLASS,CLASS,C,C,1298,C,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_CLASS,CLASS,D,D,7217,D,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_CLASS,CLASS,P,P,9,P,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,300,300,3,,review +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,320,320,1,,review +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,,,1,,review +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,Maintained Native,MAINTAINED NATIVE,1,,review +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,Paved Asphalt,PAVED ASPHALT,1,P-ASP,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,ONEWAY,ONE_WAY,0,0,9622,0,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTDIR,SUF_DIR,E,E,309,E,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTDIR,SUF_DIR,N,N,360,N,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTDIR,SUF_DIR,S,S,258,S,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTDIR,SUF_DIR,W,W,262,W,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,AVE,AVE,85,AVE,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,BLVD,BLVD,21,BLVD,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,CT,CT,10,CT,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,DR,DR,36,DR,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,LN,LN,83,LN,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,LOOP,LOOP,1,LOOP,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,PKWY,PKWY,11,PKWY,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,RD,RD,723,RD,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,SPUR,SPUR,8,SPUR,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,ST,ST,410,ST,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,TRL,TRL,502,TRL,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,POSTTYPE,S_TYPE,WAY,WAY,2,WAY,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,PREDIR,PRE_DIR,E,E,920,E,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,PREDIR,PRE_DIR,N,N,940,N,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,PREDIR,PRE_DIR,S,S,742,S,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,PREDIR,PRE_DIR,W,W,795,W,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,6178,,review +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,15,15,1,15,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,20,20,6,20,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,25,25,1502,25,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,30,30,727,30,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,35,35,267,35,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,40,40,140,40,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,45,45,188,45,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,50,50,133,50,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,55,55,200,55,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,65,65,199,65,resolved +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,75,75,89,75,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,AVE,AVE,8,AVE,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,BLVD,BLVD,4,BLVD,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,COR,COR,1,COR,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,DR,DR,10,DR,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,LN,LN,9,LN,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,RAMP,RAMP,39,RAMP,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,RD,RD,60,RD,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,RTE,RTE,1,RTE,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,ST,ST,51,ST,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A1_POSTTYPE,ALIAS1TYPE,TRL,TRL,2,TRL,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A2_POSTTYPE,ALIAS2TYPE,RAMP,RAMP,8,RAMP,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A2_POSTTYPE,ALIAS2TYPE,RD,RD,65,RD,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,A2_POSTTYPE,ALIAS2TYPE,WAY,WAY,4,WAY,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,AN_POSTDIR,ACSSUF,E,E,14,E,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,AN_POSTDIR,ACSSUF,N,N,8,N,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,a,A,416,A,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ap,AP,15,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,b,B,4457,B,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,blm,BLM,23,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,co,CO,6,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,d,D,20852,D,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,dwr,DWR,1,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,fs,FS,181,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ind,IND,203,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,pr,PR,407,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,rr,RR,7,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sj,SJ,2,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sp,SP,27,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,u,U,5,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,wld,WLD,1,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,100,100,1773,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200,200,986,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200.00,200.00,1,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,300,300,20968,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTDIR,SUFDIR,E,E,50,E,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTDIR,SUFDIR,N,N,55,N,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTDIR,SUFDIR,S,S,39,S,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTDIR,SUFDIR,W,W,49,W,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,AVE,AVE,85,AVE,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,BLVD,BLVD,20,BLVD,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,CIR,CIR,61,CIR,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,CT,CT,43,CT,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,DR,DR,331,DR,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,FWY,FWY,50,FWY,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,HTS,HTS,7,HTS,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,HWY,HWY,2,HWY,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,LN,LN,401,LN,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,LOOP,LOOP,36,LOOP,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,PKWY,PKWY,10,PKWY,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,PL,PL,7,PL,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,RAMP,RAMP,55,RAMP,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,RD,RD,910,RD,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,RNCH,RNCH,31,RNCH,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,RUN,RUN,1,RUN,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,ST,ST,80,ST,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,TER,TER,5,TER,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,TRL,TRL,37,TRL,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,POSTTYPE,STREETTYPE,WAY,WAY,18,WAY,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,0,0,239,,review +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,10,10,86,10,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,15,15,4,15,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,20,20,125,20,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,25,25,26466,25,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,30,30,108,30,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,35,35,17,35,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,40,40,72,40,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,45,45,477,45,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,5,5,5,5,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,55,55,300,55,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,65,65,135,65,resolved +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,75,75,50,75,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_CLASS,CLASS,A,A,1,A,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_CLASS,CLASS,B,B,14,B,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_CLASS,CLASS,C,C,1,C,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,100,100,3045,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,200,200,2739,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,300,300,2460,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,999,999,4014,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,DIRT,DIRT,215,D,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,IMPROVED,IMPROVED,48,I,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,17,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,PAVED,PAVED,64,P,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,.,.,1,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,E,E,555,E,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,N,N,1736,N,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,S,S,668,S,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,W,W,1793,W,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,AVE,AVE,46,AVE,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,BLVD,BLVD,42,BLVD,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,c,C,1,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,CIR,CIR,158,CIR,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,CT,CT,27,CT,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,DIR,DIR,1,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,DR,DR,725,DR,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,FWY,FWY,169,FWY,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,HWY,HWY,121,HWY,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,JCT,JCT,6,JCT,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,LN,LN,235,LN,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,LOOP,LOOP,373,LOOP,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,LP,LP,6,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,PKWY,PKWY,14,PKWY,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,PL,PL,9,PL,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RAMP,RAMP,78,RAMP,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RD,RD,1244,RD,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RDE,RDE,1,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RNCH,RNCH,1,RNCH,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,ROW,ROW,4,ROW,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RTE,RTE,13,RTE,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,SPUR,SPUR,1,SPUR,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,ST,ST,301,ST,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,TER,TER,2,TER,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,TR,TR,5,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,TRL,TRL,78,TRL,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,W,W,2,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,WAY,WAY,71,WAY,resolved +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,WY,WY,9,,review +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,VERT_LEVEL,VERTLEVEL,1,1,2,1,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,A1_POSTTYPE,ALIAS1TYPE,DR,DR,5,DR,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,A1_POSTTYPE,ALIAS1TYPE,LN,LN,2,LN,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,A1_POSTTYPE,ALIAS1TYPE,RD,RD,93,RD,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,100,100,1016,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,200,200,662,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,300,300,3148,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,999,999,3,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTDIR,SUFDIR,E,E,63,E,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTDIR,SUFDIR,N,N,68,N,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTDIR,SUFDIR,S,S,72,S,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTDIR,SUFDIR,W,W,59,W,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,0,0,1,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,ALY,ALY,6,ALY,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,AVE,AVE,78,AVE,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,BLVD,BLVD,19,BLVD,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,CIR,CIR,148,CIR,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,COR,COR,2,COR,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,CT,CT,18,CT,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,CV,CV,14,CV,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,DR,DR,621,DR,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,HTS,HTS,1,HTS,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,LN,LN,168,LN,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,LOOP,LOOP,35,LOOP,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,LP,LP,1,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,PKWY,PKWY,6,PKWY,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,PL,PL,7,PL,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,PT,PT,69,PT,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,RD,RD,1280,RD,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,SST,SST,1,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,ST,ST,168,ST,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,TR,TR,2,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,TRL,TRL,79,TRL,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,VW,VW,1,VW,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,WAY,WAY,60,WAY,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,WY,WY,4,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,0,0,57,,review +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,10,10,8,10,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,25,25,7338,25,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,30,30,3,30,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,40,40,101,40,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,45,45,300,45,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,5,5,3,5,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,50,50,22,50,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,55,55,132,55,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,60,60,3,60,resolved +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,65,65,66,65,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A1_POSTTYPE,ALIAS1TYPE,DR,DR,2,DR,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A1_POSTTYPE,ALIAS1TYPE,LN,LN,6,LN,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A1_POSTTYPE,ALIAS1TYPE,RAMP,RAMP,40,RAMP,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A1_POSTTYPE,ALIAS1TYPE,RD,RD,100,RD,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A1_POSTTYPE,ALIAS1TYPE,ST,ST,3,ST,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A2_POSTTYPE,ALIAS2TYPE,LN,LN,1,LN,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A2_POSTTYPE,ALIAS2TYPE,RAMP,RAMP,4,RAMP,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A2_POSTTYPE,ALIAS2TYPE,RD,RD,16,RD,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,A2_POSTTYPE,ALIAS2TYPE,ST,ST,1,ST,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTDIR,SUFDIR,E,E,249,E,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTDIR,SUFDIR,N,N,450,N,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTDIR,SUFDIR,S,S,381,S,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTDIR,SUFDIR,W,W,560,W,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,AVE,AVE,18,AVE,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,BLVD,BLVD,5,BLVD,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,CIR,CIR,1,CIR,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,DR,DR,56,DR,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,FWY,FWY,170,FWY,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,HWY,HWY,14,HWY,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,LN,LN,61,LN,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,RAMP,RAMP,49,RAMP,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,RD,RD,12646,RD,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,ST,ST,1820,ST,resolved +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,POSTTYPE,STREETTYPE,WAY,WAY,9,WAY,resolved +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Collector,COLLECTOR,50,,review +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Freeway,FREEWAY,28,,review +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Highway,HIGHWAY,43,,review +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Local,LOCAL,712,,review +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Minor Arterial,MINOR ARTERIAL,90,,review +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Ramp,RAMP,22,,review +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,VERT_LEVEL,roadlevel,0,0,946,0,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,A1_POSTTYPE,ALIAS1_TYP,DR,DR,5,DR,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,A1_POSTTYPE,ALIAS1_TYP,LN,LN,1,LN,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,A1_POSTTYPE,ALIAS1_TYP,PKWY,PKWY,2,PKWY,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,A1_POSTTYPE,ALIAS1_TYP,RD,RD,9,RD,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,A1_POSTTYPE,ALIAS1_TYP,ST,ST,11,ST,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,A2_POSTTYPE,ALIAS2_TYP,HWY,HWY,2,HWY,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,0,0,2861,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,100,100,7,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,115,115,141,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,20,20,1,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,200,200,94,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,210,210,234,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,211,211,85,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,221,221,19,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,223,223,19,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,300,300,413,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,310,310,15,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,320,320,78,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,430,430,60,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,440,440,2,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,ONEWAY,ONE_WAY,0,0,4029,0,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,AVE,AVE,1,AVE,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,BLVD,BLVD,14,BLVD,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,CIR,CIR,119,CIR,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,CR,CR,5,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,CT,CT,3,CT,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,DR,DR,170,DR,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,LN,LN,74,LN,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,LOOP,LOOP,19,LOOP,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,PKWY,PKWY,13,PKWY,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,PL,PL,2,PL,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,RD,RD,171,RD,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,RUN,RUN,6,RUN,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,ST,ST,89,ST,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,WAY,WAY,34,WAY,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,PREDIR,PRE_DIR,E,E,156,E,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,PREDIR,PRE_DIR,N,N,152,N,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,PREDIR,PRE_DIR,S,S,357,S,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,PREDIR,PRE_DIR,W,W,220,W,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,SPEED_LMT,SPD_LMT,0,0,4020,,review +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,SPEED_LMT,SPD_LMT,25,25,8,25,resolved +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,SPEED_LMT,SPD_LMT,40,40,1,40,resolved +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,ARIZONA,ARIZONA,11,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,B Road,B ROAD,1053,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,C Road,C ROAD,174,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Colorado,COLORADO,9,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,D Road,D ROAD,5553,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Federal,FEDERAL,27,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,GRAND,GRAND,13,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,NDOT,NDOT,228,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private,PRIVATE,1,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private Road,PRIVATE ROAD,3,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Reservation,RESERVATION,1635,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,State Highway,STATE HIGHWAY,12,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,UDOT,UDOT,3,,review +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,US Highway,US HIGHWAY,16,,review +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTDIR,SUR_DIR,E,E,787,E,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTDIR,SUR_DIR,N,N,934,N,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTDIR,SUR_DIR,S,S,813,S,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTDIR,SUR_DIR,W,W,864,W,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,AVE,AVE,22,AVE,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,BIKE,BIKE,30,,review +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,BLVD,BLVD,29,BLVD,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,CIR,CIR,38,CIR,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,CT,CT,5,CT,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,DR,DR,474,DR,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,FWY,FWY,15,FWY,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,HWY,HWY,85,HWY,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,LN,LN,228,LN,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,LOOP,LOOP,35,LOOP,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,PL,PL,1,PL,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,RD,RD,2165,RD,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,ST,ST,576,ST,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,TRL,TRL,4,TRL,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,WAY,WAY,62,WAY,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,C,C,1,,review +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,E,E,1371,E,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,N,N,2298,N,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,S,S,1952,S,resolved +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,W,W,1662,W,resolved +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,9008,,review +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,SPEED_LMT,SPD_LMT,25,25,9,25,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,AVE,AVE,3,AVE,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,BLVD,BLVD,6,BLVD,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,CIR,CIR,4,CIR,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,DR,DR,25,DR,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,HWY,HWY,1346,HWY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,LN,LN,4,LN,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,PKWY,PKWY,5,PKWY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,RD,RD,54,RD,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,ST,ST,6895,ST,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,A1_POSTTYPE,ALTROADTYPE,WAY,WAY,34,WAY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTDIR,ROADPOSTDIR,E,E,8,E,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTDIR,ROADPOSTDIR,N,N,11,N,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTDIR,ROADPOSTDIR,S,S,8,S,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTDIR,ROADPOSTDIR,W,W,14,W,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ALY,ALY,29,ALY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,AVE,AVE,773,AVE,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,BLVD,BLVD,799,BLVD,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,BND,BND,5,BND,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CIR,CIR,1312,CIR,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CORR,CORR,35,,review +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CT,CT,697,CT,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CV,CV,147,CV,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CYN,CYN,4,CYN,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,DR,DR,6077,DR,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,HL,HL,7,HL,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,HOLW,HOLW,8,HOLW,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,HTS,HTS,1,HTS,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,HWY,HWY,344,HWY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,LN,LN,2421,LN,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,LNDG,LNDG,4,LNDG,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,LOOP,LOOP,124,LOOP,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,OFF,OFF,80,,review +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ON,ON,85,,review +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,PASS,PASS,2,PASS,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,PKWY,PKWY,603,PKWY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,PL,PL,154,PL,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,RD,RD,2402,RD,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,RDG,RDG,26,RDG,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ROW,ROW,13,ROW,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,RUN,RUN,27,RUN,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ST,ST,25191,ST,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,TER,TER,10,TER,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,TRL,TRL,65,TRL,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,VW,VW,12,VW,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,WAY,WAY,1708,WAY,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,XING,XING,51,XING,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,PREDIR,ROADPREDIR,E,E,9953,E,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,PREDIR,ROADPREDIR,N,N,13539,N,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,PREDIR,ROADPREDIR,S,S,8685,S,resolved +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,PREDIR,ROADPREDIR,W,W,11192,W,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,?,?,4,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,A,A,389,A,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,B,B,575,B,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,C,C,381,C,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,D,D,968,D,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,F,F,32,F,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,P,P,604,P,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TBD,TBD,16,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TR,TR,2,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TRL,TRL,18,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,0,0,6,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,100,100,19,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,115,115,16,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,200,200,34,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,91409 SEGMENT RANGE COR,91409 SEGMENT RANGE COR,2,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,GRAVEL,GRAVEL,8,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improved,IMPROVED,4,I,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,166,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Crushed_agg,IMPROV_CRUSHED_AGG,12,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_gravel,IMPROV_GRAVEL,5,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Mag_chlorid,IMPROV_MAG_CHLORID,1,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Oiled,IMPROV_OILED,16,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,NATIVE,NATIVE,190,N,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,PAVED,PAVED,220,P,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,136,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,ONEWAY,ONE_WAY,0,0,4734,0,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,c,C,1,,review +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,E,E,664,E,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,N,N,477,N,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,S,S,750,S,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,W,W,420,W,resolved +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,VERT_LEVEL,VERTLEVEL,0,0,4734,0,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTDIR,SUFDIR,E,E,2177,E,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTDIR,SUFDIR,N,N,2386,N,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTDIR,SUFDIR,S,S,3286,S,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTDIR,SUFDIR,W,W,3641,W,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,AVE,AVE,1238,AVE,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,BLVD,BLVD,272,BLVD,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CIR,CIR,141,CIR,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CRT,CRT,1,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CT,CT,100,CT,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CV,CV,12,CV,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CYN,CYN,32,CYN,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,DR,DR,1244,DR,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,FWY,FWY,46,FWY,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,HOLW,HOLW,6,HOLW,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,HWY,HWY,109,HWY,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,LN,LN,288,LN,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,LOOP,LOOP,2,LOOP,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,PATH,PATH,1,PATH,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,PKWY,PKWY,50,PKWY,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,PL,PL,10,PL,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,PT,PT,12,PT,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RAMP,RAMP,60,RAMP,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RD,RD,582,RD,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RDG,RDG,4,RDG,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,ROW,ROW,2,ROW,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RR,RR,108,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,ST,ST,10438,ST,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,TRL,TRL,12,TRL,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,WAY,WAY,214,WAY,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,XING,XING,3,XING,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,PREDIR,PREDIR,E,E,2115,E,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,PREDIR,PREDIR,N,N,2699,N,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,PREDIR,PREDIR,S,S,3464,S,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,PREDIR,PREDIR,W,W,3844,W,resolved +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,0.0,0.0,195,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,1.0,1.0,1,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,10.0,10.0,1,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,15.0,15.0,7,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,19.0,19.0,4,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,25.0,25.0,12513,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,30.0,30.0,493,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,35.0,35.0,911,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,40.0,40.0,476,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,45.0,45.0,116,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,50.0,50.0,261,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,55.0,55.0,164,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,60.0,60.0,4,,review +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,65.0,65.0,15,,review diff --git a/cli/scripts/value-mapping-summary.csv b/cli/scripts/value-mapping-summary.csv new file mode 100644 index 0000000..a35fc75 --- /dev/null +++ b/cli/scripts/value-mapping-summary.csv @@ -0,0 +1,99 @@ +county,profile,source_features,status,detail +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,missing_source_field,STATUS_ maps to STATUS. +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,discovered,49 observed values. +BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,discovered,28 observed values. +Cache,cache,C:\Mac\Home\Documents\working\utrans\county_obtained\Cache\CacheCo_20260824.gdb\CacheCountyRoads,no_domain_mappings,No mapped target fields have coded-value domains. +Carbon,carbon,C:\Mac\Home\Documents\working\utrans\county_obtained\Carbon\Carbon20241031.gdb\Roads,missing_source_field,POSTDIR_ maps to POSTDIR. +Carbon,carbon,C:\Mac\Home\Documents\working\utrans\county_obtained\Carbon\Carbon20241031.gdb\Roads,missing_source_field,POSTTYPE_ maps to POSTTYPE. +Carbon,carbon,C:\Mac\Home\Documents\working\utrans\county_obtained\Carbon\Carbon20241031.gdb\Roads,missing_source_field,PREDIR_ maps to PREDIR. +Carbon,carbon,C:\Mac\Home\Documents\working\utrans\county_obtained\Carbon\Carbon20241031.gdb\Roads,discovered,0 observed values. +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,discovered,43 observed values. +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,discovered,49 observed values. +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,no_observations,ALIAS2TYPE maps to A2_POSTTYPE. +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,missing_source_field,ONEWAY_ maps to ONEWAY. +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,missing_source_field,PREDIR_ maps to PREDIR. +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,missing_source_field,STATUS_ maps to STATUS. +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,no_observations,VERTLEVEL maps to VERT_LEVEL. +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,discovered,32 observed values. +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,no_observations,ALIAS2_TYP maps to A2_POSTTYPE. +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,missing_source_field,STATUS_ maps to STATUS. +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,discovered,46 observed values. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,A1_POSTTYPE_ maps to A1_POSTTYPE. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,A2_POSTTYPE_ maps to A2_POSTTYPE. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,CARTOCODE_ maps to CARTOCODE. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,DOT_CLASS_ maps to DOT_CLASS. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,DOT_SRFTYP_ maps to DOT_SRFTYP. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,ONEWAY_ maps to ONEWAY. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,POSTDIR_ maps to POSTDIR. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,POSTTYPE_ maps to POSTTYPE. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,PREDIR_ maps to PREDIR. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,SPEED_LMT_ maps to SPEED_LMT. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,missing_source_field,STATUS_ maps to STATUS. +Garfield,garfield,C:\Mac\Home\Documents\working\utrans\county_obtained\Garfield\Garfield20260427.gdb\Garfield_Streets_Roads,discovered,0 observed values. +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,missing_source_field,CARTOCODE_ maps to CARTOCODE. +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,missing_source_field,ONEWAY_ maps to ONEWAY. +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,missing_source_field,PREDIR_ maps to PREDIR. +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,missing_source_field,STATUS_ maps to STATUS. +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,discovered,71 observed values. +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,missing_source_field,ONEWAY_ maps to ONEWAY. +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,missing_source_field,PREDIR_ maps to PREDIR. +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,missing_source_field,STATUS_ maps to STATUS. +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,discovered,46 observed values. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,no_observations,ALIAS2TYPE maps to A2_POSTTYPE. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,missing_source_field,CARTOCODE_ maps to CARTOCODE. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,no_observations,CLASS maps to DOT_CLASS. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,missing_source_field,ONEWAY_ maps to ONEWAY. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,missing_source_field,PREDIR_ maps to PREDIR. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,missing_source_field,STATUS_ maps to STATUS. +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,discovered,46 observed values. +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,missing_source_field,CARTOCODE_ maps to CARTOCODE. +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,missing_source_field,PREDIR_ maps to PREDIR. +Millard,millard,C:\Mac\Home\Documents\working\utrans\county_obtained\Millard\Millard_20251217.gdb\Millard_Roads_Dec_2025,discovered,24 observed values. +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,no_observations,onewaydir maps to ONEWAY. +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,discovered,7 observed values. +Piute,piute,C:\Mac\Home\Documents\working\utrans\county_obtained\Piute\PiuteCo_20260414.gdb\Roads_2026_April,missing_source_field,POSTDIR_ maps to POSTDIR. +Piute,piute,C:\Mac\Home\Documents\working\utrans\county_obtained\Piute\PiuteCo_20260414.gdb\Roads_2026_April,missing_source_field,POSTTYPE_ maps to POSTTYPE. +Piute,piute,C:\Mac\Home\Documents\working\utrans\county_obtained\Piute\PiuteCo_20260414.gdb\Roads_2026_April,missing_source_field,PREDIR_ maps to PREDIR. +Piute,piute,C:\Mac\Home\Documents\working\utrans\county_obtained\Piute\PiuteCo_20260414.gdb\Roads_2026_April,discovered,0 observed values. +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,discovered,42 observed values. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,missing_source_field,DOT_SRFTYP_ maps to DOT_SRFTYP. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,missing_source_field,ONEWAY_ maps to ONEWAY. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,missing_source_field,POSTDIR_ maps to POSTDIR. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,missing_source_field,POSTTYPE_ maps to POSTTYPE. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,missing_source_field,PREDIR_ maps to PREDIR. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,missing_source_field,STATUS_ maps to STATUS. +SaltLake,saltlake,C:\Mac\Home\Documents\working\utrans\county_obtained\VECC\SaltLakeVECC_20260728.gdb\Centerlines,discovered,0 observed values. +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,discovered,14 observed values. +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,discovered,24 observed values. +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads,missing_source_field,ONEWAY_ maps to ONEWAY. +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads,missing_source_field,POST_DIR maps to POSTDIR. +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads,missing_source_field,SUFF_TYPE maps to POSTTYPE. +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads,missing_source_field,PREFIX_DIR maps to PREDIR. +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads,missing_source_field,STATUS_ maps to STATUS. +Summit,summit,C:\Mac\Home\Documents\working\utrans\county_obtained\Summit\Summit_20260722.gdb\SummitRoads,discovered,0 observed values. +Tooele,tooele,C:\Mac\Home\Documents\working\utrans\county_obtained\Tooele\TooeleCo_20260514.gdb\TCRoads,missing_source_field,POSTDIR_ maps to POSTDIR. +Tooele,tooele,C:\Mac\Home\Documents\working\utrans\county_obtained\Tooele\TooeleCo_20260514.gdb\TCRoads,missing_source_field,POSTTYPE_ maps to POSTTYPE. +Tooele,tooele,C:\Mac\Home\Documents\working\utrans\county_obtained\Tooele\TooeleCo_20260514.gdb\TCRoads,missing_source_field,PREDIR_ maps to PREDIR. +Tooele,tooele,C:\Mac\Home\Documents\working\utrans\county_obtained\Tooele\TooeleCo_20260514.gdb\TCRoads,discovered,0 observed values. +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,missing_source_field,SUF_DIR maps to POSTDIR. +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,missing_source_field,S_TYPE maps to POSTTYPE. +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,missing_source_field,PRE_DIR maps to PREDIR. +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,discovered,2 observed values. +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,discovered,50 observed values. +Wasatch,wasatch,C:\Mac\Home\Documents\working\utrans\county_obtained\Wasatch\WasatchCounty20260604.gdb\WC_ROAD,missing_source_field,POSTDIR_ maps to POSTDIR. +Wasatch,wasatch,C:\Mac\Home\Documents\working\utrans\county_obtained\Wasatch\WasatchCounty20260604.gdb\WC_ROAD,missing_source_field,POSTTYPE_ maps to POSTTYPE. +Wasatch,wasatch,C:\Mac\Home\Documents\working\utrans\county_obtained\Wasatch\WasatchCounty20260604.gdb\WC_ROAD,missing_source_field,PREDIR_ maps to PREDIR. +Wasatch,wasatch,C:\Mac\Home\Documents\working\utrans\county_obtained\Wasatch\WasatchCounty20260604.gdb\WC_ROAD,discovered,0 observed values. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,A1_POSTDIR_ maps to A1_POSTDIR. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,A1_POSTTYPE_ maps to A1_POSTTYPE. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,A2_POSTDIR_ maps to A2_POSTDIR. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,A2_POSTTYPE_ maps to A2_POSTTYPE. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,AN_POSTDIR_ maps to AN_POSTDIR. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,ONEWAY_ maps to ONEWAY. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,POSTDIR_ maps to POSTDIR. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,POSTTYPE_ maps to POSTTYPE. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,PREDIR_ maps to PREDIR. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,missing_source_field,STATUS_ maps to STATUS. +Washington,washington,C:\Mac\Home\Documents\working\utrans\county_obtained\Washington\Washington20260722.gdb\WashCo_RoadCenterlines,discovered,0 observed values. +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,discovered,32 observed values. +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,discovered,48 observed values. From 95cb4678ca9fc9d4045450ef67ed978ba19b9b5b Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Wed, 26 Aug 2026 09:22:53 -0600 Subject: [PATCH 04/14] fix(cli): remove translate_vertical_levels in favor of value_mappings --- cli/PROFILES.md | 10 --------- cli/src/utrans/etl_mappers.py | 10 --------- cli/src/utrans/profiles.json | 41 ++++++++++++++++++++++++++++++----- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/cli/PROFILES.md b/cli/PROFILES.md index eb4f77b..b9addcf 100644 --- a/cli/PROFILES.md +++ b/cli/PROFILES.md @@ -127,16 +127,6 @@ Currently supported handlers: A semicolon-delimited list of `COUNTY_FIELD=TARGET` values used to parse full street names. `TARGET` is `PRIMARY`, `A1`, or `A2`. -### `translate_vertical_levels` - -**Type:** `boolean` | **Optional** — defaults to `false` - -**Used by:** `etl` - -When `true`, legacy vertical values `1`, `2`, and `3` are translated to `0`, `1`, -and `2` before domain-value matching. Invalid values are still preserved when they -fit within the destination field length and are always appended to `UTRANS_NOTES`. - ### `exclude_if_any` **Type:** `string` or `object` | **Optional** - defaults to no exclusions diff --git a/cli/src/utrans/etl_mappers.py b/cli/src/utrans/etl_mappers.py index ebcbccf..847af9b 100644 --- a/cli/src/utrans/etl_mappers.py +++ b/cli/src/utrans/etl_mappers.py @@ -219,12 +219,6 @@ def apply_mapper(feature_class: str, profile: CountyProfile, utrans_roads: str) domains = domain_values(utrans_roads) _validate_value_mappings(profile, value_mappings, names, domains) posttypes = domains.get("POSTTYPE", {}) - vertical_translation = profile.get("translate_vertical_levels", False) - if not isinstance(vertical_translation, bool): - raise TypeError( - f"Profile '{profile.key}' setting 'translate_vertical_levels' must be true or false." - ) - with arcpy.da.UpdateCursor(feature_class, fields) as cursor: for row in cursor: for target, source in mappings.items(): @@ -237,10 +231,6 @@ def apply_mapper(feature_class: str, profile: CountyProfile, utrans_roads: str) row[target_index] = row[source_index] continue source_value = row[source_index] - if vertical_translation and target.upper() == "VERT_LEVEL": - source_value = {"1": "0", "2": "1", "3": "2"}.get( - str(source_value).strip(), source_value - ) source_value = value_mappings.get(target.upper(), {}).get( str(source_value).strip().upper(), source_value ) diff --git a/cli/src/utrans/profiles.json b/cli/src/utrans/profiles.json index 2c453ba..340fabf 100644 --- a/cli/src/utrans/profiles.json +++ b/cli/src/utrans/profiles.json @@ -4,14 +4,26 @@ "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; NAME=STREETNAME; POSTDIR=SUFDIR; AN_NAME=ACSNAME; A1_NAME=ALIAS1; A2_NAME=ALIAS2; LOCAL_UID=CO_UNIQUE; STATUS=STATUS_; POSTTYPE=STREETTYPE; DOT_SRFTYP=SURFTYPE; DOT_CLASS=CLASS; VERT_LEVEL=VERTLEVEL", "fips": "49001 - Beaver", "match_fields": "STREETNAME STREETNAME", - "translate_vertical_levels": true + "value_mappings": { + "VERT_LEVEL": { + "1": "0", + "2": "1", + "3": "2" + } + } }, "boxelder": { "compare_fields": "L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD; PRE_DIR PRE_DIR; S_NAME S_NAME; S_TYPE S_TYPE; SUF_DIR SUF_DIR; ACS_ALIAS ACS_ALIAS; ACS_NAME ACS_NAME; ACS_SUF ACS_SUF; ALIAS1 ALIAS1; ALIAS1_TYP ALIAS1_TYP; ALIAS2 ALIAS2; ALIAS2_TYP ALIAS2_TYP", "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PRE_DIR; NAME=S_NAME; POSTDIR=SUF_DIR; AN_NAME=ACS_NAME; A1_NAME=ALIAS1; A2_NAME=ALIAS2; LOCAL_UID=CO_UNIQUE; POSTTYPE=S_TYPE; DOT_CLASS=CLASS; VERT_LEVEL=VERTLEVEL", "fips": "49003 - Box Elder", "match_fields": "S_NAME S_NAME", - "translate_vertical_levels": true + "value_mappings": { + "VERT_LEVEL": { + "1": "0", + "2": "1", + "3": "2" + } + } }, "cache": { "compare_fields": "PRE_DIR PRE_DIR; GEOCODEST GEOCODEST; TYPE TYPE; FAL FAL; TAL TAL; FAR FAR; TAR TAR; AliasPreDir AliasPreDir; AliasStreet AliasStreet; AliasType AliasType; AliasSufDir AliasSufDir; SUFFDIR SUFFDIR", @@ -58,7 +70,13 @@ "fips": "49013 - Duchesne", "match_fields": "STREETNAME STREETNAME", "parse_sources": "ALIAS1=A1; ALIAS2=A2", - "translate_vertical_levels": true + "value_mappings": { + "VERT_LEVEL": { + "1": "0", + "2": "1", + "3": "2" + } + } }, "emery": { "compare_fields": "PRE_DIR PRE_DIR; S_NAME S_NAME; S_TYPE S_TYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD; ALIAS1 ALIAS1; ALIAS1_TYP ALIAS1_TYP; ALIAS2 ALIAS2; ALIAS2_TYP ALIAS2_TYP; SUF_DIR SUF_DIR", @@ -93,7 +111,13 @@ "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PREDIR_; NAME=STREETNAME; POSTDIR=SUFDIR; AN_NAME=ACSNAME; A1_NAME=ALIAS1; A2_NAME=ALIAS2; LOCAL_UID=COUNIQUE; POSTTYPE=STREETTYPE; ONEWAY=ONEWAY_; DOT_SRFTYP=SURFTYPE; STATUS=STATUS_; DOT_CLASS=CLASS; VERT_LEVEL=VERTLEVEL", "fips": "49021 - Iron", "match_fields": "STREETNAME STREETNAME", - "translate_vertical_levels": true + "value_mappings": { + "VERT_LEVEL": { + "1": "0", + "2": "1", + "3": "2" + } + } }, "kane": { "compare_fields": "PREDIR PREDIR; STREETNAME STREETNAME; STREETTYPE STREETTYPE; SUFDIR SUFDIR; ACSALIAS ACSALIAS; ALIAS1 ALIAS1; ALIAS1TYPE ALIAS1TYPE; ALIAS2 ALIAS2; ALIAS2TYPE ALIAS2TYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD", @@ -209,7 +233,14 @@ "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PRE_DIR; NAME=S_NAME; LOCAL_UID=CO_UNIQUE; DOT_CLASS=CLASS; ONEWAY=ONE_WAY; DOT_SRFTYP=S_SURF2; VERT_LEVEL=VERTLEVEL", "fips": "49055 - Wayne", "match_fields": "S_NAME S_NAME", - "parse_sources": "S_NAME=PRIMARY; ALIAS1=A1" + "parse_sources": "S_NAME=PRIMARY; ALIAS1=A1", + "value_mappings": { + "DOT_SRFTYP": { + "IMPROVED": "I", + "NATIVE": "N", + "PAVED": "P" + } + } }, "weber": { "compare_fields": "PREDIR PREDIR; S_NAME S_NAME; STREETTYPE STREETTYPE; SUFDIR SUFDIR; ALIAS ALIAS; ACS_ALIAS ACS_ALIAS; SUFFIX_911 SUFFIX_911; LEFTFROM LEFTFROM; LEFTTO LEFTTO; RIGHTFROM RIGHTFROM; RIGHTTO RIGHTTO", From 0f2ada33210ef581c3ff55a817a1aee2794e063b Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Wed, 26 Aug 2026 14:00:50 -0600 Subject: [PATCH 05/14] chore(add-in): v1.16 release --- add-in/UGRC.UtransTools/Config.daml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/add-in/UGRC.UtransTools/Config.daml b/add-in/UGRC.UtransTools/Config.daml index 3107f22..f28cff5 100644 --- a/add-in/UGRC.UtransTools/Config.daml +++ b/add-in/UGRC.UtransTools/Config.daml @@ -5,7 +5,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.esri.com/DADF/Registry file:///C:/Program%20Files/ArcGIS/Pro/bin/ArcGIS.Desktop.Framework.xsd"> - + UGRC_UtransTools UGRC_UtransTools description Images\AddinDesktop32.png From 923772fc0e103fe448ad2249c204c1ab7d21faa9 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Thu, 27 Aug 2026 12:51:55 -0600 Subject: [PATCH 06/14] fix(cli): remove superfluous require_fields profile config --- cli/PROFILES.md | 15 --------- cli/src/utrans/profiles.json | 13 +------- cli/src/utrans/recent_edits.py | 49 ++++++++++++++++++--------- cli/tests/test_recent_edits.py | 61 ++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 42 deletions(-) create mode 100644 cli/tests/test_recent_edits.py diff --git a/cli/PROFILES.md b/cli/PROFILES.md index b9addcf..05bd336 100644 --- a/cli/PROFILES.md +++ b/cli/PROFILES.md @@ -197,21 +197,6 @@ Use this when a county's data may have mixed case values that should compare as --- -### `required_fields` - -**Type:** `string[]` | **Optional** — defaults to `[]` - -**Used by:** `get-recent-edits` - -Fields that must exist in both the update and base feature classes. If any are -missing, the script raises an error before doing any work. - -```json -"required_fields": ["RoadName", "LeftFrom", "LeftTo", "RightFrom", "RightTo"] -``` - ---- - ## Minimal Profile Example ```json diff --git a/cli/src/utrans/profiles.json b/cli/src/utrans/profiles.json index 340fabf..1070d5d 100644 --- a/cli/src/utrans/profiles.json +++ b/cli/src/utrans/profiles.json @@ -51,18 +51,7 @@ "field_mappings": "FROMADDR_L=LeftFrom; TOADDR_L=LeftTo; FROMADDR_R=RightFrom; TOADDR_R=RightTo; PREDIR=PrefixDirection; NAME=RoadName; POSTTYPE=RoadNameType; POSTDIR=PostDirection; DOT_SRFTYP=RoadSurfaceType", "fips": "49011 - Davis", "match_fields": "RoadName RoadName", - "required_fields": [ - "PrefixDirection", - "RoadName", - "RoadNameType", - "PostDirection", - "RoadAliasName", - "LeftFrom", - "LeftTo", - "RightFrom", - "RightTo", - "MPH" - ] + "value_mappings": { }, "duchesne": { "compare_fields": "PREDIR PREDIR; STREETNAME STREETNAME; STREETTYPE STREETTYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD; ALIAS1 ALIAS1; ALIAS1TYPE ALIAS1TYPE; ALIAS2 ALIAS2; ALIAS2TYPE ALIAS2TYPE; ACSNAME ACSNAME; ACSSUF ACSSUF; SUFDIR SUFDIR", diff --git a/cli/src/utrans/recent_edits.py b/cli/src/utrans/recent_edits.py index 9260d55..1883353 100644 --- a/cli/src/utrans/recent_edits.py +++ b/cli/src/utrans/recent_edits.py @@ -48,7 +48,6 @@ class CountyProfile: match_fields: str = "" compare_fields: str | None = None uppercase_normalize_fields: set[str] = field(default_factory=set) - required_fields: list[str] = field(default_factory=list) def _load_profiles(path: Path | None = None) -> dict[str, CountyProfile]: @@ -59,7 +58,6 @@ def _load_profiles(path: Path | None = None) -> dict[str, CountyProfile]: match_fields=data["match_fields"], compare_fields=data.get("compare_fields"), uppercase_normalize_fields=set(data.get("uppercase_normalize_fields", [])), - required_fields=data.get("required_fields", []), ) return profiles @@ -204,14 +202,37 @@ def resolve_required_inputs(args): return args.county, args.update_features, args.base_features -def ensure_required_fields(feature_class, required_fields, dataset_label): - lookup = get_field_name_map(feature_class) - missing = [ - field_name for field_name in required_fields if field_name.lower() not in lookup - ] - if missing: +def ensure_configured_fields(update_features, base_features, field_mappings): + update_map = get_field_name_map(update_features) + base_map = get_field_name_map(base_features) + missing_update = [] + missing_base = [] + missing_update_lookup = set() + missing_base_lookup = set() + + for field_mapping in field_mappings: + for update_field, base_field in parse_field_pairs(field_mapping or ""): + if ( + update_field.lower() not in update_map + and update_field.lower() not in missing_update_lookup + ): + missing_update.append(update_field) + missing_update_lookup.add(update_field.lower()) + if ( + base_field.lower() not in base_map + and base_field.lower() not in missing_base_lookup + ): + missing_base.append(base_field) + missing_base_lookup.add(base_field.lower()) + + if missing_update: + raise RuntimeError( + "Update features are missing configured fields: " + f"{', '.join(missing_update)}" + ) + if missing_base: raise RuntimeError( - f"{dataset_label} is missing required fields: {', '.join(missing)}" + f"Base features are missing configured fields: {', '.join(missing_base)}" ) @@ -234,17 +255,15 @@ def run_change_detection( stats_table = os.path.join(output_workspace, DEFAULT_STATS_TABLE_NAME) out_feature = os.path.join(output_workspace, DEFAULT_RECENTS_NAME) - if profile.required_fields: - ensure_required_fields( - update_features, profile.required_fields, "Update features" - ) - ensure_required_fields(base_features, profile.required_fields, "Base features") - if not compare_fields: raise RuntimeError( "Compare fields were not provided and county profile has no default compare mapping." ) + ensure_configured_fields( + update_features, base_features, (match_fields, compare_fields) + ) + resolved_match_pairs = resolve_field_pairs( update_features, base_features, match_fields ) diff --git a/cli/tests/test_recent_edits.py b/cli/tests/test_recent_edits.py new file mode 100644 index 0000000..a8eb253 --- /dev/null +++ b/cli/tests/test_recent_edits.py @@ -0,0 +1,61 @@ +import pytest + +from utrans import recent_edits + + +def _profile_fields(*names): + return {name.lower(): name for name in names} + + +def test_ensure_configured_fields_accepts_case_insensitive_matches(monkeypatch): + feature_fields = { + "update": _profile_fields("RoadName", "LeftFrom"), + "base": _profile_fields("ROADNAME", "LEFTFROM"), + } + monkeypatch.setattr( + recent_edits, + "get_field_name_map", + lambda feature_class: feature_fields[feature_class], + ) + + recent_edits.ensure_configured_fields( + "update", + "base", + ("roadname roadname", "LeftFrom leftfrom"), + ) + + +@pytest.mark.parametrize( + ("missing_dataset", "expected_message"), + [ + ("update", "Update features are missing configured fields: LeftFrom"), + ("base", "Base features are missing configured fields: LeftFrom"), + ], +) +def test_ensure_configured_fields_reports_missing_mapping_fields( + monkeypatch, missing_dataset, expected_message +): + feature_fields = { + "update": _profile_fields("RoadName") + if missing_dataset == "update" + else _profile_fields("RoadName", "LeftFrom"), + "base": _profile_fields("ROADNAME") + if missing_dataset == "base" + else _profile_fields("ROADNAME", "LEFTFROM"), + } + monkeypatch.setattr( + recent_edits, + "get_field_name_map", + lambda feature_class: feature_fields[feature_class], + ) + + with pytest.raises(RuntimeError, match=expected_message): + recent_edits.ensure_configured_fields( + "update", "base", ("RoadName RoadName", "LeftFrom LeftFrom") + ) + + +def test_recent_edits_profile_no_longer_exposes_required_fields(): + profile = recent_edits._load_profiles()["davis"] + + assert not hasattr(profile, "required_fields") From c437dbd473dafd3dc345bd770e3b3efd3be1121b Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Thu, 27 Aug 2026 15:56:51 -0600 Subject: [PATCH 07/14] fix(cli): apply reviewed mappings from Erik to profiles --- cli/PROFILES.md | 30 ++- cli/README.md | 39 --- cli/scripts/discover_value_mappings.py | 56 +++- cli/scripts/reviewed-value-mappings.csv | 332 ++++++++++++------------ cli/src/utrans/profiles.json | 191 +++++++++++++- 5 files changed, 416 insertions(+), 232 deletions(-) diff --git a/cli/PROFILES.md b/cli/PROFILES.md index 05bd336..7ccd648 100644 --- a/cli/PROFILES.md +++ b/cli/PROFILES.md @@ -41,15 +41,26 @@ are reported with the field and value. **Used by:** `etl` -Per-target mappings for source values that do not match a UTRANS coded-value -domain code or description. Field names and source values are matched -case-insensitively after surrounding whitespace is removed. +Per-destination-field mappings for county source values that do not match a +UTRANS coded-value domain code or description. The outer field name is the +destination field name in the UTRANS output data. Each inner mapping uses this form: + +```text +"county source value": "value written to the UTRANS output field" +``` + +The inner key on the left is the value read from the county source field. The +inner value on the right is the value written to the destination UTRANS field +after it is resolved against that field's coded-value domain. Field names, +source keys, and source values are matched case-insensitively after surrounding +whitespace is removed. The mapping value should be a valid destination domain +code or description, and mapping entries should represent translations rather +than identity mappings. ```json "value_mappings": { - "ONEWAY": { - "ONE DIRECTION": "Y", - "TWO WAY": "N" + "DOT_SRFTYP": { + "PAVED ASPHALT": "P-ASP" }, "DOT_CLASS": { "LOCAL ROAD": "L" @@ -57,9 +68,12 @@ case-insensitively after surrounding whitespace is removed. } ``` +In this example, `DOT_SRFTYP` and `DOT_CLASS` are UTRANS destination fields. A +county value of `PAVED ASPHALT` is written as `P-ASP` to the output +`DOT_SRFTYP` field, and a county value of `LOCAL ROAD` is written as `L` to the +output `DOT_CLASS` field. The mapped value is resolved against the destination coded-value domain. Values -that remain invalid are recorded in `UTRANS_NOTES` and copied only when they fit -the target field length. +that remain invalid are recorded in `UTRANS_NOTES`. --- diff --git a/cli/README.md b/cli/README.md index 61a8c05..a75490f 100644 --- a/cli/README.md +++ b/cli/README.md @@ -70,42 +70,3 @@ utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon The command writes outputs to the geodatabase containing `--update-features`. It uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to the fixed UTRANS DFC. Run `utrans detect-changes --help` for the remaining options. - -### One-use value mapping discovery - -The repository includes a one-use ArcPy script for inventorying county values -that may need `value_mappings`. It uses the local manifest at -`cli/scripts/county_datasets.csv`; the manifest contains machine-specific paths -and should not be added to package configuration. - -Run this from the `utrans-tools` Conda environment with a UTRANS target feature -class whose fields have the production coded-value domains: - -```powershell -python cli/scripts/discover_value_mappings.py discover ` - --target-features "C:\path\to\UTRANS.gdb\Roads" -``` - -The script reads the manifest and profiles from `cli/scripts/` and -`cli/src/utrans/` automatically. It writes -`value-mapping-inventory.csv`, `value-mapping-summary.csv`, and -`reviewed-value-mappings.csv` to the folder where the command is run. The -inventory contains all distinct observed source values, counts, normalized -values, domain resolutions, and statuses. The review CSV contains only -unresolved, non-empty values and includes an `approved_target_value` column. -Enter a valid UTRANS domain code or description for values that should be -mapped; leave it blank for values that should not be mapped. Apply reviewed -mappings directly to `profiles.json`: - -```powershell -python cli/scripts/discover_value_mappings.py apply ` - --target-features "C:\path\to\UTRANS.gdb\Roads" -``` - -Apply mode reads `value-mapping-inventory.csv` and -`reviewed-value-mappings.csv` from the current folder. It applies all rows -marked `review` only when `approved_target_value` is filled in, and skips -approvals that resolve to the same normalized source value. Existing mappings -are preserved; conflicting mappings stop the operation before the file is -written. `value_mappings` should contain translations only, such as -`LANE` to `LN`; values already accepted by the target domain need no entry. diff --git a/cli/scripts/discover_value_mappings.py b/cli/scripts/discover_value_mappings.py index 5cb38da..1d2ed6b 100644 --- a/cli/scripts/discover_value_mappings.py +++ b/cli/scripts/discover_value_mappings.py @@ -30,6 +30,8 @@ import csv import json from collections import Counter +from decimal import InvalidOperation +from decimal import Decimal from pathlib import Path from typing import Any @@ -95,6 +97,18 @@ def field_names(feature_class: str) -> dict[str, str]: return {field.name.upper(): field.name for field in arcpy.ListFields(feature_class)} +def normalize_value(value: object) -> str: + normalized = str(value).strip().upper() + try: + number = Decimal(normalized) + except InvalidOperation: + return normalized + canonical = format(number, "f") + if "." in canonical: + canonical = canonical.rstrip("0").rstrip(".") + return canonical + + def observed_values( feature_class: str, source_field: str ) -> dict[str, tuple[str, int]]: @@ -105,7 +119,7 @@ def observed_values( if value is None or not str(value).strip(): continue raw_value = str(value).strip() - normalized_value = raw_value.upper() + normalized_value = normalize_value(raw_value) representatives.setdefault(normalized_value, raw_value) counts[normalized_value] += 1 return { @@ -294,13 +308,14 @@ def apply_mappings( ) -> None: profiles = load_profiles(profiles_path) domains = target_domains(target_features) + removed = clean_redundant_mappings(profiles, domains) inventory_rows: dict[tuple[str, str, str], dict[str, str]] = {} with inventory_path.open(newline="", encoding="utf-8-sig") as inventory_file: for row in csv.DictReader(inventory_file): key = ( row["profile"], row["target_field"].strip().upper(), - row["normalized_value"].strip().upper(), + normalize_value(row["normalized_value"]), ) inventory_rows[key] = row @@ -312,7 +327,7 @@ def apply_mappings( continue profile = row["profile"] target = row["target_field"].strip().upper() - source = row["normalized_value"].strip().upper() + source = normalize_value(row["normalized_value"]) inventory_row = inventory_rows.get((profile, target, source)) if profile not in profiles or inventory_row is None: raise ValueError( @@ -361,7 +376,40 @@ def apply_mappings( target_mappings[source] = destination profiles_path.write_text(json.dumps(profiles, indent=2) + "\n", encoding="utf-8") - print(f"Applied inventory mappings to {profiles_path}") + print( + f"Applied inventory mappings to {profiles_path}; removed {removed} redundant mappings" + ) + + +def clean_redundant_mappings( + profiles: dict[str, dict[str, Any]], domains: dict[str, dict[str, str]] +) -> int: + removed = 0 + for profile in profiles.values(): + value_mappings = profile.get("value_mappings", {}) + if not isinstance(value_mappings, dict): + continue + for target, mappings in list(value_mappings.items()): + if not isinstance(mappings, dict): + continue + domain = domains.get(target.upper()) + for source, destination in list(mappings.items()): + source_key = str(source).strip().upper() + destination_key = str(destination).strip().upper() + source_code = domain.get(source_key) if domain else None + destination_code = domain.get(destination_key) if domain else None + if source_key == destination_key or ( + source_code is not None + and destination_code is not None + and source_code == destination_code + ): + del mappings[source] + removed += 1 + if not mappings: + del value_mappings[target] + if not value_mappings: + profile.pop("value_mappings", None) + return removed def build_parser() -> argparse.ArgumentParser: diff --git a/cli/scripts/reviewed-value-mappings.csv b/cli/scripts/reviewed-value-mappings.csv index 5dad806..bbca796 100644 --- a/cli/scripts/reviewed-value-mappings.csv +++ b/cli/scripts/reviewed-value-mappings.csv @@ -1,167 +1,165 @@ -county,profile,source_features,target_field,source_field,observed_value,normalized_value,count,resolved_target_value,status,approved_target_value -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,ATV,ATV,63,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F1,F1,3,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F2,F2,70,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,NT,NT,29,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,X,X,271,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,0,0,6662,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,100,100,778,,review,P -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,110,110,1,,review,P -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,115,115,99,,review,P -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,200,200,322,,review,I -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,210,210,48,,review,I -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,211,211,3,,review,I -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,213,213,29,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,223,223,5,,review,I -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,300,300,539,,review,N -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,310,310,47,,review,N -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,320,320,61,,review,N -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,355,355,9,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,400,400,6,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,430,430,1,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,450,450,30,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,999,999,9,,review,U -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,Cr,CR,1,,review, -Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,TR,TR,16,,review, -BoxElder,boxelder,C:\Mac\Home\Documents\working\utrans\county_obtained\BoxElder\BoxElder_20260624.gdb\BECO_RDS,VERT_LEVEL,VERTLEVEL,0.0,0.0,11511,,review, -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,0,0,510,,review, -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Gravel,GRAVEL,1,,review,I -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,33,,review, -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Maintain_Native,MAINTAIN_NATIVE,35,,review, -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,42,,review,P-ASP -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,0,0,1492,,review, -Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,STATUS,S_STATUS,A,A,469,,review,ACTIVE -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Asphalt,ASPHALT,20945,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Concrete,CONCRETE,104,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Gravel,GRAVEL,5,,review,I -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cswy,CSWY,1,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pne,PNE,1,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Wy,WY,806,,review,WAY -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,EB,EB,287,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,NB,NB,648,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,SB,SB,621,,review, -Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,WB,WB,297,,review, -Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,300,300,1,,review,N -Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,GRAVEL,GRAVEL,2,,review,I -Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,37,,review, -Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,POSTTYPE,STREETTYPE,N,N,1,,review, -Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,300,300,3,,review,N -Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,320,320,1,,review,N -Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,,,1,,review, -Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,Maintained Native,MAINTAINED NATIVE,1,,review, -Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,6178,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ap,AP,15,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,blm,BLM,23,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,co,CO,6,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,dwr,DWR,1,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,fs,FS,181,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ind,IND,203,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,pr,PR,407,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,rr,RR,7,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sj,SJ,2,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sp,SP,27,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,u,U,5,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,wld,WLD,1,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,100,100,1773,,review,P -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200,200,986,,review,I -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200.00,200.00,1,,review, -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,300,300,20968,,review,N -Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,0,0,239,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,100,100,3045,,review,P -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,200,200,2739,,review,I -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,300,300,2460,,review,N -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,999,999,4014,,review,U -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,17,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,.,.,1,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,c,C,1,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,DIR,DIR,1,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,LP,LP,6,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RDE,RDE,1,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,TR,TR,5,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,W,W,2,,review, -Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,WY,WY,9,,review,WAY -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,100,100,1016,,review,P -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,200,200,662,,review,I -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,300,300,3148,,review,N -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,999,999,3,,review,U -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,0,0,1,,review, -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,LP,LP,1,,review, -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,SST,SST,1,,review, -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,TR,TR,2,,review, -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,WY,WY,4,,review,WAY -Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,0,0,57,,review, -Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Collector,COLLECTOR,50,,review, -Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Freeway,FREEWAY,28,,review, -Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Highway,HIGHWAY,43,,review, -Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Local,LOCAL,712,,review, -Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Minor Arterial,MINOR ARTERIAL,90,,review, -Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Ramp,RAMP,22,,review, -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,0,0,2861,,review, -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,100,100,7,,review,P -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,115,115,141,,review,P -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,20,20,1,,review, -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,200,200,94,,review,I -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,210,210,234,,review,I -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,211,211,85,,review,I -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,221,221,19,,review,I -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,223,223,19,,review,I -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,300,300,413,,review,N -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,310,310,15,,review,N -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,320,320,78,,review,N -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,430,430,60,,review, -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,440,440,2,,review, -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,CR,CR,5,,review, -Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,SPEED_LMT,SPD_LMT,0,0,4020,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,ARIZONA,ARIZONA,11,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,B Road,B ROAD,1053,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,C Road,C ROAD,174,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Colorado,COLORADO,9,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,D Road,D ROAD,5553,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Federal,FEDERAL,27,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,GRAND,GRAND,13,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,NDOT,NDOT,228,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private,PRIVATE,1,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private Road,PRIVATE ROAD,3,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Reservation,RESERVATION,1635,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,State Highway,STATE HIGHWAY,12,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,UDOT,UDOT,3,,review, -SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,US Highway,US HIGHWAY,16,,review, -Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,BIKE,BIKE,30,,review, -Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,C,C,1,,review, -Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,9008,,review, -Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CORR,CORR,35,,review, -Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,OFF,OFF,80,,review, -Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ON,ON,85,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,?,?,4,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TBD,TBD,16,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TR,TR,2,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TRL,TRL,18,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,0,0,6,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,100,100,19,,review,P -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,115,115,16,,review,P -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,200,200,34,,review,I -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,91409 SEGMENT RANGE COR,91409 SEGMENT RANGE COR,2,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,GRAVEL,GRAVEL,8,,review,I -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,166,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Crushed_agg,IMPROV_CRUSHED_AGG,12,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_gravel,IMPROV_GRAVEL,5,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Mag_chlorid,IMPROV_MAG_CHLORID,1,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Oiled,IMPROV_OILED,16,,review, -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,136,,review,P-ASP -Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,c,C,1,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CRT,CRT,1,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RR,RR,108,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,0.0,0.0,195,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,1.0,1.0,1,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,10.0,10.0,1,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,15.0,15.0,7,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,19.0,19.0,4,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,25.0,25.0,12513,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,30.0,30.0,493,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,35.0,35.0,911,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,40.0,40.0,476,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,45.0,45.0,116,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,50.0,50.0,261,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,55.0,55.0,164,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,60.0,60.0,4,,review, -Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,65.0,65.0,15,,review, +county,profile,source_features,target_field,source_field,observed_value,normalized_value,count,resolved_target_value,status,approved_target_value,note +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,ATV,ATV,63,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F1,F1,3,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,F2,F2,70,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,NT,NT,29,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_CLASS,CLASS,X,X,271,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,0,0,6662,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,100,100,778,,review,P, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,110,110,1,,review,P, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,115,115,99,,review,P, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,200,200,322,,review,I, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,210,210,48,,review,I, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,211,211,3,,review,I, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,213,213,29,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,223,223,5,,review,I, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,300,300,539,,review,N, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,310,310,47,,review,N, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,320,320,61,,review,N, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,355,355,9,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,400,400,6,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,430,430,1,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,450,450,30,,review,,no matching value +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,DOT_SRFTYP,SURFTYPE,999,999,9,,review,U, +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,Cr,CR,1,,review,CIR,assuming Circle and not Creek +Beaver,beaver,C:\Mac\Home\Documents\working\utrans\county_obtained\Beaver\BeaverCo_20260604.gdb\Beaver_Roads2025,POSTTYPE,STREETTYPE,TR,TR,16,,review,TER,assuming Terrace and not Trail +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,0,0,510,,review,,no matching value +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Gravel,GRAVEL,1,,review,I, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,33,,review,I, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Maintain_Native,MAINTAIN_NATIVE,35,,review,N, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,42,,review,P-ASP, +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,SPEED_LMT,SPD_LMT,0,0,1492,,review,25,defaulting to 25 +Daggett,daggett,C:\Mac\Home\Documents\working\utrans\county_obtained\Daggett\DaggettCo_20210515.gdb\Centerlines,STATUS,S_STATUS,A,A,469,,review,ACTIVE, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Asphalt,ASPHALT,20945,,review,P-ASP, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Concrete,CONCRETE,104,,review,P-CON, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,DOT_SRFTYP,RoadSurfaceType,Gravel,GRAVEL,5,,review,I, +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Cswy,CSWY,1,,review,,no matching value +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Pne,PNE,1,,review,,no matching value +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,POSTTYPE,RoadNameType,Wy,WY,806,,review,WAY,this is the correct format +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,EB,EB,287,,review,,"no matching value in PREDIR field, part of NAME" +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,NB,NB,648,,review,,"no matching value in PREDIR field, part of NAME" +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,SB,SB,621,,review,,"no matching value in PREDIR field, part of NAME" +Davis,davis,C:\Mac\Home\Documents\working\utrans\county_obtained\Davis\DavisCounty_20260722.gdb\DavisRoads,PREDIR,PrefixDirection,WB,WB,297,,review,,"no matching value in PREDIR field, part of NAME" +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,300,300,1,,review,N, +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,GRAVEL,GRAVEL,2,,review,I, +Duchesne,duchesne,C:\Mac\Home\Documents\working\utrans\county_obtained\Duchesne\DuchesneCo_20191009.gdb\Centerlines,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,37,,review,,no matching value +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,300,300,3,,review,N, +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,320,320,1,,review,N, +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,,,1,,review,,no matching value +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,DOT_SRFTYP,S_SURF2,Maintained Native,MAINTAINED NATIVE,1,,review,N, +Emery,emery,C:\Mac\Home\Documents\working\utrans\county_obtained\Emery\EmeryCo_20260611.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,6178,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ap,AP,15,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,blm,BLM,23,,review,F, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,co,CO,6,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,dwr,DWR,1,,review,A, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,fs,FS,181,,review,F, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,ind,IND,203,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,pr,PR,407,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,rr,RR,7,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sj,SJ,2,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,sp,SP,27,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,u,U,5,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_CLASS,CLASS,wld,WLD,1,,review,,no matching value +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,100,100,1773,,review,P, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200,200,986,,review,I, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,200,200,1,,review,I, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,DOT_SRFTYP,SURFTYPE,300,300,20968,,review,N, +Grand,grand,C:\Mac\Home\Documents\working\utrans\county_obtained\Grand\GrandCo_20260722.gdb\GC_ROADS_07_09_26,SPEED_LMT,SPEED,0,0,239,,review,25, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,100,100,3045,,review,P, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,200,200,2739,,review,I, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,300,300,2460,,review,N, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,999,999,4014,,review,U, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,DOT_SRFTYP,SURFTYPE,OTHER,OTHER,17,,review,,no matching value +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTDIR,SUFDIR,.,.,1,,review,,no matching value +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,c,C,1,,review,,no enough info +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,DIR,DIR,1,,review,DR, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,LP,LP,6,,review,LOOP, +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,RDE,RDE,1,,review,RD,"Road, Route (RTE) or Ridge (RDG)?" +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,TR,TR,5,,review,,"no matching value, could be Terrace (TER) or Trail (TRL)" +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,W,W,2,,review,,no matching value +Iron,iron,C:\Mac\Home\Documents\working\utrans\county_obtained\Iron\Iron_20260625.gdb\Iron_Roads06_25_2026,POSTTYPE,STREETTYPE,WY,WY,9,,review,WAY, +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,100,100,1016,,review,,no matching value +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,200,200,662,,review,,no matching value +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,300,300,3148,,review,,no matching value +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,DOT_SRFTYP,SURFTYPE,999,999,3,,review,,no matching value +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,0,0,1,,review,,no matching value +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,LP,LP,1,,review,LOOP,assume should be Loop +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,SST,SST,1,,review,ST,assume typo for Street +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,TR,TR,2,,review,TER,assuming Terrace and not Trail +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,POSTTYPE,STREETTYPE,WY,WY,4,,review,WAY, +Kane,kane,C:\Mac\Home\Documents\working\utrans\county_obtained\Kane\KaneCo_20250915.gdb\Kane_Street_Centerlines,SPEED_LMT,SPEED,0,0,57,,review,25,defaulting to 25 +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Collector,COLLECTOR,50,,review,,"should be DOT_FCLASS, prefer UDOT to apply classes" +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Freeway,FREEWAY,28,,review,,"should be DOT_FCLASS, prefer UDOT to apply classes" +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Highway,HIGHWAY,43,,review,,"should be DOT_FCLASS, prefer UDOT to apply classes" +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Local,LOCAL,712,,review,,"should be DOT_FCLASS, prefer UDOT to apply classes" +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Minor Arterial,MINOR ARTERIAL,90,,review,,"should be DOT_FCLASS, prefer UDOT to apply classes" +Morgan,morgan,C:\Mac\Home\Documents\working\utrans\county_obtained\Morgan\MorganCo_20260519.gdb\Centerlines_May26,DOT_CLASS,roadclass,Ramp,RAMP,22,,review,,"should be DOT_FCLASS, prefer UDOT to apply classes" +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,0,0,2861,,review,,no matching value +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,100,100,7,,review,P, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,115,115,141,,review,P, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,20,20,1,,review,,no matching value +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,200,200,94,,review,I, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,210,210,234,,review,I, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,211,211,85,,review,I, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,221,221,19,,review,I, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,223,223,19,,review,I, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,300,300,413,,review,N, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,310,310,15,,review,N, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,320,320,78,,review,N, +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,430,430,60,,review,,no matching value +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,DOT_SRFTYP,S_SURF,440,440,2,,review,,no matching value +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,POSTTYPE,S_TYPE,CR,CR,5,,review,CIR,assume should be Circle +Rich,rich,C:\Mac\Home\Documents\working\utrans\county_obtained\Rich\RichCo_20211115.gdb\E911_RichRoads11_3_21,SPEED_LMT,SPD_LMT,0,0,4020,,review,25,defaulting to 25 +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,ARIZONA,ARIZONA,11,,review,,no matching value +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,B Road,B ROAD,1053,,review,B, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,C Road,C ROAD,174,,review,C, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Colorado,COLORADO,9,,review,,no matching value +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,D Road,D ROAD,5553,,review,D, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Federal,FEDERAL,27,,review,F, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,GRAND,GRAND,13,,review,,no matching value +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,NDOT,NDOT,228,,review,,no matching value +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private,PRIVATE,1,,review,P, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Private Road,PRIVATE ROAD,3,,review,P, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,Reservation,RESERVATION,1635,,review,,no matching value +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,State Highway,STATE HIGHWAY,12,A,review,A, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,UDOT,UDOT,3,A,review,A, +SanJuan,sanjuan,C:\Mac\Home\Documents\working\utrans\county_obtained\SanJuan\SanJuanRoads_20250808.gdb\T2025SanJuanRoads,DOT_CLASS,CLASS,US Highway,US HIGHWAY,16,A,review,A, +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,POSTTYPE,S_TYPE,BIKE,BIKE,30,,review,,no matching value +Sevier,sevier,C:\Mac\Home\Documents\working\utrans\county_obtained\Sevier\SevierCo_20260514.gdb\SC911DataUpdate_260511,PREDIR,PRE_DIR,C,C,1,,review,,no matching value +Uintah,uintah,C:\Mac\Home\Documents\working\utrans\county_obtained\Uintah\UintahCo20260423.gdb\Roads,SPEED_LMT,SPD_LMT,0,0,9008,,review,25,defaulting to 25 +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,CORR,CORR,35,,review,,no matching value +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,OFF,OFF,80,,review,RAMP, +Utah,utah,C:\Mac\Home\Documents\working\utrans\county_obtained\Utah\UtahCo_20260824.gdb\RoadCenterline,POSTTYPE,ROADTYPE,ON,ON,85,,review,RAMP, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,?,?,4,,review,,no matching value +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TBD,TBD,16,,review,,no matching value +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TR,TR,2,,review,,no matching value - seems like a trail designation +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_CLASS,CLASS,TRL,TRL,18,,review,,no matching value - seems like a trail designation +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,0,0,6,,review,,no matching value +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,100,100,19,,review,P, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,115,115,16,,review,P, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,200,200,34,,review,I, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,91409 SEGMENT RANGE COR,91409 SEGMENT RANGE COR,2,,review,,no matching value +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,GRAVEL,GRAVEL,8,,review,I, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Agg/gravel,IMPROV_AGG/GRAVEL,166,,review,I, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Crushed_agg,IMPROV_CRUSHED_AGG,12,,review,I, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_gravel,IMPROV_GRAVEL,5,,review,I, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Mag_chlorid,IMPROV_MAG_CHLORID,1,,review,I, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Improv_Oiled,IMPROV_OILED,16,,review,,no matching value +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,DOT_SRFTYP,S_SURF2,Paved_Asphalt,PAVED_ASPHALT,136,,review,P-ASP, +Wayne,wayne,C:\Mac\Home\Documents\working\utrans\county_obtained\Wayne\WayneCo_20260414.gdb\WayneCoRds_20260409,PREDIR,PRE_DIR,c,C,1,,review,,no matching value +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,CRT,CRT,1,,review,CT,typo for Court +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,POSTTYPE,STREETTYPE,RR,RR,108,,review,,no matching value - railroad features +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,0,0,195,,review,25,defaulting to 25 +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,1,1,1,,review,25,defaulting to 25 +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,10,10,1,,review,10,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,15,15,7,,review,15,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,19,19,4,,review,20, +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,25,25,12513,,review,25,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,30,30,493,,review,30,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,35,35,911,,review,35,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,40,40,476,,review,40,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,45,45,116,,review,45,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,50,50,261,,review,50,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,55,55,164,,review,55,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,60,60,4,,review,60,not sure why this wouldn't match +Weber,weber,C:\Mac\Home\Documents\working\utrans\county_obtained\Weber\WeberCounty_20260729.gdb\weber_centerline,SPEED_LMT,SPEEDLIMIT,65,65,15,,review,65,not sure why this wouldn't match \ No newline at end of file diff --git a/cli/src/utrans/profiles.json b/cli/src/utrans/profiles.json index 1070d5d..0d14d39 100644 --- a/cli/src/utrans/profiles.json +++ b/cli/src/utrans/profiles.json @@ -9,6 +9,23 @@ "1": "0", "2": "1", "3": "2" + }, + "DOT_SRFTYP": { + "100": "P", + "110": "P", + "115": "P", + "200": "I", + "210": "I", + "211": "I", + "223": "I", + "300": "N", + "310": "N", + "320": "N", + "999": "U" + }, + "POSTTYPE": { + "CR": "CIR", + "TR": "TER" } } }, @@ -43,7 +60,21 @@ "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PRE_DIR; NAME=S_NAME; A2_NAME=ALIAS2; LOCAL_UID=CO_UNIQUE; STATUS=S_STATUS; POSTTYPE=S_TYPE; A2_POSTTYPE=ALIAS2_TYP; DOT_CLASS=CLASS; ONEWAY=ONE_WAY; DOT_SRFTYP=S_SURF2; SPEED_LMT=SPD_LMT", "fips": "49009 - Daggett", "match_fields": "S_NAME S_NAME", - "parse_sources": "ALIAS1=A1; ALIAS2=A2; ACS_ALIAS=A1" + "parse_sources": "ALIAS1=A1; ALIAS2=A2; ACS_ALIAS=A1", + "value_mappings": { + "DOT_SRFTYP": { + "GRAVEL": "I", + "IMPROV_AGG/GRAVEL": "I", + "MAINTAIN_NATIVE": "N", + "PAVED_ASPHALT": "P-ASP" + }, + "SPEED_LMT": { + "0": "25" + }, + "STATUS": { + "A": "Active" + } + } }, "davis": { "compare_fields": "PrefixDirection PrefixDirection; RoadName RoadName; RoadNameType RoadNameType; PostDirection PostDirection; RoadAliasName RoadAliasName; LeftFrom LeftFrom; LeftTo LeftTo; RightFrom RightFrom; RightTo RightTo; MPH MPH", @@ -52,6 +83,15 @@ "fips": "49011 - Davis", "match_fields": "RoadName RoadName", "value_mappings": { + "DOT_SRFTYP": { + "ASPHALT": "P-ASP", + "CONCRETE": "P-CON", + "GRAVEL": "I" + }, + "POSTTYPE": { + "WY": "WAY" + } + } }, "duchesne": { "compare_fields": "PREDIR PREDIR; STREETNAME STREETNAME; STREETTYPE STREETTYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD; ALIAS1 ALIAS1; ALIAS1TYPE ALIAS1TYPE; ALIAS2 ALIAS2; ALIAS2TYPE ALIAS2TYPE; ACSNAME ACSNAME; ACSSUF ACSSUF; SUFDIR SUFDIR", @@ -64,6 +104,10 @@ "1": "0", "2": "1", "3": "2" + }, + "DOT_SRFTYP": { + "300": "N", + "GRAVEL": "I" } } }, @@ -73,7 +117,14 @@ "exclude_if_any": "S_SURF=400,410,420,430,440", "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PRE_DIR; NAME=S_NAME; POSTDIR=SUF_DIR; AN_NAME=ACS_ALIAS; A1_NAME=ALIAS1; A2_NAME=ALIAS2; LOCAL_UID=CO_UNIQUE; STATUS=STATUS_; POSTTYPE=S_TYPE; DOT_CLASS=CLASS; ONEWAY=ONE_WAY; DOT_SRFTYP=S_SURF2; SPEED_LMT=SPD_LMT; A1_POSTTYPE=ALIAS1_TYP; A2_POSTTYPE=ALIAS2_TYP", "fips": "49015 - Emery", - "match_fields": "S_NAME S_NAME" + "match_fields": "S_NAME S_NAME", + "value_mappings": { + "DOT_SRFTYP": { + "300": "N", + "320": "N", + "MAINTAINED NATIVE": "N" + } + } }, "garfield": { "compare_fields": "FROMADDR_L FROMADDR_L; TOADDR_L TOADDR_L; FROMADDR_R FROMADDR_R; TOADDR_R TOADDR_R; NAME NAME; PREDIR PREDIR; POSTDIR POSTDIR; POSTTYPE POSTTYPE; AN_NAME AN_NAME; A1_NAME A1_NAME; A2_NAME A2_NAME", @@ -93,7 +144,22 @@ "ACSALIAS", "ALIAS1", "ALIAS2" - ] + ], + "value_mappings": { + "DOT_CLASS": { + "BLM": "F", + "DWR": "A", + "FS": "F" + }, + "DOT_SRFTYP": { + "100": "P", + "200": "I", + "300": "N" + }, + "SPEED_LMT": { + "0": "25" + } + } }, "iron": { "compare_fields": "PREDIR PREDIR; STREETNAME STREETNAME; STREETTYPE STREETTYPE; SUFDIR SUFDIR; ALIAS1 ALIAS1; ALIAS1TYPE ALIAS1TYPE; ALIAS2 ALIAS2; ALIAS2TYPE ALIAS2TYPE; ACSALIAS ACSALIAS; ACSNAME ACSNAME; ACSSUF ACSSUF; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD", @@ -105,6 +171,18 @@ "1": "0", "2": "1", "3": "2" + }, + "DOT_SRFTYP": { + "100": "P", + "200": "I", + "300": "N", + "999": "U" + }, + "POSTTYPE": { + "DIR": "DR", + "LP": "LOOP", + "RDE": "RD", + "WY": "WAY" } } }, @@ -114,7 +192,18 @@ "exclude_if_any": "SURFTYPE=400,410,420,430,440,999", "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PREDIR_; NAME=STREETNAME; POSTDIR=SUFDIR; AN_NAME=ACSNAME; A1_NAME=ALIAS1; A2_NAME=ALIAS2; LOCAL_UID=COUNIQUE; STATUS=STATUS_; POSTTYPE=STREETTYPE; A1_POSTTYPE=ALIAS1TYPE; A2_POSTTYPE=ALIAS2TYPE; DOT_CLASS=CLASS; ONEWAY=ONEWAY_; DOT_SRFTYP=SURFTYPE; CARTOCODE=CARTOCODE_; SPEED_LMT=SPEED", "fips": "49025 - Kane", - "match_fields": "STREETNAME STREETNAME" + "match_fields": "STREETNAME STREETNAME", + "value_mappings": { + "POSTTYPE": { + "LP": "LOOP", + "SST": "ST", + "TR": "TER", + "WY": "WAY" + }, + "SPEED_LMT": { + "0": "25" + } + } }, "millard": { "compare_fields": "PREDIR PREDIR; FULLNAME FULLNAME; STREETTYPE STREETTYPE; SUFDIR SUFDIR; ALIAS1 ALIAS1; ALIAS1TYPE ALIAS1TYPE; ALIAS2 ALIAS2; ALIAS2TYPE ALIAS2TYPE; L_F_ADD L_F_ADD; L_T_ADD L_T_ADD; R_F_ADD R_F_ADD; R_T_ADD R_T_ADD", @@ -140,7 +229,27 @@ "field_mappings": "FROMADDR_L=L_F_ADD; TOADDR_L=L_T_ADD; FROMADDR_R=R_F_ADD; TOADDR_R=R_T_ADD; PREDIR=PRE_DIR; NAME=S_NAME; LOCAL_UID=CO_UNIQUE; POSTTYPE=S_TYPE; A1_POSTTYPE=ALIAS1_TYP; A2_POSTTYPE=ALIAS2_TYP; ONEWAY=ONE_WAY; DOT_SRFTYP=S_SURF; SPEED_LMT=SPD_LMT", "fips": "49033 - Rich", "match_fields": "S_NAME S_NAME", - "parse_sources": "ALIAS1=A1; ALIAS2=A2; ACS_ALIAS=A1" + "parse_sources": "ALIAS1=A1; ALIAS2=A2; ACS_ALIAS=A1", + "value_mappings": { + "DOT_SRFTYP": { + "100": "P", + "115": "P", + "200": "I", + "210": "I", + "211": "I", + "221": "I", + "223": "I", + "300": "N", + "310": "N", + "320": "N" + }, + "POSTTYPE": { + "CR": "CIR" + }, + "SPEED_LMT": { + "0": "25" + } + } }, "saltlake": { "compare_fields": "PREDIR PREDIR; NAME NAME; POSTTYPE POSTTYPE; POSTDIR POSTDIR; AN_NAME AN_NAME; AN_POSTDIR AN_POSTDIR; FROMADDR_L FROMADDR_L; TOADDR_L TOADDR_L; FROMADDR_R FROMADDR_R; TOADDR_R TOADDR_R", @@ -153,7 +262,20 @@ "field_mappings": "NAME=S_NAME; LOCAL_UID=CO_UNIQUE; DOT_CLASS=CLASS", "fips": "49037 - San Juan", "match_fields": "S_NAME S_NAME", - "parse_sources": "S_NAME=PRIMARY" + "parse_sources": "S_NAME=PRIMARY", + "value_mappings": { + "DOT_CLASS": { + "B ROAD": "B", + "C ROAD": "C", + "D ROAD": "D", + "FEDERAL": "F", + "PRIVATE": "P", + "PRIVATE ROAD": "P", + "STATE HIGHWAY": "A", + "UDOT": "A", + "US HIGHWAY": "A" + } + } }, "sanpete": { "compare_fields": "", @@ -183,7 +305,11 @@ "field_mappings": "FULLNAME=FULLNAME_; FROMADDR_L=FROMADDR_L_; TOADDR_L=TOADDR_L_; FROMADDR_R=FROMADDR_R_; TOADDR_R=TOADDR_R_; PREDIR=PREDIR_; NAME=NAME_; POSTTYPE=POSTTYPE_; POSTDIR=POSTDIR_; AN_NAME=AN_NAME_; A1_NAME=A1_NAME_; A2_NAME=A2_NAME_; LOCAL_UID=LOCAL_UID_", "fips": "49045 - Tooele", "match_fields": "FULLNAME FULLNAME", - "uppercase_normalize_fields": ["FULLNAME", "A1_NAME", "A2_NAME"] + "uppercase_normalize_fields": [ + "FULLNAME", + "A1_NAME", + "A2_NAME" + ] }, "uintah": { "compare_fields": "toleft toleft; toright toright; fromleft fromleft; fromright fromright; S_NAME S_NAME; ALIAS1 ALIAS1", @@ -192,7 +318,15 @@ "fips": "49047 - Uintah", "match_fields": "S_NAME S_NAME", "parse_sources": "S_NAME=PRIMARY; ALIAS1=A1", - "uppercase_normalize_fields": ["S_NAME", "ALIAS1"] + "uppercase_normalize_fields": [ + "S_NAME", + "ALIAS1" + ], + "value_mappings": { + "SPEED_LMT": { + "0": "25" + } + } }, "utah": { "compare_fields": "ROADPREDIR ROADPREDIR; ROADNAME ROADNAME; ROADTYPE ROADTYPE; ROADPOSTDIR ROADPOSTDIR; ALTROADNAME ALTROADNAME; ALTROADTYPE ALTROADTYPE; ALTROADNAME2 ALTROADNAME2; ALTROADTYPE2 ALTROADTYPE2; FROMLEFT FROMLEFT; TOLEFT TOLEFT; FROMRIGHT FROMRIGHT; TORIGHT TORIGHT", @@ -200,14 +334,24 @@ "field_mappings": "FROMADDR_L=FROMLEFT; TOADDR_L=TOLEFT; FROMADDR_R=FROMRIGHT; TOADDR_R=TORIGHT; PREDIR=ROADPREDIR; NAME=ROADNAME; POSTTYPE=ROADTYPE; POSTDIR=ROADPOSTDIR; A1_NAME=ALTROADNAME; A1_POSTTYPE=ALTROADTYPE; A2_NAME=ALTROADNAME2", "fips": "49049 - Utah", "match_fields": "ROADNAME ROADNAME", - "rules": ["remove_posttype_if_numeric"] + "rules": [ + "remove_posttype_if_numeric" + ], + "value_mappings": { + "POSTTYPE": { + "OFF": "RAMP", + "ON": "RAMP" + } + } }, "wasatch": { "compare_fields": "FROMADDR_L FROMADDR_L; TOADDR_L TOADDR_L; FROMADDR_R FROMADDR_R; TOADDR_R TOADDR_R; FULLNAME FULLNAME; PREDIR PREDIR; AN_NAME AN_NAME", "field_mappings": "FULLNAME=FULLNAME_; FROMADDR_L=FROMADDR_L_; TOADDR_L=TOADDR_L_; FROMADDR_R=FROMADDR_R_; TOADDR_R=TOADDR_R_; PREDIR=PREDIR_; NAME=NAME_; POSTTYPE=POSTTYPE_; POSTDIR=POSTDIR_; AN_NAME=AN_NAME_; LOCAL_UID=LOCAL_UID_", "fips": "49051 - Wasatch", "match_fields": "FULLNAME FULLNAME", - "uppercase_normalize_fields": ["FULLNAME"] + "uppercase_normalize_fields": [ + "FULLNAME" + ] }, "washington": { "compare_fields": "FROMADDR_L FROMADDR_L; TOADDR_L TOADDR_L; FROMADDR_R FROMADDR_R; TOADDR_R TOADDR_R; PREDIR PREDIR; NAME NAME; POSTTYPE POSTTYPE; POSTDIR POSTDIR; SUFFIXDIR SUFFIXDIR; AN_NAME AN_NAME; AN_POSTDIR AN_POSTDIR; A1_NAME A1_NAME; A1_POSTTYPE A1_POSTTYPE; A2_NAME A2_NAME; A2_POSTTYPE A2_POSTTYPE", @@ -225,9 +369,15 @@ "parse_sources": "S_NAME=PRIMARY; ALIAS1=A1", "value_mappings": { "DOT_SRFTYP": { - "IMPROVED": "I", - "NATIVE": "N", - "PAVED": "P" + "100": "P", + "115": "P", + "200": "I", + "GRAVEL": "I", + "IMPROV_AGG/GRAVEL": "I", + "IMPROV_CRUSHED_AGG": "I", + "IMPROV_GRAVEL": "I", + "IMPROV_MAG_CHLORID": "I", + "PAVED_ASPHALT": "P-ASP" } } }, @@ -237,6 +387,19 @@ "field_mappings": "FROMADDR_L=LEFTFROM; TOADDR_L=LEFTTO; FROMADDR_R=RIGHTFROM; TOADDR_R=RIGHTTO; PREDIR=PREDIR; NAME=S_NAME; POSTTYPE=STREETTYPE; POSTDIR=SUFDIR; SPEED_LMT=SPEEDLIMIT; LOCAL_UID=S_UNIQUE", "fips": "49057 - Weber", "match_fields": "S_NAME S_NAME", - "rules": ["remove_postdir_if_alpha", "remove_posttype_if_numeric"] + "rules": [ + "remove_postdir_if_alpha", + "remove_posttype_if_numeric" + ], + "value_mappings": { + "POSTTYPE": { + "CRT": "CT" + }, + "SPEED_LMT": { + "0": "25", + "1": "25", + "19": "20" + } + } } } From 882d12285883391d0ab78b0b0b85c07673fe177d Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Thu, 27 Aug 2026 16:57:57 -0600 Subject: [PATCH 08/14] chore(cli): add full output path to outputs --- cli/src/utrans/detect_changes.py | 1 + cli/src/utrans/recent_edits.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py index 8daafb5..78996e6 100644 --- a/cli/src/utrans/detect_changes.py +++ b/cli/src/utrans/detect_changes.py @@ -135,6 +135,7 @@ def run_detect_changes( changed_layer = "detect_changes_output" arcpy.management.MakeFeatureLayer(dfc_output, changed_layer, CHANGE_FILTER) + log(f"Creating detect-changes output test feature class: {test_output}") arcpy.management.CopyFeatures(changed_layer, test_output) arcpy.management.Append(changed_layer, APPEND_TARGET, "NO_TEST") log(f"Appended changed features to {APPEND_TARGET}") diff --git a/cli/src/utrans/recent_edits.py b/cli/src/utrans/recent_edits.py index 1883353..e21e46b 100644 --- a/cli/src/utrans/recent_edits.py +++ b/cli/src/utrans/recent_edits.py @@ -329,7 +329,7 @@ def run_change_detection( ) log("DetectFeatureChanges finished") - log(f"Creating changed-road output feature class: {DEFAULT_RECENTS_NAME}") + log(f"Creating changed-road output feature class: {out_feature}") arcpy.env.qualifiedFieldNames = False roads_layer = "roads_lyr" From f6c42d15c3426c1447e45265e099deab5513d3c1 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Thu, 27 Aug 2026 17:02:03 -0600 Subject: [PATCH 09/14] chore(cli): fix formatting --- cli/scripts/discover_value_mappings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cli/scripts/discover_value_mappings.py b/cli/scripts/discover_value_mappings.py index 1d2ed6b..782c167 100644 --- a/cli/scripts/discover_value_mappings.py +++ b/cli/scripts/discover_value_mappings.py @@ -30,8 +30,7 @@ import csv import json from collections import Counter -from decimal import InvalidOperation -from decimal import Decimal +from decimal import Decimal, InvalidOperation from pathlib import Path from typing import Any From 52fd3a77d6abef9b39d0031cb94ee9be949e9d9b Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Fri, 28 Aug 2026 05:24:05 -0600 Subject: [PATCH 10/14] chore(cli): make cli help more clear Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- cli/src/utrans/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/utrans/cli.py b/cli/src/utrans/cli.py index 08e0498..b667dae 100644 --- a/cli/src/utrans/cli.py +++ b/cli/src/utrans/cli.py @@ -28,7 +28,7 @@ def build_parser() -> argparse.ArgumentParser: ) subparsers.add_parser( "detect-changes", - help="Detect and optionally publish changes from ETL-produced roads.", + help="Detect and publish changes from ETL-produced roads.", ) return parser From 836c6ab5a65201ab2e6ea1585d12a52922f0a34f Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Fri, 28 Aug 2026 05:34:17 -0600 Subject: [PATCH 11/14] chore(cli): add --append-target parameter --- cli/README.md | 4 ++-- cli/src/utrans/detect_changes.py | 16 +++++++++------- cli/tests/test_detect_changes.py | 8 +++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cli/README.md b/cli/README.md index a75490f..20b7822 100644 --- a/cli/README.md +++ b/cli/README.md @@ -64,9 +64,9 @@ The output is written to the geodatabase containing `--source-features`. It cont Process ETL output against a previous UTRANS road feature class: ```powershell -utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon.gdb\county_etl" --utrans-features "Z:\Documents\gdb\UTRANS.gdb\Roads" +utrans detect-changes --county Carbon --update-features "Z:\Documents\gdb\Carbon.gdb\county_etl" --utrans-features "Z:\Documents\gdb\UTRANS.gdb\Roads" --append-target "Database Connections\internal.sde\UTRANS.DFC_RESULT" ``` -The command writes outputs to the geodatabase containing `--update-features`. It uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to the fixed UTRANS DFC. +The command writes outputs to the geodatabase containing `--update-features`. It uses the `NAME` matching and comparison fields, adds DFC editor metadata, creates `TEST_DFC_RESULT` with `NC` and `D` changes excluded, and appends the filtered result to `--append-target`. Run `utrans detect-changes --help` for the remaining options. diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py index 78996e6..690796a 100644 --- a/cli/src/utrans/detect_changes.py +++ b/cli/src/utrans/detect_changes.py @@ -32,11 +32,6 @@ CHANGE_FILTER = "CHANGE_TYPE NOT IN ('NC', 'D')" SEARCH_DISTANCE = "50" CHANGE_TOLERANCE = "50" -APPEND_TARGET = ( - r"Database Connections\DC_TRANSADMIN@UTRANS@utrans.agrc.utah.gov.sde" - "\\" - r"UTRANS.TRANSADMIN.Centerlines_Edit\UTRANS.TRANSADMIN.DFC_RESULT" -) def extract_fips(fips_setting: str) -> str: @@ -102,6 +97,7 @@ def run_detect_changes( update_features: str, base_features: str, fips: str, + append_target: str, ) -> tuple[str, str]: arcpy.env.overwriteOutput = True output_workspace = get_output_workspace(update_features) @@ -137,8 +133,8 @@ def run_detect_changes( arcpy.management.MakeFeatureLayer(dfc_output, changed_layer, CHANGE_FILTER) log(f"Creating detect-changes output test feature class: {test_output}") arcpy.management.CopyFeatures(changed_layer, test_output) - arcpy.management.Append(changed_layer, APPEND_TARGET, "NO_TEST") - log(f"Appended changed features to {APPEND_TARGET}") + arcpy.management.Append(changed_layer, append_target, "NO_TEST") + log(f"Appended changed features to {append_target}") return dfc_output, test_output finally: if arcpy.Exists(base_layer): @@ -162,6 +158,11 @@ def build_parser(prog: str | None = None): parser.add_argument( "--utrans-features", required=True, help="UTRANS baseline road feature class." ) + parser.add_argument( + "--append-target", + required=True, + help="Feature class to receive the filtered change features.", + ) parser.add_argument( "--profiles", type=Path, help="Path to a custom profiles JSON file." ) @@ -180,6 +181,7 @@ def main(argv=None, *, prog: str | None = None): args.update_features, args.utrans_features, fips, + args.append_target, ) except RuntimeError as exc: log(str(exc)) diff --git a/cli/tests/test_detect_changes.py b/cli/tests/test_detect_changes.py index 96d7de2..c7c789c 100644 --- a/cli/tests/test_detect_changes.py +++ b/cli/tests/test_detect_changes.py @@ -35,7 +35,7 @@ def test_parser_does_not_require_county_field_configuration(): assert "dfc_output_name" not in actions assert "stats_table_name" not in actions assert "test_output_name" not in actions - assert "append_target" not in actions + assert "append_target" in actions assert "utrans_features" in actions assert "output_workspace" not in actions @@ -119,7 +119,7 @@ def test_run_detect_changes_uses_shared_filter_and_appends_to_utrans(monkeypatch "get_output_workspace", Mock(return_value="workspace"), ) - detect_changes.run_detect_changes("update", "base", "49035") + detect_changes.run_detect_changes("update", "base", "49035", "append-target") make_feature_layer.assert_any_call( "base", "detect_changes_base", "COUNTY_L = '49035' OR COUNTY_R = '49035'" @@ -132,9 +132,7 @@ def test_run_detect_changes_uses_shared_filter_and_appends_to_utrans(monkeypatch copy_features.assert_called_once_with( "detect_changes_output", os.path.join("workspace", "TEST_DFC_RESULT") ) - append.assert_called_once_with( - "detect_changes_output", detect_changes.APPEND_TARGET, "NO_TEST" - ) + append.assert_called_once_with("detect_changes_output", "append-target", "NO_TEST") def test_extract_fips_rejects_invalid_profile_value(): From 228812fe80d7860933216e600a3366d1ba763f4c Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Fri, 28 Aug 2026 05:36:18 -0600 Subject: [PATCH 12/14] chore(cli): more defensive resolving of field mappings Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- cli/src/utrans/detect_changes.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py index 690796a..35f9526 100644 --- a/cli/src/utrans/detect_changes.py +++ b/cli/src/utrans/detect_changes.py @@ -78,9 +78,12 @@ def _resolve_field_mapping(feature_classes: tuple[str, ...], mapping: str) -> st {field.name.upper() for field in arcpy.ListFields(feature_class)} for feature_class in feature_classes ] - pairs = [] + pairs: list[str] = [] for token in mapping.split(";"): - update_field, base_field = token.strip().split() + parts = token.strip().split() + if len(parts) < 2: + continue + update_field, base_field = parts[0], parts[1] if all( update_field.upper() in fields and base_field.upper() in fields for fields in available_fields @@ -92,7 +95,6 @@ def _resolve_field_mapping(feature_classes: tuple[str, ...], mapping: str) -> st ) return "; ".join(pairs) - def run_detect_changes( update_features: str, base_features: str, From 252f524ba59755c1bc459eae8f6b9df1087b1394 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Fri, 28 Aug 2026 05:36:31 -0600 Subject: [PATCH 13/14] chore(cli): more explicit distance parameters --- cli/src/utrans/detect_changes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py index 35f9526..e18a2ff 100644 --- a/cli/src/utrans/detect_changes.py +++ b/cli/src/utrans/detect_changes.py @@ -30,8 +30,8 @@ STATS_TABLE_NAME = "new_roads_stats" TEST_OUTPUT_NAME = "TEST_DFC_RESULT" CHANGE_FILTER = "CHANGE_TYPE NOT IN ('NC', 'D')" -SEARCH_DISTANCE = "50" -CHANGE_TOLERANCE = "50" +SEARCH_DISTANCE = "50 Feet" +CHANGE_TOLERANCE = "50 Feet" def extract_fips(fips_setting: str) -> str: From 0f3b2b590686d186f891bd6cac74dee915263fc4 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Fri, 28 Aug 2026 05:37:42 -0600 Subject: [PATCH 14/14] chore(cli): format --- cli/src/utrans/detect_changes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/src/utrans/detect_changes.py b/cli/src/utrans/detect_changes.py index e18a2ff..3326108 100644 --- a/cli/src/utrans/detect_changes.py +++ b/cli/src/utrans/detect_changes.py @@ -95,6 +95,7 @@ def _resolve_field_mapping(feature_classes: tuple[str, ...], mapping: str) -> st ) return "; ".join(pairs) + def run_detect_changes( update_features: str, base_features: str,