文档版本:v1.0 最后更新:2026-04-07 12:18:00
本文档用于说明活动准备页的地图预览能力如何设计与落地。
当前目标不是直接进入实现,而是先把方案边界、分层、前后端职责和分阶段路径定清。
准备页当前已经具备:
但“本局对象预览”仍然主要是文字占位,对玩家帮助有限。
准备页地图预览的目标是:
当前推荐采用:
低级别正式瓦片做底图,前端动态叠加赛道
也就是:
这是一个“混合预览方案”:
如果单独为准备页制作预览地图资源,会带来:
使用低级别正式瓦片作为预览底图,可以保持:
多赛道场景下:
因此最合理的方式是:
这样:
后端负责:
前端负责:
这符合当前项目一直坚持的分层原则。
准备页地图预览建议分成 4 层。
来源:
形式:
职责:
来源:
职责:
来源:
职责:
职责:
V1 不要求后端提供完整预览图 URL,而是先提供“底图元数据 + 赛道 overlay 元数据”。
建议后端提供以下最小结构:
{
"preview": {
"mode": "full",
"baseTiles": {
"tileBaseUrl": "https://.../tiles/",
"zoom": 15,
"tileSize": 256
},
"viewport": {
"width": 800,
"height": 450,
"minLon": 117.0000,
"minLat": 36.6000,
"maxLon": 117.0800,
"maxLat": 36.6600
},
"variants": [
{
"variantId": "variant_a",
"name": "A线",
"routeCode": "route-variant-a",
"controls": [
{ "id": "start", "kind": "start", "lon": 117.01, "lat": 36.61 },
{ "id": "c1", "kind": "control", "lon": 117.02, "lat": 36.615 },
{ "id": "finish", "kind": "finish", "lon": 117.03, "lat": 36.62 }
],
"legs": [
{ "from": "start", "to": "c1" },
{ "from": "c1", "to": "finish" }
]
}
]
}
}
其中关键字段是:
baseTiles.tileBaseUrlbaseTiles.zoomviewport.width / heightviewport.minLon / minLat / maxLon / maxLatvariants[].controlsvariants[].legs这些字段足够前端做只读预览。
前端准备页的消费方式建议如下:
viewport 与 zoom 计算需要的瓦片范围viewport 把控制点经纬度投影到预览图坐标准备页只做:
多赛道场景是这套方案的重点。
当前建议规则:
这套设计和当前多赛道 Variant 架构是一致的:
建议预览能力分成 3 档:
none适用于:
summary适用于:
full适用于:
V1 建议先直接支持:
nonefull后面再补 summary。
只做:
不做:
补:
none / summary / full考虑扩展到:
当前不建议:
问题:
问题:
问题:
准备页地图预览最推荐的路线是:
使用低级别正式瓦片作为预览底图,由前端在准备页动态叠加当前赛道。
这条路线的优点是:
当前建议优先推进:
fullsummary / none