Commit graph

125 commits

Author SHA1 Message Date
d6aa125215 feat: unified routing UI with wilderness + network segments
- Single routing system (removed duplicate Valhalla-only flow)
- Unified radial menu: From here, To here, Clear, Save, Measure
- Removed "Offroute" section from panel (single directions display)
- Better error messages without technical "Offroute" prefix
- ManeuverList shows wilderness + network breakdown
- PlaceCard integration for previews

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-08 19:03:44 +00:00
95dd4438fe docs: add traffic-intelligent routing and Idaho 511 planned features
- Append section 11 (On-Network Traffic Intelligence) to OFFROUTE-ARCHITECTURE.md
- Create navi-feature-ideas.md with planned features:
  - Traffic-aware Valhalla routing via TomTom tiles
  - Idaho 511 incident feed integration
  - ADS-B/AIS tracking
  - TAK Server + EUD integration
  - Native iOS app

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-08 07:02:00 +00:00
400dcbb8f2 docs: add OFFROUTE effort-based routing architecture
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-07 23:22:48 +00:00
0b1854bd5f cleanup: remove dead contour-test code and stale fallback config
- Remove contours-test.pmtiles and contours-test-10ft.pmtiles references
  (files deleted, feature flags disabled)
- Update fallback tileset URL from na.pmtiles to planet/current.pmtiles
- Remove has_contours_test and has_contours_test_10ft from fallback config
- Delete 46 .bak* files from src/

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-07 21:56:14 +00:00
5df01b1428 fix: use Noto Sans Medium for contour labels (Bold not in protomaps assets) 2026-05-07 14:18:18 +00:00
400c485833 fix: contour overlay with pmtiles fork, absolute URL, extended zoom range
- Switch to @acalcutt/maplibre-contour-pmtiles for PMTiles support
- Use absolute URL for DemSource so Web Worker can resolve path
- Extend contour thresholds from z3-z15 for full zoom coverage
- Improve line styling with zoom-dependent width
- Improve label styling with bold font and better halo

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-07 03:58:46 +00:00
f3ec18bdf5 wip: contour overlay — broken, needs review 2026-05-07 02:54:25 +00:00
238fc68546 fix(map): Prefer full state names over abbreviations
Coalesce order: name -> ref -> name:short
Shows California not CA

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 19:42:46 +00:00
bb164965ef fix(map): Fix state labels by using coalesce fallback for text-field
The protomaps theme generates text-field expressions using name:short,
but the PMTiles data doesn't have that property. States have 'ref' (e.g.
'CA', 'ON') and 'name' (e.g. 'California', 'Ontario').

- Use coalesce expression: name:short -> ref -> name
- Expand zoom ranges slightly: country z1-5, region z4-8
- Verified fix in built JS before deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 19:36:58 +00:00
5fcd6cda9a fix(map): Set exact label zoom ranges for hierarchy
places_country:  z1-z4 (countries visible at world view, fade at z4)
places_region:   z4-z7 (states appear at z4, fade as cities dominate)
places_locality: unchanged (follows natural min_zoom in tiles)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 19:17:56 +00:00
83e8ffeb2d fix(map): Show state/province labels at lower zoom levels
Adjust label zoom ranges after style load for proper hierarchy:
- Countries (places_country): visible from z2+
- States/provinces (places_region): visible from z3+
- Cities follow their natural min_zoom in the tile data

This ensures states like Idaho and Oregon appear before cities
like Boise and Portland when zoomed out. The setLayerZoomRange
calls are made in applyBaseLabelStyling() which runs after style
load and theme changes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 19:10:45 +00:00
c14edb0e53 feat(map): Add state/province boundary lines at z4-z7
Fix D: State and province administrative boundaries are now visible
at low zoom levels (z4-z7) with theme-aware styling.

- Added STATE_BOUNDARIES_LAYER constant
- Added addStateBoundaries() function that creates a line layer
  filtering on kind_detail = 4 (state/province level)
- Uses dashed line style with opacity interpolation
- Layer uses theme boundaries color for consistency
- Layer is re-added on theme change to update colors

The layer renders below labels and provides subtle but visible
state/province boundaries when zoomed out viewing country-level
maps. Line width and opacity increase as you zoom in from z4 to z7.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 19:06:33 +00:00
1ad43e58cf fix(map): Unify label/polygon click paths and fix boundary fitBounds
Fix A: Label click now also queries polygon layers
- When clicking park/forest/cemetery labels, also query landuse_park
  fill layer to get polygon geometry
