# Ohio kayak map data provenance

Checked: 2026-10-04 UTC. This is a planning snapshot, not navigation, legal advice, a current opening declaration, or a safety guarantee.

## Shippable files

- `kayak-data.json`: normalized schema, 16 corridors, 825 access records (310 planning-eligible public-listed), 293 hazard records, 14 separate emergency-only access records
- `corridors.geojson`, `accesses.geojson`, `hazards.geojson`, `emergencyAccess.geojson`: equivalent GeoJSON exports
- `qa-routes.json`: named access pairs, independent published mileage benchmarks, and expected blocked dam-crossing tests
- `osm-little-miami.geojson`: original extracted OSM main-stem and fork features, with OSM timestamp and tags, for source availability. Only the Little Miami main stem is used in the map
- `corridor-research.json`: additional source evidence and current Cuyahoga caveats; not needed by UI

## Source 1: Ohio Department of Natural Resources

Public API: https://gis2.ohiodnr.gov/arcgis/rest/services/DWC_Services/Watercraft_Paddling_Draw/MapServer

Layers: 1 Paddling Access; 2 Paddling Hazards – Dams; 3 Paddling Hazards – Other; 4 Emergency Access Only; 5 Water Trails; 6 Scenic Rivers.

Enriched access API: https://gis2.ohiodnr.gov/arcgis/rest/services/DWC_Services/Watercraft_Paddling_Query/FeatureServer/0

Snapshot counts: layer 1 823 features, layer 2 229, layer 3 63, layer 4 14, layer 5 15, layer 6 1437. Enriched inventory 1129 points. Enriched `HAZARD=0` includes emergency accesses, so use layer membership instead. One access record, ODNR ID1516, is actually a historical construction hazard; normalized output moves it from access to hazard. Three additional Blanchard public accesses are sourced from its official guide.

Coordinates: the draw point service gives LAT/LONG_ but null geometry in GeoJSON. Enriched service returns actual projected-to-WGS84 point geometry, used here. Original layer CRS is Ohio State Plane South Feet EPSG:3735 for lines, NAD83 EPSG:4269 for enriched points; queries request EPSG:4326. GeoJSON order is longitude, latitude.

Fields: `FEATURE` contains source description, restrictions and access-side notes; `WATERWAY` is exact river/fork label; `ID` is the source inventory identifier but is not globally unique: ID145 is shared by Todd Field (OBJECTID108) and Maumee Bay State Park (OBJECTID2275). Only those collisions use composite app IDs `odnr-145-108` and `odnr-145-2275`; every record retains sourceObjectId and links by exact OBJECTID. Each point geometry is taken directly from its own enriched record, never joined by nonunique ID. `Length` is repeated total waterway length, NOT individual river mile, and is deliberately not used. `Class` is an old general waterway classification, not current condition/difficulty assurance. -1 means present for amenities, not zero. No reliable last-modified date is exposed; checkedAt is retrieval date only.

Rights: service `copyrightText` and item `licenseInfo` are blank. No explicit CC0/open reuse license was verified. Do not represent ODNR state data as federally public-domain or as ODbL. Attribute “Ohio Department of Natural Resources” and link the source; preserve the unspecified-license caveat in download metadata. Public availability is not itself a license. This package uses agency geographic/factual information, not map images, logos or brochure page artwork.

Important geometric limitation: Scenic Rivers layer6 includes left/right river banks, closure lines and mismatched polygon arcs. It is NOT used for route graph construction. The water-trail lines in layer5 are actual intended trail geometries; their source coordinate order can run either direction.

## Source 2: OpenStreetMap / Geofabrik, Little Miami geometry

Snapshot: 2026-10-02T20:21:34Z, from previously downloaded Ohio extract.
- https://download.geofabrik.de/north-america/us/ohio.html
- https://www.openstreetmap.org/copyright
- https://opendatacommons.org/licenses/odbl/1-0/

Attribution: © OpenStreetMap contributors, ODbL 1.0. Keep visible OSM attribution and downloadable derived geometry/source metadata. Source extraction script is `data-tools/extract_little_miami.py`; original extract is the dated Ohio Geofabrik source listed above. `osm-little-miami.geojson` is the distributable OSM subset.

Only exact-endpoint-connected ways named `Little Miami River` with `waterway=river|stream` enter processing. Forks and short side branches are excluded. The longest main channel is clipped along water to the documented Jacoby Road access and Magrish Riverlands takeout. No gap bridging is performed. Upper Clifton/John Bryan gorge is excluded from planner coverage. OSM geometry does NOT establish navigability or legal access.

Official corridor/access corroboration:
- https://dam.assets.ohio.gov/image/upload/ohiodnr.gov/documents/parks/streammaps/LittleMiamiScenicRiver.pdf
- https://lovelandoh.gov/270/Little-Miami-Bike-Trail (southwest flow to Ohio River)
- https://www.milfordohio.org/departments/public_works_department/parks_and_recreation/jim_terrell_park.php (municipal canoe access)

## Source 3: Miami Conservancy District public-access and mile facts

- https://mcdwater.org/maps
- https://mcdwater.org/maps/getData2 (the public site's own data endpoint, discovered from map page HTML)
- https://mcdwater.org/river-fun/river-trails

Current endpoint contains 222 records: 139 River Access, 51 River Hazard, 3 Boat Ramp, 29 Points of Interest. The public map legend explicitly defines green River Access markers as public put-in/takeout. Factual identity matches were manually made by river/name, never nearest-point alone. Original ODNR coordinates are retained. MCD coordinates can be geocoded park centroids and differ by hundreds of metres; coordinates were not wholesale substituted.

River-mile values are attached to matching ODNR points only where named identity matches AND MCD/ODNR coordinates are within 180m. Larger discrepancies retain `referenceSiteRiverMile` and a coordinate-verification warning, not `riverMileVerified`. This prevents incorrect mile markers from overriding measured route distances. Independent guides corroborate Mad River Harshman Road RM3.8 and Deeds Point RM0.0.

Source updatedAt is kept where provided by MCD; it is a record edit timestamp, not an onsite condition check. No explicit source reuse license was verified; normalized output includes factual titles/miles/links and paraphrased verification notes, not MCD images or wholesale prose. Raw MCD file is research evidence, not required for publication.

## Other official operator guides

Kokosing access names and distances:
- https://knoxcountyparks.org/trails/water-trails/kokosing-river-water-trail/
- https://knoxcountyparks.org/wp-content/uploads/2021/02/KokosingRiverWaterTrail.pdf

Blanchard 11-site guide, river miles and coordinates:
- https://dam.assets.ohio.gov/image/upload/odnr/watertrails/BlanchardRiverMapGuide.pdf
- https://hancockparks.com/trails/blanchard-river-water-trail/

Black/Vermilion public water-trail access:
- https://www.loraincountymetroparks.com/activities

Olentangy official 8.94-mile corridor and dam/portage notes:
- https://columbusrecparks.com/facilities/trails/olentangy-river-water-trail/

Mahoning official guide:
- https://dam.assets.ohio.gov/image/upload/odnr/watertrails/MahoningRiverWaterTrail.pdf

Muskingum official guide and mandatory lock-condition check:
- https://dam.assets.ohio.gov/image/upload/odnr/watertrails/MuskingumRiverWaterTrail.pdf

Maumee official source:
- https://metroparkstoledo.com/trails/maumee-river-water-trail/
- https://dam.assets.ohio.gov/image/upload/odnr/coastal/ocmp/CH1_Lucas-Maumee_04142026_web.pdf

## Current Cuyahoga exclusions

- https://www.nps.gov/cuva/planyourvisit/conditions.htm (updated 2026-09-22)
- https://www.nps.gov/cuva/planyourvisit/paddling-the-river.htm (updated 2026-08-18)
- https://cuyahogariverwatertrail.org/map-2/
- https://cuyahogariverwatertrail.org/map-3/
- https://experience.arcgis.com/experience/1a2975a451d640468c2c76de356bac99

Verified: Lake Rockwell restricted no-paddle reservoir; Gorge Dam no-paddle zone; river-wide construction closure around river mile17; impassable woody debris above Rockside/Lock39. No exact current closure polygon/portage geometry was verified, so the whole Cuyahoga through-planner is conservatively disabled. It can remain visible for research/access lookup with links. Gorge removal project does not mean the hazard is removed. The source geometries can connect despite legal/current barriers.

## Routing and access contract

`corridors[]`: id, official name, displayName, exact `waterways[]`, geometry, sourceUrl, guideUrl, direction anchors/evidence where verified, routingDisabledReason where applicable.

`accesses[]`: id, name, description, waterway, coordinates, sourceUrl, kind, publicAccessStatus, planningEligible, amenities, feeOrPermitMentioned, optional verified riverMile. IDs `odnr-N` map to source ID, with OBJECTID suffixes for the two ID145 collisions. Extra Blanchard IDs are descriptive.

`public-listed` means the official record explicitly describes a public/park/agency access or an operator guide corroborates the named site. This does NOT certify a current open condition, accessible shore, unrestricted parking, ADA suitability, ownership boundary or launch fee. `listed-unverified`, `permission-required`, `commercial-verify` and `restricted-or-uncertain` are not automatically eligible. Emergency-only points are separate and never routine trip endpoints.

Hazards: all ODNR dam entries conservatively block through-routing. Do not turn a source's textual “portage left” into an invented navigable portage line. No current complete dam-removal or closure inventory exists in this package. Other obstructions may be unknown or unmapped. Verify signs/operator advice before every outing.

No straight-line paddle distance fallback. Measure along source channel polylines. Never connect tributaries by proximity, cross banks, invent portages, or close disconnected gaps. Label upstream versus downstream only from verified anchors or official mile values. Coastal/bay routes have no river downstream arrows and are not part of the downstream trip planner.

## Rebuild

Run `fetch_odnr.py` then `fetch_enriched.py` to refresh raw ODNR facts, checking schemas and counts for changes. Use the existing Geofabrik extract with `data-tools/extract_little_miami.py`. Run `normalize_data.py` then `enrich_data.py`; the enrichment contains explicit reviewed identity/source matches. Python GIS dependencies used are in `/workspace/shared/ohio-bike-data/python-libs`; set PYTHONPATH accordingly for extraction/normalization. Do not auto-run an unreviewed refresh over edited API fields or source assumptions.
