Skip to content

Wheelmap source implementation (accessibility.cloud v2) #102

Description

@koinsaari

Goal

Implement internal/sources/wheelmap/ as an external source that pulls wheelchair accessibility data from accessibility.cloud and feeds it into the identity resolution pipeline as identity.Record values.

Tracking under #10.

Background research

⚠️ Gathered via AI-assisted web search — treat as starting hypothesis, verify hands-on before implementation.

Classic Wheelmap API is gone. wheelmap-classic was archived by Sozialhelden in March 2026. The old /api/nodes endpoints are dead.

Replacement: accessibility.cloud v2 (same org, Sozialhelden e.V.)

  • Cached base: https://accessibility-cloud-v2.freetls.fastly.net
  • Auth: appToken query param — free app registration required
  • Primary endpoint: GET /place-infos — GeoJSON FeatureCollection
  • Pagination: skip / limit, max 1000 per page
  • Wheelchair filters: fully-accessible-by-wheelchair, at-least-partially-accessible-by-wheelchair, not-accessible-by-wheelchair

Tentative field mapping (unverified):

accessibility.cloud identity.Record
_id SourceID
properties.name Name
geometry.coordinates Lat / Lng
properties.category Category (needs mapping)
properties.address Street / HouseNumber
properties.accessibility.accessibleWith.wheelchair → AccessibilityProfile.OverallStatus

Known problem — no global dump endpoint: /place-infos is spatial (max 10 km radius). Full-import needs a tiling strategy. accessibility.cloud may offer bulk exports for registered apps — check after getting a token.

What to investigate first

  • Register at accessibility.cloud, get token, verify real API responses — don't trust the schema above without checking
  • Confirm whether a bulk export endpoint exists
  • Understand rate limits
  • Map their categories → models.Category
  • Decide wheelchair: true/false/nullmodels.OverallStatus

Implementation scope (post-investigation)

  • internal/sources/wheelmap/source.goSource + ExternalFullImporter
  • HTTP client with pagination, retry, timeout
  • Category mapper + adapter (placeInfo → identity.Record)
  • Tiling strategy for full-import (if no dump endpoint)
  • case "wheelmap" in registry.go + WHEELMAP_APP_TOKEN config
  • Per-source fixtures per Per-source matcher fixtures convention #94 convention

Out of scope

  • Diff-sync (full-import only for now)
  • Writing back to accessibility.cloud
  • Other accessibility.cloud sources beyond Wheelmap

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:ingestionOSM and other data source ingestionenhancementNew feature or requestpriority:shouldShould-have, rough edges

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions