第03章 - 用户界面与工作区

GeoLibre 的界面目标很明确:把“地图、图层、样式、属性”四件事放在同一屏里,其余能力通过菜单、命令面板与可停靠面板按需出现。本章按“从上到下、从左到右”的顺序拆解工作区,并给出源码中对应的扩展点,方便你判断一个自定义界面应该改哪里。

界面文字会随语言变化,本章保留英文菜单与控件名;路径中的箭头表示点击顺序。

3.1 工作区总览

3.1.1 五个区域

GeoLibre 打开后是一个单窗口工作区,桌面与浏览器完全一致:

区域 位置 内容
顶部工具栏 窗口最上方 九个菜单、主题切换、工程名与路径
左侧面板轨 地图左侧 Browser、Layers(点击标签展开)
地图区 中央 MapLibre 画布、屏幕控件、注记与要素高亮
右侧面板轨 地图右侧 Comments、Style
底部 状态栏之上 属性表(按需展开)、状态栏

除此之外还有两类“临时区域”:底部角落的通知(toast)与覆盖在地图上的对话框/浮动面板。它们不参与布局,关闭后工作区复原。

3.1.2 面板尺寸、折叠与记忆

  • Layers 与 Style 面板可通过拖动内侧边缘调整宽度;属性表通过拖动上边缘调整高度。
  • 点击面板轨上的标签展开/收起该面板;同一侧展开一个面板时,另一个通常让位或收起。
  • 面板的可见性会保存在本地设置中,重新打开应用后保持。
  • 窗口变窄时,工具栏折叠为图标按钮;面板在移动端变为覆盖地图的滑入式抽屉。

提示 如果你的屏幕较小,优先在 Settings → Layout 关闭暂不使用的面板(如 Comments),而不是把窗口拖到很大——GeoLibre 的面板宽度有记忆,恢复默认布局比重调更容易。

3.1.3 第一次打开的界面

首次启动(未配置部署禁用引导时)会看到地图与空的 Layers 面板。默认界面的体验级别是 Advanced(全部可见),并且首次运行不会强制弹出欢迎向导。工程的初始状态取决于 Settings → Startup:

  • 新建的未命名工作区默认是 Mercator 地图,中心与缩放可在 Startup 中配置。
  • 勾选 Enable 3D globe by default 后,空工作区以三维地球打开。
  • 打开工程或带 ?url= 的链接时,始终使用工程里保存的投影与相机。

3.2 顶部工具栏与九个菜单

3.2.1 菜单总表

菜单 主要职责 典型入口
Project 新建、打开、保存、分享、导入、打印 New、Open From、Save、Share、History、Print Layout、Story Map
Edit 撤销/重做与选择工具 Select by Expression、Select by Location、Export Selected Features
View 引擎、缩放、视图历史、相机复位、分屏、色觉预览 Rendering engine、Set View、Split View、Color vision preview
Add Data 所有数据入口 Vector Layer、Raster Layer、WMS/WFS、STAC、数据库、3D
Processing 两套工具箱、SQL、AI 助手 GeoLibre Toolbox、Whitebox Toolbox、SQL Workspace、AI Assistant
Controls 地图控件与组件面板 Measure、Bookmark、Minimap、View State、Field Collection、Elevation
Plugins 内置插件激活与定位、已安装插件 Basemaps、Layer Control、Swipe、Time Slider、Installed
Settings 偏好设置与插件管理 Language、Map、Layout、Appearance、Interface、Geocoding、AI、Environment、Cloud Storage、Updates、Startup、Style Manager、Manage Plugins
Help 命令面板、快捷键、简化界面、诊断、关于 Command Palette、Keyboard Shortcuts、Simplify Interface…、Diagnostics、About

3.2.2 Project 菜单

Project 是“工程生命周期”的唯一入口,常见项包括:

  • New… / Open From(File / URL / Gallery)/ Open Recent
  • Save / Save As… / Duplicate project
  • Save as template…
  • Import → QGIS Project、ArcGIS Pro Project、Layer Styles
  • Export → Export as HTML…、Export Layer Styles…、Export Layers…
  • Share… / Collaborate… / History…
  • Print Layout… / Story Map… / Offline Basemap…

注意 Project 菜单会被当前 UI profile 过滤,部分项只在桌面版出现。菜单里找不到某项时,先检查 Settings → Interface 的体验级别与开关。

3.2.3 Edit 与 View:两个最容易忽略的菜单

它们的内容几乎不在别处出现:

菜单项 作用
Undo / Redo 图层与样式操作的撤销/重做
Select by Expression 用表达式选择要素(也可把表达式变成持久过滤)
Select by Location 按空间关系选择
Zoom to Selection / Invert Selection / Clear Selection 选择集操作
Export Selected Features as Layer 把选择结果变成新图层
View → Rendering engine 在 MapLibre / Mapbox / Cesium / ArcGIS 间切换
View → Set View 输入坐标、缩放、方位与俯仰
View → Split View 建立分屏或多图网格
View → Color vision preview 模拟红色盲、绿色盲、蓝色盲与全色盲
View → View in Google Maps / Google Earth 把当前视图带到外部工具

提示 Color vision preview 只过滤地图(含分屏与图例),不影响面板、菜单与导出;预览仅本次会话有效,不写入工程。看到地图角落的徽标就说明模拟正在生效,点徽标上的 × 或在菜单选 Off 结束。

3.2.4 Add Data 与 Processing

Add Data 把入口按来源分组,常见分组包括文件、服务、云原生、三维与数据库。GeoLibre 的 Add Data 对话框是“按来源切换”的单一对话框,而不是每个格式一个窗口;具体字段随来源变化(例如 WMS 会先读 GetCapabilities 让你从下拉框选图层)。

Processing 的特殊之处是同时容纳两套工具箱:

  • GeoLibre Toolbox:矢量、网络、统计、栅格、Conversion 等客户端/ sidecar 工具。
  • Whitebox Toolbox:1,000+ 个 WebAssembly 工具,按类别与子类别浏览。

因此部分类别名会在菜单里出现两次,这是设计使然而不是重复渲染。菜单还提供 SQL Workspace 与 AI Assistant 入口。

3.2.5 Controls 与 Plugins

Controls 管“地图上的小工具与读数”:Measure、Bookmark、Minimap、View State、Field Collection、Elevation 等。开关状态通常即时生效,不打断当前操作。

Plugins 管“可插拔能力”:内置插件(Basemaps、Layer Control、Swipe、Time Slider、Street View、Overture Maps、LiDAR 等)在这里激活,并可设置其在屏幕上的位置;外部插件列在 Plugins → Installed,市场安装入口是 Settings → Manage Plugins。

3.2.6 Settings 与 Help

Settings 打开一个多分页对话框,分页与配置项在第04章逐项说明。这里只需记住:它既是“个人偏好”,也是“凭据与插件管理”的入口。

Help 是发现问题的地方:命令面板、快捷键速查、Simplify Interface…、官网与 GitHub 链接、Diagnostics、反馈与更新检查、About。Help 本身无法被 UI profile 隐藏,保证你永远有一条回到设置的路。

3.2.7 右侧:主题与工程名

工具栏右端固定两个控件:

  • 主题切换:太阳/月亮按钮切换浅色/深色。默认跟随操作系统偏好;嵌入页可用 theme=dark 或 theme=light 指定。
  • 工程名:就地编辑的输入框,回车或失焦提交;空白会恢复为默认名。开启 Show project info 时,旁边还会显示工程路径。

注意 默认工程名会被写进工程文件。使用非英文界面时,默认名仍按规范的英文/本地化规则写入,避免同一工程因界面语言不同而出现不同名字。

3.2.8 工具栏的紧凑模式

工具栏只有一行,放不下时横向滚动而不是换行,避免工作区顶部突然变成两层。三种情况会让它变成图标模式:

  1. 窗口变窄,标签自动隐藏(只在足够宽的断点显示文字)。
  2. Settings → Layout 关闭 Show toolbar labels。
  3. 嵌入链接带 toolbar=icons 或 layout=compact。

图标模式只去掉文字,不改变菜单内容与快捷键;按钮的 title 与无障碍标签仍在,悬停可看到名称。

3.3 命令面板与快捷键

3.3.1 命令面板

按 Ctrl/Cmd + K(或 Help → Command Palette)打开命令面板。它把菜单、工具栏、Add Data 来源、Processing 工具、Controls 与 Plugins 汇总成一个可搜索列表:

  1. 输入关键词过滤。
  2. 用上下方向键移动高亮。
  3. 按 Enter 执行。
  4. Esc 关闭。

面板还单独列出每个处理工具:GeoLibre Toolbox 的矢量、网络与统计工具归在 Tools,每个 Whitebox 工具归在 Whitebox Toolbox。因此 Ctrl/Cmd + K、输入 slope、回车,就能直接打开 Whitebox 的 Slope,而不必逐级点菜单。

检索规则(源码 filterCommands):

  • 查询按空白拆成多个 token,每个 token 都要出现在标题、分组或关键词中。
  • 排序优先级为:标题完全相等 → 标题前缀匹配 → 其他;同级保持注册顺序。
  • 工具名在每种语言下都保留英文可搜索;精确标题排在最前。
  • 当前 UI profile 隐藏的项不会出现在面板中。

3.3.2 全局快捷键

内置全局快捷键(与界面一致):

快捷键 动作
Ctrl/Cmd + K 打开命令面板
? 显示键盘快捷键速查
Ctrl/Cmd + N 新建工程
Ctrl/Cmd + O 从文件打开工程
Ctrl/Cmd + S 保存工程
Ctrl/Cmd + Shift + S 另存为
Ctrl/Cmd + Z 撤销
Ctrl/Cmd + Shift + Z(或 Ctrl + Y) 重做
C 切换评审评论工具,再点击地图放置图钉
N 复位方位(正北朝上)
U 复位俯仰(垂直俯视)
R 同时复位俯仰与方位
[ 上一个视图
] 下一个视图

单键视图快捷键刻意模仿 Google Earth Pro,并且只在应用层生效,不与 MapLibre 的画布按键冲突。

3.3.3 地图键盘导航

地图获得键盘焦点时,MapLibre 自身的导航键可用:

按键 动作
+ / - 放大 / 缩小
方向键 平移
Shift + ← / → 旋转
Shift + ↑ / ↓ 倾斜

3.3.4 冲突与豁免规则

全局快捷键层有几条明确的防御规则,理解它们能解释“为什么这个键没反应”:

  1. 输入框豁免:焦点在 input、textarea、select 或 contenteditable 时不触发全局快捷键,避免在搜索框里输入 s 就保存。
  2. 对话框优先:事件已被 preventDefault() 时,全局层不再处理。
  3. 不响应长按重复:event.repeat 为真时忽略。
  4. 平台键严格区分:macOS 用 Cmd,其他平台用 Ctrl;同时按下另一个平台键不会误触发(例如 macOS 上 Ctrl+Cmd+S 不等于保存)。
  5. Alt 默认禁止:应用快捷键不含 Alt,且某些键盘布局下 Alt+键会输入字符,因此按住 Alt 不应命中。
  6. Shift 默认忽略:? 这类符号键本身带 Shift,强制要求“未按 Shift”会让它失效;需要区分时(如 Save 与 Save As)在定义里显式写 shift。

3.3.5 速查表与发现

按 ?(或 Help → Keyboard Shortcuts)打开速查表。它按 General、Project、Add Data、View、Map navigation 分组,内容来自命令注册表本身——新增一个带快捷键的命令,速查表会自动出现,不需要另外维护文档。

提示 命令面板与速查表是“发现界面”的最佳方式。忘记某个功能在哪个菜单时,先按 Ctrl/Cmd + K 搜功能名,比在九个菜单里找更快。

3.4 侧边面板与停靠

3.4.1 左侧:Layers

Layers 是使用频率最高的面板,包含:

  • 底图行(Background)与图层栈,支持分组、嵌套、拖动排序、重命名、可见性与透明度。
  • 每行的符号色块(点/线/面/图片),隐藏时变暗;双击名称可重命名。
  • 图层操作菜单:缩放到图层、识别、标注、属性表、样式、导出、移除等。
  • 面板底部的 Search places:地理编码、按坐标飞行、按 H3 索引飞行,以及搜索已加载矢量图层的属性。

3.4.2 左侧:Browser

Browser 是 QGIS 风格的 Data Source Manager:保存的地图服务、数据库连接、最近项目、收藏夹与 My Data 图层库都能在这里展开并直接添加,不必走菜单。它支持键盘导航整棵树。

3.4.3 右侧:Style

Style 面板显示当前选中图层的样式控制:

  • 矢量:单值、分类、分级、规则、表达式、热力、聚合、比例符号、图表等。
  • 栅格:亮度/对比度/饱和度、色带、分类、拉伸、透明度。
  • 弹窗设计(Popup)、标注、过滤器、快速过滤器等分区。
  • 图层选中不会自动把 Style 面板弹到地图上;它从图层卡片上的调色板按钮或对应菜单项展开。

