Skip to content

配置协议 v1 ​

配置对象(FootprintConfig)的完整规范。协议 v1 在 1.x 内保持不变。

顶层结构 ​

json
{
  "version": 1,
  "dataId": "aBc12XyZ",
  "categories": [ /* ... */ ],
  "config": { /* ... */ },
  "routes": [ /* ... 可选 */ ]
}
字段类型必填说明
version1是协议版本,当前固定为 1
dataIdstring否短链标识(Nanoid 8 位,[0-9a-zA-Z_-]),v1.1 起托管
categoriesCategory[]是分类列表,1–8 个
configRenderConfig否渲染配置,省略时用默认值
routesRoute[]否路线(v1.1 实装)

categories ​

每个分类代表一组标记(如"居住"、"旅行"、"想去")。

json
{
  "id": "travel",
  "label": "旅行",
  "color": "#f97316",
  "icon": "dot",
  "pins": [
    {
      "name": "2019.04 东京",
      "coords": [139.759, 35.682],
      "date": "2019-04",
      "note": "春天看樱花",
      "photos": ["https://example.com/a.jpg"]
    }
  ]
}
字段类型必填约束
idstring是匹配 ^[a-z][a-z0-9-]*$,唯一
labelstring是图例显示名称
colorstring是#RGB 或 #RRGGBB
icon'dot' | 'pin' | 'star'否默认 dot
pinsPin[]是标记列表

Pin ​

字段类型必填约束
namestring是长度 ≤ 200
coords[lng, lat]是经度 [-180, 180],纬度 [-90, 90]
datestring否ISO 日期,如 "2019-04"
notestring否长度 ≤ 500
photosstring[]否最多 5 个 URL

约束: 总标记数 ≤ 1000;分类数 ≤ 8。


config ​

json
{
  "projection": "globe",
  "theme": "light",
  "style": "https://tiles.openfreemap.org/styles/positron",
  "maplibreUrl": "https://cdn.jsdelivr.net/npm/maplibre-gl@5/dist/maplibre-gl.js",
  "center": [100, 30],
  "zoom": 1.2,
  "pitch": 0,
  "bearing": 0,
  "legend": true,
  "autorotate": false,
  "attribution": false,
  "fog": { /* 见下 */ },
  "privacy": { "blur": 0, "cityOnly": false }
}
字段类型默认说明
projectionglobe | mercatorglobe3D 地球或平面地图
themelight | dark | autolight主题
stylestringOpenFreeMap positron底图样式 URL
maplibreUrlstringjsDelivr maplibre-gl@5MapLibre CDN 地址
center[lng, lat][100, 30]初始中心(亚太视角)
zoomnumber1.2初始缩放
pitchnumber0初始俯仰
bearingnumber0初始方位
legendbooleantrue是否显示图例
autorotatebooleanfalse是否自动旋转
attributionbooleanfalse是否显示版权
fogobject见下大气效果
privacyobject见下隐私设置

fog ​

json
{
  "color": "rgba(0,0,0,0)",
  "high-color": "rgba(255,255,255,0.1)",
  "space-color": "rgba(0,0,0,0)",
  "horizon-blend": 0
}

privacy ​

字段类型默认说明
blurnumber0坐标随机偏移(公里),0 表示关闭
cityOnlybooleanfalse仅显示城市级坐标(保留 2 位小数)

详见 隐私与安全。


routes(v1.1) ​

json
[
  {
    "from": [139.759, 35.682],
    "to": [103.85, 1.29],
    "type": "flight",
    "date": "2023-10",
    "color": "#f97316"
  }
]

v1 只定义协议,不渲染。


完整示例 ​

json
{
  "version": 1,
  "categories": [
    {
      "id": "residence",
      "label": "居住",
      "color": "#2563eb",
      "pins": [
        { "name": "2023.10 新加坡", "coords": [103.851959, 1.29027] }
      ]
    },
    {
      "id": "travel",
      "label": "旅行",
      "color": "#f97316",
      "pins": [
        { "name": "2019.04 东京", "coords": [139.759, 35.682] },
        { "name": "2022.12 巴黎", "coords": [2.32, 48.86] }
      ]
    }
  ],
  "config": {
    "projection": "globe",
    "theme": "light",
    "center": [100, 30],
    "zoom": 1.2,
    "legend": true
  }
}

旧格式兼容 ​

以下旧格式会被自动识别并转换:

js
window.FOOTPRINT_PINS = {
  residence: [{ name: "新加坡", coords: [103.85, 1.29] }],
  travel: [{ name: "东京", coords: [139.759, 35.682] }]
};

转换规则:

  • residence → {id: "residence", label: "居住", color: "#2563eb"}
  • travel → {id: "travel", label: "旅行", color: "#f97316"}
  • 其余字段使用默认值

版本策略 ​

版本兼容性说明
v1当前本文档
v1.x向后兼容新增可选字段
v2破坏性提供迁移工具 + 公告

由 Footprint Studio 维护 · MIT Licensed