05-point-device-marker-mapping.md 21 KB

监测点与监测设备位置符号映射

Type: grilling Status: resolved Labels: wayfinder:grilling Blocked by: 01, 02

Question

蓝湖正式位置符号如何覆盖监测点、未关联设备、关联监测设备、状态图例和选中/悬停/聚合呈现?裁定对象、状态、尺寸、颜色、形状、标签、动效和降级的完整资产矩阵,并确保地图标记、图例、详情卡片和设备图层继续由同一语义来源生成。

本票只覆盖 2D/SVG/图片位置符号,不引入真三维模型,不改变已有状态词表、拾取、定位、聚合和面板联动契约。

进度

  • 已认领(Status: claimed),阻塞票 01/02 均 resolved;票 03、票 04 及其规格票 09 亦已完成。
  • 事实侧已自查(不向维护者提问可自得的事实):domain/pointStatus.js 有点位六态 + 状态未发布 + 无关联设备,形状为 8 个几何 SVG,markerSvg() 把形状与运行时色值烘焙成 billboard 图片;domain/deviceStatus.js 是平行的设备五态表(无 EMPTY),复用同一批形状片段;domain/deviceAssets.js 的 planDeviceAsset() 已有「正式图片 → 设备专属图标 → 通用位置符号」降级链,MARKER_SIZE 为监测点 18 / 设备 14 且动态缩放不反转层级。
  • 既有已锁约束(本票不重开):决策票 10 与规格 16 已定「监测点与监测设备可用同一素材、以程序尺寸区分、监测点恒大于设备、默认无长文本、不显示经纬度」;决策票 07 已定设备五态色/形/特效与「正常/离线无特效」,并在其正文留下一条未决项——监测点标记要不要有自己的状态特效,指明「实现前需回本票补裁」。
  • 蓝湖侧位置符号的具体切图形态、尺寸与状态变体仍属票 02 记录的「待逐项人工补采」,因此本轮只裁定映射规则与素材形态,不预设蓝湖具体文件。
  • 讨论已完成(Q1–Q27 全部裁定);本票已按 grill-with-docs 流程走完「/to-spec 固化 → 对抗式审查」,现为 Status: resolved。

第一轮裁定(已确认)

  • Q1=C:正式位置符号使用单色可着色素材(透明 SVG/PNG 遮罩),颜色由运行时按状态色烘焙;不走「每状态一张彩色切图」,以免色值出现第二份定义。
  • Q2=A:状态区分继续由形状 + 文字标签承载,着色只表达优先级深浅;保持既有「颜色不是唯一线索」纪律。若蓝湖只提供单一外形,属显式冲突,需升级而非默默接受。
  • Q3=B:监测点标记新增状态特效,但只对报警一态出现扩散环,其余点位状态保持静态;该特效受 map.effects 门控,并沿用「随雾衰减、不穿雾」的既有裁定。设备级特效口径不变(票 07 已锁)。
  • Q4(按维护者原话):监测点与监测设备共用同一点位素材;未关联设备另有一份点位素材变体——与前者大致相同,仅中间图标或颜色不同以作区分。即:三类对象的素材关系为「两份素材 + 尺寸/状态区分」,不再是「全部共用一份」。
  • Q5=C:保持「监测点恒大于设备」的硬约束不变;基准尺寸按蓝湖素材的实际画布尺寸重新校准,并以 1280px 宽度复验可读性。
  • Q6=A:标签沿用既有规则(名称为主、编码为辅、不显示经纬度、默认不显示长文本),正式素材只替换标记图形,不改字段与显示时机。
  • Q7=A:沿用现有降级链;正式素材接入最高档,其后两档保持为失败兜底。
  • Q8=A:交互态(选中外环、引线、压暗、聚合展开)继续由既有渲染层叠加实现,不索取蓝湖交互态切图;蓝湖交互态视觉只作参数依据。

Q4 的连带影响(已由第二轮 Q11 / 第五轮 Q22=1 裁定,见下)

维护者对 Q4 的选择改变了未关联设备的既有视觉:原实现中未关联设备使用「十字」标记(决策票 07 曾明确「未关联设备既有摘要十字标记保持原样,不因特效票改变」)。该连带影响已在第二轮 Q11(降饱和降亮度)与第五轮 Q22=1 中裁定完毕,并已就地修订决策票 07。