3.4.4 右侧:Comments

Comments 是评审评论面板:在地图上放置锚定到点或要素的评论,支持回复与解决状态。按 C 切换评论工具后点击地图即可放置图钉。

3.4.5 底部:属性表

属性表从状态栏的 Attribute table 展开,占据地图下方。它有自己的工具:字段管理、搜索、排序、统计、图表、Explore、导出、字段计算器等。选中行会在地图上高亮对应要素。

3.4.6 可停靠的工作面板

除了四个常驻面板,GeoLibre 还有一组“工作面板”,它们与地图并排而不是盖住地图:

面板 打开方式 行为
SQL Workspace Processing → SQL Workspace 停靠在地图旁,可调整大小,带自动补全
Notebook 底部面板/Notebook 入口 与地图并排,可与地图 50/50 分屏并自动收起 Style
Dashboard Tools → Dashboard 或属性表按钮 图表部件网格,可折叠停靠
Model Builder Processing → Model Builder 画布可最大化覆盖地图区域
Whitebox Toolbox Processing → Whitebox Toolbox 浮动面板,可选择工具并运行
各类目录浏览器 Plugins → Web Services / 目录插件 停靠在共享面板宿主中,随面板调整大小

3.4.7 插件面板与四种停靠位

插件可以注册右侧面板,并选择停靠位置。宿主把可用位置组织为“围绕 Layers/Style 的四个槽位”,用户可以把插件面板在槽位间移动,宽度在移动后保持:

停靠位 含义
left-of-layers Layers 左侧
right-of-layers Layers 右侧
left-of-style Style 左侧
right-of-style Style 右侧

此外还有 shared rail(replace-style) 模式:插件面板接管 Layers 或 Style 所在的共享轨道,内置面板仍在其中可切换,而不是被覆盖。多个插件面板可以同时存在于不同槽位;地图控件的生命周期与图层同步仍由插件自己管理。

注意 目录类插件共享面板状态,因此同一时间通常只有一个处于激活状态;切换失败时宿主会恢复被顶掉的那个插件,而不是让两个都关掉。

3.4.8 可见性与记忆

每个常驻面板都能在 Settings → Layout 单独显示/隐藏:Layers、Style、Browser、Comments。面板的宽度、是否展开、属性表高度与最近使用的停靠位都会保存在本地;工程文件不记录这些设备级布局(工程只记录打开时需要应用的内容,如 Interaction 中的控件可见性)。

3.5 地图区操作

3.5.1 手势

操作 手势/输入
平移 按住左键拖动(触屏单指拖动)
缩放 滚轮、屏幕 +/- 按钮、双指捏合
旋转 按住右键拖动(触屏双指旋转)
倾斜 按住 Ctrl/Cmd 拖动
复位正北 点击指南针按钮,或按 N
全屏 屏幕控件或 View 菜单
右键菜单 单击右键(右键拖动仍旋转/倾斜,不弹菜单)

3.5.2 右键菜单与快速分析

在地图上右键会打开上下文菜单,包含:

  • 读取并复制点击处坐标。
  • Open in Google Maps / Open in Google Earth。
  • Quick analysis 子菜单:对点击点直接运行缓冲、驾车/步行等时圈、视域;对图层行运行整层的缓冲、质心、凸包、外包框。
  • 这些“快速分析”不弹参数对话框、不要求先建点图层,结果进入 Processing History,可重跑并复制 Python。

3.5.3 屏幕控件

常见控件包括导航、全屏、定位、地球、地形、比例尺、归属信息与 Logo。显示哪些由 Controls 菜单控制,位置可在插件设置中调整。地形控件的双击可设置垂直夸张(vertical exaggeration)。

网格覆盖(Gridlines)可切换经纬网、UTM 东/北坐标与 MGRS/USNG 三种模式,边缘带标注。

3.5.4 多图与分屏

View → Split View 把工作区拆成同步的多图网格,用于并排比较底图、图层、时间步或渲染引擎。主图与每个副图可以独立选择引擎(MapLibre / Mapbox / Cesium / ArcGIS);相机会同步移动,除非你关闭同步。

3.5.5 触屏与移动端