- If polygon found, use it as boundary directly from rendered tiles
- Eliminates need for API round-trip for park boundaries

Fix B: Boundary fitBounds behavior changed
- If boundary EXISTS: ALWAYS fitBounds (zoom in OR out) to show
  the full boundary - the boundary defines what user should see
- If NO boundary: NEVER change zoom for map clicks/label clicks
- Search results: fly to center but preserve current zoom level

Removed previous z14 cap and zoom-in-only logic - boundaries now
always control the camera as expected.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 18:45:41 +00:00
62669fc7de fix(map): Always zoom in to fit boundaries, never zoom out
Replace blanket z14 cap with zoom-in-only logic for boundary fitBounds:
- target.zoom > currentZoom → zoom IN to fit boundary (always allowed)
- target.zoom < currentZoom → skip fitBounds (never zoom out)
- target.zoom == currentZoom → allow pan to center

This means:
- Click Portland at z5 → fly in to ~z10 to show city boundary
- Click Idaho at z5 → fly in to ~z6 to show state boundary
- Click Portland at z15 → boundary draws, camera stays at z15

The z14 cap for selectedPlace flyTo (search results without boundary)
is preserved - that only affects the initial flyTo to coordinates.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 18:36:07 +00:00
bd372b9dc9 fix(map): Prevent camera zoom-out when clicking features
- Track place identity with lastFlyTargetRef to avoid re-flying on
  metadata updates (boundary, wikidata, etc.)
- Only flyTo on NEW place selection, not subsequent store updates
- Apply z14 threshold to all camera movements:
  - flyTo for search results: only if currentZoom < 14
  - fitBounds for boundaries: only if currentZoom < 14
- At z14+ camera stays put, boundary draws silently

Fixes zoom-out bug where clicking a feature at high zoom would
zoom back out to z14.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 18:07:21 +00:00
869391ee4e fix(ux): Three UX improvements for feature selection
Fix 1: Never zoom out when clicking a feature - preserves user's
intentional zoom level by checking cameraForBounds before fitBounds

Fix 2: Single-click to switch between features - clicking outside
the current feature's circle clears selection and selects new feature

Fix 3: View mode toggle reflects saved state on load - initialize
viewMode from localStorage on store creation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 16:57:32 +00:00
cd080b42f3 fix: Set osm_type/osm_id from wikidata response for wiki summaries
When clicking basemap labels, reverse geocode is now skipped to avoid
entity corruption. The wikidata effect needs to set osm_type/osm_id
from the osm_relation_id in the response to trigger Effect 3 which
fetches the wiki summary from /api/place/R/{id}.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 05:04:34 +00:00
3158537488 fix: Correct MultiPolygon coordinate flattening for fitBounds
MultiPolygon coordinates need .flat(2) not .flat(1) to get actual
coordinate pairs. With flat(1), we were iterating over rings instead
of coordinates, causing invalid lat values > 90.

Also added bounds validation before fitBounds to catch future issues.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 05:01:02 +00:00
1bccfad22b fix: Skip reverse geocode for basemap label clicks
When clicking a basemap label (city, town, POI), we already know the
entity from the label properties (name, kind, wikidata). Running
fetchReverse at those coordinates would return the nearest POI which
could be a different entity (e.g., clicking Portland returns Stumptown
Coffee), corrupting the place identity.

Now skips reverse geocode when source=basemap_label and raw.kind exists.
The wikidata lookup path still handles fetching boundaries and OSM data.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 04:49:51 +00:00
6245ecc206 feat: switch to global planet PMTiles for worldwide vector coverage
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 03:33:15 +00:00
88fcb48eaa Revert "feat: switch to global planet PMTiles for worldwide vector coverage"
This reverts commit a07b33db6d.
2026-05-02 03:24:32 +00:00
a07b33db6d feat: switch to global planet PMTiles for worldwide vector coverage
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 03:24:12 +00:00
66f91fd379 fix: Properly restore layers when switching view modes
Three bugs fixed:
1. Map mode now restores all hidden layers - using separate tracking
   arrays for fills, lines, and symbols that persist across mode switches
2. Satellite mode now hides ALL vector layers (fills, lines, symbols)
   for true satellite-only view
3. Hybrid mode keeps lines and symbols visible for road/label overlay

