🔀 Smart comparison engine
GeoInbox compares your local QGIS layers against a host database (GeoPackage or PostGIS) to detect additions, deletions, attribute changes, and geometry modifications. All changes are visualized as temporary diff layers.
How versioning works
1. Load your client data
Add your GeoJSON, GeoPackage, or Shapefile layers to QGIS. These represent your "client" or "field" data.
2. Configure host connection
Set up a connection to your host database (GeoPackage file or PostGIS database) that contains the "authoritative" or "server" version of the data.
3. Run comparison
GeoInbox matches features between client and host layers using configurable matching rules (by ID, geometry proximity, or attributes).
4. Review differences
All detected changes are displayed as color-coded temporary layers in QGIS, allowing you to visually inspect every modification.
5. Commit or discard
Accept changes to update the host database, or discard them. All operations are transactional with automatic backup.
Supported host databases
| Database Type | Connection | Features |
|---|---|---|
| GeoPackage | File path | Full read/write, transactions, backup |
| PostGIS | PostgreSQL connection | Full read/write, transactions, schema support |
| Shapefile | Directory path | Read-only comparison (no write-back) |
Feature matching strategies
🆔 ID-based matching
Match features using a unique identifier field (e.g., 'id', 'fid', 'objectid'). Most reliable for structured datasets.
📍 Geometry proximity
Match features based on spatial proximity. Useful when IDs are not available or reliable.
🏷️ Attribute-based
Match using one or more attribute fields (e.g., name, code). Flexible for various data structures.
🤖 Smart matching
Combines multiple strategies with confidence scoring. Handles complex matching scenarios automatically.
Types of changes detected
| Change Type | Description | Layer Color |
|---|---|---|
| Features Added | New features in client not present in host | 🟢 Green |
| Features Deleted | Features in host but missing from client | 🔴 Red |
| Attributes Changed | Feature exists in both but attributes differ | 🟡 Yellow |
| Geometry Modified | Feature exists in both but geometry differs | 🟠 Pastel Orange |
| Both Changed | Feature has both geometry and attribute changes | 🌸 Pastel Pink |
| Geometry Parts | Added/removed vertices, rings, or parts | 🟣 Purple |
Comparison workflow
Step 1: Open Versioning panel
Go to the Versioning tab in the GeoInbox panel. Select your client layer from the dropdown.
Step 2: Configure host connection
Click "Set Host Database" and choose your GeoPackage file or PostGIS connection. Select the target table/layer.
Step 3: Choose matching strategy
Select how features should be matched: by ID field, geometry proximity, or attribute combination.
Step 4: Run comparison
Click "Compare" to start the analysis. Progress is shown in the QGIS task manager.
Step 5: Review results
Diff layers are added to QGIS automatically. Use the attribute table and map canvas to inspect changes.
Committing changes
After reviewing the differences, you can commit selected changes to the host database:
- Selective commit — Choose which features to add, update, or delete
- Batch commit — Apply all changes of a specific type (e.g., all additions)
- Full commit — Apply all detected changes at once
⚠️ Backup and recovery
Before any write operation, GeoInbox creates an automatic backup of the affected data. Backups are stored as timestamped GeoJSON files and can be used for manual recovery if needed.
Conflict resolution
When the same feature has been modified in both client and host since the last sync:
🤝 Manual resolution
Review conflicting features side-by-side and choose which version to keep.
📅 Timestamp priority
Automatically prefer the most recently modified version.
🏠 Host priority
Always keep the host version and discard client changes.
📱 Client priority
Always apply client changes and overwrite host version.
Undo and redo
GeoInbox maintains a complete operation history for each host database:
- Undo the last commit operation
- Redo a previously undone operation
- View operation history with timestamps and change summaries
- Restore from any point in the history