移动端不是把桌面界面缩小,而是换了交互模型:

  • Layers 与 Style 以滑入式抽屉覆盖地图,而不是并排。
  • 面板边缘可拖拽调整,适配手指命中区域。
  • 工具栏避开系统状态栏(safe-area insets)。
  • 地图手势以单指平移、双指缩放/旋转为主,右键菜单通过长按或按钮触发。

3.5.6 视图历史、相机复位与边界锁定

View 菜单维护一条“视口历史”:

操作 入口 说明
上一个视图 [ 或 View 菜单 回到上一次地图范围
下一个视图 ] 或 View 菜单 前进到下一次范围
复位俯仰与方位 R 同时回到正北、垂直俯视
只复位方位 N 正北朝上,保留俯仰
只复位俯仰 U 垂直俯视,保留方位
Set View View → Set View 精确输入中心、缩放、方位与俯仰

当 Settings → Map Preferences → Restrict map bounds 开启时,地图边缘会显示锁定指示,平移被限制在设定的外包框内;这个限制随工程保存,分享后接收方也会受同一范围约束。相机复位使用独立的指北针控件,旋转时控件上的角度指示会一起变化,避免“罗盘与地图朝向不一致”的歧义。

3.6 状态栏与读数

3.6.1 元素

状态栏从左到右依次是:

读数 说明
Coords 指针处坐标,点击可切换记法
Elev 指针处地面高程,默认关闭
GPS GPS 跟踪运行时的当前定位
Zoom 缩放级别(两位小数)
Eye alt 相机海拔高度(Google Earth 的 Eye alt)
Bearing / Pitch 相机方位角与俯仰角(度)
BBox 当前视图外包框(窄窗口隐藏)
Diagnostics: N 本次会话的错误/警告数,点击打开诊断对话框
Autosave paused 大工程暂停自动保存时的提示

3.6.2 七种坐标格式

格式 示例
十进制度(默认) -83.92074, 35.96064
度分秒 35°57'38.3"N 83°55'14.66"W
度十进制分 35°57.6384'N 83°55.2444'W
UTM(带号与东/北坐标) 17S 236594mE 3983527mN
MGRS 17SKV3659483527
USNG 17S KV 36594 83527
投影坐标(EPSG:code) -9342014.04, 4295206.85 (EPSG:3857)

规则细节:

  • 十进制度按“经度在前”书写,与 GeoJSON 及站内其它工具一致;DMS/DDM 按传统“纬度在前”。
  • 点击状态栏坐标可循环切换,或在 Settings → Map Preferences → Coordinate format 固定;选择随工程保存。
  • UTM 与 MGRS 使用同一套带号规则(含挪威与斯瓦尔巴特例外),因此两者永远指向同一带。
  • 超出 UTM 纬度带(南于 80°S 或北于 84°N)时回退为十进制度;极区网格(UPS)不支持。
  • 投影格式可填任意 EPSG 代码(如 3857、32618)或点 Browse 选择;未知代码或无法投影的点回退为十进制度。

3.6.3 高程读数与隐私

Controls → Elevation 打开 Elev 读数,默认关闭。它按两个来源解析:

  1. 地图自身的三维地形:有可用采样时立即返回、跟随指针、完全本地。
  2. Open-Meteo 公共高程 API:当地形没有可用值(未开地形,或地形该点无采样)时使用。指针静止半秒后才查询,按约 11 米网格缓存,且只在地球底图上运行。

首次开启会弹出同意提示,因为回退查询会把指针坐标发给第三方。拒绝才能保证读数永不出网;拒绝后读数仍可用于地形能回答的地方。查询进行中读数留空,而不是显示上一个点的高度。

3.6.4 Eye alt、比例尺与单位

  • Eye alt 是相机相对海平面的高度,会按当前天体缩放,因此在火星/月球底图上依然正确。
  • 比例尺单位在 Settings → Map Preferences → Scale bar units 选择米制、英制或海里;该设置同时影响 Elev、Eye alt 与右键快速分析的缓冲预设。

3.6.5 Diagnostics 与自动保存暂停

Diagnostics: N 按钮(也在 Help → Diagnostics)统计本次会话捕获的错误与警告:有错误时红色,只有警告时琥珀色。自动保存因工程过大暂停时,状态栏会出现 Autosave paused 提示;这属于正常保护,不是故障。

3.7 通知系统

3.7.1 行为规则

通知出现在窗口底部、状态栏上方的角落,规则固定:

规则 行为
成功/信息 几秒后自动关闭
警告 比信息稍久,自动关闭
错误 保持,直到点 × 或按 Esc
暂停计时 鼠标悬停或键盘聚焦在通知上时暂停
重复合并 相同消息合并为一条并显示 ×3 之类计数
数量上限 最多同时显示四条

3.7.2 错误与 Report issue

错误通知带 Report issue 按钮,可直接进入问题报告流程;同时错误会记录进 Diagnostics 对话框,方便复制版本、平台、请求与错误堆栈。

3.7.3 通知、诊断与日志的分工

  • 通知:即时反馈,告知“刚刚发生了什么”。
  • Diagnostics:本次会话的错误/警告清单与网络请求日志,适合排障。
  • Processing History:处理工具的运行记录,可重跑与复制代码。
  • 浏览器/系统日志:仅在其他三处都不足时使用。

提示 报告缺陷时,最有用的三样是:About 里的版本号、Diagnostics 里的错误条目、以及能复现问题的最小数据/操作步骤。

3.8 主题、布局与界面简化

3.8.1 主题与强调色

  • 工具栏的太阳/月亮按钮在浅色/深色间切换;默认跟随操作系统。
  • Settings → Appearance 选择 Mode(Light/Dark)与强调色:Blue、Violet、Emerald、Rose、Amber 或 Custom(任意颜色/十六进制)。
  • 嵌入页可用 theme=dark / theme=light 固定主题。
  • 深色模式使用“高度阶梯”区分画布、面板、对话框与菜单,阴影也随主题调整,避免深色下看不见边界。

3.8.2 Layout 设置

Settings → Layout Settings 控制工作区装饰:

选项 作用
Show toolbar labels 工具栏显示文字标签,或只显示图标
Show project info 工具栏显示工程名与路径
Show Layers panel 显示/隐藏 Layers
Show Style panel 显示/隐藏 Style
Show Browser panel 显示/隐藏 Browser
Show Comments panel 显示/隐藏 Comments

面板在小屏幕上会自动隐藏,这是响应式布局,不受上述开关限制。

3.8.3 体验级别与 Simplify Interface

Help → Simplify Interface… 直接跳到 Settings → Interface。这里有一个四态选择器:

级别 效果
Beginner 只保留必要的数据源与工具
Intermediate 常见数据源、服务与插件
Advanced 全部可见(默认)
Custom 手动改过任意条目后自动进入的状态

在级别之下可以逐项开关 Data sources、Plugins、Menus(Project、Edit、View、Add Data、Processing、Controls、Plugins、Help)以及菜单内的条目。改任意一项都会切到 Custom;Reset 恢复默认。任何隐藏都是非破坏性的——切回 Advanced 或重新勾选即可恢复。Help 菜单本身永远可见,Settings 及其 Language/Layout/Interface 也永远可见,保证有路可回。

当管理员通过部署策略锁定 profile 时,这一页只读。

3.8.4 界面文件

Settings → Interface 还提供 Export… / Import… / Import from URL:

  • 导出内容:语言、面板布局、强调主题、界面 profile。
  • 导入只改文件里包含的设置;只带 profile 的文件不会动布局与主题。
  • 文件永远不含凭据、插件来源或本地路径,也不会锁定 profile。
  • 导出的文件可作为 settingsUrl= 链接的目标,为单个页面应用设置而不覆盖用户已保存的偏好。

3.8.5 URL 布局参数

嵌入与分享常用的布局参数:

参数 效果
layout=compact 图标化工具栏,隐藏工程元数据
toolbar=icons 只显示图标按钮
toolbar=none 隐藏顶部工具栏,保留面板与状态栏
panels=none 隐藏 Layers、Style、属性表面板
panels=collapsed 保留 Layers/Style 图标轨,但默认收起
layout=viewer 只读查看器:保留图层、View/Controls、底图、搜索/识别,隐藏编辑路径
maponly 无工具栏、无面板、无状态栏,纯地图
theme=dark/light 固定主题

panels=hidden、panels=hide、panels=off、hidePanels=true 是隐藏面板的别名。只读预设下仍可加 draw 允许几何编辑器。

3.8.6 UI Profiles(用户侧)