Each mode switch first restores all layers to a clean slate before
hiding the appropriate ones for that mode.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 02:19:28 +00:00
4c1921d116 fix: Hide background layer in satellite mode
The background layer type was not being hidden, causing it to cover
the satellite imagery. Now hideVectorFills hides fill, fill-extrusion,
AND background layer types.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 02:08:59 +00:00
e786bb8870 feat: Add satellite imagery with Map/Satellite/Hybrid view modes
- Add viewMode state to store with localStorage persistence
- Add satellite layer functions to MapView (ESRI World Imagery via nginx proxy)
- Add view mode segmented control in LayerControl popover
- Add view-mode-control CSS styles
- Hide/show vector fills and lines based on view mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 02:01:56 +00:00
5299376fec fix(ui): Move control cluster up to clear attribution and scale
- Control cluster now at bottom: 80px (was 40px)
- Scale bar at bottom: 24px (above attribution)
- Mobile adjusted to bottom: 70px
- Clear visual separation: buttons > scale > attribution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 23:45:55 +00:00
67779dbbf7 feat(ui): Redesign bottom-right map control cluster
- Increase touch targets from 36px to 44px (meets accessibility guidelines)
- Wrap Locate and Layers buttons in unified .map-controls-br container
- Layer popover now opens LEFT of buttons (avoids collision with Locate)
- Add hover and active states with theme-aware styling
- Proper spacing for scale control below the cluster
- Increased icon sizes from 18px to 20px
- Mobile-responsive with proper max-height on layer popover

Layout:
  [Locate] 44x44
  [Layers] 44x44
  ──────────────
  Scale: 0.5 mi

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 23:17:13 +00:00
9d3b972d81 feat(ui): Show theme name as picker trigger button
Replace palette icon with current theme name as clickable text.
Hover changes from --text-secondary to --text-primary.
Popover behavior unchanged.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 23:00:11 +00:00
66a35d9472 fix(ui): Use 4-column grid for theme picker
8 themes no longer fit in a single row. Changed from flex row
to a 4x2 grid layout so all themes are visible.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 22:59:24 +00:00
948871b9e5 feat(themes): Add Parchment medieval manuscript theme
Old-world cartography style inspired by hand-drawn maps. Medieval
manuscript aesthetic with warm aged parchment land, deep ultramarine
water, dark sepia ink labels, and burnt sienna roads.

