第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 工具栏的紧凑模式
工具栏只有一行,放不下时横向滚动而不是换行,避免工作区顶部突然变成两层。三种情况会让它变成图标模式:
- 窗口变窄,标签自动隐藏(只在足够宽的断点显示文字)。
- Settings → Layout 关闭 Show toolbar labels。
- 嵌入链接带
toolbar=icons或layout=compact。
图标模式只去掉文字,不改变菜单内容与快捷键;按钮的 title 与无障碍标签仍在,悬停可看到名称。
3.3 命令面板与快捷键
3.3.1 命令面板
按 Ctrl/Cmd + K(或 Help → Command Palette)打开命令面板。它把菜单、工具栏、Add Data 来源、Processing 工具、Controls 与 Plugins 汇总成一个可搜索列表:
- 输入关键词过滤。
- 用上下方向键移动高亮。
- 按
Enter执行。 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 冲突与豁免规则
全局快捷键层有几条明确的防御规则,理解它们能解释“为什么这个键没反应”:
- 输入框豁免:焦点在
input、textarea、select或 contenteditable 时不触发全局快捷键,避免在搜索框里输入s就保存。 - 对话框优先:事件已被
preventDefault()时,全局层不再处理。 - 不响应长按重复:
event.repeat为真时忽略。 - 平台键严格区分:macOS 用
Cmd,其他平台用Ctrl;同时按下另一个平台键不会误触发(例如 macOS 上Ctrl+Cmd+S不等于保存)。 Alt默认禁止:应用快捷键不含Alt,且某些键盘布局下Alt+键会输入字符,因此按住Alt不应命中。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 读数,默认关闭。它按两个来源解析:
- 地图自身的三维地形:有可用采样时立即返回、跟随指针、完全本地。
- 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 监听器,行为固定:
event.defaultPrevented→ 返回(对话框已处理)。event.repeat→ 返回。- 焦点在可编辑控件(
isEditableTarget)→ 返回。 - 匹配命令面板快捷键 → 打开面板。
- 匹配速查表快捷键 → 打开速查。
- 遍历命令,命中
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 改界面的三条纪律
- 所有文案走 i18n:用
t()与翻译键,不要硬编码中文或英文;插件显示名也要走统一解析,否则同一个插件会在菜单、命令面板与设置里显示成不同语言。 - 能力与 profile 双重门控:新入口要同时考虑“部署允许吗”(capability)与“用户想看到吗”(UI profile),两者语义不同。
- 可访问性与键盘:新控件要有可读标签、可聚焦、可用键盘触发;错误边界要能兜住局部崩溃,避免一个面板拖垮整个工作区。
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 实践练习
- 菜单侦察:不看本章,打开应用把九个菜单逐个展开并记录一次,标出你认为最容易被忽略的三个条目,并说明它们为什么不在别处。
- 命令面板:用命令面板分别打开一个 Whitebox 工具、一个 Add Data 来源与一个 Controls 工具,记录你输入的检索词与排序结果。
- 快捷键冲突:在属性表搜索框中输入包含
s、n、r的字符串,确认不会触发保存/复位;再在空白地图上按N、U、R观察相机变化。 - 面板布局:构造一个“地图优先”的布局(隐藏 Comments、收起 Style、属性表常开),导出界面文件,再在另一台设备导入,记录哪些设置被带过去、哪些没有。
- 只读视图:用
layout=viewer打开一份工程,列出仍可用的操作与被隐藏的操作,并说明为什么它不能替代权限控制。 - 扩展设计:假设你要加一个“图层统计”面板,写出应改动的文件(菜单/命令/面板宿主/设置分页)与需要遵守的三条纪律。