第二轮问题(历史记录,均已在下方裁定)

  • Q9:外层轮廓承载状态形状、内层承载行业/类型图标的分工(正面处理参考图的「行业图标」与已锁「状态靠形状」之间的张力)。
  • Q10:单色素材的着色要求(纯白/透明遮罩 + 运行时着色,还是允许灰阶/多色),以及色值唯一来源不变。
  • Q11:未关联设备素材变体是否保留「不在任何点位上」的可辨识语义,及其是否按设备状态着色。
  • Q12:监测点级报警特效的并发阈值、门控与消失时机(是否与设备 30 台口径共用)。
  • Q13:图例与详情卡片是否消费同一份正式素材(避免图例与标记分裂)。
  • Q14:聚合/重叠符号是否使用同一份正式素材 + 计数徽标。

第二轮裁定(已确认)

  • Q9=A:双层结构——外层轮廓承载状态(沿用点位六态/设备五态的形状语义),内层小图标承载行业/设备类型;两层素材均在 manifest 登记。
  • Q10=B:分界为「色相 = 运行时状态色;明度/发光结构 = 素材自带」。允许素材自带灰阶与内辉光,状态色仍由运行时注入,不在素材里固化彩色状态。
  • Q11(术语已校正):CONTEXT.md 定义「未关联设备」= 未挂接到任何监测点的监测设备(是设备,不是监测点)。按维护者指定:未关联设备走设备徽标 + 内层图标,并降低饱和度与亮度。
  • Q12=A:监测点级报警特效不设数量降级,仅受 map.effects 门控;实现时须实测同屏点数并留可调阈值入口(风险项已记)。
  • Q13=B:图例与详情卡片继续用轻量渲染,只要求形状语义与色键同源,不直接渲染重素材。
  • Q14=A:聚合/重叠符号使用同一份点位素材 + 程序绘制的计数徽标。

素材实测事实(本票自查,非推断)

