QFieldCloud系统文档¶
本文档的目的是提供QFieldCloud系统概述,便于了解底层逻辑和技术。
主体和概念¶
QGIS工程¶
QGIS工程是 .qgs 或 .qgz 文件。在QGIS桌面端创建一个工程,并使用QGIS插件 (QField同步) 上传到QField云。在QGIS工程上传之前,QGIS工程的每一图层都需要一个 "动作" 来决定QFieldSync和QField应该如何处理该图层。可以设置两种类型的动作 - 一种用于QFieldCloud,另一种用于传统数据线的导出。
此信息保存在QGS工程中,作为图层的 customProperty ,并带有 QFieldSync/action 键。
可用的动作包括:
动作内部名称 | UI中显示的名称 |
---|---|
离线 - OFFLINE | 合并 - Consolidate |
NO_ACTION | 活动图层 - Live layer |
移除 - REMOVE | 忽略图层 - Ignore layer |
复制 - COPY | 复制 - Copy |
KEEP_EXISTING | 保持现有 - Keep Existing |
这是QField同步在不同图层动作中的行为:
动作 | 基于文件的图层 | 不是基于文件的图层 |
---|---|---|
离线 - OFFLINE | 创建统一的数据副本 | 创建统一的数据副本 |
NO_ACTION | N/A | 图层无动作 |
移除 - REMOVE | 从工程移除图层 | 从工程移除图层 |
复制 - COPY | 使源路径为相对并复制文件 | N/A |
KEEP_EXISTING | 使源路径为相对,如果文件不存在,则复制该文件 | N/A |
这是 QFieldCloud (libqfieldsync
) 与以下图层的行为:
动作 | 基于文件的图层 | 未基于文件 |
---|---|---|
离线 | 合并拉取时创建数据副本,推送时将增量文件应用于原始数据源 | 合并拉取时创建数据副本,推送时将增量文件应用于原始数据源 |
NO_ACTION | N/A | 图层无动作 |
移除 - REMOVE | 从工程移除图层 | 从工程移除图层 |
复制 - COPY | 使源路径相对,并在拉取时创建数据副本,推送时将增量文件应用于原始数据源 | N/A |
KEEP_EXISTING | 使源路径相对,并在拉取时创建数据副本,推送时将增量文件应用于原始数据源 | N/A |
这是QField与图层的行为:
动作 | 基于文件的图层 | 不是基于文件的图层 |
---|---|---|
离线 | 创建和推送增量文件 | N/A (此时总是基于文件) |
NO_ACTION | N/A | 编辑在线 (实时) 数据库 |
移除 - REMOVE | N/A (图层已不存在) | N/A (图层已不存在) |
复制 - COPY | 创建和推送增量文件 | N/A |
KEEP_EXISTING | 创建和推送增量文件 | N/A |
总之,对于QFieldCloud而言:
- NO_ACTION 用于位于服务器上的在线图层 可通过互联网访问,并直接修改由 QField。
- HYBRID 意味着将生成地理包在 服务器 (或直接在桌面端为基于文件的图层),并 由客户端下载。客户端将生成更改的增量文件。
- OFFLINE 用于如处理 QFieldCloud不可见的本地数据库, 这些数据库在从桌面端加载到服务器之前被合并, 并且QFieldCloud不与原始数据同步。
- REMOVE 仅仅是从工程中移除图层。
- KEEP_EXISTENT 不会用于QFieldCloud同步。
使用QFieldSync插件,可以更新QFieldCloud已加载的工程。如果更改仅涉及样式、表单等,而不涉及图层的构造,只需更新服务器端的工程即可。如果图层结构发生更改,工程将在服务器端重置 (增量文件将被删除),并且对于每个客户端,在能够推送新的更改之前,都需要下载工程的更新版本。
QFieldCloud工程¶
由一个且仅有一个QGIS工程和合适的附属文件 (如地理包、图像等) 组成,包括离线或混合数据包。
使用案例¶
混合¶
在服务器同步的混合编辑模式
离线数据库¶
桌面端同步的离线编辑模式