Design features:
- IM Fell English font (1672 Fell typeface revival)
- Deep ultramarine water (#1a3a6a), not modern pale blue
- Olive-gold vegetation, NOT modern green
- Brown ink roads by importance
- Parchment-colored halos on all labels
- Warm dramatic hillshade terrain

The feel of a map from a monastery scriptorium or explorer journal.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 22:49:50 +00:00
78dc96551b feat(themes): Add Night Ops red-on-black theme
Tactical night operations display optimized for absolute darkness.
Inspired by military cockpit instruments, submarine control rooms,
and ship bridge displays designed for total darkness.

Design rules:
- ONLY red and black (pure monochrome red)
- Red preserves dark-adapted (scotopic) vision
- Water is pure black, no blue tint
- All features differentiated by brightness only
- Black halos on all labels
- More aggressive than Tactical for ZERO ambient light

Palette: #0a0000 base, #cc3333 primary, #551515 muted

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 22:46:01 +00:00
cc1b25e0b1 feat(themes): Add Tactical green phosphor theme
Military display aesthetic - classic green phosphor monochrome like NVGs,
submarine sonar screens, 1980s radar consoles, and green-screen terminals.

Design rules:
- ONLY green and black (exception: danger status uses orange-red)
- All features differentiated by brightness, not hue
- Water is pure black, not blue-tinted
- Text is phosphor green (#00cc44)
- Black halos on all labels

Named "Tactical" for the recon/military working display identity.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 22:40:58 +00:00
b25d6e575d refactor(themes): rename Tactical → Ranger
Pure rename, no functional changes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 22:29:11 +00:00
04e15bf3dc feat(themes): add Tactical theme - NVG-compatible mil-spec display
Dark olive/charcoal base with sage green text and amber accents.
Designed for night operations and eventual ATAK/iTAK integration:
- Low contrast for night vision compatibility
- Prominent olive-brown contours (topo-first design)
- Subdued amber roads (preserves night vision better than blue/white)
- Muted field-appropriate danger red
- No bright blues or whites anywhere
- Darkened/desaturated satellite mode

Functional, not decorative.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 22:20:06 +00:00
09369011ee fix: direct namedTheme import fixes GeoJSON rendering, guard optional layer queries
Root cause: Vite's bundling of namedTheme through the registry re-export
broke MapLibre's Web Worker, silently preventing all GeoJSON rendering
(routes, boundaries, measure tool). Fixed by importing namedTheme
directly from protomaps-themes-base in MapView.jsx.

Also guards queryRenderedFeatures calls for optional overlay layers
(USFS trails, BLM roads) that may not exist in the current style.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 21:59:04 +00:00
cf55055b62 Revert "fix(PlaceCard): prioritize wikidata path for boundary fetch"
This reverts commit 2e0a885476.
2026-05-01 18:34:36 +00:00
40855e1261 Revert "feat(themes): add theme-aware boundary highlight config"
This reverts commit fef10664c8.
2026-05-01 18:34:36 +00:00
fef10664c8 feat(themes): add theme-aware boundary highlight config
Add highlight section to overlay config for all themes with
theme-appropriate colors:
- dark: muted olive-green (#7a9a6b)
- light: forest green (#4a7040)
- clean: Google blue (#1a73e8)
- cyberpunk: electric cyan (#00f0ff)

Update addBoundaryLayer() to read config from
getOverlayConfig(themeId, "highlight") for consistent styling
across all themes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 18:26:13 +00:00
2e0a885476 fix(PlaceCard): prioritize wikidata path for boundary fetch
When clicking basemap labels with wikidata IDs (cities, parks, etc),
fetchReverse was returning the nearest POI instead of the clicked
entity, blocking the wikidata fallback that returns correct boundaries.

Changes:
- Effect 1: Skip reverse geocode when wikidataId is present
- Effect 3: Always use wikidata path when available, regardless of
  osmType/osmId presence

This fixes missing dashed outline on area feature clicks.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 18:21:20 +00:00
6fb3ee4f49 feat(themes): add Cyberpunk theme with custom fonts
Add a dark, neon-soaked, dystopian command center theme:

Map colors:
- Near-black base (#0a0a14) with blue-purple undertones
- Magenta motorways (#ff2d6b), purple primary roads (#8833aa)
- Inky dark water (#06061a), barely-visible dark teal vegetation
- Cool white labels with dark halos for readability
- Neon POI icons (cyan, magenta, green)

UI styling:
- Dark translucent panels with magenta accent borders
- Custom fonts: Orbitron (headings), Share Tech Mono (body)
- Entire UI renders in monospace terminal aesthetic
- Magenta shadows, cyan route lines, neon status colors
- Pin markers in magenta (origin) and cyan (destination)

Overlay adjustments:
- Dramatic hillshade with darker shadows
- Very subtle contours (opacityMod: 0.5)
- USFS/BLM trails in purple/magenta/cyan family
- Public lands with muted teal fills

Satellite adjustments:
- Darkened (brightnessMax: 0.30), desaturated, purple-shifted

Also adds --font-heading CSS variable to all themes for future
custom heading font support.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 18:06:43 +00:00
a7fd4e4e8c feat(themes): add theme picker with swatch previews and per-theme fonts
PART 1: Add missing CSS variables to all ui objects
- Add --bg-inset, --bg-muted for component backgrounds
- Add --success, --warning as aliases for --status-success/warning
- Add --warning-muted for warning background states
- Each theme now has 32 CSS variables

PART 2: Per-theme font support
- Move --font-sans and --font-mono from :root to ui objects
- Add fontImports array to theme config (for future custom fonts)
- applyThemeUI() now manages <link> tags for font imports
- Existing themes use empty fontImports (system fonts already loaded)

PART 3: Swatch preview colors
- Add swatch array (3 hex colors) to each theme for visual preview
- light: warm tan, sage green, khaki
- dark: dark brown, sage green, tan
- clean: light gray, Google blue, Google green
- themeList() now returns swatch in result shape

PART 4: Theme picker UI
- New ThemePicker component replaces icon toggle in header
- Palette icon trigger opens popover below
- Shows all themes as circular swatches (conic gradient)
- Active theme has accent ring indicator
- Click swatch to apply theme, closes popover
- Click outside or Escape closes popover
- Styled with current theme CSS variables

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 17:42:51 +00:00
7ec87f0945 feat(themes): add Clean theme — Google Maps-inspired style
Add a plain, utilitarian theme focused on readability and wayfinding:
- White/light gray land (#f5f5f5), soft pastel green parks (#c3ecb2)
- Gentle blue water (#aadaff) with classic road hierarchy
- White minor roads, yellow primary (#fbc02d), orange motorway (#f9a825)
- Pure white UI panels with Google-standard gray text
- All 73 protomaps flavor keys + pois + landcover objects
- Full UI CSS custom properties using Google color palette
- Overlay config for hillshade, contours, public lands, trails

Update theme switcher to cycle through all available themes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 16:27:08 +00:00
f0acea33a0 feat(themes): consolidate UI CSS properties into theme registry
- Add darkUI and lightUI objects with all 25 CSS custom properties
- Add applyThemeUI() function to apply CSS vars via JavaScript
- Update useTheme.js to call applyThemeUI() instead of setAttribute
- Remove [data-theme="dark"] and [data-theme="light"] from index.css
- Custom themes can now override individual UI properties with cascade
- Update README.md to document the ui key and cascade behavior

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 16:17:26 +00:00
9530fbbf76 Wire overlay layers to read styling from theme registry
All overlay layer add functions now read colors, opacities, and widths
from the theme registry instead of hardcoded dark/light branches.

registry.js changes:
- Add complete darkOverlay and lightOverlay config objects
- Each overlay layer has its own config section:
  - hillshade: exaggeration, illuminationDirection, shadowColor, highlightColor
  - traffic: opacity
  - contours: colors, opacities, widths (with opacityMod), label styling
  - contoursTest: cascades from contours, overrides colors
  - contoursTest10ft: cascades from contours, overrides colors
  - publicLands: per-category fill/outline colors and opacities, labels
  - usfsTrails: roads/trails colors by use type, labels
  - blmTrails: route colors by use class, labels
- Add getOverlayConfig(themeId, layerKey) function
- Contour variants cascade missing keys from same theme's contours
- Width values use self-documenting object format: { z11: 0.5, z14: 1.0 }

MapView.jsx changes:
- All 8 overlay add functions now take themeId parameter
- Functions call getOverlayConfig() to get merged config
- No hardcoded color/opacity/width values remain in overlay functions
- Theme switching re-adds all active overlays with new theme config

This is a refactor - light and dark themes render identically to before.
Custom themes can now override individual overlay styling values.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 15:48:12 +00:00
c701463283 Add theme registry for custom protomaps flavor support
Introduces src/themes/registry.js with:
- getTheme(id) - lookup theme config by ID
- getThemeColors(id) - get flavor object (namedTheme for built-ins, custom colors for others)
- getThemeSprite(id) - get sprite URL with fallback for custom themes
- themeList() - list available themes for UI

Updates MapView.jsx:
- Import registry functions instead of namedTheme directly
- buildStyle() uses getThemeColors() and getThemeSprite()
- Overlay add functions use isCurrentThemeDark() helper that checks
  registry dark flag instead of string comparison

Reference files:
- dark-flavor-reference.json - full namedTheme('dark') output (73 flat keys + pois + landcover)
- light-flavor-reference.json - full namedTheme('light') output
- README.md - schema documentation for creating custom themes

This is a refactor only - light/dark themes render identically to before.
Custom themes can now be added to registry.js with full flavor objects.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 15:27:01 +00:00
a39371a7a0 Use more distinct colors for trail types
- 4WD High Clearance: bright orange
- 4WD Low: yellow/gold (was tan)
- ATV: red (was rust)
- Single Track: purple (was dark red)
- 2WD/Easy: light yellow (was light tan)
- Non-motorized: brighter green
- Snow: blue (unchanged)

Colors now spread across spectrum for easier distinction.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-30 21:34:06 +00:00
9ae1594a4c Brighten and unify USFS/BLM trail styling
- Increase opacity to 0.9 for better visibility
- Thicker lines (2.0 -> 4.0px across zoom levels)
- Unified brighter color palette:
  - Orange: motorized/4WD high clearance
  - Amber/tan: 4WD low, bikes
  - Rust: ATV
  - Green: non-motorized (hiking/horse)
  - Blue: snow routes
- USFS trails now color-coded by allowed use
- Larger label text (11px) with better contrast

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-30 21:29:55 +00:00
c4750c94ba Filter BLM: exclude urban types, keep unknown/resource
- Exclude ARTERIAL, COLLECTOR, LOCAL, paved, highways
- Keep RESOURCE, UNKNOWN, and empty functional class
- Most BLM data has empty func class, so whitelist was too strict

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-30 21:09:16 +00:00
6aeaedbcc0 Filter BLM layer to RESOURCE class only
- Only show routes with RESOURCE functional class
- Removes all urban, local, and unknown roads
- Keeps backcountry access routes only

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-30 21:06:36 +00:00
f788aefae6 Filter out urban roads from BLM layer
- Exclude ARTERIAL and COLLECTOR functional classes
- Exclude any route with HWY_CLASS (highways)
- Keeps RESOURCE, LOCAL, and UNKNOWN in rural areas

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-30 20:58:58 +00:00