维护者提供了第二素材来源 E:\&项目模型文件等\UI图片,实测如下:

  • T_MarkPoint 系列共 10 个变体(500–512px、透明底):Black #000000、Blue #009CFF、Red #E80000、Green #00FF7B、Yellow #FFFF00、FaintYellow #FEFF97、Grey #6F6F6F、Colorful(9 色渐变)、White、WhiteBackground。
  • T_MarkPoint_White:纯白平面剪影(取样仅 1 种色值 #FFFFFF),包围盒 x67..444 / y19..493(378×475),中心孔为真透明(洪泛填充实测 150×150 正圆,孔心 (255.5, 207.5)),底端尖端在 y=493、宽 6px、中点 x=256。
  • T_MarkPoint_WhiteFull(维护者 2026-10-08 19:22 新建):与 White 同形同包围盒(378×475)的实心无孔版;中心像素 #FFFFFF 且 alpha=255;10 处取样全为 #FFFFFF;尖端同为 y=493 / x253..258;圆帽最大跨度 378px,最宽行位于 y=163..y=252,帽心 y=207.5、帽半径 189px(与 White 的孔心 (255.5, 207.5) 完全同心;帽顶 207.5−189 = 18.5 ≈ 包围盒上沿 y=19,自洽)。该素材解决了「孔太小放不下内层图标」的问题。
  • 内层图标库 Texture\Icon(110 个,256×256、透明底、彩色插画)已覆盖行业与设备类型:Pipe燃气/供水/排水/窨井盖/管网设施、Q图标燃气设备/供水设备/排水设备/其他设备、Q图标报警/异常设备/运行设备/离线设备/维护设备/网络在线/网络离线 等。
  • 现有语义色与素材成品色没有一个是相同的(素材 Red #E80000 vs --lv1 #ff4d5e;Green #00FF7B vs --lv4 #35e39a;Blue #009CFF vs --cyan #4fd8ff)——这是 Q15 选择「只用白色母版、色值仍由 token 注入」的实测依据。

第三轮裁定(已确认)

  • Q15=A:只使用 T_MarkPoint_White / T_MarkPoint_WhiteFull 作为可着色母版;其余 9 个彩色成品不作为状态色来源;状态色仍由 tokens.css → 运行时注入。
  • Q15 补充(维护者指定叠加方式):以 T_MarkPoint_White(纯白剪影)承载颜色,配合白色实心底(后由 T_MarkPoint_WhiteFull 取代垫底方案),再在中间叠放内层徽标。
  • Q16=B:内层行业/类型图标保留可识别性但降低饱和度与亮度,外层徽标承担状态色。
  • Q17=A:未关联设备沿用「同一母版 + 不同内层图标」生成,不引入第三个外形。

第四轮裁定(已确认)

  • Q18=B:改为尖端锚定(水滴尖端落在真实坐标点),不再沿用中心锚定;需配套处理既有走查与投影断言的口径。
  • Q19=C:MARKER_SIZE 语义改为高度基准(点 18 / 设备 14 指高度),宽度按素材 378:475 比例换算。
  • Q20(维护者给出更优解):使用维护者新建的实心不带孔母版 T_MarkPoint_WhiteFull,内层图标直径约为母版圆形区域的 60%,留一圈底色作分隔。
  • Q21=B:内层图标圆心对齐帽心(实测 y=207.5,与孔心同心),而非画布几何中心 y=256。
  • Q23=B:T_CheckPoint(红底人形)本票不采用,登记为未来「检查点/巡检点」类对象的候选素材。

第四轮遗留的两处待澄清项(均已在第五轮解决,保留经过备查)

遗留项 A:Q22 术语歧义(已在第五轮解决)

维护者第四轮原文为「监测点使用 WhiteFull + 内层行业图标,未关联设备的监测点使用 White(镂空)并降饱和降亮度;关联设备用 WhiteFull + 内层图标,未关联设备用 White(镂空)并降饱和降亮度」。

  • 当时已确认部分:监测点与关联设备 → WhiteFull(实心)+ 内层图标;未关联设备 → White(镂空)+ 降饱和降亮度。
  • 当时的歧义:「未关联设备的监测点」按 CONTEXT.md 不是已定义对象(未关联设备本身即设备;pointStatus.js 中另有 EMPTY「无设备」点位)。代理未猜定,挂起并列为选项 1/2/3 请维护者裁定。
  • 解决:维护者第五轮答 Q22=1——该短语指的是「无设备的监测点」(后端点位状态 EMPTY)。据此成立第三套变体,详见下方「第五轮裁定」。

遗留项 B:Q19=C 的尺寸后果(已在第五轮解决)

按原 Q19=C(高度基准)换算,母版 378×475 使徽标宽度仅约 14.3px、内层图标仅约 8.6px,与 Q13「1280px 下优先可读性」存在张力,故挂起请维护者裁定。

  • 解决:维护者第五轮答 Q24=B——抬高基准使宽度回到 18 / 14(高度约 22.6 / 17.6)。详见下方「第五轮裁定」。

第五轮裁定(已确认,讨论完成)

  • Q22=1(已澄清):Q22 中的「未关联设备的监测点」经澄清指的是「无设备的监测点」(后端点位状态 EMPTY,界面词「无设备」),不是「未关联设备」,也不是笔误。因此三套变体最终为:
    1. 监测点(含常规点位):T_MarkPoint_WhiteFull(实心)+ 内层行业图标(Pipe*);
    2. 关联监测设备:T_MarkPoint_WhiteFull(实心)+ 内层设备类型图标(Q图标*设备);
    3. 无设备的监测点(EMPTY):T_MarkPoint_White(镂空)+ 不使用内层图标 + 降饱和降亮度 + 保留文字「无设备」(Q25=C);
    4. 未关联设备:T_MarkPoint_White(镂空)+ 内层行业图标 + 整体降饱和降亮度(Q11 / Q26=A)。
  • Q24=B:尺寸基准抬高,使宽度回到现有语义(监测点宽 18、设备宽 14);高度按母版 378:475 比例换算约 22.6 / 17.6。目的是让横向占位与既有断言面完全对齐,同时保住内层图标可辨(内层约 10.8px / 8.4px)。
  • Q25=C:「无设备」点位不使用内层图标,只用 T_MarkPoint_White(镂空)+ 降饱和降亮度 + 文字标签。理由:Texture\Icon 全部 110 个素材均为彩色实心插画,不存在空心版本;且「无设备」是缺失语义,用任何设备图形表达都会造成「看起来还有一台设备」的误读。
  • Q26=A:未关联设备的内层图标沿用其行业图标(如 Q图标燃气设备),整体降饱和降亮度;理由是 CONTEXT.md 明确未关联设备有自身设备状态且参与全局筛选,行业信息对值班人员有用。与关联设备的区分手段已足够:镂空 vs 实心(Q22)+ 降饱和降亮度(Q11)+ 尺寸层级(设备恒小于监测点)。
  • Q27=D:三处既有已锁视觉被本票推翻,已就地修订原票以保持单一事实来源(见下节)。

被本票推翻的既有已锁项(已就地修订,不并存两套说法)

原口径 出处 修订结果
「无设备」使用 hollowSquare(空心方块)几何形状 票 09 口径说明 已就地加注:改为镂空母版 + 降饱和降亮度 + 无内层图标 + 保留文字;其余口径不变
未关联设备「十字标记保持原样」 决策票 07 已就地加注:改为镂空母版 + 内层行业图标 + 降饱和降亮度;仍按设备自身状态着色;其余裁定不变
「资产替换不改变尺寸层级和定位锚点」 规格 16 用户故事 19 与 Implementation Decisions 已就地加注:锚点改尖端、尺寸基准改宽度并抬高数值;层级关系、拾取身份、状态语义、联动契约仍不变

ADR 决定

不另立 ADR(依 Q27=D 的就地修订路线)。理由:

  1. 位置符号的具体图形与像素值属视觉实现细节,会随设计稿迭代,不满足 ADR「难以逆转」的判据;
  2. 锚点语义变更(尖端 vs 中心)虽跨票影响拾取/定位/面板跟随的可信度,但其决策理由(水滴徽标的尖端天然指向地理点)无需未来读者反复追问,且已通过就地修订三处原票 + 本票 Answer 完整留痕,事实来源仍然唯一;
  3. 若后续出现「锚点行为在多个部署间需要不同取值」或「素材形状再次更换导致锚点体系重构」这类情况,再另立 ADR 不迟。

Answer

正式位置符号采用「双层水滴徽标」体系,状态与行业分离承载,色值仍唯一来自 token,锚点改为尖端,尺寸基准改为宽度。

素材与来源

  • 唯二母版:T_MarkPoint_WhiteFull(实心无孔,用于监测点与关联设备)与 T_MarkPoint_White(镂空,用于无设备点位与未关联设备);两者实测同形同包围盒(512×512 画布内 x67..444 / y19..493,378×475),可互换。
  • 母版为纯白平面剪影(10 处取样均为 #FFFFFF),满足「可着色」要求;其余 9 个彩色成品(Blue/Red/Green/Yellow/Grey/Black/FaintYellow/Colorful/WhiteBackground)不作为状态色来源。
  • 内层图标取自 Texture\Icon(110 个,256×256,彩色插画):行业用 Pipe燃气/供水/排水/窨井盖/管网设施,设备类型用 Q图标燃气设备/供水设备/排水设备/其他设备 等。
  • T_CheckPoint(红底人形)本票不采用,登记为未来「检查点/巡检点」类对象的候选素材。

分层与着色

  • 外层母版承载颜色(由运行时按状态注入),内层图标承载行业/设备类型;状态区分继续由形状 + 文字标签承载(颜色不是唯一线索)。
  • 分界:色相 = 运行时状态色;明度/发光结构 = 素材自带。状态色仍只由 tokens.css 声明一份并经服务层烘焙下传;实测素材成品色与现有语义色无一相同,故不采用成品色。
  • 内层图标保留可识别性但降饱和降亮度,避免与状态色争夺注意力;「无设备」不使用内层图标。
  • 内层图标直径约为母版圆形区域的 60%,圆心对齐帽心(实测 y=207.5,与中心孔同心,非画布几何中心 y=256)。

锚点与尺寸

  • 尖端锚定:水滴尖端落在真实地理坐标点(原为中心锚定)。尖端实测位于 y=493、宽 6px、中点 x=256。
  • 尺寸基准改为宽度:监测点宽 18、设备宽 14(与既有横向占位对齐);高度按 378:475 比例约 22.6 / 17.6。「监测点恒大于设备」的层级关系不变。
  • 实现需同步处理既有走查与投影断言(projectPointMarker()、hasPointMarker() 等按中心口径建立)。

三类对象(四套变体)

对象 母版 内层 附加处理
监测点 WhiteFull(实心) 行业图标(Pipe*) 按点位状态着色
关联监测设备 WhiteFull(实心) 设备类型图标(Q图标*设备) 按设备自身状态着色
无设备的监测点(EMPTY) White(镂空) 无 降饱和降亮度 + 文字「无设备」
未关联设备 White(镂空) 行业图标 降饱和降亮度 + 按设备自身状态着色

交互、图例与聚合

  • 交互态(选中外环、引线、压暗弱化、聚合展开)继续由既有渲染层叠加实现,不索取蓝湖交互态切图;蓝湖交互态视觉只作参数依据。
  • 图例与详情卡片继续用轻量渲染,只要求形状语义与色键同源,不直接渲染带辉光的重素材。
  • 聚合/重叠符号使用同一份母版 + 程序绘制计数徽标,不单独索取聚合素材。
  • 标签沿用既有规则(名称为主、编码为辅、不显示经纬度、默认不显示长文本),只替换标记图形。

监测点级特效(补裁票 07 的未决项)

  • 监测点标记新增状态特效,仅对报警一态出现扩散环,其余点位状态静态;该特效受 map.effects 门控,并沿用「随雾衰减、不穿雾」的既有裁定。
  • 不设数量降级(监测点数量级远小于设备);但实现时必须实测同屏监测点规模并留可调阈值入口。若实测发现同时报警点位可能过百,回本票补裁阈值。

风险与边界

  • 内层图标偏小:按 Q24=B 换算后内层约 10.8px(点)/ 8.4px(设备),在 1080p 大屏上的可辨性需真机走查确认;若不可辨,回本票补裁尺寸或图标简化方案。
  • 尖端锚点与既有断言:改为尖端锚定后,既有按中心口径建立的走查断言会失效,实现时必须同步更新,不能只改渲染。
  • 降饱和降亮度的具体参数未在本票固定,由实现与人工走查校准;但不得降到看不出状态。
  • 本票只覆盖 2D/SVG/图片位置符号,不引入真三维模型,不改变既有状态词表、拾取、定位、聚合与面板联动契约(除上述已就地修订的三处)。
  • 按 AGENTS.md,本轮未运行 build/dev/浏览器调试;上述走查要求作为实现票的验收手段交付。

真实状态与下一步

  • 状态:已完成并关闭(Status: resolved)。Q1–Q27 全部有裁定,无遗留未决项。
  • 交付物:
    1. 本票 Answer(上述结论);
    2. 规格子票监测点与监测设备位置符号规格(ready-for-agent,已挂入同一张地图);
    3. 三处原票就地修订:票 09 口径说明、决策票 07、规格 16。
  • 对抗式审查记录(2026-10-08):规格发布后对本次全部产出做了对抗式复核,抓到并修正 3 处真实缺陷:
    1. 帽心数值写错:曾把「最宽行首行 y=189」当作帽心,实测最宽行区间为 y=163..y=252,帽心应为 y=207.5(与中心孔孔心同心、帽顶 18.5≈包围盒上沿,自洽)。已在本票三处更正;规格票未硬编码该数值,无需改。
    2. 状态自相矛盾:正文一度写「已完成并关闭」而 Status: 仍为 claimed。已按流程置为 resolved。
    3. 遗留项未清理:两处「待澄清项(阻塞收口)」标题在第五轮已解决却仍留在正文,与「无遗留未决项」冲突。已改写为「第四轮遗留的两处待澄清项(均已在第五轮解决,保留经过备查)」。
    4. 附带修正地图进度计数(10 张子票 / 6 张已完成),原写「9 张 / 5/9」。
  • 下一步:推进字体授权与缺失资源降级;实现工作由规格子票承接。