gis-view-webgl2 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +140 -60
- package/dist/index.js +1 -1
- package/docs/AI/345/257/271/350/257/235/346/261/207/346/200/273.md +73 -5
- package/docs/GisView.md +49 -49
- package/docs/ai/06-/344/274/232/350/257/235/347/264/242/345/274/225/344/270/216/345/244/215/346/237/245/346/226/271/346/263/225.md +87 -16
- package/docs/demos/ApiCoverageDemo.vue +1 -5
- package/docs/demos/BackendSyncDemo.vue +1 -2
- package/docs/demos/BackgroundDemo.vue +68 -1
- package/docs/demos/BasicDemo.vue +76 -76
- package/docs/demos/BatchAddDemo.vue +2 -1
- package/docs/demos/ChannelDemo.vue +1 -3
- package/docs/demos/ClusterDemo.vue +48 -1
- package/docs/demos/CopyMergeDemo.vue +899 -904
- package/docs/demos/DemoShell.vue +336 -336
- package/docs/demos/EventDemo.vue +300 -300
- package/docs/demos/ExtensionDemo.vue +200 -200
- package/docs/demos/GisViewDemo.vue +64 -64
- package/docs/demos/LabelDemo.vue +489 -489
- package/docs/demos/StyleDemo.vue +67 -67
- package/docs/demos/api-index.js +24 -29
- package/docs/demos/demos.js +92 -92
- package/docs/demos/gis-view-demo/useGisViewDemo.js +19 -14
- package/docs/demos/shared/demoData.js +107 -107
- package/docs/demos/shared/demoStyle.css +249 -249
- package/docs/format/02-/350/212/202/347/202/271/344/270/216/347/272/277/350/267/257.md +3 -3
- package/docs/format/03-/346/213/220/347/202/271/350/243/205/351/245/260/344/270/216/346/240/267/345/274/217.md +3 -0
- package/docs/from0/01-/345/205/210/346/212/212/345/234/260/345/233/276/346/203/263/346/270/205/346/245/232.md +8 -7
- package/docs/index.html +3 -3
- package/docs/internals/04-/347/233/270/346/234/272/345/235/220/346/240/207/344/270/216/345/203/217/347/264/240.md +6 -4
- package/docs/internals/14-/350/203/214/346/231/257/345/261/202.md +2 -2
- package/docs/manual/02-/345/235/220/346/240/207/344/270/216/346/225/260/346/215/256.md +36 -16
- package/docs/manual/03-/351/205/215/347/275/256/351/241/271.md +38 -84
- package/docs/manual/04-/344/272/213/344/273/266/344/270/216/345/233/236/350/260/203.md +36 -19
- package/docs/manual/06-/346/225/260/346/215/256/344/270/216/345/234/272/346/231/257/346/233/264/346/226/260.md +1 -1
- package/docs/manual/07-/346/214/207/351/222/210/344/270/216/350/246/201/347/264/240/347/274/226/350/276/221.md +7 -7
- package/docs/manual/08-/351/200/211/344/270/255/344/270/216/346/213/220/347/202/271.md +15 -15
- package/docs/manual/10-/351/200/232/351/201/223/347/274/226/350/276/221/344/270/216/346/226/260/345/242/236.md +1 -1
- package/docs/manual/12-/346/240/207/347/255/276/344/270/216/350/243/205/351/245/260.md +6 -0
- package/docs/manual/14-/350/247/206/345/233/276/344/270/216/347/255/233/351/200/211.md +1 -1
- package/docs/manual/15-/345/257/274/345/207/272/344/270/216/351/233/206/346/210/220.md +2 -0
- package/docs/manual/16-/345/256/236/344/276/213/346/226/271/346/263/225/346/200/273/350/241/250.md +10 -8
- package/docs/manual/17-/345/217/202/346/225/260/351/200/237/346/237/245.md +11 -7
- package/docs/manual/18-/351/200/220/346/226/271/346/263/225/347/244/272/344/276/213.md +27 -8
- package/docs/manual/20-/346/200/247/350/203/275/344/270/216/345/244/247/346/225/260/346/215/256.md +27 -4
- package/docs/manual/21-/350/257/264/346/230/216/344/270/216/345/270/270/350/247/201/351/227/256/351/242/230.md +3 -3
- package/docs/playground/index.html +1 -1
- package/docs/sample-document/345/255/227/346/256/265/350/257/246/350/247/243.md +2 -2
- package/docs/steps/check-doc-truth.mjs +1 -1
- package/docs/steps/selftest-actions.html +4 -4
- package/docs/steps/selftest-data.html +5 -5
- package/docs/steps/selftest-demos.html +1683 -1619
- package/docs/steps/selftest-docs.html +4 -4
- package/docs/steps/selftest-effects.html +1 -1
- package/docs/steps/selftest-features.html +548 -47
- package/docs/steps/selftest-full.html +566 -566
- package/docs/steps/selftest-labels.html +647 -647
- package/docs/steps/selftest-perf.html +2282 -2237
- package/docs/steps/selftest-select.html +53 -14
- package/docs/steps/step-10-full.js +1 -4
- package/docs/steps/step-12-events.js +1 -4
- package/package.json +43 -43
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AI 对话汇总
|
|
2
2
|
|
|
3
|
-
> 一页读完 gis-view 的 AI 协作史:39 个会话、
|
|
3
|
+
> 一页读完 gis-view 的 AI 协作史:39 个会话、216 轮需求,按「关键决策 → 演进主线 → 精选问答」整理。
|
|
4
4
|
> 原先拆开的 01 ~ 05 已合并到这里;逐会话文件、历史增量索引与复查命令统一放在 [维护索引](ai/06-会话索引与复查方法.md)。
|
|
5
5
|
|
|
6
6
|
这份汇总不是使用手册。组件行为以 [GisView 手册](GisView.md) 和 [数据格式](数据格式.md) 为准,实现细节与逐轮证据在 [GisView 实现原理](GisView实现原理.md) 的 `internals/15-*`、`16-*`。这里只回答三件事:当时为什么这么定、后来怎么演进、现在该从哪里继续查。
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
|
|
21
21
|
| 项目 | 结论 |
|
|
22
22
|
| --- | --- |
|
|
23
|
-
| 对话范围 | 2026-09-15 ~ 2026-11-
|
|
23
|
+
| 对话范围 | 2026-09-15 ~ 2026-11-03,39 个会话、216 轮;10-14 之后主要为现有会话的增量轮次 |
|
|
24
24
|
| 产品形态 | 一个默认无控制面板的 `createGisView(dom, options)` WebGL2 矢量视图;鹰眼图、图例与背景编辑器按需开启,交互与视觉效果通过配置、事件和实例方法组合 |
|
|
25
25
|
| 核心对象 | 节点、线路、通道(多回线 / 分组)、拐点、装饰、标签、覆盖层、鹰眼图、扩展图形 |
|
|
26
26
|
| 技术路线 | WebGL2 批量渲染 + HTML / Canvas 覆盖层 + 网格索引 + 增量更新 + Worker 筛选与搜索 |
|
|
27
|
-
| 当前公开面 |
|
|
27
|
+
| 当前公开面 | 284 个实例成员、106 个 options、275 个数据字段、44 个事件、19 个功能开关、16 个分组 |
|
|
28
28
|
| 维护方式 | 文档双向对账、API 索引生成、14 个自测页与无头浏览器回归;每轮记录同步到本页与维护索引 |
|
|
29
29
|
|
|
30
30
|
## 关键技术决策
|
|
@@ -84,7 +84,75 @@
|
|
|
84
84
|
|
|
85
85
|
先分清组件与宿主:本组件只负责接收已经整理好的点线数据,`initData` 只应在挂载时调用一次;若宿主定时重建数据,先查宿主路由、监听与 `gisTools.js` / `buildNewData`。SVG 被画成圆通常是宿主传入了错误的 `symbol` 或 `pointRules`,直流标记则要确认装饰类型与数据映射。历史排查见维护索引的 10-12 旁支记录。
|
|
86
86
|
|
|
87
|
-
##
|
|
87
|
+
## 当前轮次:交互权限唯一入口与经纬度存档回灌(2026-11-03)
|
|
88
|
+
|
|
89
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① `mapDataToLngLat()` 保存后的数据要能原样映射回地图,并在 demo 中体现;② `clickable`、`boxSelect` 这类交互权限统一只通过 `features` 配置。
|
|
90
|
+
- **权限收口**:七个旧顶层交互开关 `draggable` / `interactive` / `clickable` / `boxSelect` / `multiSelect` / `toggleSelect` / `waypointEditable` 全部从公开 options 删除。`pickEngineOptions()` 的平移、缩放、悬停、选中、右键、拖拽、框选、多选、取反与拐点权限只从 `features` 计算,引擎内部 `interactive` / `clickable` 总闸固定为 `true`;`featureState()` 也不再回读旧顶层字段。创建与 `updateOptions()` 收到旧字段时逐项发出迁移提示并忽略,`getOptions()` 不再残留。节点级 `clickable` / `draggable`、线路级 `waypointEditable`、标签级 `draggable` 与 `features` 内的同名别名仍保留,分别负责逐要素覆盖与表内输入。
|
|
91
|
+
- **逆映射与 Demo**:新增 `mapLngLatToData(data, options?)`,按当前最终底图投影把存着经纬度的 `points` / `lines` / `channels` 写回世界坐标,覆盖线路端点 / 路径、固定坐标装饰、通道分组路径与 `waypointOffsets` 向量;返回副本、不改入参,没有 GeoJSON 背景时为 `null`。`BackgroundDemo.vue` 增加保存、清空、回灌三步和首节点误差读数,证明底图未改动时世界坐标与屏幕落点原样恢复。
|
|
92
|
+
- **测试与公开面**:`selftest-features` **881/0** 覆盖几何往返、入参不变、保存 → 清空 → 回灌,以及七个旧字段在创建与更新时告警、被忽略、不留进 `getOptions()`;`selftest-demos` **446/0** 覆盖背景 Demo 的三步流程。公开面为 **285** 个实例成员(280 方法 + 5 属性)/ **100** options / **275** 数据字段 / 44 事件 / 19 功能开关。
|
|
93
|
+
- **核心文件**:`src/gis-view/features.js`、`create.js`、`projection.js`、`types.d.ts`、`docs/demos/BackgroundDemo.vue`、`docs/steps/selftest-features.html`、`docs/steps/selftest-demos.html`;手册 02 / 03 / 04 / 07 / 08 / 10 / 16 / 17 / 18 / 21、`docs/format/02`、`docs/GisView.md`、`docs/index.html`、API 索引、组件 README、本页与维护索引。
|
|
94
|
+
- **验证**:`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(285 成员 / 280 方法 / 100 options / 275 数据字段)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **881/0**、`selftest-demos` **446/0**、`selftest-docs` **139/0**、`selftest-actions` **96/0**、`selftest-select` **118/0**、`selftest-data` **103/0**、`selftest-perf` **201/0**、`selftest-effects` **96/0**。
|
|
95
|
+
|
|
96
|
+
## 上一轮次:拖动权限收口与网架坐标反投影(2026-11-03)
|
|
97
|
+
|
|
98
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① `draggable` 不应继续保留在顶层 options,而应归入 `features`;② GeoJSON 背景编辑(缩放 / 平移 / 旋转)后,提供一个方法把网架世界坐标 `x/y` 批量转换为基于该 GeoJSON 的经纬度。
|
|
99
|
+
- **拖动开关收口**:`pickEngineOptions()` 下发给引擎的 `draggable` 改为只由 `featureOn(features, 'drag', false)` 计算,`featureState().drag` 缺省为 `false`;顶层 `draggable` 从公开 `GisViewOptions` 删除,创建或 `updateOptions` 传入时经 `onWarning` 提示改用 `features: { drag: true }` 并忽略(创建与 `updateOptions` 都不会把它留进 `getOptions()`)。`features` 内的 `draggable` 别名、节点 `draggable` 与标签 `draggable` 保留,分别负责表内映射和逐要素行为。
|
|
100
|
+
- **坐标反投影**:`projection.js` 的 `createGeoMapper()` 新增 `mode: 'world'`,以调用当时的最终底图投影 `unproject` 反算经纬度,包含 `aspectScale`、背景编辑后的 `bounds` / `rotation`;`waypointOffsets` 继续按向量换算。`create.js` 新增 `mapDataToLngLat(data?, options?)`:不传 data 时转换当前 `points` / `lines` / `channels`,返回副本,不改原数据和视图,也不自动 `updateData()`;没有 GeoJSON 背景时返回 `null`。
|
|
101
|
+
- **回归与公开面**:`selftest-features` 876 → **879/0**,新增 world 反投影 / 旋转往返 / 向量换算、背景编辑后整份网架转换且原数据不变、顶层旧写法告警与节点拖不动三条;公开面为 **284** 个实例成员(**279** 方法 + **5** 属性)/ **106** options / **275** 数据字段 / 44 事件 / 19 功能开关 / 16 分组。
|
|
102
|
+
- **核心文件**:`src/gis-view/create.js`、`projection.js`、`features.js`、`engine.js`、`types.d.ts`、`src/gis-view/README.md`;手册 02 / 03 / 04 / 07 / 08 / 16 / 17 / 18 / 21、`docs/format/02`、`docs/GisView.md`、`docs/index.html`、Demo 与 `docs/steps/selftest-*`、`docs/demos/api-index.js`、本页与维护索引。
|
|
103
|
+
- **验证**:`node --check`(`create.js` / `projection.js` / `features.js` / `engine.js`)、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(284 个实例成员 / 106 个 options / 275 个数据字段)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **879/0**、`selftest-actions` / `selftest-effects` / `selftest-perf` / `selftest-demos` / `selftest-docs` 0 FAIL。
|
|
104
|
+
|
|
105
|
+
## 上两轮次:features 权限收口与点聚合自定义样式(2026-11-03)
|
|
106
|
+
|
|
107
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① 将分散的权限统一收进 `features` 控制,例如 `draggable`,并明确 `features` 是对象还是数组;② 点聚合支持自定义颜色、图标等外观。
|
|
108
|
+
- **features 收口**:`features` 的规范写法是对象 `{ 开关名: boolean }`,也接受预设名与布尔值,不是数组。`FEATURE_NAMES` 新增 `multiSelect` / `toggleSelect` 后共 **19** 个规范开关;新增 `FEATURE_ALIASES`,把 `draggable` 映射到 `drag`、`waypointEditable` 映射到 `waypoint`、`interactive` 映射到 `pan` / `zoom` / `contextMenu`、`clickable` 映射到 `hover` / `select`。同一对象同时写别名与规范名时规范名优先;数组写法经 `onWarning` 提示后忽略,未写开关仍回退到各自的详细配置。`getFeatures()` 只返回 19 个规范键。
|
|
109
|
+
- **聚合样式**:`cluster` 新增 `color` / `strokeColor` / `strokeWidth` / `opacity` / `textColor` / `fontSize` / `symbol` / `showCount` / `sizeScale`。`symbol` 支持内置 `circle` / `square`、SVG / 图片与自定义图元;内置形状继续走形状批次,SVG / 图片 / 自定义图标走独立贴图批次,绘制顺序保持普通点 → 聚合标识 → 拐点,贴图异步就绪后自动重排。默认外观保持蓝色圆、白色 2px 描边与自动 12 / 13px 数量文字,`sizeScale` 同时作用于展示与拾取半径。
|
|
110
|
+
- **读数与导出**:`getClusters()` / `getPointCluster()` / 聚合拾取载荷 / `snapshotScene()` / SVG 导出共用解析后的样式;`showCount: false` 同时关闭数量 DOM 与导出文字,关闭聚合或销毁时释放聚合图标 VAO。SVG 导出按解析后的图标类型判断,不再只比较原始 `symbol === 'circle'`。
|
|
111
|
+
- **回归与公开面**:`selftest-features` 871 → **876/0**,覆盖别名映射、规范名优先、数组告警、自定义聚合样式、数量显隐与导出;`selftest-perf` **201/0**、`selftest-demos` **442/0**。公开面保持 283 个实例成员 / 107 个 options / 276 个数据字段 / 44 个事件 / 16 个分组,功能开关 17 → **19**。
|
|
112
|
+
- **核心文件**:`src/gis-view/features.js`、`create.js`、`engine.js`、`cluster.js`、`overlay.js`、`svg.js`、`index.js`、`types.d.ts`、`src/gis-view/README.md`;手册 03 / 04 / 08 / 16 / 17 / 18 / 20 / 21、`ClusterDemo.vue`、Demo 组合式函数、`selftest-features.html` / `selftest-perf.html` / `selftest-demos.html`、`docs/demos/api-index.js`、本页与维护索引。
|
|
113
|
+
- **验证**:`node --check`(`cluster.js` / `engine.js` / `create.js` / `features.js` / `overlay.js` / `svg.js`)、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 个实例成员 / 107 个 options / 276 个数据字段 / 19 个功能开关)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **876/0**、`selftest-perf` **201/0**、`selftest-demos` **442/0**。
|
|
114
|
+
|
|
115
|
+
## 上三轮次:GeoJSON 投影闭环、背景解析性能与嵌套数据映射(2026-11-03)
|
|
116
|
+
|
|
117
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— 修改 gis-view 组件;深度优化组件性能并排查 bug;考虑添加地图 GeoJSON 时坐标与经纬度如何映射。
|
|
118
|
+
- **GeoJSON 解析**:进入剖分前统一清理非法点、相邻重复点与闭合尾点,描边不再复制闭环节点;凸环直接 O(n) 扇形剖分,凹环与带洞面改用 `Int32Array` prev / next 双链表耳切,并在内点检查前先做三角形包围盒预筛。先剔除没有可见几何的 Feature,再计算 `rawBounds` 与 `aspectScale` 中心,避免无效要素把相机落位和投影带偏。
|
|
119
|
+
- **最终投影**:`placeGeoJsonBounds()` 返回实际使用的缩放、平移、旋转中心与角度,`resolveGeoJson()` 输出 `drawTransform`;`createGeoProjection()` 先套 `aspectScale`,再合成 `geoJsonStyle.bounds / rotation`,因此 `getGeoProjection()`、事件 `lngLat`、`focusOn({ lngLat })` 与最终底图严格重合。旋转 cos / sin 在整份底图解析时只算一次。
|
|
120
|
+
- **数据映射**:`createGeoMapper()` 的 `lngLat` / `scale` 与最终底图同源,默认 `scale: 1` 才真正与底图重合;`fit` 范围补齐线路 `start` / `end` 与通道 / 分组路径。映射同时认 `[x, y]` 与 `{ x, y }`,覆盖线路 `path` / `start` / `end`、节点 / 线路固定坐标装饰、通道 `groups[].path`;`waypointOffsets` 按 `map(offset) - map([0, 0])` 做向量换算,避免叠加平移。屏幕像素偏移与尺寸 / 线宽保持原值。
|
|
121
|
+
- **性能实测**:Node 同进程微基准,6000 点凸环 `buildGeoJsonShapes()` 中位 **50.98 → 2.97 ms**,6000 点凹环 **49.16 → 23.13 ms**,两种输入改前 / 改后三角形数均为 **5998**。测量为 2 次预热 + 5 次计时取中位。
|
|
122
|
+
- **回归**:`selftest-features` 866 → **871/0**,新增旋转 / 平移后的投影重合、默认 `scale` 与 `aspectScale` 对齐、`start/end` 与通道分组 / 固定装饰 / 对象坐标映射、`waypointOffsets` 旋转向量、GeoJSON 退化环归一化断言;`selftest-docs` **139/0**、`selftest-demos` **441/0**、`selftest-full` **94/0**、`selftest-perf` **197/0**。
|
|
123
|
+
- **核心文件**:`src/gis-view/geojson.js`、`background.js`、`projection.js`、`types.d.ts`、`src/gis-view/README.md`、`docs/steps/selftest-features.html`;手册 02 / 14 / 16 / 17 / 18 / 20、internals 04 / 14、from0 01、`docs/demos/api-index.js`、本页与维护索引。
|
|
124
|
+
- **验证**:`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 个实例成员 / 107 个 options / 276 个数据字段)、`npm run build`、`git diff --check` 通过;构建仅有既有的大 chunk 提示。公开面未新增或删除成员、options、数据字段。
|
|
125
|
+
|
|
126
|
+
## 上四轮次:特征解析半账合并、线路路径复用与定向更新收口(2026-11-03)
|
|
127
|
+
|
|
128
|
+
- **需求来源**:根目录 `修改.txt` —— 修改 gis-view 组件,继续优化组件性能并排查 bug。
|
|
129
|
+
- **解析与分层**:逐要素状态样式与 `effect` 拆成点 / 线两半记账,在 `resolveFeatures()` 各自的解析循环里顺路记完;`finishFeatureResolve()` 只补扫没有真正解析过的那一半,只换背景或只动一半数据时不再回头整份扫原始数组。`resolvePointLayers()` 首趟顺手清零 `layerRank`,不分层时省掉第二趟;`resolveLineLayers(knownLayered)` 可以复用解析循环已知的“有没有 zIndex”,整半复用与增量删除则传 `undefined` 让层序自行重扫,避免误清带层级线路的顺序。
|
|
130
|
+
- **线路路径**:新增 `resolveLinePathFromBounds()`,线路端点由 `resolveRenderedLinePath()` 一次性取齐通道骨架 / 隐藏成员 / `from` / `to` / 静态路径,整份解析与定向几何更新共用;实线共用 `SOLID_DASH_STYLE`,`resolveLine()` 不再为每条线预造两份马上被替换的 `segments` / `caps` 数组。
|
|
131
|
+
- **Bug 修复**:① `updatePoint()` / `updateLine()` 首次补上状态样式或 `effect` 时同步维护总账,修复立即选中不生效、动画时钟 / 实例不启动;② 整半复用线路解析时不再把 `lineLayered` 当 `false`,修复只换背景会清空线路 `zIndex` 层序;③ 绑定节点改名后定向更新拿到空路径时不再触发 `new Array(-1)` 的 `RangeError`,改为按局部路径安全收口;④ 删除最后一个带 `effect` 的节点后清零 `featurePointEffects`,不会一直把动画判成开启。
|
|
132
|
+
- **回归与性能**:`selftest-features` 859 → **866/0**,新增首次状态样式 / effect、线路层序复用、空路径与效果总账回归;`selftest-perf` **197/0**。10 万线级基准连续 5 次:`syncMs` 中位 **377.7 ms**(改前参照 423.1)、`readyMs` **179.2**(244.3)、`refresh()` **137.6**(121.2 ~ 165.8,改前 212.0)、`updatePoint` 首调 **3.4 ~ 6.4 ms** / 第二次 **1.9 ~ 3.0 ms**(改前 5.1 / 3.2),引擎保留内存中位 **206.2 MB**(改前 218.5),平移 p50 保持 **16.6 ~ 16.7 ms**。
|
|
133
|
+
- **核心文件**:`src/gis-view/engine.js`、`src/gis-view/line.js`、`src/gis-view/README.md`、`docs/steps/selftest-features.html`、本页与维护索引。
|
|
134
|
+
- **验证**:`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 个实例成员 / 107 options / 276 个数据字段)、`npm run build`、`git diff --check` 通过;串行自测除 `selftest-scale` 的既有 2 条 `onFilter` 回调时序用例外均 0 FAIL。公开面未新增或删除成员、options、数据字段。
|
|
135
|
+
|
|
136
|
+
## 2026-11-02 轮次:装饰随选中要素抬层与可选跟随选中色(2026-11-02)
|
|
137
|
+
|
|
138
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① 通道、线路或节点存在 `decorations` 时,被选中后装饰的层级也要跟所属要素一起提升;② 装饰颜色可以配置为跟随所属线路 / 节点一起变色。
|
|
139
|
+
- **抬层**:`engine.js` 在 `raisedLineIndexes` / `raisedPointIndexes` / `raisedLineEndpointIndexes` 的基础上,把线路装饰与节点装饰分别归入抬层段。选中线路或通道回线时,整条通道的成员回线装饰一起抬层;选中节点时节点装饰抬层;选中线路的两端节点已有端点抬层逻辑,其装饰沿用同一判断。`snapshotScene()` 新增 `raisedDecorations`,绘制次序固定为普通装饰 → 抬层线路 → 抬层装饰 → 抬层节点,`svg.js` 的矢量导出按同一顺序输出。
|
|
140
|
+
- **跟随选中色**:线路 / 节点装饰新增 `followSelectColor`(缺省 `false`)。打开后仅在所属线路 / 节点被选中时取该要素的最终选中色(包含 `selectStyle`、多选 / 框选状态链的结果);颜色写到哪个通道由 `symbol` 决定:`{ type: 'svg', path }` 写 `strokeColor`、填充保留自身 `color`,其他符号写 `color`、描边保留自身 `strokeColor`。节点连接线与位图本身不跟随,取消选中后恢复装饰自身颜色。动态装饰草稿的配置、归一化、提交载荷与事件载荷都贯通该字段,`updateDecorationDraft({ followSelectColor: false })` 可关闭。
|
|
141
|
+
- **快路径**:`selectionOnTop: false` 时不做抬层重排,但线路装饰的 restyle 快路径会先检查 `followSelectColor`,节点装饰的槽位补丁也会重算颜色;选中 / 取消选中都不会留下旧色。
|
|
142
|
+
- **回归与文档**:`selftest-features` 新增选中线路 / 节点装饰的抬层、颜色往返、SVG path 选中描边 / 普通符号选中填充、像素叠放、SVG 顺序、`selectionOnTop: false` 与整条通道成员装饰断言;通道测试夹具补 `circuits: 2`,确保第二条回线确实属于通道。842 → **859/0**。手册 02 / 03 / 08 / 12 / 15 / 16 / 17、格式 02 / 03、`types.d.ts` 与组件 README 同步。公开面保持 283 个实例成员 / 107 options,数据字段 275 → **276**。
|
|
143
|
+
- **核心文件**:`src/gis-view/engine.js`、`src/gis-view/svg.js`、`src/gis-view/types.d.ts`、`src/gis-view/README.md`;`docs/manual/02` / `03` / `08` / `12` / `15` / `16` / `17`、`docs/format/02` / `03`、`docs/steps/selftest-features.html`、`docs/demos/api-index.js`、本页与维护索引。
|
|
144
|
+
- **验证**:`node --check src/gis-view/engine.js` / `svg.js`、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 个实例成员 / 107 options / 276 个数据字段)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **859/0**、`selftest-decoration` **75/0**、`selftest-select` **118/0**、`selftest-actions` **96/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。
|
|
145
|
+
|
|
146
|
+
## 2026-11-02 更早轮次:框选线路 / 通道按实际折线路径命中(2026-11-02)
|
|
147
|
+
|
|
148
|
+
- **需求来源**:根目录 `修改.txt` —— 修改 gis-view 组件,检查框选为什么有时候会框选到不在框选区域的通道。
|
|
149
|
+
- **根因**:`engine.js` 的 `collectLinesInBox()` 通过 `forEachLineInView()` 取候选,而后者只按线路包围盒与选框相交筛选。U 形 / 折返 / 绕行线路的包围盒可以覆盖选框,实际折线却可能离框很远;通道回线一旦被粗筛命中,后续还会按 `channelSelectMode` 摊开整组 / 整条通道,表现为选中了框外通道。
|
|
150
|
+
- **修复**:包围盒继续做粗筛,候选回线再用 `lineHitsRect(line, worldRect)` 逐线段判断实际路径是否与选框相交;未沾框的线路 / 通道回线直接跳过,确认命中后原有 `channelSelectMode` 展开逻辑不变。`queryRect` / `getFeaturesInRect()` 仍保持“包围盒沾框”的既有口径,`lineEndpoints` / `channelEndpoints` 也不变。
|
|
151
|
+
- **回归与文档**:`selftest-select` 新增一条组合回归:普通线路真实穿过选框;U 形线路与通道回线只有包围盒覆盖、路径不穿过;配置同时允许 `line` / `channel` 且 `channelSelectMode: 'channel'`,期望只选中穿框线路。原先会误选 3 条线 + 1 条通道,修复后 **118/0**。手册 03 / 08 与 `types.d.ts` 补充逐线段命中说明,公开面保持 283 个实例成员 / 107 options / 275 个数据字段。
|
|
152
|
+
- **核心文件**:`src/gis-view/engine.js`、`src/gis-view/types.d.ts`、`docs/manual/03-配置项.md`、`docs/manual/08-选中与拐点.md`、`docs/steps/selftest-select.html`、`src/gis-view/README.md`、`docs/AI对话汇总.md`、`docs/ai/06-会话索引与复查方法.md`。
|
|
153
|
+
- **验证**:`node --check src/gis-view/engine.js`、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`、`npm run build`、`git diff --check` 通过;串行自测 `selftest-select` **118/0**、`selftest-features` **842/0**、`selftest-actions` **96/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。
|
|
154
|
+
|
|
155
|
+
## 2026-11-02 再早轮次:toggleSelect 节点 / 线路 / 通道 / 分组核验与 visualMap 多目标门控(2026-11-02)
|
|
88
156
|
|
|
89
157
|
- **需求来源**:根目录 `修改.txt` —— ① 检查 `toggleSelect` 是否真的生效;② 续查对线路、通道和通道分组的取消是否生效;③ 反馈再次点击通道 / 线路 / 分组不会取消、只有节点能取消;④ 前一轮的 `visualMap` 交互没有效果、不会隐藏网架。
|
|
90
158
|
- **toggleSelect 根因与修复**:入口原先只看命中的那一条线路 `result.selected`。通道分组 / 整条通道只选中一部分,或点到组内、通道内的另一条回线时,这个值可能为 false,点击于是落到普通单选并重新选上,看起来只有节点能取消。现在 `engine.js` 抽出 `selectionScopeKeysOf()` 按 `channelSelectMode` 取得完整范围,`toggleSelect` 用范围 `anySelected` 判断,并以 `removeOnly` 整批取消;Ctrl / 多选仍保持原来的“整批取反 / 补缺”语义。独立线路、通道单条、完整分组、部分分组、完整通道、部分通道都有真实指针回归;`onClick` / `onSelectChange` 的动作名都是 `toggleSelect`。`selftest-select` 新增 6 条,107 → **113/0**。
|
|
@@ -96,7 +164,7 @@
|
|
|
96
164
|
- **核心文件**:`src/gis-view/visual-map.js`、`heatmap.js`、`engine.js`、`create.js`、`types.d.ts`、`src/gis-view/README.md`;`docs/manual/03` / `07` / `08` / `11` / `13`、`docs/GisView.md`、Demo 组合式函数与样式面板、`selftest-features.html`、`selftest-select.html`、本页与维护索引。
|
|
97
165
|
- **验证**:`node --check src/gis-view/engine.js`、`npx tsc --noEmit`、API 索引、`npm run check:docs`、`npm run build`、`git diff --check` 通过;`selftest-select` **117/0**、`selftest-features` **842/0**、`selftest-actions` **96/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。真实 `?demo=full` 用 3 回线通道和实际指针事件复核:完整通道选中后点击一条,选中集由 3 条变为空。性能页首次组合运行出现 192/5,失败项均为既有「线路标签候选复用」的排版时序,单独复跑全绿。
|
|
98
166
|
|
|
99
|
-
##
|
|
167
|
+
## 2026-11-01 较近轮次:再次选中取消、visualMap 落选门控与交互快路径(2026-11-01)
|
|
100
168
|
|
|
101
169
|
- **需求来源**:根目录 `修改.txt` 三条 —— ① 新增取消选中开关,默认关闭,单击、双击、Ctrl 先选中的路径都能再次操作取消;② 继续优化交互性能;③ `visualMap` 落选后应与热力图 / 网架联动,可选择消失对应网架或对应热力。按用户补充「不考虑分组详情」,本轮不扩展分组详情查询。
|
|
102
170
|
- **toggleSelect**:顶层 `options.toggleSelect` 缺省 `false`,由 `create.js` 透传引擎并支持 `updateOptions`。单击模式下第二次普通单击已选要素取反;`selectTrigger: 'dblClick'` 下由第二下取反、再次双击取消;Ctrl / ⌘ 先选中后再普通单击也取消。双击每轮只取反一次,不影响普通 `onClick` / `onDblClick` 的派发顺序;取反时 `onClick.action.type` 与 `onSelectChange.action.type` 都是 `toggleSelect`。
|
package/docs/GisView.md
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
# GisView
|
|
2
|
-
|
|
1
|
+
# GisView
|
|
2
|
+
|
|
3
3
|
`GisView` 是一套不依赖任何第三方图形库的 WebGL2 矢量视图:渲染层是原生 WebGL2(GLSL ES 3.00 + 实例化绘制),交互层只有指针与滚轮,界面只内置可选的小地图、热力图图例与背景编辑器(分别配 `minimap` / `visualMap` / 调 `beginBackgroundEdit()` 才有,见「鹰眼图」「图例(visualMap)」「背景层」),其余全靠使用方。它没有 Vue 组件形态,用 `createGisView(dom, options)` 把画布直接挂到传入的 DOM 上,宽高默认跟随容器。
|
|
4
4
|
|
|
5
|
-
控制面板与读数面板不内置;需要热力图图例时也不必自建:`options.visualMap` 会画一条带刻度的连续色带(`ruler` / `continuous`)或一组分段色块(`piecewise`),默认跟随 `heatmap` 的字段、值域与颜色。显式写 `target` 时选区只门控这一类;不写时展示值域取第一类有数值的启用目标,选区却覆盖全部启用目标上同 `field` 的热力上色、光晕与密度。图例本身就能点选分段、拖动筛选区间;默认继承主图热力的鹰眼图同步门控,显式 `minimap.heatmap` 仍独立。落选值由 `outOfRange` 选择只回普通样式(`'heatmap'`,缺省)、把对应节点 / 独立线路 / 通道一起隐藏(`'network'`),或完全不做内置门控而只发 `onChange`(`'none'`);三种方式都不删除数据、不改筛选。额外业务联动仍可听 `onChange`。需要「再次点击已选中要素即取消」时打开 `toggleSelect`(缺省关),普通单击、双击与 Ctrl 选中后的普通单击都适用。需要完全换一套外观时用 `render(context)` 接管内容,不必再写插件。其余样式和布局由使用方决定,后续改样式不需要等待组件升级。数据侧该有的都给了:按属性筛选(默认只隐藏,也可显式从数据删除;点被过滤时绑定线路与通道一起消失,大数据量走 Web Worker)、按属性批量配色换符号、节点标签与点 / 线 / 通道的悬浮提示,都可以通过 options 或实例方法配置。
|
|
6
|
-
|
|
7
|
-
**这份手册按主题拆成了 21 章,正文在 [`docs/manual/`](manual/) 下**:找方法先看 [16 实例方法总表](manual/16-实例方法总表.md),查参数跳 [17 参数速查](manual/17-参数速查.md),要能直接复制的调用看 [18 逐方法示例](manual/18-逐方法示例.md);只想先跑起来看 [01 快速开始](manual/01-快速开始.md)。
|
|
8
|
-
|
|
9
|
-
- 想在页面上按方法名搜、直接看示例:打开 [API 速查(方法 + 示例)](api/index.html)(清单就是从 17 / 18 两章生成的;支持深浅主题、左侧分组跟随与 `#成员名` 深链);要边改边跑用 [调试演示页](playground/index.html)。
|
|
10
|
-
- 「某个特性怎么实现、为什么这么做」看 [GisView 实现原理](GisView实现原理.md);数据的标准写法与五套口径看 [数据格式](数据格式.md)。
|
|
11
|
-
- 复制 / 合并 / 通道分组 / 拐点要接真实后端:请求头、body、成功响应、409 / 500、幂等与前端重试流程看 [编辑接口协议](接口协议.md);成功响应怎么落到本地数据(`idMap` 改写、合并对账、分组 / 拐点覆盖、409 局部恢复)见其中的「前端落地映射」。
|
|
12
|
-
- 后端 DTO 与内置列名不一致时,不必改组件:用 `defineExportFormat`(或底层的 `registerExportFormat`)注册一个同步导出格式,把标准文档映射成自己的表结构,见 [自定义导出格式](manual/15-导出与集成.md#自定义导出格式后端-dto)。
|
|
13
|
-
- 想照着源码从零写一遍看 [从 0 到完整的实现](从0到完整的实现.md);逐文件的教程与自测页在 [docs/steps](steps/README.md)(页面:[docs/steps/index.html](steps/index.html))。
|
|
14
|
-
|
|
15
|
-
## 手册目录
|
|
16
|
-
|
|
17
|
-
| 章 | 讲什么 |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| [01 快速开始](manual/01-快速开始.md) | 引入与最小示例:装什么、怎么把画布挂到 DOM 上 |
|
|
20
|
-
| [02 坐标与数据](manual/02-坐标与数据.md) | 世界坐标 / 经纬度映射、相机与像素、数据字段全表 |
|
|
21
|
-
| [03 配置项(options)](manual/03-配置项.md) | 全部 options 的总表与逐个详解(默认值、落点、相关开关) |
|
|
22
|
-
| [04 事件与回调](manual/04-事件与回调.md) | 回调清单、事件订阅、两层功能开关、配置提醒 |
|
|
23
|
-
| [05 画质与批量更新](manual/05-画质与批量更新.md) | quality 四档与自动升降;batch 把一批改动作一次提交 |
|
|
24
|
-
| [06 数据与场景更新](manual/06-数据与场景更新.md) | 整份换数据 / 增量追加 / 加载完成回调 / 按方法新增要素 / 历史 |
|
|
25
|
-
| [07 指针与要素编辑](manual/07-指针与要素编辑.md) | 点击与样式、指针事件全字段、光标、拖拽点、复制 / 合并 / 删除 |
|
|
26
|
-
| [08 选中与拐点](manual/08-选中与拐点.md) | 选中与拖动的层级、框选、接口选中、线路拐点的增删改 |
|
|
27
|
-
| [09 通道与多回线](manual/09-通道与多回线.md) | 通道的数据结构、createChannels 批量生成、分组与选中模式 |
|
|
28
|
-
| [10 通道编辑与新增](manual/10-通道编辑与新增.md) | 分组拐点的增删、右键交互框、新增通道的草稿流程、改名与增删回线 |
|
|
29
|
-
| [11 样式与规则](manual/11-样式与规则.md) | 点配置、线配置、条件语言(筛选 / 规则 / 标签共用)与批量样式规则 |
|
|
30
|
-
| [12 标签与装饰](manual/12-标签与装饰.md) | 节点 / 线路标签、标签拖动与编辑、节点与线路装饰、动态装饰器草稿、悬浮提示 |
|
|
5
|
+
控制面板与读数面板不内置;需要热力图图例时也不必自建:`options.visualMap` 会画一条带刻度的连续色带(`ruler` / `continuous`)或一组分段色块(`piecewise`),默认跟随 `heatmap` 的字段、值域与颜色。显式写 `target` 时选区只门控这一类;不写时展示值域取第一类有数值的启用目标,选区却覆盖全部启用目标上同 `field` 的热力上色、光晕与密度。图例本身就能点选分段、拖动筛选区间;默认继承主图热力的鹰眼图同步门控,显式 `minimap.heatmap` 仍独立。落选值由 `outOfRange` 选择只回普通样式(`'heatmap'`,缺省)、把对应节点 / 独立线路 / 通道一起隐藏(`'network'`),或完全不做内置门控而只发 `onChange`(`'none'`);三种方式都不删除数据、不改筛选。额外业务联动仍可听 `onChange`。需要「再次点击已选中要素即取消」时打开 `features: { toggleSelect: true }`(缺省关),普通单击、双击与 Ctrl 选中后的普通单击都适用。需要完全换一套外观时用 `render(context)` 接管内容,不必再写插件。其余样式和布局由使用方决定,后续改样式不需要等待组件升级。数据侧该有的都给了:按属性筛选(默认只隐藏,也可显式从数据删除;点被过滤时绑定线路与通道一起消失,大数据量走 Web Worker)、按属性批量配色换符号、节点标签与点 / 线 / 通道的悬浮提示,都可以通过 options 或实例方法配置。
|
|
6
|
+
|
|
7
|
+
**这份手册按主题拆成了 21 章,正文在 [`docs/manual/`](manual/) 下**:找方法先看 [16 实例方法总表](manual/16-实例方法总表.md),查参数跳 [17 参数速查](manual/17-参数速查.md),要能直接复制的调用看 [18 逐方法示例](manual/18-逐方法示例.md);只想先跑起来看 [01 快速开始](manual/01-快速开始.md)。
|
|
8
|
+
|
|
9
|
+
- 想在页面上按方法名搜、直接看示例:打开 [API 速查(方法 + 示例)](api/index.html)(清单就是从 17 / 18 两章生成的;支持深浅主题、左侧分组跟随与 `#成员名` 深链);要边改边跑用 [调试演示页](playground/index.html)。
|
|
10
|
+
- 「某个特性怎么实现、为什么这么做」看 [GisView 实现原理](GisView实现原理.md);数据的标准写法与五套口径看 [数据格式](数据格式.md)。
|
|
11
|
+
- 复制 / 合并 / 通道分组 / 拐点要接真实后端:请求头、body、成功响应、409 / 500、幂等与前端重试流程看 [编辑接口协议](接口协议.md);成功响应怎么落到本地数据(`idMap` 改写、合并对账、分组 / 拐点覆盖、409 局部恢复)见其中的「前端落地映射」。
|
|
12
|
+
- 后端 DTO 与内置列名不一致时,不必改组件:用 `defineExportFormat`(或底层的 `registerExportFormat`)注册一个同步导出格式,把标准文档映射成自己的表结构,见 [自定义导出格式](manual/15-导出与集成.md#自定义导出格式后端-dto)。
|
|
13
|
+
- 想照着源码从零写一遍看 [从 0 到完整的实现](从0到完整的实现.md);逐文件的教程与自测页在 [docs/steps](steps/README.md)(页面:[docs/steps/index.html](steps/index.html))。
|
|
14
|
+
|
|
15
|
+
## 手册目录
|
|
16
|
+
|
|
17
|
+
| 章 | 讲什么 |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| [01 快速开始](manual/01-快速开始.md) | 引入与最小示例:装什么、怎么把画布挂到 DOM 上 |
|
|
20
|
+
| [02 坐标与数据](manual/02-坐标与数据.md) | 世界坐标 / 经纬度映射、相机与像素、数据字段全表 |
|
|
21
|
+
| [03 配置项(options)](manual/03-配置项.md) | 全部 options 的总表与逐个详解(默认值、落点、相关开关) |
|
|
22
|
+
| [04 事件与回调](manual/04-事件与回调.md) | 回调清单、事件订阅、两层功能开关、配置提醒 |
|
|
23
|
+
| [05 画质与批量更新](manual/05-画质与批量更新.md) | quality 四档与自动升降;batch 把一批改动作一次提交 |
|
|
24
|
+
| [06 数据与场景更新](manual/06-数据与场景更新.md) | 整份换数据 / 增量追加 / 加载完成回调 / 按方法新增要素 / 历史 |
|
|
25
|
+
| [07 指针与要素编辑](manual/07-指针与要素编辑.md) | 点击与样式、指针事件全字段、光标、拖拽点、复制 / 合并 / 删除 |
|
|
26
|
+
| [08 选中与拐点](manual/08-选中与拐点.md) | 选中与拖动的层级、框选、接口选中、线路拐点的增删改 |
|
|
27
|
+
| [09 通道与多回线](manual/09-通道与多回线.md) | 通道的数据结构、createChannels 批量生成、分组与选中模式 |
|
|
28
|
+
| [10 通道编辑与新增](manual/10-通道编辑与新增.md) | 分组拐点的增删、右键交互框、新增通道的草稿流程、改名与增删回线 |
|
|
29
|
+
| [11 样式与规则](manual/11-样式与规则.md) | 点配置、线配置、条件语言(筛选 / 规则 / 标签共用)与批量样式规则 |
|
|
30
|
+
| [12 标签与装饰](manual/12-标签与装饰.md) | 节点 / 线路标签、标签拖动与编辑、节点与线路装饰、动态装饰器草稿、悬浮提示 |
|
|
31
31
|
| [13 动效与图元](manual/13-动效与图元.md) | 热力图、图例(visualMap)、动画效果、线路方向箭头、贴图预热与自定义图元 |
|
|
32
|
-
| [14 视图与筛选](manual/14-视图与筛选.md) | 筛选、搜索定位、初始视图与缩放范围、背景层、鹰眼图、近义入口 |
|
|
33
|
-
| [15 导出与集成](manual/15-导出与集成.md) | 导出图片 / 选中节点 / 数据、自定义导出格式,插件、自建界面与键盘交互 |
|
|
34
|
-
| [16 实例方法总表](manual/16-实例方法总表.md) | 按功能分组的实例方法主表(找方法从这一章开始) |
|
|
35
|
-
| [17 参数速查(逐个方法)](manual/17-参数速查.md) |
|
|
36
|
-
| [18 逐方法示例(复制就能跑)](manual/18-逐方法示例.md) | 每个成员一段可复制的调用示例(API 速查页读的就是这一章) |
|
|
37
|
-
| [19 读数与拖拽预览](manual/19-读数与拖拽预览.md) | 自建界面常用的读数 / 定位方法;拖拽落点预览 |
|
|
38
|
-
| [20 性能与大数据](manual/20-性能与大数据.md) | 十万级数据的开关与实测、WebGPU 取舍、渲染后端开关 |
|
|
39
|
-
| [21 说明与常见问题](manual/21-说明与常见问题.md) | 边界与口径、FAQ、类型定义索引 |
|
|
40
|
-
|
|
41
|
-
## 快速跳转(按任务)
|
|
42
|
-
|
|
43
|
-
- **上手**:[引入](manual/01-快速开始.md#引入) · [基础用法](manual/01-快速开始.md#基础用法) · [坐标与数据](manual/02-坐标与数据.md)
|
|
44
|
-
- **配置与回调**:[options 总表](manual/03-配置项.md#options) · [回调](manual/04-事件与回调.md#回调) · [功能开关](manual/04-事件与回调.md#功能开关)
|
|
45
|
-
- **通道**:[通道与多回线](manual/09-通道与多回线.md) · [通道编辑与新增](manual/10-通道编辑与新增.md) · [分组拐点](manual/10-通道编辑与新增.md#分组拐点把某一组拉走)
|
|
46
|
-
- **样式**:[点配置](manual/11-样式与规则.md#点配置) · [线配置](manual/11-样式与规则.md#线配置) · [条件语言](manual/11-样式与规则.md#条件语言) · [批量样式规则](manual/11-样式与规则.md#批量样式规则)
|
|
32
|
+
| [14 视图与筛选](manual/14-视图与筛选.md) | 筛选、搜索定位、初始视图与缩放范围、背景层、鹰眼图、近义入口 |
|
|
33
|
+
| [15 导出与集成](manual/15-导出与集成.md) | 导出图片 / 选中节点 / 数据、自定义导出格式,插件、自建界面与键盘交互 |
|
|
34
|
+
| [16 实例方法总表](manual/16-实例方法总表.md) | 按功能分组的实例方法主表(找方法从这一章开始) |
|
|
35
|
+
| [17 参数速查(逐个方法)](manual/17-参数速查.md) | 285 个成员逐个列全:参数、默认值与返回 |
|
|
36
|
+
| [18 逐方法示例(复制就能跑)](manual/18-逐方法示例.md) | 每个成员一段可复制的调用示例(API 速查页读的就是这一章) |
|
|
37
|
+
| [19 读数与拖拽预览](manual/19-读数与拖拽预览.md) | 自建界面常用的读数 / 定位方法;拖拽落点预览 |
|
|
38
|
+
| [20 性能与大数据](manual/20-性能与大数据.md) | 十万级数据的开关与实测、WebGPU 取舍、渲染后端开关 |
|
|
39
|
+
| [21 说明与常见问题](manual/21-说明与常见问题.md) | 边界与口径、FAQ、类型定义索引 |
|
|
40
|
+
|
|
41
|
+
## 快速跳转(按任务)
|
|
42
|
+
|
|
43
|
+
- **上手**:[引入](manual/01-快速开始.md#引入) · [基础用法](manual/01-快速开始.md#基础用法) · [坐标与数据](manual/02-坐标与数据.md)
|
|
44
|
+
- **配置与回调**:[options 总表](manual/03-配置项.md#options) · [回调](manual/04-事件与回调.md#回调) · [功能开关](manual/04-事件与回调.md#功能开关)
|
|
45
|
+
- **通道**:[通道与多回线](manual/09-通道与多回线.md) · [通道编辑与新增](manual/10-通道编辑与新增.md) · [分组拐点](manual/10-通道编辑与新增.md#分组拐点把某一组拉走)
|
|
46
|
+
- **样式**:[点配置](manual/11-样式与规则.md#点配置) · [线配置](manual/11-样式与规则.md#线配置) · [条件语言](manual/11-样式与规则.md#条件语言) · [批量样式规则](manual/11-样式与规则.md#批量样式规则)
|
|
47
47
|
- **标签与动效**:[节点标签](manual/12-标签与装饰.md#节点标签) · [线路标签](manual/12-标签与装饰.md#线路标签) · [标签优化](manual/12-标签与装饰.md#标签显示优化开关labeloptimize) · [扩展图形](manual/12-标签与装饰.md#扩展图形graphic) · [节点装饰](manual/12-标签与装饰.md#节点上的装饰图片--svg) · [线路装饰](manual/12-标签与装饰.md#线路上的装饰图片--svg) · [手动删除装饰](manual/12-标签与装饰.md#手动删除装饰) · [动态装饰器](manual/12-标签与装饰.md#动态装饰器草稿) · [图例(visualMap)](manual/13-动效与图元.md#图例visualmap) · [动画效果](manual/13-动效与图元.md#动画效果effects) · [自定义图元](manual/13-动效与图元.md#自定义图元)
|
|
48
|
-
- **视图**:[筛选](manual/14-视图与筛选.md#筛选) · [搜索与定位](manual/14-视图与筛选.md#搜索与定位) · [适应视图的节点间距](manual/14-视图与筛选.md#适应视图的节点间距fitspacing) · [背景层](manual/14-视图与筛选.md#背景层) · [鹰眼图](manual/14-视图与筛选.md#鹰眼图)
|
|
49
|
-
- **导出与集成**:[导出数据](manual/15-导出与集成.md#导出数据) · [自定义导出格式](manual/15-导出与集成.md#自定义导出格式后端-dto) · [插件](manual/15-导出与集成.md#插件) · [实例命令](manual/15-导出与集成.md#实例命令) · [六类扩展点怎么选](manual/15-导出与集成.md#六类扩展点怎么选) · [自建界面](manual/15-导出与集成.md#自建界面)
|
|
50
|
-
- **查方法**:[实例方法总表](manual/16-实例方法总表.md) · [参数速查](manual/17-参数速查.md) · [逐方法示例](manual/18-逐方法示例.md) · [读数与拖拽预览](manual/19-读数与拖拽预览.md)
|
|
51
|
-
- **概念与排查**:[大数据展示模式(denseMode)](manual/20-性能与大数据.md#大数据展示模式densemode) · [大数据量](manual/20-性能与大数据.md#大数据量) · [常见问题](manual/21-说明与常见问题.md#常见问题) · [类型定义索引](manual/21-说明与常见问题.md#类型定义索引)
|
|
52
|
-
|
|
53
|
-
> 本页也可以从文档中心(`docs/index.html`)打开:左侧清单里 `GisView.md` 是这一页,下面紧跟着 21 章手册。
|
|
48
|
+
- **视图**:[筛选](manual/14-视图与筛选.md#筛选) · [搜索与定位](manual/14-视图与筛选.md#搜索与定位) · [适应视图的节点间距](manual/14-视图与筛选.md#适应视图的节点间距fitspacing) · [背景层](manual/14-视图与筛选.md#背景层) · [鹰眼图](manual/14-视图与筛选.md#鹰眼图)
|
|
49
|
+
- **导出与集成**:[导出数据](manual/15-导出与集成.md#导出数据) · [自定义导出格式](manual/15-导出与集成.md#自定义导出格式后端-dto) · [插件](manual/15-导出与集成.md#插件) · [实例命令](manual/15-导出与集成.md#实例命令) · [六类扩展点怎么选](manual/15-导出与集成.md#六类扩展点怎么选) · [自建界面](manual/15-导出与集成.md#自建界面)
|
|
50
|
+
- **查方法**:[实例方法总表](manual/16-实例方法总表.md) · [参数速查](manual/17-参数速查.md) · [逐方法示例](manual/18-逐方法示例.md) · [读数与拖拽预览](manual/19-读数与拖拽预览.md)
|
|
51
|
+
- **概念与排查**:[大数据展示模式(denseMode)](manual/20-性能与大数据.md#大数据展示模式densemode) · [大数据量](manual/20-性能与大数据.md#大数据量) · [常见问题](manual/21-说明与常见问题.md#常见问题) · [类型定义索引](manual/21-说明与常见问题.md#类型定义索引)
|
|
52
|
+
|
|
53
|
+
> 本页也可以从文档中心(`docs/index.html`)打开:左侧清单里 `GisView.md` 是这一页,下面紧跟着 21 章手册。
|
|
@@ -55,6 +55,13 @@
|
|
|
55
55
|
|
|
56
56
|
| 日期 | 这一轮 |
|
|
57
57
|
| --- | --- |
|
|
58
|
+
| 2026-11-03 | 增量:(「修改.txt」两条:交互权限统一收进 features / mapLngLatToData 经纬度存档回灌与 Demo) |
|
|
59
|
+
| 2026-11-03 | 增量:(「修改.txt」两条:顶层 `draggable` 收进 `features` / GeoJSON 背景编辑后的网架坐标批量转经纬度) |
|
|
60
|
+
| 2026-11-03 | 增量:(「修改.txt」两条:features 权限收口 / 点聚合自定义颜色与图标) |
|
|
61
|
+
| 2026-11-03 | 增量:(「修改.txt」:GeoJSON 剖分性能、最终投影闭环与嵌套坐标映射) |
|
|
62
|
+
| 2026-11-03 | 增量:(「修改.txt」:继续优化组件性能、排查 bug;特征解析半账合并、线路路径复用、定向更新与效果总账收口) |
|
|
63
|
+
| 2026-11-02 | 增量:(「修改.txt」两条:选中通道 / 线路 / 节点的 decorations 一起抬层 / `followSelectColor` 跟随选中色,SVG path 写描边) |
|
|
64
|
+
| 2026-11-02 | 增量:(「修改.txt」:框选只认实际折线路径,排除包围盒覆盖的框外线路 / 通道) |
|
|
58
65
|
| 2026-11-02 | 增量:(「修改.txt」两条:GisEdit toggleSelect 被 selectionKinds 拦截 / 取消选中同步收掉级联) |
|
|
59
66
|
| 2026-11-01 | 增量:(「修改.txt」三条:toggleSelect 再次选中取消 / visualMap outOfRange 落选门控 / 交互性能) |
|
|
60
67
|
| 2026-11-01 | 增量:(「修改.txt」三条:热力密度几何隔离 / 线路热力连续 / visualMap 运行时门控) |
|
|
@@ -134,7 +141,71 @@
|
|
|
134
141
|
| 2026-10-19 | 增量:(「修改.txt」继续优化与排查) |
|
|
135
142
|
| 2026-10-19 | 增量:(「修改.txt」五条) |
|
|
136
143
|
|
|
137
|
-
##
|
|
144
|
+
## 三、当前增量:交互权限唯一入口与经纬度存档回灌(2026-11-03)
|
|
145
|
+
|
|
146
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① `mapDataToLngLat()` 保存后的数据要能原样映射回地图,并在 Demo 中体现;② `clickable`、`boxSelect` 这类交互权限统一只通过 `features` 配置。
|
|
147
|
+
- **权限唯一入口**:七个旧顶层开关 `draggable` / `interactive` / `clickable` / `boxSelect` / `multiSelect` / `toggleSelect` / `waypointEditable` 从公开 `GisViewOptions` 删除;`pickEngineOptions()` 的平移、缩放、悬停、选中、右键、拖拽、框选、多选、取反与拐点权限只读 `features`,引擎内部 `interactive` / `clickable` 总闸固定为 `true`,`featureState()` 不再回读旧字段。创建和 `updateOptions()` 收到旧字段时逐项发迁移提示并忽略,`getOptions()` 不再残留;节点级 `clickable` / `draggable`、线路级 `waypointEditable`、标签级 `draggable` 与 `features` 内同名别名仍保留,分别负责逐要素覆盖与输入兼容。
|
|
148
|
+
- **经纬度存档回灌**:新增 `mapLngLatToData(data, options?)`,按当前最终底图投影把存着经纬度的 `points` / `lines` / `channels` 写回世界坐标,覆盖线路端点 / 路径、固定坐标装饰、通道分组路径与 `waypointOffsets` 向量;返回副本、不改入参,没有 GeoJSON 背景时为 `null`。`BackgroundDemo.vue` 增加“保存经纬度 → 清空网架 → 原样回灌”和首节点误差读数,验证底图未改动时世界坐标与屏幕落点恢复。
|
|
149
|
+
- **测试与公开面**:`selftest-features` **881/0** 覆盖几何往返、入参不变、保存 / 清空 / 回灌,以及七个旧字段创建与更新时告警、忽略且不进入 `getOptions()`;`selftest-demos` **446/0** 覆盖 Demo 三步流程。公开面为 **285** 个实例成员(**280** 方法 + **5** 属性)/ **100** options / **275** 数据字段 / 44 事件 / 19 功能开关 / 16 分组。
|
|
150
|
+
- **核心文件**:`src/gis-view/features.js`、`create.js`、`projection.js`、`types.d.ts`、`docs/demos/BackgroundDemo.vue`、`docs/steps/selftest-features.html`、`docs/steps/selftest-demos.html`、相关手册 / 格式 / 索引文档、`docs/demos/api-index.js`、本页与 `docs/AI对话汇总.md`。
|
|
151
|
+
- **验证**:`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(285 成员 / 280 方法 / 100 options / 275 数据字段)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **881/0**、`selftest-demos` **446/0**、`selftest-docs` **139/0**、`selftest-actions` **96/0**、`selftest-select` **118/0**、`selftest-data` **103/0**、`selftest-perf` **201/0**、`selftest-effects` **96/0**。
|
|
152
|
+
|
|
153
|
+
## 四、上一增量:拖动权限收口与网架坐标反投影(2026-11-03)
|
|
154
|
+
|
|
155
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① 顶层 `options.draggable` 应收进 `features`;② GeoJSON 背景完成缩放 / 平移 / 旋转编辑后,提供一个方法将网架世界坐标 `x/y` 批量转换为该底图的经纬度。
|
|
156
|
+
- **拖动权限**:`create.js` 的 `pickEngineOptions()` 改为 `draggable: featureOn(features, 'drag', false)`,`featureState().drag` 同样固定回落到 `false`;公开 `GisViewOptions.draggable` 删除。创建与 `updateOptions` 传入旧字段时只经 `onWarning` 提示改用 `features: { drag: true }`,不再生效,也不会留在 `getOptions()` 返回对象里。`features.draggable` 输入别名、节点 `draggable`、标签 `draggable` 保留,各自语义不变。
|
|
157
|
+
- **世界坐标反投影**:`projection.js` 的 `createGeoMapper()` 新增 `mode: 'world'`,用最终投影的 `unproject` 反算真实经纬度;`aspectScale`、背景编辑后的 `bounds` 与 `rotation` 均参与,`mapChannel()` 的 `waypointOffsets` 继续按向量换算。`create.js` 新增 `mapDataToLngLat(data?, options?)`:不传 data 时转换当前 `points` / `lines` / `channels`,返回副本,不修改原数据与视图,不自动 `updateData()`;没有 GeoJSON 背景时为 `null`。
|
|
158
|
+
- **类型与文档**:`types.d.ts` 删除公开 `draggable`,保留 `GisViewEngineOptions.draggable` 为组件计算后的内部字段,并补 `world` 模式、`mapDataToLngLat` 声明与注释;`features.js` / `engine.js` 注明拖拽唯一入口。手册 02 / 03 / 04 / 07 / 08 / 16 / 17 / 18 / 21、`docs/GisView.md`、`docs/index.html`、组件 README、Demo 脚本与 API 索引同步。
|
|
159
|
+
- **回归与公开面**:`selftest-features` 876 → **879/0**,覆盖 world 反投影 / 旋转往返 / `waypointOffsets` 向量、背景编辑并旋转后整份网架转换且原数据不变、顶层旧写法告警与节点拖不动。公开面为 **284** 个实例成员(**279** 方法 + **5** 属性)/ **106** options / **275** 数据字段 / 44 事件 / 19 功能开关 / 16 分组。
|
|
160
|
+
- **核心文件与验证**:`src/gis-view/create.js`、`projection.js`、`features.js`、`engine.js`、`types.d.ts`、`src/gis-view/README.md`、`docs/steps/selftest-features.html`、各示例迁移文件、`docs/demos/api-index.js`、本页与 `docs/AI对话汇总.md`。`node --check`(`create.js` / `projection.js` / `features.js` / `engine.js`)、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(284 / 106 / 275)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **879/0**,`selftest-actions` / `selftest-effects` / `selftest-perf` / `selftest-demos` / `selftest-docs` 均 0 FAIL。
|
|
161
|
+
|
|
162
|
+
## 五、上两增量:features 权限收口与点聚合自定义样式(2026-11-03)
|
|
163
|
+
|
|
164
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① 将分散的权限统一收进 `features` 控制,例如 `draggable`,并明确 `features` 是对象还是数组;② 点聚合支持自定义颜色、图标等外观。
|
|
165
|
+
- **features 收口**:`features` 的规范写法是对象 `{ 开关名: boolean }`,也接受预设名与布尔值,不是数组。`FEATURE_NAMES` 新增 `multiSelect` / `toggleSelect` 后共 **19** 个规范开关;`FEATURE_ALIASES` 把 `draggable` 映射到 `drag`、`waypointEditable` 映射到 `waypoint`、`interactive` 映射到 `pan` / `zoom` / `contextMenu`、`clickable` 映射到 `hover` / `select`。同一对象同时写别名与规范名时规范名优先;数组写法经 `onWarning` 提示后忽略,未写开关仍回退详细配置。`getFeatures()` 只返回 19 个规范键。
|
|
166
|
+
- **聚合样式**:`cluster` 新增 `color` / `strokeColor` / `strokeWidth` / `opacity` / `textColor` / `fontSize` / `symbol` / `showCount` / `sizeScale`。`symbol` 支持内置 `circle` / `square`、SVG / 图片与自定义图元;形状继续走形状批次,SVG / 图片 / 自定义图标走独立贴图批次并保持普通点 → 聚合标识 → 拐点的顺序,贴图异步就绪后自动重排。默认外观保持蓝色圆、白色 2px 描边与自动 12 / 13px 数量文字,`sizeScale` 同时影响展示和拾取半径。
|
|
167
|
+
- **读数、导出与资源回收**:`getClusters()` / `getPointCluster()` / 聚合拾取载荷 / `snapshotScene()` / SVG 导出共用解析后的样式;`showCount: false` 同时关闭数量 DOM 与导出文字,SVG 导出按解析后的图标类型判断;关闭聚合或销毁时释放聚合图标 VAO。
|
|
168
|
+
- **回归与文档**:`selftest-features` 871 → **876/0**,覆盖别名映射、规范名优先、数组告警、自定义聚合样式、数量显隐与导出;`selftest-perf` **201/0**、`selftest-demos` **442/0**。手册 03 / 04 / 08 / 16 / 17 / 18 / 20 / 21、`src/gis-view/README.md`、`ClusterDemo.vue`、Demo 组合式函数、三个自测页与 API 索引同步;功能开关 17 → **19**,其余公开面保持 283 个实例成员 / 107 个 options / 276 个数据字段。
|
|
169
|
+
- **核心文件与验证**:`src/gis-view/features.js`、`create.js`、`engine.js`、`cluster.js`、`overlay.js`、`svg.js`、`index.js`、`types.d.ts`、`src/gis-view/README.md`;手册 03 / 04 / 08 / 16 / 17 / 18 / 20 / 21、`docs/demos/ClusterDemo.vue`、`docs/demos/gis-view-demo/useGisViewDemo.js`、`docs/steps/selftest-features.html` / `selftest-perf.html` / `selftest-demos.html`、`docs/demos/api-index.js`、本页与 `docs/AI对话汇总.md`。`node --check`、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 个实例成员 / 107 个 options / 276 个数据字段 / 19 个功能开关)、`npm run build`、`git diff --check` 通过;浏览器串行自测 `selftest-features` **876/0**、`selftest-perf` **201/0**、`selftest-demos` **442/0**。
|
|
170
|
+
|
|
171
|
+
## 六、上三增量:GeoJSON 剖分性能、最终投影闭环与嵌套坐标映射(2026-11-03)
|
|
172
|
+
|
|
173
|
+
- **需求来源**:根目录 `修改.txt` —— 修改 gis-view 组件;深度优化组件性能并排查 bug;考虑添加地图 GeoJSON 时坐标与经纬度如何映射。
|
|
174
|
+
- **GeoJSON 解析**:进入剖分前统一清理非法点、相邻重复点与闭合尾点,描边不再复制闭环节点;凸环直接 O(n) 扇形剖分,凹环与带洞面改用 `Int32Array` prev / next 双链表耳切,并在内点检查前先做三角形包围盒预筛。先剔除没有可见几何的 Feature,再计算 `rawBounds` 与 `aspectScale` 中心,避免无效要素把相机落位和投影带偏。
|
|
175
|
+
- **最终投影**:`placeGeoJsonBounds()` 返回实际使用的缩放、平移、旋转中心与角度,`resolveGeoJson()` 输出 `drawTransform`;`createGeoProjection()` 先套 `aspectScale`,再合成 `geoJsonStyle.bounds / rotation`,因此 `getGeoProjection()`、事件 `lngLat`、`focusOn({ lngLat })` 与最终底图严格重合。旋转 cos / sin 在整份底图解析时只算一次。
|
|
176
|
+
- **数据映射**:`createGeoMapper()` 的 `lngLat` / `scale` 与最终底图同源,默认 `scale: 1` 才真正与底图重合;`fit` 范围补齐线路 `start` / `end` 与通道 / 分组路径。映射同时认 `[x, y]` 与 `{ x, y }`,覆盖线路 `path` / `start` / `end`、节点 / 线路固定坐标装饰、通道 `groups[].path`;`waypointOffsets` 按 `map(offset) - map([0, 0])` 做向量换算,避免叠加平移。屏幕像素偏移与尺寸 / 线宽保持原值。
|
|
177
|
+
- **回归与性能**:Node 同进程微基准,6000 点凸环 `buildGeoJsonShapes()` 中位 **50.98 → 2.97 ms**,6000 点凹环 **49.16 → 23.13 ms**,两种输入改前 / 改后三角形数均为 **5998**。`selftest-features` 866 → **871/0**,新增旋转 / 平移后的投影重合、默认 `scale` 与 `aspectScale` 对齐、`start` / `end` 与通道分组 / 固定装饰 / 对象坐标映射、`waypointOffsets` 旋转向量、GeoJSON 退化环归一化断言;`selftest-docs` **139/0**、`selftest-demos` **441/0**、`selftest-full` **94/0**、`selftest-perf` **197/0**。
|
|
178
|
+
- **核心文件与验证**:`src/gis-view/geojson.js`、`background.js`、`projection.js`、`types.d.ts`、`src/gis-view/README.md`、`docs/steps/selftest-features.html`;手册 02 / 14 / 16 / 17 / 18 / 20、internals 04 / 14、from0 01、`docs/demos/api-index.js`、本页与 `docs/AI对话汇总.md`。`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 个实例成员 / 107 个 options / 276 个数据字段)、`npm run build`、`git diff --check` 通过;构建仅有既有的大 chunk 提示。公开面未新增或删除成员、options、数据字段。
|
|
179
|
+
|
|
180
|
+
## 七、上四增量:特征解析半账合并、线路路径复用与定向更新收口(2026-11-03)
|
|
181
|
+
|
|
182
|
+
- **需求来源**:根目录 `修改.txt` —— 修改 gis-view 组件,继续优化组件性能并排查 bug。
|
|
183
|
+
- **解析与分层**:逐要素状态样式与 `effect` 拆成点 / 线两半,在解析循环里顺路记完;`finishFeatureResolve()` 只补扫未真正解析的那一半。`resolvePointLayers()` 首趟清零 `layerRank`;`resolveLineLayers(knownLayered)` 复用“是否分层”的已知结果,整半复用与增量删除传 `undefined` 自行重扫,避免误清线路 `zIndex` 层序。
|
|
184
|
+
- **线路路径**:`resolveLinePathFromBounds()` 承接端点替换,`resolveRenderedLinePath()` 一次性取齐通道骨架 / 隐藏成员 / `from` / `to` / 静态路径;实线共用 `SOLID_DASH_STYLE`,`resolveLine()` 的 `segments` / `caps` 改由 `applyLinePath()` 一次创建。
|
|
185
|
+
- **Bug 修复**:首次给节点 / 线路补状态样式或 `effect` 时同步总账;只换背景导致线路整半复用时保留 zIndex 层序;绑定节点改名后的空路径不再触发 `RangeError`;删除最后一个 effect 节点后清零逐要素效果总账。
|
|
186
|
+
- **回归与性能**:`selftest-features` 859 → **866/0**,`selftest-perf` **197/0**。10 万线级基准 5 次中位:`syncMs` **377.7 ms**、`readyMs` **179.2 ms**、`refresh()` **137.6 ms**(改前参照 212.0)、引擎保留内存 **206.2 MB**(218.5),平移 p50 保持 16.6 ~ 16.7 ms。
|
|
187
|
+
- **核心文件**:`src/gis-view/engine.js`、`src/gis-view/line.js`、`src/gis-view/README.md`、`docs/steps/selftest-features.html`、本页与 `docs/AI对话汇总.md`。
|
|
188
|
+
- **验证**:`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 / 107 / 276)、`npm run build`、`git diff --check` 通过;除 `selftest-scale` 的既有 2 条 `onFilter` 时序用例外,串行自测 0 FAIL。
|
|
189
|
+
|
|
190
|
+
## 八、上五增量:装饰随选中要素抬层与可选跟随选中色(2026-11-02)
|
|
191
|
+
|
|
192
|
+
- **需求来源**:根目录 `修改.txt` 两条 —— ① 通道、线路或节点存在 `decorations` 时,被选中后装饰层级一起提升;② 装饰颜色可配置为跟随所属线路 / 节点一起变色。
|
|
193
|
+
- **抬层与颜色**:`engine.js` 让线路装饰跟随 `raisedLineIndexes`、节点装饰跟随 `raisedPointIndexes` / `raisedLineEndpointIndexes` 进入抬层段;选中通道里的任一回线会把成员回线装饰一起抬起。线路 / 节点装饰新增 `followSelectColor`(缺省 `false`),打开后只在所属要素选中时取最终选中色;`symbol` 为 `{ type: 'svg', path }` 时写 `strokeColor`、其他符号写 `color`,节点连接线不跟随,取消选中恢复装饰自身颜色。动态装饰草稿的归一化、提交、更新与事件载荷均已贯通。
|
|
194
|
+
- **快照与导出**:`snapshotScene()` 新增 `raisedDecorations`,次序为普通装饰 → 抬层线路 → 抬层装饰 → 抬层节点;`svg.js` 按同一顺序输出。`selectionOnTop: false` 时不做抬层重排,但 lines / points 的样式快路径仍会重算 `followSelectColor`。
|
|
195
|
+
- **回归与文档**:`selftest-features` 覆盖线路 / 节点 / 整条通道装饰抬层、颜色往返、SVG path 选中描边 / 普通符号选中填充、像素叠放、SVG 顺序与 `selectionOnTop: false` 快路径;通道夹具补 `circuits: 2` 修正测试前置条件。features 842 → **859/0**。手册 02 / 03 / 08 / 12 / 15 / 16 / 17、格式 02 / 03、`types.d.ts` 与组件 README 同步;公开面保持 283 个实例成员 / 107 options,数据字段 275 → **276**。
|
|
196
|
+
- **核心文件**:`src/gis-view/engine.js`、`src/gis-view/svg.js`、`src/gis-view/types.d.ts`、`src/gis-view/README.md`;`docs/manual/02` / `03` / `08` / `12` / `15` / `16` / `17`、`docs/format/02` / `03`、`docs/steps/selftest-features.html`、`docs/demos/api-index.js`、`docs/AI对话汇总.md`、本页。
|
|
197
|
+
- **验证**:`node --check src/gis-view/engine.js` / `svg.js`、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(283 / 107 / 276)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **859/0**、`selftest-decoration` **75/0**、`selftest-select` **118/0**、`selftest-actions` **96/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。
|
|
198
|
+
|
|
199
|
+
## 九、上六增量:框选线路 / 通道按实际折线路径命中(2026-11-02)
|
|
200
|
+
|
|
201
|
+
- **需求来源**:根目录 `修改.txt` —— 修改 gis-view 组件,检查框选为什么有时候会框选到不在框选区域的通道。
|
|
202
|
+
- **根因**:`engine.js` 的 `collectLinesInBox()` 通过 `forEachLineInView()` 取候选,而后者只按线路包围盒与选框相交筛选。U 形 / 折返 / 绕行线路的包围盒可以覆盖选框,实际折线却可能离框很远;通道回线一旦被粗筛命中,后续还会按 `channelSelectMode` 摊开整组 / 整条通道,表现为选中了框外通道。
|
|
203
|
+
- **修复**:包围盒继续做粗筛,候选回线再用 `lineHitsRect(line, worldRect)` 逐线段判断实际路径是否与选框相交;未沾框的线路 / 通道回线直接跳过,确认命中后原有 `channelSelectMode` 展开逻辑不变。`queryRect` / `getFeaturesInRect()` 仍保持“包围盒沾框”的既有口径,`lineEndpoints` / `channelEndpoints` 也不变。
|
|
204
|
+
- **回归与文档**:`selftest-select` 新增一条组合回归:普通线路真实穿过选框;U 形线路与通道回线只有包围盒覆盖、路径不穿过;配置同时允许 `line` / `channel` 且 `channelSelectMode: 'channel'`,期望只选中穿框线路。原先会误选 3 条线 + 1 条通道,修复后 **118/0**。手册 03 / 08 与 `types.d.ts` 补充逐线段命中说明,公开面保持 283 个实例成员 / 107 options / 275 个数据字段。
|
|
205
|
+
- **核心文件**:`src/gis-view/engine.js`、`src/gis-view/types.d.ts`、`docs/manual/03-配置项.md`、`docs/manual/08-选中与拐点.md`、`docs/steps/selftest-select.html`、`src/gis-view/README.md`、`docs/AI对话汇总.md`、本页。
|
|
206
|
+
- **验证**:`node --check src/gis-view/engine.js`、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`、`npm run build`、`git diff --check` 通过;串行自测 `selftest-select` **118/0**、`selftest-features` **842/0**、`selftest-actions` **96/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。
|
|
207
|
+
|
|
208
|
+
## 十、上七增量:toggleSelect 节点 / 线路 / 通道 / 分组核验与 visualMap 多目标门控(2026-11-02)
|
|
138
209
|
|
|
139
210
|
- **需求来源**:根目录 `修改.txt`:① 检查 `toggleSelect` 是否真的生效;② 续查对线路、通道和通道分组的取消是否生效;③ 反馈再次点击通道 / 线路 / 分组不会取消、只有节点能取消;④ 前一轮的 `visualMap` 交互没有效果、不会隐藏。
|
|
140
211
|
- **toggleSelect 根因与修复**:入口原先只判断命中的那一条线路 `result.selected`。通道分组 / 整条通道只选中一部分,或点到组内、通道内的另一条回线时,这个值可能为 false,点击会落到普通单选并重新选上,表现得像只有节点能取消。现在 `engine.js` 的 `selectionScopeKeysOf()` 统一按 `channelSelectMode` 求展开范围;`toggleSelect` 用范围 `anySelected` 判断,并以 `removeOnly` 整批取消,不再要求命中的恰好是那条已选回线;Ctrl / 多选路径仍保持原来的整批取反 / 补缺语义。新增独立线路、通道单条、完整 / 部分分组、完整 / 部分通道 6 条指针回归,两条选中回调都报 `toggleSelect`;`selftest-select` 107 → **113/0**。
|
|
@@ -147,7 +218,7 @@
|
|
|
147
218
|
- **核心文件**:`src/gis-view/visual-map.js`、`heatmap.js`、`engine.js`、`create.js`、`types.d.ts`、`src/gis-view/README.md`;`docs/manual/03` / `07` / `08` / `11` / `13`、`docs/GisView.md`、`docs/demos/gis-view-demo/useGisViewDemo.js`、`panels/StylePanels.vue`、`docs/steps/selftest-features.html`、`selftest-select.html`、本页与 `docs/AI对话汇总.md`。
|
|
148
219
|
- **验证**:`node --check src/gis-view/engine.js`、`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`、`npm run build`、`git diff --check` 通过;串行自测 `selftest-select` **117/0**、`selftest-features` **842/0**、`selftest-actions` **96/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。真实 `?demo=full` 以实际指针事件复核完整通道取消,选中集由 3 条变为空。性能页首次组合运行出现 **192/5**,5 条均为既有「线路标签候选复用」的标签排版时序,单独复跑全绿,与本轮改动没有调用关系。
|
|
149
220
|
|
|
150
|
-
##
|
|
221
|
+
## 十一、上八增量:再次选中取消、visualMap 落选门控与交互快路径(2026-11-01)
|
|
151
222
|
|
|
152
223
|
- **需求来源**:根目录 `修改.txt` 三条:① 新增取消选中开关,默认关闭,单击、双击、Ctrl 先选中的路径都能再次操作取消;② 继续优化交互性能;③ `visualMap` 落选后应与热力图 / 网架联动,可选择消失对应网架或对应热力。按用户补充「不考虑分组详情」,本轮不扩展分组详情查询。
|
|
153
224
|
- **toggleSelect**:顶层 `options.toggleSelect` 缺省 `false`,`create.js` 透传引擎,`updateOptions` 可运行时切换。单击模式下第二次普通单击已选要素取反;`selectTrigger: 'dblClick'` 下由第二下取反、再次双击取消;Ctrl / ⌘ 先选中后再普通单击也取消。双击每轮只取反一次,不改变普通 `onClick` / `onDblClick` 的派发顺序;取反时 `onClick.action.type` 与 `onSelectChange.action.type` 都是 `toggleSelect`。
|
|
@@ -157,7 +228,7 @@
|
|
|
157
228
|
- **核心文件**:`src/gis-view/engine.js`、`create.js`、`heatmap.js`、`visual-map.js`、`update-policy.js`、`types.d.ts`;`docs/manual/03` / `08` / `13` / `14`、`docs/GisView.md`、`src/gis-view/README.md`、Demo 组合式函数与面板、`selftest-select.html` / `selftest-features.html` / `selftest-perf.html`、`docs/AI对话汇总.md`、本页与 15.111。
|
|
158
229
|
- **验证**:`npx tsc --noEmit`、`npm run check:docs`、`npm run build`、`git diff --check` 通过;API 索引为 283 个实例成员(278 方法 + 5 属性)/ 107 options / 275 数据字段;串行自测 `selftest-select` **107/0**、`selftest-features` **836/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。
|
|
159
230
|
|
|
160
|
-
##
|
|
231
|
+
## 十二、上九增量:热力密度几何隔离、线路热力连续与 visualMap 运行时门控(2026-11-01)
|
|
161
232
|
|
|
162
233
|
- **需求来源**:根目录 `修改.txt` 三条:① 开启热力图后平移 / 缩放时仍有部分线路热力先消失再出现;② 开启热力图后背景也跟着放大缩小;③ `visualMap` 交互没有效果,应参考 ECharts 的交互直接作用于热力表现。
|
|
163
234
|
- **背景缩放根因**:密度场有独立的 `heatDensityBuffer`,但 `drawImageQuad()` 仍默认绑定背景图片的 `imageVao`,密度四边形一变就按图片几何缩放。现在新增 `heatDensityVao`,密度场拥有自己的四边形与 VAO;背景图片仍用 `imageVao`,两者销毁时分别释放。
|
|
@@ -168,7 +239,7 @@
|
|
|
168
239
|
- **核心文件**:`src/gis-view/engine.js`、`heatmap.js`、`visual-map.js`、`create.js`、`types.d.ts`、`src/gis-view/README.md`;`docs/manual/03` / `11` / `13` / `15`、`docs/GisView.md`、`docs/demos/gis-view-demo/useGisViewDemo.js`、`panels/StylePanels.vue`、`docs/steps/selftest-features.html` / `selftest-perf.html`、本页与 15.110。
|
|
169
240
|
- **验证**:`npx tsc --noEmit`、`node --check`、`npm run check:docs`、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **828/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-perf` **197/0**。性能页此前一次完整运行曾出现既有的标签布局读数断言失败(1313 次),最终复跑未再出现,与本轮改动没有调用关系。
|
|
170
241
|
|
|
171
|
-
##
|
|
242
|
+
## 十三、上十增量:线路热力交互连续显示与 visualMap 自定义交互(2026-10-31)
|
|
172
243
|
|
|
173
244
|
- **需求来源**:根目录 `修改.txt` 三条:① 开启热力图后平移 / 缩放时线路热力先消失再出现;② 继续优化开启热力图后的交互性能;③ 图例支持完全自定义与交互,参考 ECharts `visualMap`。
|
|
174
245
|
- **热力消失根因**:相机移动重铺线路实例时,`buildLineInstances()` 没有写回 `heat`,重铺后强度归零;`LINE_VERTEX_SHADER` 又把 `a_corner.y` 在顶点阶段取了绝对值,插值后整块四边形恒为 1,光晕衰减失效。修复为补 `heat: line.heat ?? 0`,顶点保留带符号 `v_edge`,片元再取 `abs()`。
|
|
@@ -177,7 +248,7 @@
|
|
|
177
248
|
- **公开面与核心文件**:没有新增实例成员 / options / 数据字段,保持 283 个实例成员(278 方法 + 5 属性)/ 106 options / 274 数据字段。核心文件为 `src/gis-view/shaders.js`、`engine.js`、`heatmap.js`、`visual-map.js`、`create.js`、`types.d.ts`、`gis-view.css`、Demo 组合式函数与样式面板、手册 03 / 11 / 13 / 15 / 16 / 17 / 18、`docs/GisView.md`、`src/gis-view/README.md`、四个自测页、本页与 15.109。
|
|
178
249
|
- **验证**:`node --check` 覆盖着色器 / 引擎 / 热力图 / 图例 / 组件入口 / Demo;`npx tsc --noEmit` 0 错;`node docs/steps/gen-api-index.mjs` 与 `--check`、`npm run check:docs`(283 / 278 / 5 / 106 / 274)、`npm run build`、`git diff --check` 通过;串行自测 `selftest-features` **823/0**、`selftest-perf` **195/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**。
|
|
179
250
|
|
|
180
|
-
##
|
|
251
|
+
## 十四、上十一增量:visualMap 图例与图例专用快路径(2026-10-31)
|
|
181
252
|
|
|
182
253
|
- **需求来源**:根目录 `修改.txt` 两条:① 参考 ECharts `visualMap`,增加类似图例并结合 ruler 样式;② 继续优化组件性能。
|
|
183
254
|
- **图例模型**:新增 `src/gis-view/visual-map.js` 与 `options.visualMap`。`ruler` / `continuous` 为连续渐变尺 + 刻度,`piecewise` 为分段色块;支持 `pieces` 的 `gte` / `gt` / `lte` / `lt` / `min` / `max`,以及显式 `domain` / 单端 `min` / `max`、`colors` / `stops` / `opacity`、标题 / 单位 / formatter、方向 / 定位 / 尺寸 / 外部容器 / class / 内联样式。默认继承 `heatmap` 的 target / field / domain / colors / stops / opacity,没有热力图时按自己的 `field` 扫独立值域。
|
|
@@ -187,7 +258,7 @@
|
|
|
187
258
|
- **核心文件**:`src/gis-view/visual-map.js`、`heatmap.js`、`create.js`、`gis-view.css`、`types.d.ts`、`src/gis-view/README.md`;`docs/manual/03` / `11` / `13` / `15` / `16` / `17` / `18`、`docs/index.html`、`docs/demos/gis-view-demo/useGisViewDemo.js`、`panels/StylePanels.vue`、`docs/steps/selftest-features.html` / `selftest-perf.html` / `selftest-demos.html` / `selftest-docs.html`、API 索引、本页与 15.108。
|
|
188
259
|
- **验证**:`npx tsc --noEmit`、`node --check`、`node docs/steps/gen-api-index.mjs`、`gen-api-index.mjs --check`、`npm run check:docs`(283 / 278 / 5 / 106 / 274)、`npm run build`、`git diff --check` 通过;浏览器自测 `selftest-features` **808/0**、`selftest-perf` **190/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-demo` **133/0**。
|
|
189
260
|
|
|
190
|
-
##
|
|
261
|
+
## 十五、上十二增量:fitSpacing.minDistance 精确落位与指定节点组间距(2026-10-30)
|
|
191
262
|
|
|
192
263
|
- **需求来源**:根目录 `修改.txt` 三条:① `minDistance` 一旦设置就必须精确显示为该屏幕距离,不能因为初始值或内部限制只能变大;② 新增方法,传一组节点返回整组的 `minDistance` / `maxDistance`;③ 文档写明距离如何由坐标与相机比例换算。
|
|
193
264
|
- **根因与修复**:`engine.js` 的 `fitSpacingAdjustment()` 原先把 `minDistance / 最近世界距离` 与普通适应比例取 `Math.max`,再用 `maxZoom` 截断,所以目标比例更小时不生效。现在 `minDistance` 直接作为精确目标比例,可放大也可缩小;`maxZoom` 仅兼容保留,最终只由 `minScale` / `maxScale` 夹取,相机中心仍沿用普通包围盒中心。
|
|
@@ -196,7 +267,7 @@
|
|
|
196
267
|
- **公开面与核心文件**:实例成员 280 → **281**(方法 275 → **276**),options 105、数据字段 273、分组 16 不变。核心文件为 `src/gis-view/engine.js`、`create.js`、`types.d.ts`、`src/gis-view/README.md`,以及手册 03 / 14 / 16 / 17 / 18、Demo 面板、`selftest-scale.html`、`selftest-docs.html`、`selftest-demos.html`、API 索引、本页与 15.107。
|
|
197
268
|
- **验证**:`npx tsc --noEmit`、`node docs/steps/gen-api-index.mjs`、`npm run check:docs`(281 / 276 / 105 / 273)、`npm run build`、`git diff --check` 通过;浏览器串行自测 `selftest-features` **794/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-demo` **133/0**;`selftest-scale` **126/2**,新增断言全过,两条失败仍是既有筛选回调时序(`onFilter 0 条`)。
|
|
198
269
|
|
|
199
|
-
##
|
|
270
|
+
## 十六、上十三增量:背景文字同帧刷新与 fitSpacing.minDistance 上限修复(2026-10-30)
|
|
200
271
|
|
|
201
272
|
- **需求来源**:根目录 `问题.txt` 两条:① 拖动 GeoJSON 背景仍有晃动,文字尤其明显;② `fitSpacing.minDistance` 有时怎么设置都不生效,`maxDistance` 正常,像是有内部强制限制。
|
|
202
273
|
- **背景文字晃动**:`overlay.setBackgroundLabels()` 会把新的区域文字排到下一帧,而内置背景编辑器的 `applyBackground()` 已经同步重画了 WebGL 底图和编辑框,两者相差一帧。`refreshBackgroundLabels()` 现在立即排版并取消待执行的 rAF;编辑器的 `applyBackground()` 在 `updateBackground()` + `refresh({ reflow: false })` 后同步调用它,底图、编辑框、区域文字同任务提交。
|
|
@@ -205,7 +276,7 @@
|
|
|
205
276
|
- **核心文件**:`src/gis-view/engine.js`、`overlay.js`、`create.js`、`types.d.ts`、`README.md`;`docs/manual/03` / `14`、`docs/from0/15`、`docs/demos/api-index.js`、`docs/demos/gis-view-demo/useGisViewDemo.js`、`docs/steps/selftest-features.html`、`selftest-scale.html`、`selftest-demo.html`、`docs/AI对话汇总.md`、本章节、15.106。
|
|
206
277
|
- **验证**:`npx tsc --noEmit` 0 错;`node docs/steps/gen-api-index.mjs` 更新索引;`npm run check:docs` 全绿(280 个实例成员 / 105 个 options / 273 个数据字段);`npm run build` 通过;`git diff --check` 通过。浏览器串行自测:`selftest-features` **794/0**、`selftest-demos` **441/0**、`selftest-docs` **139/0**、`selftest-demo` **133/0**;`selftest-scale` **121 通过 / 2 失败**,新增的默认上限断言通过,剩余两条仍是既有筛选回调时序(`onFilter 0 条`)。
|
|
207
278
|
|
|
208
|
-
##
|
|
279
|
+
## 十七、上十四增量:内置背景编辑器与旋转按钮命中修复(2026-10-30)
|
|
209
280
|
|
|
210
281
|
- **需求来源**:根目录 `修改.txt` 两条:① 旋转按钮始终不旋转;② 将整块背景编辑模式内置,通过方法开启与配置,不再由 Demo 纯手写。
|
|
211
282
|
- **旋转按钮根因**:旧编辑层 `.bg-edit-layer` 为 `pointer-events: none`,缩放手柄和轮廓单独恢复 `auto`,但旋转按钮漏了;内置编辑器的旋转按钮显式 `pointer-events: auto`,`selftest-demos` 通过 `document.elementFromPoint()` 验证真实命中后再拖动旋转。
|
|
@@ -216,7 +287,7 @@
|
|
|
216
287
|
- **核心文件**:`src/gis-view/background-editor.js`(新增)、`gis-view.css`、`create.js`、`types.d.ts`;`docs/demos/BackgroundDemo.vue`、`demos.js`、`docs/manual/03` / `14` / `16` / `17` / `18` / `21`、`docs/internals/14`、`docs/steps/selftest-demos.html`、`selftest-features.html`、`selftest-docs.html`、`docs/AI对话汇总.md`、本章节、15.105。
|
|
217
288
|
- **验证**:`npx tsc --noEmit` 0 错;`node docs/steps/gen-api-index.mjs` 更新索引;`npm run check:docs` 全绿(280 个实例成员 / 105 个 options / 273 个数据字段);`npm run build` 通过;`git diff --check` 通过。浏览器串行自测:`selftest-features.html` **793/0**、`selftest-demos.html` **441/0**、`selftest-docs.html` **139/0**。
|
|
218
289
|
|
|
219
|
-
##
|
|
290
|
+
## 十八、上十五增量:背景编辑 4 / 8 / 9 点、旋转开关与可定制编辑框(2026-10-30)
|
|
220
291
|
|
|
221
292
|
- **需求来源**:根目录 `修改.txt` 五条:① 只有开启旋转时才出现旋转按钮;② 取消宽高锁定后从四角编辑改成常见八点,开启旋转后变成九点,并考虑背景旋转角;③ 背景编辑框样式支持自定义;④ 修复移动背景图的轻微晃动;⑤ 全部在 demo 中体现。
|
|
222
293
|
- **编辑点与旋转**:`BackgroundDemo.vue` 锁定比例时显示四角等比缩放;解锁后增加四边中点,共八个缩放手柄;旋转开关独立控制顶部旋转点与连线,只有开启时才从八点变成九点。关闭旋转仍保留当前角度和八个缩放手柄。
|
|
@@ -227,7 +298,7 @@
|
|
|
227
298
|
- **核心文件**:`docs/demos/BackgroundDemo.vue`、`docs/demos/demos.js`、`docs/manual/03-配置项.md`、`docs/manual/14-视图与筛选.md`、`docs/manual/21-说明与常见问题.md`、`docs/steps/selftest-demos.html`、`docs/AI对话汇总.md`、本章节、15.104。
|
|
228
299
|
- **验证**:`npx tsc --noEmit` 0 错;`npm run check:docs` 全绿(276 个实例成员 / 105 个 options / 273 个数据字段);`npm run build` 通过(仅既有大 chunk 提示);`git diff --check` 通过。浏览器串行自测:`selftest-features.html` **786/0**、`selftest-demos.html` **440/0**、`selftest-docs.html` **139/0**。
|
|
229
300
|
|
|
230
|
-
##
|
|
301
|
+
## 十九、上十六增量:背景移动 / 旋转、背景编辑模式与网架整体显隐(2026-10-30)
|
|
231
302
|
|
|
232
303
|
- **需求来源**:根目录 `修改.txt` 两条:背景可移动、可旋转;调整背景时网架不能拖拽 / 点击等操作,但可与背景整体缩放,相当于背景编辑模式;Demo 明显有问题。同日上一增量(15.102)已补背景添加、四角调整与网架显隐 / 透明度,本轮补齐移动、旋转、编辑模式并修正 Demo。
|
|
233
304
|
- **背景能力**:`geoJsonStyle.bounds` 负责独立缩放 / 平移到目标世界矩形,新增 `geoJsonStyle.rotation` 绕目标矩形中心顺时针旋转;所有解析几何、区域范围、重心与区域文字一起变换,`rawBounds` 保持原始坐标,`bounds` 为旋转后的轴对齐外框。图片用旋转后的 `image.corners` 表达,不改原始数据。
|
|
@@ -237,7 +308,7 @@
|
|
|
237
308
|
- **核心文件**:`src/gis-view/engine.js`、`background.js`、`create.js`、`overlay.js`、`update-policy.js`、`types.d.ts`;`docs/demos/BackgroundDemo.vue`、`demos.js`、`docs/demos/api-index.js`、`docs/manual/03` / `14` / `16` / `18` / `21`、`docs/steps/selftest-features.html`、`selftest-demos.html`、`selftest-docs.html`、`docs/AI对话汇总.md`、本章节、15.102 / 15.103。
|
|
238
309
|
- **验证**:`npx tsc --noEmit` 0 错;`node docs/steps/gen-api-index.mjs` 更新索引;`npm run check:docs` 全绿(276 个实例成员 / 105 个 options / 273 个数据字段);`npm run build` 通过(仅既有大 chunk 提示);`git diff --check` 通过。浏览器串行自测:`selftest-features.html` **786/0**、`selftest-demos.html` **433/0**、`selftest-docs.html` **139/0**。
|
|
239
310
|
|
|
240
|
-
##
|
|
311
|
+
## 二十、上十七增量:交互样式优先级回归、单 / 多要素样式 Demo 与详情查询(2026-10-30)
|
|
241
312
|
|
|
242
313
|
- **需求来源**:根目录 `修改.txt` 三条:① 选中 / 框选 / 多选 / 级联等交互颜色始终最高,不受规则束缚;② 增加修改单个或多个节点 / 线路样式的 demo;③ 查询单个或多个节点、线路、通道详情的写法。用户补充「不考虑分组详情」,因此本轮不扩展分组查询。
|
|
243
314
|
- **交互优先级审计**:核对 `point.js` / `line.js` 的状态样式取值顺序,并确认 `applyPointNarrowFast` / `applyLineNarrowFast` 只在无规则、无热力图且规则输入未变时启用,不会绕过交互层。`selftest-features` 新增单选、动态 override 规则、多选节点 / 线路、框选节点 / 线路与级联共 7 条断言;线路框选仍走 `lineSelectStyle`,没有新增公开选项。
|
|
@@ -246,7 +317,7 @@
|
|
|
246
317
|
- **核心文件**:`docs/demos/StyleDemo.vue`、`docs/demos/demos.js`、`docs/manual/11-样式与规则.md`、`docs/manual/18-逐方法示例.md`、`docs/steps/selftest-features.html`、`docs/steps/selftest-demos.html`、`docs/AI对话汇总.md`、本章节、15.101。
|
|
247
318
|
- **验证**:`npx tsc --noEmit`、`npm run check:docs`(276 个实例成员 / 102 个 options / 270 个数据字段)、`npm run build`、`git diff --check` 通过;`selftest-features` **778/0**、`selftest-demos` **415/0**、`selftest-docs` **138/0**。未新增公开 API / options / 数据字段。
|
|
248
319
|
|
|
249
|
-
##
|
|
320
|
+
## 二十一、上十八增量:规则优先级分层、单要素样式说明与解析性能(2026-10-30)
|
|
250
321
|
|
|
251
322
|
- **需求来源**:根目录 `修改.txt` 四条 —— ① 规则样式始终高于外层 `pointStyle` / `lineStyle`,但默认低于要素自身样式;② 单条规则可设置 `override: true`,压过要素自身样式;③ 说明如何修改单个节点 / 单条线路的颜色、尺寸、图标等样式;④ 继续优化组件性能。
|
|
252
323
|
- **优先级口径**:状态样式 / 热力图 > override 规则 > 要素自身样式 > 普通规则 > 外层 `pointStyle` / `lineStyle` > 默认值。普通规则只补要素自身没写的字段,但始终高于外层样式;override 规则写了的字段压过要素自身,未写字段继续回落;同一层后命中的规则覆盖先命中的规则。状态样式与热力图保持最高。
|
|
@@ -256,7 +327,7 @@
|
|
|
256
327
|
- **核心文件**:`src/gis-view/rules.js`、`point.js`、`line.js`、`engine.js`、`create.js`、`types.d.ts`;手册 11 及 02 / 03 / 07 / 09 / 12 / 13 / 14 / 16 / 17 / 18 / 19 / 20 / 21、格式 02 / 03、internals 10 / 13 / 17 / 18 / 15.100、from0 06、教学页、`src/gis-view/README.md`、`StyleDemo.vue`、`docs/demos/api-index.js`、`docs/AI对话汇总.md`、本章节。
|
|
257
328
|
- **验证**:`npx tsc --noEmit`、`npm run check:docs`(276 / 102 / 270)、`node docs/steps/gen-api-index.mjs`、`npm run build`、`git diff --check` 通过;`selftest-features` 771/0(新增 11 条优先级、override、状态样式、`updatePoint` / `updateLine` 断言),actions 96/0、data 103/0、decoration 75/0、demo 133/0、demos 407/0、docs 138/0、effects 96/0、full 94/0、labels 178/0、select 102/0、selftest 19/0。`selftest-perf` 186/1(既有标签布局读数量测)、`selftest-scale` 120/2(既有筛选回调时序 `onFilter 0 条`),单页重跑仍复现,与本轮样式链无关。
|
|
258
329
|
|
|
259
|
-
##
|
|
330
|
+
## 二十二、上十九增量:updatePoint 快路径、id 索引拆分与插件生命周期(2026-10-29)
|
|
260
331
|
|
|
261
332
|
- **需求来源**:根目录 `修改.txt` 两条:① 继续优化组件性能,包括交互、方法调用等,允许大改;② 提高组件可扩展性和后续可操作性。
|
|
262
333
|
- **updatePoint 快路径**:只有坐标 / id 变化才收集跟随线路,只有节点外框尺寸变化才重排锚定通道;改名称、颜色等业务字段直接补单点槽位,不再扫线路、重排通道或刷新拐点批次。id 改名时先用旧对象解析旧线路绑定,再用新坐标补几何。
|
|
@@ -266,7 +337,7 @@
|
|
|
266
337
|
- **核心文件**:`src/gis-view/create.js`、`engine.js`、`types.d.ts`;`docs/manual/03` / `15` / `16` / `17` / `18` / `20`、`docs/demos/api-index.js`、`docs/steps/selftest-features.html`、`docs/AI对话汇总.md`、本章节。
|
|
267
338
|
- **验证**:`npx tsc --noEmit`、`npm run check:docs`(276 / 102 / 270)、`node docs/steps/gen-api-index.mjs --check`、`npm run build`、`git diff --check` 通过;`selftest-select` 102/0、`selftest-demos` 407/0、`selftest-features` 760/0、`selftest-docs` 138/0、`selftest-perf` 187/0。
|
|
268
339
|
|
|
269
|
-
##
|
|
340
|
+
## 二十三、上二十增量:div 保留框跟随、通道单回线显隐与拾取优化(2026-10-29)
|
|
270
341
|
|
|
271
342
|
- **需求来源**:根目录 `修改.txt` 四条:① 框选后保留选框,并支持拖动整框平移选中节点及关联线路 / 通道;② 框选框支持自定义边框、DOM 渲染与类名;③ 节点、线路、通道、分组支持单个 / 批量隐藏与恢复;④ 隐藏线路时可保留原回线位置或让剩余回线重新居中。
|
|
272
343
|
- **本轮续修来源**:根目录 `修改.txt` 三条:① div 保留框移动地图时跟随;② 通道 demo 展示隐藏通道内指定线路;③ 继续优化性能。
|
|
@@ -276,7 +347,7 @@
|
|
|
276
347
|
- **核心文件**:`src/gis-view/engine.js`、`create.js`、`types.d.ts`、`update-policy.js`、`gis-view.css`;`docs/manual/03` / `08` / `09` / `16` / `17` / `18` / `20`、`docs/internals/18`、`ChannelDemo.vue`、`demos.js`、`gis-view-demo` 面板、`docs/steps/selftest-select.html`、`selftest-demos.html`、`selftest-features.html`、`selftest-docs.html`、`selftest-perf.html`、`docs/demos/api-index.js`、`docs/AI对话汇总.md`、本章节。
|
|
277
348
|
- **验证**:`npx tsc --noEmit`、`npm run check:docs`(276 个实例成员 / 102 个 options / 270 个数据字段)、`node docs/steps/gen-api-index.mjs --check`、`npm run build`(仅有既有大 chunk 提示)与 `git diff --check` 通过;`selftest-select` 102/0、`selftest-demos` 407/0、`selftest-features` 752/0、`selftest-docs` 138/0、`selftest-perf` 187/0。10 万点 / 10 万线基准连续 3 次已记录在手册 20 与 internals 18,拾取保持亚毫秒级,平移 / 刷新受无头环境抖动影响。
|
|
278
349
|
|
|
279
|
-
##
|
|
350
|
+
## 二十四、怎么自己复查
|
|
280
351
|
|
|
281
352
|
### 1. 先看本次工作区改了什么
|
|
282
353
|
|
|
@@ -323,4 +394,4 @@ node scripts/run-selftests.mjs selftest-select.html
|
|
|
323
394
|
- 组件本体:34 个会话
|
|
324
395
|
- 选型与立项:2 个会话
|
|
325
396
|
- 宿主旁支:3 个会话
|
|
326
|
-
- 时间跨度:2026-09-15 ~ 2026-
|
|
397
|
+
- 时间跨度:2026-09-15 ~ 2026-11-03
|
|
@@ -484,14 +484,13 @@ onMounted(async () => {
|
|
|
484
484
|
zoom: true,
|
|
485
485
|
hover: true,
|
|
486
486
|
select: true,
|
|
487
|
+
multiSelect: true,
|
|
487
488
|
boxSelect: true,
|
|
488
489
|
drag: true,
|
|
489
490
|
waypoint: true,
|
|
490
491
|
contextMenu: true,
|
|
491
492
|
keyboard: true
|
|
492
493
|
},
|
|
493
|
-
boxSelect: true,
|
|
494
|
-
multiSelect: true,
|
|
495
494
|
copy: { enabled: true, autoCommit: false },
|
|
496
495
|
history: { limit: 30 },
|
|
497
496
|
labelRender: 'dom',
|
|
@@ -504,9 +503,6 @@ onMounted(async () => {
|
|
|
504
503
|
waypointStyle: { size: 8, color: '#fff', strokeColor: '#38bdf8', strokeWidth: 1.5 },
|
|
505
504
|
zoomBaseScale: 1,
|
|
506
505
|
webglLayers: [],
|
|
507
|
-
clickable: true,
|
|
508
|
-
draggable: true,
|
|
509
|
-
waypointEditable: true,
|
|
510
506
|
waypointVisibility: 'always',
|
|
511
507
|
lineFollowsNode: true,
|
|
512
508
|
channelWidth: 2.6,
|
|
@@ -772,8 +772,7 @@ onMounted(() => {
|
|
|
772
772
|
lines: dataset.lines,
|
|
773
773
|
channels: dataset.channels,
|
|
774
774
|
// 开关缺省全关:这一页要能看能选、能拖节点、能编辑拐点,逐项显式打开
|
|
775
|
-
features: { pan: true, zoom: true, hover: true, select: true, drag: true },
|
|
776
|
-
waypointEditable: true,
|
|
775
|
+
features: { pan: true, zoom: true, hover: true, select: true, drag: true, waypoint: true },
|
|
777
776
|
showGrid: true,
|
|
778
777
|
fitPadding: 52,
|
|
779
778
|
pointStyle: { size: 7, color: '#ffffff', strokeColor: '#4c8dff', strokeWidth: 1.5 },
|