# 监测点与监测设备位置符号映射 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](../../cockpit-point-locate-and-device-link/issues/07-device-status-effect-visual-language.md)。 ## 第二轮问题(历史记录,均已在下方裁定) - 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 口径说明](../../cockpit-shell-panel-layout/issues/09-point-status-legend.md) | 已就地加注:改为镂空母版 + 降饱和降亮度 + 无内层图标 + 保留文字;其余口径不变 | | 未关联设备「十字标记保持原样」 | [决策票 07](../../cockpit-point-locate-and-device-link/issues/07-device-status-effect-visual-language.md) | 已就地加注:改为镂空母版 + 内层行业图标 + 降饱和降亮度;仍按设备自身状态着色;其余裁定不变 | | 「资产替换不改变尺寸层级和定位锚点」 | [规格 16](../../cockpit-point-locate-and-device-link/issues/16-device-model-and-asset-spec.md) 用户故事 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. 规格子票[监测点与监测设备位置符号规格](10-point-device-marker-spec.md)(`ready-for-agent`,已挂入同一张地图); 3. 三处原票就地修订:[票 09 口径说明](../../cockpit-shell-panel-layout/issues/09-point-status-legend.md)、[决策票 07](../../cockpit-point-locate-and-device-link/issues/07-device-status-effect-visual-language.md)、[规格 16](../../cockpit-point-locate-and-device-link/issues/16-device-model-and-asset-spec.md)。 - **对抗式审查记录(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」。 - 下一步:推进[字体授权与缺失资源降级](06-font-and-fallback-policy.md);实现工作由规格子票承接。