RECORD · LOCATE · TRACE
Inventory your karst features in your favorite GIS
QGIS plugin for fast entry of caves, sinkholes and hydrological dye-tracing. Persistent GeoPackage, automatic reverse-geocoding, photos that travel with the project.
The plugin
Nine tabs, one single flow.
One interface to record, link, correct, delete, view, filter, analyze, import. A queue lets you chain multiple caves without touching the mouse.
Record a feature
Name, type (12 categories), dates, explorers, altitude, coordinates captured on the map, photos. The queue lets you chain entries from the keyboard — Enter to stack, no mouse. A geotagged photo (EXIF GPS) can place the cave automatically, and the inventory exports as CSV, GPX (waypoints) or ZIP (CSV + photos).
On every point capture, commune, postal code and department are filled in automatically (geo.api.gouv.fr, France only). The call runs in the background — the interface never freezes, even offline — and the commune cache is persistent (karst_commune_cache.json): zero network calls for a commune already known, even after a restart.
Duplicate detection on entry: a point within 2 m of an existing feature triggers a confirmation — never blocking, never silent. GeoPackage persistence: no volatile memory layer, your data survives a QGIS restart.
Link sink → spring
Select source and destination features, experiment metadata (dye, result, dates, transit time), written to Cave Inventory — Dye-tracing.
Geodesic distance is computed automatically on the project's ellipsoid. A search (reference/name/type, case- and accent-insensitive) and a type filter speed up picking the sink and the spring.
Full CSV import/export for dye-tracing (geometry serialized as WKT) — same as for caves, no dedicated button: the active-layer selector recognizes both lines and points.
Correct a feature
Form generated automatically from the layer's fields. The reference is read-only and the geometry protected — corrections never break the linked photo folder.
Search and type filter find the feature live (case- and accent-insensitive). Works on any vector layer, not just Karst Entry layers.
Delete safely
Search and type filter narrow the table live, columns adapted to the layer type, multi-selection (Ctrl/Shift+click). An explicit confirmation is always required.
View a sheet
Read-only detail view with a preview of linked photos ; empty fields are hidden for a cleaner sheet. Search and type filter to find a feature fast. Ideal for revisiting an entry at the desk with no risk of accidental edits.
Filter by field value
Generates, from a source layer, a view filtered by field value — typically a view per commune or per type, gathered under a dedicated group.
No duplication: each view is a filter (subset string) on the same GeoPackage. Editing the source updates the views automatically. Re-runnable, confirmation above 50 values.
Stats by commune
Inventory summary grouped by commune: feature count, cumulative development length, breakdown by type. One-click CSV export of the table.
"Fill in missing communes": batch geocoding (asynchronous, commune cache) of features with no commune — only touches empty fields.
Resume an existing inventory
CSV import into an existing layer (with schema validation) or a new persistent layer on disk. Universal mapping of columns: case-, accent- and whitespace-insensitive, with synonyms (numero→reference, lon→x, alt→altitude…).
Auto-detected encoding (UTF-8 / Excel), cleanup of stray HTML in comments, and symbology applied to the new layer. Automatic backup of the GeoPackage before any import into an existing layer — a safety net, never a destructive import. Your decade-old Excel inventories fit right into the pipeline.
Version, license and guide
Plugin version, PolyForm Noncommercial license, contact, and direct access to the illustrated user guide (PDF) bundled with the plugin.
The layers
Two persistent GeoPackages
Created and reused automatically next to the QGIS project. Data survives a restart, and the whole set — project + layers + photos — moves as one block: relative photo paths, consistent CSV export.
- referenceString · unique
- name / typeString · 12 cat.
- date_disc / date_explDate
- explorersString
- commune / postal / dept / inseeString · auto
- commentMulti-line text
- photosString · relative paths
- point_injection / point_sortieString
- colorantString · configurable
- resultatPositive · Negative · Unclear
- date_injection / date_detectionDate
- temps_transit / operateursString
- distance_mDouble · geodesic auto
With KarstPro
The reference inventory for LiDAR survey
Read by KarstPro
Your Cave Inventory is preferred over Géorisques data within the detection radius. Dye-tracing Inventory is injected into the AI analysis prompt (sink → spring, distance, transit time).
Field return
Field finds from KarstPro (caves, targets, shafts) are exported as CSV with photos and altitude, then imported into your inventory — automatic deduplication. The loop closes, PDF sheet per cave.
Good to know
A few constraints worth knowing
- Reverse-geocoding: Metropolitan France and overseas departments only. Outside France, administrative fields stay empty — entry continues normally.
- Photos on a memory layer = absolute paths. Always use a persistent layer — it's the default.
- Same-name photos: the second overwrites the first. Rename beforehand if this could happen.
- The reference is immutable. Geometry editing is intentionally disabled to preserve the linked photo folder.