界面 profile 是本地偏好,保存在浏览器/应用存储中,不会写进 .geolibre 工程文件。它回答的是“我想看到多少”,而不是“我被允许做什么”:

  • 想精简界面、减少误点:用 Beginner/Intermediate 或自定义开关。
  • 想锁定部署权限(展厅、教室):那是部署 capability 的职责,不在界面里,也无法被用户改回。

两者可以叠加:一个教室部署可以既隐藏大量菜单,又禁止导出与安装插件。

3.9 不同宿主的界面差异

3.9.1 浏览器与桌面

方面 浏览器 桌面
文件对话框 浏览器选择器/下载 原生文件对话框
工程保存 保存对话框或下载 写回原路径
本地 MBTiles/栅格 不支持 支持
窗口标题/菜单栏 浏览器标签 原生窗口
外部链接 新标签页 系统浏览器
诊断 前端错误 + fetch 分类 额外捕获原生 Tauri HTTP 请求

3.9.2 移动端

  • 布局:Layers/Style 抽屉、底部属性表、紧凑工具栏。
  • 触摸:更大的命中区域、手势替代右键。
  • 功能:依赖本地进程的菜单项被隐藏(见第02章 2.6.3)。
  • 定位:首次使用会请求权限;iOS 需要 Info.plist 中的定位说明。

3.9.3 只读与嵌入视图

layout=viewer 是“读者模式”:保留 Layers 列表、View 与 Controls 菜单、底图、搜索与识别,隐藏所有会修改工程的路径(菜单、快捷键、拖拽导入、以及会写入工程的地图控件)。它不是安全边界——真正的限制要靠部署 capability 与服务端策略。

3.10 源码中的界面扩展点

本节面向二次开发:当你要加一个菜单项、面板或快捷键时,应该改哪里。只给入口与约束,不做逐行源码分析。

3.10.1 layout 目录地图

apps/geolibre-desktop/src/components/layout/ 是界面骨架所在,按职责分组:

路径 职责
DesktopShell.tsx 工作区骨架:工具栏、左右面板、地图、底部面板、对话框装配
TopToolbar.tsx 九个菜单的装配、主题按钮、工程名、紧凑模式
StatusBar.tsx 状态栏读数与坐标切换
NotificationRegion.tsx 通知堆栈与行为
toolbar/ 各菜单组件(ProjectMenu、EditMenu、ViewMenu、AddDataMenu、ProcessingMenu、ControlsMenu、PluginsMenu、HelpMenu)与命令注册
settings/ 设置对话框各分页(Language、Map、Layout、Appearance、Interface、Geocoding、AI、Environment、Startup、Updates 等)
add-data/ Add Data 对话框与各来源表单(sources/*.tsx)
print-layout/ 打印布局编辑器的各分区与导出流程
RightDockPortals.tsx 右侧停靠宿主与插件面板挂载
desktopShellLazyPanels.ts 懒加载的重面板(Dashboard、Model Builder、Notebook 等)

3.10.2 命令注册表

命令是“菜单项、命令面板条目、快捷键、速查表”的共同数据源。核心类型(src/lib/commands.ts):

export interface Shortcut {
  key: string;
  mod?: boolean;
  shift?: boolean;
  alt?: boolean;
}

export interface Command {
  id: string;
  title: string;
  group: string;
  keywords?: string;
  shortcut?: Shortcut;
  icon?: LucideIcon;
  disabledReason?: string;
  run: () => void;
}

要点:

  • mod 在 macOS 映射为 Cmd,其他平台映射为 Ctrl。
  • alt 省略表示禁止,shift 省略表示忽略;需要区分 Save/Save As 时两边都显式写 shift。
  • disabledReason 存在时,快捷键不会执行 run,但命令仍可展示“为什么不可用”。
  • filterCommands 负责命令面板的 token 匹配与排序。

3.10.3 全局快捷键层

src/hooks/useGlobalShortcuts.ts 只挂一个 window.keydown 监听器,行为固定:

  1. event.defaultPrevented → 返回(对话框已处理)。
  2. event.repeat → 返回。
  3. 焦点在可编辑控件(isEditableTarget)→ 返回。
  4. 匹配命令面板快捷键 → 打开面板。
  5. 匹配速查表快捷键 → 打开速查。
  6. 遍历命令,命中 shortcut 则阻止默认行为;若有 disabledReason 则不执行。

监听器通过 ref 读取最新命令数组,因此不需要在每次渲染时解绑重绑。enabled=false 时完全不挂载(例如只读查看器不挂命令面板时)。

3.10.4 菜单与设置分页的扩展

  • 新菜单项:在对应 toolbar/*Menu.tsx 中添加,并把动作登记为命令(如果它需要出现在命令面板/快捷键中)。
  • 新设置分页:在 settings/ 下新建 Section 组件,并在 SettingsDialog.tsx 注册;设置值通过 SettingsDraftContext 草稿机制提交,取消不会写入。
  • 新 Add Data 来源:在 add-data/sources/ 下实现表单,并在 AddDataDialog 与菜单目录中登记;同时检查 UI profile 的数据源目录是否需要新增条目。
  • 新对话框:优先放入 toolbar/LazyDialogs.tsx 做懒加载,避免增大首屏包。

3.10.5 面板与停靠的扩展

  • 常驻面板(如 Browser、Comments)通过注册钩子挂到面板宿主,并由 Settings → Layout 的可见性字段控制。
  • 插件面板走 Plugin API 的右侧面板注册,可选择四个停靠槽位或 shared rail 模式;宿主负责宽度记忆与移动。
  • 浮动面板走 floating-panel 注册表(如 Whitebox 工具箱),由插件或内置组件声明尺寸与位置。
  • 底部面板(属性表、Notebook 等)在 BottomPanels.tsx 装配。

警告 不要在组件里直接操作 MapLibre 的 source/layer,也不要把面板可见性写进工程文件。前者会绕过图层同步与撤销,后者会让“打开别人的工程”改变对方的面板布局。

3.10.6 改界面的三条纪律

  1. 所有文案走 i18n:用 t() 与翻译键,不要硬编码中文或英文;插件显示名也要走统一解析,否则同一个插件会在菜单、命令面板与设置里显示成不同语言。
  2. 能力与 profile 双重门控:新入口要同时考虑“部署允许吗”(capability)与“用户想看到吗”(UI profile),两者语义不同。
  3. 可访问性与键盘:新控件要有可读标签、可聚焦、可用键盘触发;错误边界要能兜住局部崩溃,避免一个面板拖垮整个工作区。

3.11 本章小结

  • 工作区由顶部工具栏、左右面板轨、地图、底部属性表与状态栏组成;通知与对话框是临时层。
  • 九个菜单各有明确职责;Edit 与 View 的内容几乎不在别处,最容易被忽略。
  • 命令面板(Ctrl/Cmd + K)汇总菜单、数据源、工具与插件,并支持直接搜到单个处理工具。
  • 全局快捷键由统一命令注册表驱动,带输入框豁免、对话框优先、平台键区分与 Alt/Shift 规则。
  • 面板可调整大小、折叠与记忆;SQL Workspace、Notebook、Dashboard、Model Builder、Whitebox 与插件面板各有停靠方式。
  • 地图手势与右键菜单覆盖浏览与快速分析;状态栏提供七种坐标、高程、Eye alt 与诊断入口。
  • 通知遵守“成功自关、错误保留、重复合并、最多四条”的规则,错误同时进入 Diagnostics。
  • 主题、Layout、体验级别与界面文件控制“看到多少”;UI profile 是本地偏好,不写进工程。
  • 源码扩展点是 layout 目录、命令注册表、快捷键层、设置分页与面板宿主;扩展时遵守 i18n、双重门控与可访问性纪律。

3.12 实践练习

  1. 菜单侦察:不看本章,打开应用把九个菜单逐个展开并记录一次,标出你认为最容易被忽略的三个条目,并说明它们为什么不在别处。
  2. 命令面板:用命令面板分别打开一个 Whitebox 工具、一个 Add Data 来源与一个 Controls 工具,记录你输入的检索词与排序结果。
  3. 快捷键冲突:在属性表搜索框中输入包含 s、n、r 的字符串,确认不会触发保存/复位;再在空白地图上按 N、U、R 观察相机变化。
  4. 面板布局:构造一个“地图优先”的布局(隐藏 Comments、收起 Style、属性表常开),导出界面文件,再在另一台设备导入,记录哪些设置被带过去、哪些没有。
  5. 只读视图:用 layout=viewer 打开一份工程,列出仍可用的操作与被隐藏的操作,并说明为什么它不能替代权限控制。
  6. 扩展设计:假设你要加一个“图层统计”面板,写出应改动的文件(菜单/命令/面板宿主/设置分页)与需要遵守的三条纪律。