联机调试
📋 复制
RTT {{collabPerf.rttLast.toFixed(1)}} ms · ↑ {{collabPerf.uplinkLast.toFixed(1)}} · SRV {{collabPerf.serverLast.toFixed(3)}} · ↓ {{collabPerf.downlinkLast.toFixed(1)}} ms
RELAY {{collabPerf.relayServerLast.toFixed(3)}} ms · APPLY {{collabPerf.applyLast.toFixed(1)}} · RENDER {{collabPerf.renderLast.toFixed(1)}} ms
PATCH {{collabPerf.patchBytes}} B / {{collabPerf.patchOps}} ops · SNAP {{collabPerf.snapshotBytes}} B
TAKEOVER {{collabPerf.hostTakeoverLast ? 'YES' : 'NO'}} ×{{collabPerf.hostTakeoverCount}}
渲染调试
📋 复制
关闭
模式:{{ canvasRenderEnabled ? canvasRendererStatus.mode : 'SVG 回退 / Canvas 已关闭' }}
状态:Ready {{ canvasRendererStatus.ready ? '是' : '否' }} · Frame {{ canvasRendererStatus.hasFrame ? '是' : '否' }} · Offscreen {{ canvasRendererStatus.offscreen ? '是' : '否' }} · WASM {{ canvasRendererStatus.wasm ? '是' : '否' }}
总耗时:{{ Number(canvasRendererStatus.lastRenderMs || 0).toFixed(1) }} ms · Vector {{ Number(canvasRendererStatus.debug?.timing?.vectorTotalMs || 0).toFixed(1) }} · Blit {{ Number(canvasRendererStatus.debug?.timing?.blitMs || 0).toFixed(1) }} · Cache {{ canvasRendererStatus.debug?.cacheHit ? '命中' : '重建' }}
主线程快照:{{ Number(canvasRendererStatus.debug?.snapshotBuildMs || 0).toFixed(1) }} ms(线 {{ Number(canvasRendererStatus.debug?.snapshotBuild?.linesMs || 0).toFixed(1) }} / 名 {{ Number(canvasRendererStatus.debug?.snapshotBuild?.namesMs || 0).toFixed(1) }} / 站 {{ Number(canvasRendererStatus.debug?.snapshotBuild?.stationsMs || 0).toFixed(1) }})
Worker 分层:线 {{ Number(canvasRendererStatus.debug?.timing?.linesMs || 0).toFixed(1) }} ms · 名 {{ Number(canvasRendererStatus.debug?.timing?.namesMs || 0).toFixed(1) }} ms · 站 {{ Number(canvasRendererStatus.debug?.timing?.stationsMs || 0).toFixed(1) }} ms · 地形 {{ Number(canvasRendererStatus.debug?.timing?.terrainsMs || 0).toFixed(1) }} ms
数量:线 {{ canvasRendererStatus.debug?.totals?.lines || 0 }} / 图层 {{ canvasRendererStatus.debug?.snapshotCounts?.lineLayers || 0 }} · 名 {{ canvasRendererStatus.debug?.totals?.names || 0 }} · 站 {{ canvasRendererStatus.debug?.totals?.stations || 0 }} · 地形 {{ canvasRendererStatus.debug?.totals?.terrains || 0 }}
实绘:线图层 {{ canvasRendererStatus.debug?.counts?.lineLayersDrawn || 0 }}/{{ canvasRendererStatus.debug?.counts?.lineLayersTested || 0 }} · 名 {{ canvasRendererStatus.debug?.counts?.namesDrawn || 0 }}(LOD 隐藏 {{ canvasRendererStatus.debug?.counts?.namesHiddenByLod || 0 }})· 站 {{ canvasRendererStatus.debug?.counts?.stationsDrawn || 0 }}(简化 {{ canvasRendererStatus.debug?.counts?.stationsSimplified || 0 }})
参数:DPR {{ Number(canvasRendererStatus.cacheDpr || 1).toFixed(2) }} · 边距 {{ Math.round(Number(canvasRendererStatus.cacheMargin || 0)) }} px · Path {{ canvasRendererStatus.debug?.pathCache || 0 }} · Bounds {{ canvasRendererStatus.debug?.boundsCache || 0 }} · 快速变换 {{ canvasFastTransformActive ? '开启' : '关闭' }}
错误:{{ canvasRendererStatus.lastError }}
{{ collabBlockingNotice }}
公共图提示
{{ collabPublicNoticeText }}
请先阅读 {{ collabPublicNoticeSecondsLeft }} 秒
我已了解,进入房间
💬 {{ collabChatUnread>99?'99+':collabChatUnread }}
{{ collabRole==='none' ? '本地聊天' : '多人联机聊天' }} {{ collabRole==='none' ? '当前存档' : (collabRoomName || '当前房间') }}
×
上滑加载更早的 50 条消息
没有更早消息
{{ msg.username || '未知用户' }} {{ collabChatTime(msg) }}
消息已撤回
{{ part.text }}
{{ part.text }}
正在更新切片数据 {{namerBulkUpdateStatus || '请稍候…'}}
更新完成或失败后会自动恢复操作。
⚠️ 可用 Worker 数量为 0
交互计算已回退到主线程,点选、吸附和拖动可能明显变慢。此警告会持续显示,直到线程池恢复。
错误:{{ interactionWorkerStatus.lastError }}
{{ interactionWorkerStatus.refreshing ? '正在刷新…' : '刷新 Worker 线程池' }}
1km
{{ scale1kmPx.toFixed(1) }}px
{{ fixedPxLength }}px
{{ scaleFixedKm.toFixed(2) }}km
当前显示全网 OD 近似流量。左键点击车站可筛选该站的进/出站流向。
样本线段 {{ paxRankNumber(stationFlowOverlayState.items?.length || 0) }},匹配线路 {{ paxRankNumber(stationFlowOverlayState.stats?.matchedSegments || 0) }},当前绘制 {{ paxRankNumber(viewDataLines.filter(x => x.stationFlowOverlay).length) }}。
{{ stationFlowOverlayState.note }}
{{ stationFlowOverlayState.name || ('站团 '+stationFlowSelectedStaid) }}分析中…
进站 {{ paxRankNumber(stationFlowOverlayState.stats?.entry || 0) }}
出站 {{ paxRankNumber(stationFlowOverlayState.stats?.exit || 0) }}
换乘 {{ paxRankNumber(stationFlowOverlayState.stats?.transfer || 0) }}
聚合 OD {{ paxRankNumber(stationFlowOverlayState.stats?.routeCount || 0) }}
来源总量 {{ paxRankNumber(stationFlowOverlayState.stats?.incoming || 0) }}
去向总量 {{ paxRankNumber(stationFlowOverlayState.stats?.outgoing || 0) }}
来源 OD 记录 {{ stationFlowOverlayState.sourcePairCount || 0 }},去向 OD 记录 {{ stationFlowOverlayState.destPairCount || 0 }},读取 {{ stationFlowOverlayState.stats?.builtMs || 0 }} ms。
地图选项 ×
经度:{{ namerMapMenu.lon.toFixed(6) }}
纬度:{{ namerMapMenu.lat.toFixed(6) }}
切片:{{ namerMapMenu.tile }}
{{ namerMapMenu.busy ? '正在处理…' : '下载全部数据(含密度)' }}
下载命名数据
下载河流数据
下载密度图数据
删除此网格密度图缓存
发送此坐标到聊天
{{ dt.name }}
{{ seg.text }}
{{ n.nm.name }}
{{ line }}
{{ n.nm.name }}
{{ line }}
{{ n.nm.name }}
{{ line }}
{{ canvasSelectedViewName.nm.name }}
{{ line }}
{{ stationFlowHighlight.label.text }}
{{ measureDist.toFixed(2) }} km
{{ alignPreviewLine.label }}
{{ lineAddPreview.mileageText }}
{{ pt.label }}
{{ d.text }}
{{ seg.text }}
{{ d.text }}
{{ n.nm.name }}
{{ line }}
确认
取消
删除
↑
←
→
↓
存档
导入
导出
客流粗估
其他
🔄 存档坐标模式转换
{{ data.fictionalMode ? '🌍 转换为现实模式' : '🗺️ 转换为架空模式' }}
将创建新存档,原存档保留不变
✨ 新建 / 打开存档
新建现实模式
新建架空模式
打开存档列表
用表格查看存档信息、收藏和打开。
🔗 存档合并
只能合并同模式存档。架空模式会自动把新存档放到当前存档右侧。
从已有存档合并
打开存档列表并合并
已选:{{concatWorkName}}
从JSON文件合并
合并JSON {{ concatImportFileName ? ':' + concatImportFileName :
'' }}
📦 工程 / AARC 导出
📤 导出工程文件
🚇 导出KL存档
♟️ 导出轨交棋
🧪 导出AARC自动变形图
📤 导出AARC实际走向
AARC 自动变形图为实验功能;“实际走向”按当前线路曲线采样为折线。
🖨️ SVG / 图像导出
普通 SVG
导出的视图
{{ vm.label }}
导出的车站(必选)
请选择车站
{{sta.name}}({{sta.id}})
当前没有可导出的流量视图,请在客流粗估中启用流量信息。
{{ paxFlowSlotText(data.exportConfig.exportFlowSlot || 0) }}
导出视图独立于当前画面;无时间结果只支持七天日均视图。
导出附带现实地形
导出地形不透明度
生成SVG 下载SVG
导出带区间站距
区间站距当前为固定屏幕字号;请先到“设置”开启“区间站距跟随画布缩放”。
突出线路
打开导出配置 生成突出SVG 下载突出SVG
时间点
= {{ previewHistoryTimeExpr(data.exportConfig.historyTimeExpr) }}
导出时间点SVG 导出时间点SVG(突出)
其他图像
缩略图 / 发展史动图 覆盖热力图(最近距离) 覆盖热力图(覆盖叠加)
📋 文本 / 辅助导出
📄 复制站名列表 📍 复制站名列表(带距离市中心的距离) 🧭 复制站名列表(带距离市中心的距离和角度) 📊 导出线路站名列表 Excel ⏱️ 导出带开通时间的 Excel
📤 导出数据文本 📋 复制数据文本 ❔ 查看数据文本的格式说明 🤖 复制格式说明 Prompt
复制失败时可打开手动复制面板。
{{ copyByHand ? '关闭手动复制面板' : '📑 手动复制页面' }}
👥 客流粗估
第六十五阶段:仅支持现实模式。读取与 KL 共用的密度图数据,调用 KL 有效值 worker/WASM;生成阶段不生成乘客个体,而是按起点连续生成率,经目的地概率模型分配到“起点-终点-KL乘客类型pt”时间桶。寻路聚合使用 packed OD 组、微小 OD 尾部剪枝和起点内流式进度,不输出完整 OD。多人联机中也可运行,但客流有效值、粗估结果和客流视图均为本机客户端数据,不上传服务器、不广播给其他成员。
粗略系数
线程数
粗略系数越大计算越粗:只合并更多 12 分钟时间桶;目的地概率分母仍按全站参与。线程数 0=自动;>0 时按用户设置并受 64/站团数上限约束。本机保存,不参与多人同步。
{{ paxCoarseRunning ? '正在运行…' : '开始客流粗估' }}
刷新有效值
下载粗估报告
{{ paxCoarseDisabledReason() }}
运行前请先在“设置 → 切片数据”下载/补齐密度图。
粗估结果各部分大小 (分项独立压缩,大小不直接相加;包含独立缓存)
结果部分 压缩前 压缩后
{{ part.label }} {{ formatPaxCoarseBytes(part.rawBytes) }} {{ formatPaxCoarseBytes(part.compressedBytes) }}
{{ paxCoarseStatus }}
本次客流粗估全流程耗时(从开始、密度加载、有效值、目的地值、寻路、压缩直到保存):{{ ((paxLastFullRunMs || data.paxCoarseMeta.fullProcessMs)/1000).toFixed(2) }} 秒
有效值数据
压缩前:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.effectiveRawBytes) }}
压缩后:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.effectiveCompressedBytes) }}
粗估结果数据
压缩前:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.resultRawBytes) }}
压缩后:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.resultCompressedBytes) }}
区间客流缓存
区间:{{ data.paxFlowSegmentsMeta && data.paxFlowSegmentsMeta.segmentFlowCount || 0 }}
全网断面合计日均:{{ Math.round((data.paxFlowSegmentsMeta && (data.paxFlowSegmentsMeta.totalSegmentDailyAverage || data.paxFlowSegmentsMeta.totalDailyAverage)) || 0) }}
最大有向区间日均:{{ Math.round((data.paxFlowSegmentsMeta && data.paxFlowSegmentsMeta.maxSegmentDailyAverage) || 0) }}
压缩后:{{ formatPaxCoarseBytes(data.paxFlowSegmentsMeta && data.paxFlowSegmentsMeta.compressedBytes) }}
最近统计
站团:{{ (data.paxCoarseMeta && data.paxCoarseMeta.stationCount) || 0 }} · OD类型组:{{ (data.paxCoarseMeta && data.paxCoarseMeta.passengerGroupCount) || 0 }}
寻路成功:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeOkCount) || 0 }} · 失败:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeFailedCount) || 0 }}
粗略系数:{{ (data.paxCoarseMeta && data.paxCoarseMeta.roughFactor) || data.paxCoarseFactor || 10 }} · OD流量:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedTotalPassengerCount) || 0 }}
竞争后保留:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedRetainedPassengerCount) || 0 }} · 竞争流失:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedCompetitionRejectedPassengerCount) || 0 }} · 寻路失败量:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedRouteFailedPassengerCount) || 0 }}
线程:{{ (data.paxCoarseMeta && data.paxCoarseMeta.threadCount) || 4 }}{{ data.paxCoarseMeta && data.paxCoarseMeta.threadCountMode==='user' ? '(用户设置)' : '(自动)' }} · 时间桶:{{ (data.paxCoarseMeta && data.paxCoarseMeta.timeBucketMinutes) || 12 }}分钟 · 寻路批次:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeBatchCount) || 0 }}
WASM寻路:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeWasmJobCount) || 0 }} · JS回退:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeJsFallbackJobCount) || 0 }} · 路径缓存命中:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeCacheHits) || 0 }}
微小OD剪枝:{{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.earlyPrunedOdGroups) || 0) }} 组 · {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.earlyPrunedPassengerWeight) || 0) }} 人/周
寻路聚合性能:总 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && (data.paxCoarseMeta.performance.totalMs || data.paxCoarseMeta.performance.coordinatorTotalMs)) || 0) }}ms · 类型平衡 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.coordinatorTypeBalanceMs) || 0) }}ms · 寻路 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.routeSearchMs) || 0) }}ms · OD {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.odBuildMs) || 0) }}ms · 区间流 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.flowAggregateMs) || 0) }}ms · 权重桶 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.routeWeightBucketCount) || data.paxCoarseMeta.routeWeightBucketCount || 0) }}
📘 帮助与说明 查看更新日志、使用说明、滨蜀的视频,或直接问滨蜀(群128958079)。
🧰 说明 这里放不属于存档、导入、导出的辅助入口。后续新增杂项文件工具时统一归入此板块,避免文件页面再次变成混杂列表。
渲染
交互
性能
票价
时刻表
自动命名
命名配置
命名配置对比
切片数据
自定义页面布局
多人联机房主/服务器
加入多人房间
存档
⚡ 性能 / Worker
交互 Worker 数量
重启线程池
默认 10。用于点选、吸附、投影和换乘判定。当前可用:{{ interactionWorkerStatus.alive }} 个。
{{ interactionWorkerStatus.lastError }}
{{renderDebugEnabled?'关闭':'开启'}}渲染调试信息
📋 复制渲染调试信息
{{collabDebugEnabled?'关闭':'开启'}}多人联机调试信息
📋 复制调试信息
渲染调试信息显示主线程快照、Worker 分层耗时、实绘数量、LOD 跳过数量和缓存参数;多人联机调试信息仅联机时显示网络、服务端、Patch 应用和重绘耗时。
总 RTT:{{collabPerf.rttLast.toFixed(1)}} ms(平均 {{collabPerf.rttAvg.toFixed(1)}} ms)
上行 客户端→服务器:≈ {{collabPerf.uplinkLast.toFixed(1)}} ms(平均 {{collabPerf.uplinkAvg.toFixed(1)}} ms)
服务端处理:{{collabPerf.serverLast.toFixed(3)}} ms(平均 {{collabPerf.serverAvg.toFixed(3)}} ms);最近 Patch 中继:{{collabPerf.relayServerLast.toFixed(3)}} ms
下行 服务器→客户端:≈ {{collabPerf.downlinkLast.toFixed(1)}} ms(平均 {{collabPerf.downlinkAvg.toFixed(1)}} ms)
Patch 应用:{{collabPerf.applyLast.toFixed(1)}} ms
更新重绘:{{collabPerf.renderLast.toFixed(1)}} ms
编辑提交/确认往返:{{collabPerf.editConfirmLast.toFixed(1)}} ms;最近分块快照传输:{{collabPerf.snapshotTransferLast.toFixed(1)}} ms
最近 Patch:{{collabPerf.patchBytes}} B / {{collabPerf.patchOps}} ops;完整快照:{{collabPerf.snapshotBytes}} B
房主刷新接管:{{collabPerf.hostTakeoverLast ? '本次发生' : '本次未发生'}};累计 {{collabPerf.hostTakeoverCount}} 次;最近 {{collabPerf.hostTakeoverAt}}
接管状态:{{collabPerf.hostTakeoverNote}}
注:上下行是基于 NTP 四时间戳和客户端/服务器时钟偏移的估算;服务端处理仅统计 Hub 方法体,中间件/排队开销会落入链路估算。编辑提交/确认是业务链路总耗时,不等同于纯网络。
实时预览
{{autoNamerPreviewBusy?'正在命名…':'分别测试北京 / 上海各 10 个随机站点'}} 导出结果
北京(10 个随机测试点)
# 坐标 命名 来源 最近现实地铁站 距离 分数 {{r.i}} {{r.lon.toFixed(4)}}, {{r.lat.toFixed(4)}} {{r.name}} {{r.sourceText}} {{r.nearestMetroName}} {{r.nearestMetroDistanceKm==null?'—':Number(r.nearestMetroDistanceKm).toFixed(1)+' km'}} {{r.score==null?'—':Number(r.score).toFixed(2)}}
上海(10 个随机测试点)
# 坐标 命名 来源 最近现实地铁站 距离 分数 {{r.i}} {{r.lon.toFixed(4)}}, {{r.lat.toFixed(4)}} {{r.name}} {{r.sourceText}} {{r.nearestMetroName}} {{r.nearestMetroDistanceKm==null?'—':Number(r.nearestMetroDistanceKm).toFixed(1)+' km'}} {{r.score==null?'—':Number(r.score).toFixed(2)}}
方案分享
分享码不在页面展开显示。
复制分享码 从剪贴板载入分享码
⚙️ 命名配置
这里仅调整高级自动命名的评分模型;类型显示权重保持 0~100,大类倍率只在实际评分时乘上,不改动每个类型原本显示的权重。
预设方案
A 地名优先
B 道路优先
C 平衡(默认)
D 公交站优先
全局参数
距离权重曲线
可对比配置 删除已选自定义配置 {{autoNamerCompareBusy?'对比中…':'对比已选配置(北京10 + 上海10)'}}
四个内置预设始终可直接参与对比,且不会写入 IndexedDB。点击复选框选择;按住 Shift 再点击可连续多选或连续退选,行为类似文件资源管理器。批量删除只会删除自定义配置。
对比结果
以下所有方案使用同一批北京 10 个 + 上海 10 个随机坐标和相同线路方向。横向比较同一行即可观察配置差异。
# 区域 / 坐标 {{c.name}} {{idx+1}} {{sample.city}}{{sample.lon.toFixed(4)}}, {{sample.lat.toFixed(4)}} {{c.rows[idx]?.name||'—'}} {{c.rows[idx]?.source||''}} · {{Number(c.rows[idx].score).toFixed(1)}}
🕒 时刻表
BLD 使用 KL 的时刻表结构。当前允许 MTR、BS2 和懒人时刻表;BS 时刻表暂不允许新建或使用。线路可在线路设置中绑定时刻表;寻路和客流粗估会按时刻表估计等车时间。
MTR 定点班次
BS 上线车辆数(暂不支持)
BS2 小时间隔
懒人时刻表
全天间隔 分钟
新增时刻表
选择预设 {{ex.name}}
从预设新建
暂无时刻表。
返回列表 {{selectedTimetable?.name}} {{selectedTimetable?.type}}
🗺️ 切片数据
现实模式右键地图可下载当前 1°×1° 区域的命名数据、河流数据和密度图数据;首次进入现实模式会自动检查并下载海洋数据。切片缓存在独立 IndexedDB 中,所有存档共享;普通下载遇到已存在的同类型切片会直接跳过,不会覆盖;只有“更新所有已下载的区域”和补全类操作会主动更新/补齐。打开本页会自动检查服务器版本;红色斜纹区块表示本地版本已过期。
+ 放大 - 缩小 重置视图 刷新数据 {{ namerVersionChecking ? '正在检查版本…' : '刷新版本状态' }}
{{ namerBulkUpdateBusy ? '正在更新所有区域…' : `更新所有已下载的区域(${namerOutdatedCount})` }}
{{ realTerrainBulkBusy ? '正在补全数据…' : '补全数据' }}
补齐密度图
已下载:{{ namerTiles.length }} 个切片 · 服务器:v{{namerServerVersion}}
{{ realTerrainBulkStatus }}
{{ namerBulkUpdateStatus }}
{{ selectedNamerTile.tile }}
经度范围:{{ selectedNamerTile.lon }}° ~ {{ selectedNamerTile.lon+1 }}°
纬度范围:{{ selectedNamerTile.lat }}° ~ {{ selectedNamerTile.lat+1 }}°
数据版本:v{{ Number(selectedNamerTile.version || 0) }} ⚠ 已过期
总大小:{{ formatNamerBytes(namerTileCombinedSize(selectedNamerTile)) }}
命名地名 points:{{ formatNamerBytes(namerTileLayerSize(selectedNamerTile,'points')) }}
命名道路 roads:{{ formatNamerBytes(namerTileLayerSize(selectedNamerTile,'roads')) }}
河流数据:{{ formatNamerBytes(selectedNamerTile.riverTotalSize || 0) }}
密度图数据:{{ formatNamerBytes(selectedNamerTile.densityTotalSize || 0) }}
更新时间:{{ formatNamerDate(selectedNamerTile.downloadedAt || selectedNamerTile.riverDownloadedAt || selectedNamerTile.densityDownloadedAt) }}
此切片尚未下载。
下载全部数据(已存在跳过)
仅下载命名(已存在跳过)
仅下载河流(已存在跳过)
仅下载密度图(已存在跳过)
删除此网格密度图缓存
点击左侧任意网格选择切片;未下载区域可直接在这里下载。滚轮可缩放,拖动可平移。已下载切片颜色按数据量从蓝→绿→黄→橙→红渐变。
自定义页面布局
当前编辑:{{ data.fictionalMode ? '架空模式' : '现实模式' }} 。布局保存在浏览器公共 IndexedDB 中,同模式的所有存档共用,不写入工程存档。拖拽卡片调整顺序,实际工具栏始终按两列排列。
恢复当前模式默认布局
导出布局 JSON
导入布局 JSON
复制布局 JSON
布局 JSON 不在页面中展开显示。复制会直接写入剪贴板;导入请使用上方文件按钮。
移动端左侧工具栏
移动端专用。左侧工具栏和“更多”共用这一份顺序;拖动卡片可排序。关闭“外面显示”后会进入“更多”。“设置”和“更多”固定在外面,不能隐藏。
外面:{{ mobilePrimaryToolItems.length }} 项
更多:{{ mobileMoreToolItems.length }} 项
恢复移动端默认布局
👥 多人联机房主 / 多人服务器
当前用户
{{ multiplayerIdentity.username || '未设置用户名' }}
去首页修改用户名
普通联机由当前浏览器持有权威存档;多人服务器会把当前作品上传到服务端托管,房主关闭浏览器后其他成员仍可加入。房间名称不同于存档名,密钥请只私下分享。
密钥固定为 32 位安全随机字符串,开启房间后不能更换;需要换密钥请先关闭普通联机或多人服务器。
🔐 房客权限
除“地形交互”默认关闭外,其余权限默认允许。保存权限由服务器验证;下载/导出与地形交互权限用于正常客户端 UI / 交互限制。
📡 房间状态
开启普通联机
关闭普通联机
开启多人服务器
关闭多人服务器
⚠ 多人撤销/重做采用操作级因果保护:若相关对象后来被其他人修改,将拒绝撤销或重做
📜 查看操作日志
{{ collabStatus }}
{{ collabIsHosted() ? '服务器' : '普通联机' }} revision {{ collabRevision }} · 成员 {{ collabMembers.length }} 人
👤 房客列表 / 成员历史
房主固定在最上方;其余成员先显示在线、再显示离线,每组按最后编辑时间从新到旧排列。历史信息属于存档本体,不属于设置;拉黑名单则是这个浏览器的全局公共数据。
状态 / 用户
UUID
最后编辑
IP
地区
操作总量
身份
操作
{{ m.role==='host' ? '👑 ' : (m.online ? '🟢 ' : '⚫ ') }}{{ m.username || '未知用户' }}
{{ m.role==='host' ? '房主' : (m.online ? '在线' : '离线') }}
{{ m.uuid }}
{{ formatCollabTime(m.lastEditAt) }}
{{ m.ipAddress || '未知' }}
{{ m.geo?.display || '未知地区' }}
{{ m.operationCount }}
群主
管理员
成员
不可操作
设为管理员
取消管理员
解禁
拉黑
暂无成员记录
🌐 加入多人房间
当前用户
{{ multiplayerIdentity.username || '未设置用户名' }}
去首页修改用户名
连接会使用房间当前权威作品替换当前编辑内容;多人服务器中,房主也从这里加入自己的服务器,并自动获得房主权限。你的自动命名配置、切片 IndexedDB、渲染/性能设置、视野和页面布局都不会同步。
房间密钥
连接普通联机
连接多人服务器
退出房间
📜 查看操作日志
⭐ 保存房间
{{ collabStatus }} 房主:{{ collabHostUsername }} · revision {{ collabRevision }} · 多人服务器
{{ collabGuestError }}
🖥️ 我的多人服务器
这里显示当前浏览器身份创建的服务器,点击即可填入密钥或直接加入。
刷新服务器列表
正在读取服务器房间…
{{ collabHostedDiscoveryError }}
当前没有由这个浏览器身份创建的多人服务器。
{{ room.roomName || '未命名服务器' }}
{{ room.mapModeLabel }} · 在线 {{ room.onlineCount || 0 }} 人 · {{ formatCollabTime(room.updatedAtUtc) }}
填入
加入
复制链接
🌍 公共图
这里显示正在运行且已设为公共图的多人服务器。
刷新公共图
正在读取公共图…
{{ collabPublicDiscoveryError }}
当前没有正在运行的公共图服务器。
{{ room.roomName || '未命名公共图' }}
房主:{{ room.ownerUsername || '未知房主' }} · {{ room.mapModeLabel }} · 在线 {{ room.onlineCount || 0 }} 人
填入
加入
复制链接
⭐ 已保存的房间
房间列表独立保存在当前浏览器,只显示房间名称;点击名称会自动填入对应密钥。
还没有保存过房间。
🔐 当前房间权限
房客请求保存:{{ collabPermissions.allowGuestSave ? '允许' : '禁止' }}
下载 JSON:{{ collabPermissions.allowGuestJsonDownload ? '允许' : '禁止' }}
导出图:{{ collabPermissions.allowGuestExportImage ? '允许' : '禁止' }}
地形交互:{{ collabPermissions.allowGuestTerrainInteraction ? '允许' : '禁止' }}
公共图:{{ collabPermissions.allowPublicMap ? '开启' : '关闭' }}
👥 房间成员
只读查看。房主固定在最上方,在线成员在离线历史成员之前。
状态 / 用户
最后编辑
IP
地区
操作总量
{{ m.role==='host' ? '👑 ' : (m.online ? '🟢 ' : '⚫ ') }}{{ m.username || '未知用户' }} {{ m.role==='host' ? '房主' : (m.online ? '在线' : '离线') }}
{{ formatCollabTime(m.lastEditAt) }}
{{ m.ipAddress || '未知' }}
{{ m.geo?.display || '未知地区' }}
{{ m.operationCount }}
🔄 存档坐标模式转换
{{ data.fictionalMode ? '🌍 转换为现实模式' : '🗺️ 转换为架空模式' }}
将创建新存档,原存档保留不变
✨ 新建 / 打开存档
新建现实模式
新建架空模式
打开存档列表
用表格查看存档信息、收藏和打开。
🔗 存档合并
只能合并同模式存档。架空模式会自动把新存档放到当前存档右侧。
从已有存档合并
打开存档列表并合并
已选:{{concatWorkName}}
从JSON文件合并
合并JSON {{ concatImportFileName ? ':' + concatImportFileName :
'' }}
{{ data.fictionalMode ? '🌍 架空 → 现实' : '🗺️ 现实 → 架空' }}
X
将以所有站点的四至中心为原点 (0, 0),
按照 1km = 1个坐标单位 的比例转换为架空坐标。
新存档名:转架空_{{ data.name }}
将架空坐标中心映射到指定城市,
按照 1个坐标单位 = 1km 的比例转换为现实经纬度。
新存档名:转现实_{{ data.name }}
搜索
✅ 找到城市:{{ xyTransCityResult.name }}
经度 {{ xyTransCityResult.lng.toFixed(4) }},纬度 {{ xyTransCityResult.lat.toFixed(4) }}
❌ 未找到城市,请尝试更完整的名称
取消
确认转换
导出配置
X
📌 突出线路配置
🕐 时间点导出配置
导出时间
= {{
previewHistoryTimeExpr(data.exportConfig.historyTimeExpr) }}
各状态导出选项
作用于高架/地下、线路样式、时间样式三个图层
⬇ 导出时间点SVG
⬇ 导出时间点SVG(突出)
关闭
⚠
📍
✅
车站站名样式
跟随全局/线路
默认普通站名
{{s.id}}: {{s.name}}
单点车站设置
{{ stationStylePts(selectedNameStaId).length }}条线路对应点;0秒=继承线路
设置单点样式
{{ splitLineSelectModal.type==='ring' ? '选择要拆分的环线' : '选择要拆分的线路' }}
X
{{ c.lineName || '(未命名)' }}
保留拆分点
删除拆分点
{{ splitLineSelectModal.saveSplit ? '将保留拆分点' : '将删除拆分点(仅在无其他线路使用时)' }}
{{ c.lineName || '(未命名)' }}
{{
bgAnchorAlignState && bgAnchorAlignState.phase === 'pick1' ? '选第1个锚点中…退出' :
bgAnchorAlignState && bgAnchorAlignState.phase === 'pick2' ? '选第2个锚点中…退出' :
'锚点对齐:拖动锚点调整 | 退出'
}}
🗺️ 寻路详情
{{ data.names.find(x=>x.staid===pfStartStaid)?.name || '起点' }} → {{
data.names.find(x=>x.staid===pfEndStaid)?.name || '终点' }}
✕
{{ route.strategyName || ('方案 ' + (ri + 1)) }}
{{ route.strategyDesc }}
🚉 {{ route.staCnt }} 站
🔄 {{ route.transfers }}
次换乘
📏 {{ route.totalDist.toFixed(2)
}} km
点击此方案查看地图
{{ sec.lineName
}}
在 {{ tl.atName }} 贯通进入 {{ tl.toLineName }}
;
共 {{ sec.staCnt }} 站 · {{
sec.dist.toFixed(2) }}km
▶ {{ sec.fromName }} → {{ sec.toName }}
{{ sname || '(无名站)' }}
上车
下车
🚶
出站换乘
{{ sec.fromName }} → {{ sec.toName }} · {{
sec.dist.toFixed(3) }}km
换乘联络线
经由联络线
({{ sec.connFromLineName }} → {{ sec.connToLineName }})
共 {{ sec.staCnt }} 站 · {{ sec.dist.toFixed(2) }}km
▶ {{ sec.fromName }} → {{ sec.toName }}
{{ sname || '(无名站)' }}
上车
下车
{{ sec.fromName }}
📖 使用说明
X
不会用?看更新日志,使用说明页面,滨蜀的视频,或者是直接问滨蜀(群128958079)
架空模式入口在文件页面里面
⌨️ 快捷键
🖱️ 左键
🖱️ 右键
🖱️ 中键
显示
线路列表 移动线路顺序(拖拽,类似aarc)
📱 移动端
退出编辑:{{ editingLineName }}
选择编辑线路:
{{ cl.name }}({{ cl.staCnt }}站)
取消
▶ 单向
↔ 双向
已选起点→点终点
退出模式
选择线路:
{{ c.name }}
取消
🏗️ 高架
🚇 地下
❓ 未定
👁️ 浏览
已选起点→点终点
退出笔刷
选择线路:
{{ c.name }}
取消
清空起点
清空终点
重置
更多
▶
计算中…
退出寻路
{{ linesMap.get(contextMenu.id)?.name || '线路' }}
{{ ptsMap.get(contextMenu.id)?.sta ? '车站' : '节点' }}
setStationNameUser(ptsMap.get(contextMenu.id)?.staid, e.target.value)"
@keydown.enter="closeContextMenu()" style="display:block;width:100%;margin-bottom:5px;font-size:14px;font-weight:600;
border:1.5px solid #5a8fc2;border-radius:5px;padding:4px 6px;box-sizing:border-box;color:#1e2d3d;"
placeholder="站名" ref="staNamInputRef" />
⚠ 站名重复
车站站名样式
跟随全局/线路
默认普通站名
{{s.id}}: {{s.name}}
单点车站设置
{{ stationStylePts(ptsMap.get(contextMenu.id)?.staid).length }}条线路对应点;0秒=继承线路
展开单点设置
编辑
设为非枢纽
覆盖半径恢复
设置覆盖半径
删除
线路
编辑{{ l.name }}{{ l.isEndpoint ? '(端点)' : '' }}
删除
编辑{{ l.name }}{{ l.isEndpoint ? '(端点)' : '' }}
出站换乘连线
样式
{{ opt.label }}
时间设置
删除连线
当前位置
[x:{{ Number(contextMenu.lng).toFixed(3) }},y:{{ Number(contextMenu.lat).toFixed(3) }}]
发送此坐标到聊天
取消
退出站名选中
完成选择开始拖动
完成选择开始拖动
选择连锁删除线路
{{ c.lineName || ('线路 '+c.lineId) }}
取消
连锁删除
删除
取消选中
全选
反选
{{ anchorAlignSelMode ? '退出锚点对齐' : '锚点对齐' }}
{{
anchorAlignSelState.phase === 'pickA' ? '📍 点击多选内容中的源点A' :
anchorAlignSelState.phase === 'pickB' ? '📍 点击多选内容中的源点B' :
anchorAlignSelState.phase === 'pickC' ? '🎯 点击地图上的目标点C(A→C)' :
'🎯 点击地图上的目标点D(B→D)'
}}
A✓
B✓
C✓
取消
选择站点:
{{ c.name }}
取消
线路时间分段:{{ lineHistoryEditingLine?.name }}
关闭
新增列
拖动彩色段首尾端点修改区间;点击站名打开单点时间设置。
线路历史:{{ lineMetaHistoryLine?.name || '' }}
关闭
当前名称:{{ lineMetaHistoryLine?.name || '未命名' }}
当前颜色:{{ lineMetaHistoryLine?.color }}
历史记录表示旧值使用至该时间;列表按时间排序。
新增名称历史
新增颜色历史
未设置线路历史
{{ item.kind==='name' ? '名称' : '颜色' }}
删除
有效值信息 · {{ stationEffectiveInfoModal.name }} 站团ID {{ stationEffectiveInfoModal.staid }} · 覆盖半径 {{ Math.round(stationEffectiveInfoModal.radiusM||0) }}m · 点数 {{ stationEffectiveInfoModal.pointCount||0 }}
×
没有找到该站当前有效值缓存,请先在“文件 → 客流粗估”运行或刷新有效值。
按生成类型
{{ r.label }}
有效值 {{ paxRankSmallNumber(r.local) }}
目的地值 {{ paxRankSmallNumber(r.destination) }}
日均进站 {{ paxRankSmallNumber(r.dailyEntry) }}
日均出站 {{ paxRankSmallNumber(r.dailyExit) }}
按密度图层有效值
暂无图层有效值。
{{ r.label }} 总值 {{ paxRankSmallNumber(r.total) }} 格 {{ r.cells }}
线路运营信息 · {{ lineOperationInfoModal.name }} 车站 {{ lineOperationInfoModal.nodes.length }} · 流向 {{ lineOperationInfoModal.links.length }} · 站点总流量 {{ paxRankNumber(lineOperationInfoModal.total) }}
×
暂无线路车站数据。
#{{ i+1 }} {{ r.title }} {{ paxRankNumber(r.value) }}
暂无本线路实际区间流向数据;请确认已运行客流粗估并生成区间客流。
土地利用 · {{ lineLandUseModal.name }}
车站 {{ lineLandUseModal.rows.length }} · 有效值类型 {{ lineLandUseModal.types.length }} · 最大值 {{ lineLandUseCellText(lineLandUseModal.maxValue) }} · 表头按各自总量独立着色
查看信息类别
有效值
日均实际生成量(单位千,保留一位小数,例如1.1k)
导出 Excel
×
暂无可显示的线路土地利用数据。请先在“文件 → 客流粗估”运行或刷新有效值。
车站
{{ t.label }}
{{ lineLandUseCellText(t.total) }}
{{ r.name }}
{{ lineLandUseCellText(r.total) }}
{{ lineLandUseCellText(c.value) }}
运营信息 · {{ stationOperationInfoModal.name }} 日均:进站 {{ stationOpDailyValueText(stationOperationInfoModal.entryTotal) }} · 出站 {{ stationOpDailyValueText(stationOperationInfoModal.exitTotal) }} · 换乘 {{ paxRankNumber(stationOperationInfoModal.transferTotal) }}
×
当前粗估结果没有运营拆分字段;请重新运行客流粗估。
线路不同方向合并
进站
出站
换乘
暂无进站方向数据。
#{{ i+1 }} {{ r.label }} {{ stationOpDailyValueText(r.value) }}
暂无出站方向数据。
#{{ i+1 }} {{ r.label }} {{ stationOpDailyValueText(r.value) }}
暂无换乘方向数据。
#{{ i+1 }} {{ r.fromLabel }} → {{ r.toLabel }} {{ paxRankNumber(r.value) }}
站团历史名称
关闭
staid:{{ stationNameHistoryStaid }}
当前名称:{{ stationNameHistoryCurrentName || '未命名' }}
每条记录表示该旧名称使用至设定时间;到达该时间后切换为下一名称,最后切换为当前名称。
添加历史名称
单点时间设置
关闭
staid:{{ singleStationHistoryStaid }}
单点数量:{{ singleStationHistoryPts.length }}
id:{{ p.id }}
{{ stationStyleLineName(p) }}
{{ stationHistoryExpanded[p.id] ? '收起' : '展开' }}
缩略图 / 发展史动图导出
X
最大 Worker 数
个
实际 Worker 数不会超过:总帧数、CPU 逻辑线程数 - 1、这里设置的最大值。
数值越大不一定越快,可能增加内存占用。
推荐设置:
动态建设:关闭
建设速度:40 km/s
动态建设帧率:8 fps
单次更新最大帧数:40 帧
最大 Worker 数:20
这是当前测试中较平衡的设置:文件体积可控,导出速度较快,动态建设开启后也能保持比较顺滑。
应用推荐设置
导出缩略图 WebP
导出发展史 WebP 动图
关闭
{{ thumbnailExportProgress.title }}
{{ thumbnailExportProgress.text }}
{{ thumbnailExportProgress.detail }}
{{ Math.round(thumbnailExportProgress.percent * 100) }}%
退出编辑
设置
召唤图例
复制
反转点序
删除
当前地形:{{ editingTerrain.name }}|点击画布继续加点,拖白点移动节点,右键白点删除节点
{{ exportProgress.title || '正在导出' }}
{{ exportProgress.text }}
{{ exportProgress.detail }}
{{ Math.round((exportProgress.percent || 0) * 100) }}%