设计原则
地图不是一张背景图。它是复杂数据可视化、交互控件和授权对象的组合;用户必须能理解位置、范围、选中对象、数据来源、更新时间和替代访问方式。
大理论
Web 地图经常把多个授权层叠在一起:MapLibre GL JS 这类运行时库是一层,地图瓦片/矢量 tiles 是一层,style JSON、glyph、sprite、地理数据、地名、边界和底图 provider 又各自有来源与归因要求。设计和实现必须把这些层级拆开记录,同时把地图与列表、筛选、详情和表格保持同步。对部分用户来说,地图本身不是最佳入口,列表或表格才是可访问主路径。
小知识点
- 记录 map runtime license 不等于记录 tiles/geodata license;MapLibre 的 BSD 运行时不覆盖 OSM、MapTiler、Stadia、Mapbox 或自有数据的归因。
- attribution 应放在地图附近、清晰可读,不应隐藏到必须交互后才看见的状态;小屏 collapsed attribution 仍要满足 provider 要求。
- 地图、结果列表、筛选器、详情面板共享 selected/hover/focus 状态;点击列表项应定位地图,地图选中也应更新详情。
- 每个地图视图显示范围、数据更新时间、筛选条件和对象数量;用户要知道自己看到的是全量还是过滤结果。
- 地理可视化需要替代路径:列表、表格、下载数据、文字摘要或区域分组,不能只要求用户拖拽缩放。
- 图层、颜色和 marker 不能只靠色相;需要图例、文字、形状、大小或 pattern 冗余。
设计判断
如果用户关闭地图画布后仍能通过列表/表格完成查找、比较、选择和理解来源,地图是增强层;如果所有对象、归因和状态都只存在于不可读的 canvas/WebGL 里,地图界面不可审计也不可访问。
实现建议
建立 map intake record:runtime、style、tile provider、geodata source、license、attribution text/link、update time、projection、bounds、layers、legend、selected state、keyboard path、list/table fallback、offline/low-performance fallback。MapLibre 实现时保留 AttributionControl 或自定义等效归因,并测试小屏、键盘、reduced-motion、低性能和无 WebGL 场景。地图旁边提供结果列表,详情页保留选中对象和数据来源。
反例/风险
只写“MapLibre BSD”却没记录瓦片和地理数据来源;把归因藏在不可见角落;移动端控件遮挡 marker;地图全屏没有列表;hover tooltip 没有键盘替代;地图颜色分级没有图例;边界数据更新时间缺失。
案例分析
MapLibre 的 AttributionControl 负责呈现地图归因,并有响应式 compact 选项;OpenStreetMap Foundation 的 attribution guidelines 要求 attribution 呈现给任何查看或交互地图的人,且应在作品附近、清晰可理解;W3C WAI 把 maps 归入 complex images,需要超过短 alt 的说明;USWDS data visualization 指南强调可用性和可访问性是互补目标。可学习点是:地图设计必须同时治理授权、交互状态和替代数据路径。
来源链接
MapLibre AttributionControl: https://www.maplibre.org/maplibre-gl-js/docs/API/classes/AttributionControl/ MapLibre AttributionControlOptions: https://www.maplibre.org/maplibre-gl-js/docs/API/type-aliases/AttributionControlOptions/ OpenStreetMap Attribution Guidelines: https://osmfoundation.org/wiki/Licence/Attribution_Guidelines W3C WAI Complex Images: https://www.w3.org/WAI/tutorials/images/complex/ USWDS Data Visualizations: https://designsystem.digital.gov/components/data-visualizations/
Agent 指令
生成地图界面前必须列出 runtime、tiles、style、glyph/sprite、geodata、provider attribution、更新时间和列表/表格替代;禁止只交付全屏地图 canvas。