Skip to content

Evaluate regional ALPR camera awareness and optional route avoidance #407

Description

@Medformatik

Before you start

  • Searched current issues and discussions; no equivalent task was found. Related work is linked below.

Objective

Decide whether published OSM/DeFlock-style ALPR data can support useful, accurately described camera awareness and an explicit optional routing policy.

Scope

Start with one bounded region and a data/coverage audit. Distinguish ALPR/ANPR surveillance devices from speed cameras, public webcams and general CCTV. Evaluate a map layer first and a route-exposure/avoidance proof only if data quality and routing support justify it. Do not imply complete camera coverage or a surveillance-free route; no new camera reporting/editor system.

Verified current state

Rechecked against main at a8e03bc3efc49207d91f7c1855402c6cf149b8fd on October 7, 2026.

  • OSM webcam provider handles surveillance/public-camera metadata; it is not an ALPR avoidance layer.
  • OSM routing alerts classify highway speed cameras and other road hazards.
  • Valhalla provider has existing routing/closure option wiring to examine, not evidence of a camera policy.
  • No DeFlock or ALPR/ANPR-specific adapter was found in current committed TypeScript.
  • Primary candidate reference: DeFlock repository describes crowdsourced ALPR locations sourced from OSM; OSM licensing applies to OSM-derived data. DeFlock software licensing must not be substituted for data licensing.

Completion criteria

  • Document source access, snapshot/version, tagging rules, attribution/redistribution terms and geographic limitations using primary references.
  • Sample positions, device type, viewing direction, stale/removed entries and duplicates; record unknowns and reject unsupported camera classifications.
  • Define exposure matching and optional route-policy semantics separately from visualization, including direction, detour limits and no feasible alternative.
  • If routing is prototyped, demonstrate that the selected engine actually applies the policy; otherwise label it an exposure estimate, not avoidance.
  • Feature is opt-in with bounded requests/cache, source freshness and explicit incomplete-coverage wording; existing speed-camera alert behavior is preserved.
  • Publish a go/no-go and narrowly scoped implementation follow-ups with fixture tests, route comparisons, screenshots and docs. A coverage no-go is valid.

Verification approach

Use pinned regional camera fixtures and representative road geometries to test directional exposure, duplicates and missing data. Compare actual engine routes and detours with policy off/on; preserve the distinction between mapped coverage and observed real-world coverage.

Dependencies

Native route integration ultimately needs #398; map/data research does not. Reuse routing provider contracts and overlays where applicable. Select the region/source and route-policy semantics during triage before implementing either surface.

This is backlog planning, not authorization to expand the implementation beyond this scope. Resolve named decisions during triage before scheduling work.

Activity

  1. added
    integrationNew or changed data provider, source, or backend integration
    needs-triageNeeds initial review and categorization
    on Oct 6, 2026
  2. added theissue type on Oct 6, 2026
  3. Medformatik commented on Oct 7, 2026

    @Medformatik
    CollaboratorAuthor

    Pinned Aachen research archive for #407. OSM data © OpenStreetMap contributors / ODbL; license links are inside. Includes the exact query, raw response, versioned review, request costs and reproduced audit/GeoJSON. No camera imagery or observed vehicles/plates. Positions/current presence are unverified; production awareness and route avoidance are no-go.

    The available CLI accepts image/video attachments only, and the collaborative browser is signed out. To preserve the exact evidence outside Git without requiring an interactive login, this comment contains the ZIP as Base64. It is 18,777 bytes compressed, with SHA-256 14a07b9c4c497b5e06f4c347e6bdccd99202a5c93e45fe3f36f4f79ac3c054e2.

    Save this comment body as archive-comment.md, then decode locally:

    import base64, hashlib, re
    from pathlib import Path
    text = Path("archive-comment.md").read_text()
    encoded = re.search(r"```base64\n(.*?)\n```", text, re.S).group(1)
    data = base64.b64decode(encoded)
    assert hashlib.sha256(data).hexdigest() == "14a07b9c4c497b5e06f4c347e6bdccd99202a5c93e45fe3f36f4f79ac3c054e2"
    Path("aachen-camera-audit.zip").write_bytes(data)

    The comment body can also be retrieved through gh api repos/OpenMapX/openmapx/issues/comments/COMMENT_ID --jq .body. Its URL supplies COMMENT_ID after publication. A future authorized binary archive destination can replace the encoding while retaining this checksum.

    Reproduction ZIP encoded as Base64
    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
    fFld1cvb63pZLRZFOXgO7INYzZZqVIiNjFLBJ9Mm4snsGcMweLHJGwa1kYFPrhUjse0gYBcATUzYgsF39gjOBon5HEiApHu1R12D
    Q78X3c4peeyH949Pz0AcjBfXC2Q5nM9DDiibDrxFmm/Q5C1orem3Looc66v8C3ixaprVzbKumv8Be44oOk/afytMv9EfRtwhc8Qt
    HCXuJiT4sMqAShCPFkg8m3PUsP4posycB8nlxc4NTmNzak1M4HZdEJPLc54D69AwiBI71jNc7nhKNtDP3r4BUEsDBBQAAAAIABca
    R10ddx1TEQAAAA8AAAARAAAAZG93bmxvYWQtY29zdC50eHQzMTBTMFAw0DM0MzI3NuACAFBLAwQUAAAACAAXGkddbn1buTAAAAAx
    AAAAEgAAAGRvd25sb2FkLWVycm9yLnR4dEsuLcqxUtAwMtJUCMlIVShKLSxNLS5JTVEIDfIB8kpKi/KAnNSiovwiKwUTAzMuAFBL
    AwQUAAAACAAzG0ddRJY9kxYAAAAUAAAAGgAAAGRvd25sb2FkLWNvc3QtZmFsbGJhY2sudHh0MzIwULA0NLUwUDA00jMyMTezNOEC
    AFBLAwQUAAAACAAtG0ddAAAAAAIAAAAAAAAAGwAAAGRvd25sb2FkLWVycm9yLWZhbGxiYWNrLnR4dAMAUEsDBBQAAAAIANYbR13H
    9MbnDhAAABvvAAASAAAAcmVzdWx0cy9hdWRpdC5qc29u5Z3djtvKkYDvz1MIc300rqr+Z66MTbA32c3BenYvEuSCkjhjbWRRS1F2
    BsF5oLzGPtl2NSV67PQ5yxYD2DUCjMGYojj61N3VVdX187cfFou74/p986H+r6Y7btv9XbXAH/lq3ffddnXqh2t3//v3xR8Ozf5d
    3zVN/2/1YbFu98MNbXe8S+/YbdfN/tjw3X/47er3S7yHL174z27Hr73v+8OxevPm06dP92185DE98kN9uG+7pzfr9vDcbZ/e98Nb
    1+3Hpquf0kO3+3X74bBr+mZ47dieunXz8pF886E+Hu8P3fZj3Tf36/bxsWne1Iftm+2+jy928d3d+dH1oT91zeZtz48gILtEWIJ7
    AKzIVMrfG1R/PP+pfX04vm/7F/eCW5J/AKrQVujP961W7V/jHX+Kvy8W9h70j+k3A/fO/Hi+iGq86OMvf05v3O4Pp/7d+5qM5b9Q
    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
    b2pzb25QSwUGAAAAAAwADADxAgAAUkYAAAAA
    
  4. Medformatik commented on Oct 7, 2026

    @Medformatik
    CollaboratorAuthor

    Implemented the bounded regional audit in PR #427, final commit f3dfcec.

    The Aachen source contains 239 objects and two explicitly tagged ALPR records. Versioned review excludes one record whose source says the actual position is unknown; one unverified parking-camera point remains. The prototype export is useful for research; production awareness and route avoidance remain no-go. The source snapshot is 70.965 days old, and no independent physical survey or precision/recall measurement is claimed.

    The reusable local-file tool rejects incomplete responses, invalid/stale identities, inactive/planned cameras, nonregular files and actual oversized reads. It exports attributed audit JSON and unverified GeoJSON without fetching data or changing application routing/UI.

    Validation: 45 focused tests, 44 existing webcam/routing/CI preservation tests, and the final mandatory full suite (1,612 files / 17,712 tests passed; 138 opt-in tests skipped). Workspace and tool types, lint, policy/OpenAPI and docs production build passed. Fresh independent review findings were reproduced and fixed with regressions. Remote CI is still running on the final head.

    The external reproduction archive was retrieved, decoded and checksum-verified; replay produced byte-identical outputs. No raw data or screenshots were committed.

    Leaving this issue open: independent current camera checks and any subsequent production map/exposure/routing adoption need their own evidence and implementation. The PR is a reproducible audit, not completion of those capabilities.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    integrationNew or changed data provider, source, or backend integrationneeds-triageNeeds initial review and categorization

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions