Skip to content

Formats I/O supportés

GISPulse utilise PyOGRIO pour la lecture et l'écriture vectorielle et Rasterio pour le raster. La détection du format est automatique basée sur l'extension du fichier.

bash
# Lister les formats disponibles sur votre installation
gispulse formats

Formats vectoriels

Formats recommandés

ExtensionFormatLectureÉcritureNotes
.gpkgGeoPackageouiouiRecommandé — multi-layers, styles, performant
.fgbFlatGeobufouiouiUltra-rapide pour gros volumes, indexé spatialement
.parquetGeoParquetouiouiOptimal pour données tabulaires larges, natif DuckDB
.geojsonGeoJSONouiouiStandard web, interopérable. CDC v1.6.1 : engine duckdb_diff détecte INSERT/DELETE par mtime + DuckDB snapshot diff (UPDATE non détectable, voir notes ci-dessous).
.fgbFlatGeobufouiouiUltra-rapide, indexé spatialement. CDC v1.6.1 : engine duckdb_diff (zero-code-change vs GeoJSON, single-file mtime).
.geojsonlGeoJSON LinesouiouiStreaming, gros volumes

Formats courants

ExtensionFormatLectureÉcritureNotes
.shpESRI ShapefileouiouiHéritage — préférer GPKG. CDC v1.6.1 : engine duckdb_diff watche les 5 companions (.shp/.dbf/.shx/.prj/.cpg) en max(mtime) — un edit attributaire-seulement (qui ne touche que .dbf) est détecté.
.csvCSV (lat/lon ou WKT)ouiouiDétection auto colonnes géométrie. CDC v1.6.2 : engine duckdb_diff zero-code-change (à écrire avec GEOMETRY=AS_WKT côté pyogrio pour préserver la géométrie).
.dxfAutoCAD DXFouiouiCAD
.kmlKML / KMZouioui (KML)Google Earth. CDC v1.6.2 : engine duckdb_diff zero-code-change (single-file mtime).
.gmlGMLouiouiOGC standard
.gpxGPXouinonGPS tracks

Formats bases de données

FormatLectureÉcritureNotes
PostGISouiouiVia GISPULSE_DSN (Pro)
SpatiaLite (.sqlite, .db)ouiouiEngine spatialite v1.6.1 — DML triggers AFTER INSERT/UPDATE/DELETE comme GPKG, write-back via pyogrio (SQLite + SPATIALITE=YES). Auto-détection : .sqlite/.db route automatiquement vers cet engine ; un .gpkg reste route GPKG.
GeoDatabase ESRI (.gdb)ouinonRead-only
OGC WFSouinonVia OGCLayerLoader (lazy loading)
OGC API FeaturesouinonStandard OGC moderne

CDC file-blob (v1.6.1)

L'engine duckdb_diff apporte la détection DML aux formats sans triggers natifs. Activé automatiquement pour .geojson (et progressivement .fgb, .shp, .kml, .csv, .tab, .dxf) — auto-routing depuis l'URI dans triggers.yaml.

Mécanisme : mtime watch + DuckDB ST_Read snapshot diff. Au premier poll chaque feature emerge en INSERT. À chaque édition (QGIS, vim, script tiers), le moteur compare le hash (md5(WKB || properties)) de chaque ligne contre le snapshot persistant en sidecar .gispulse-snapshot.duckdb à côté du fichier.

Multi-file formats : Shapefile (.shp) ne touche pas toujours .shp lors d'un edit (un changement attributaire ne touche que .dbf). Le détecteur watche donc max(mtime) sur les 5 companions .shp/.dbf/.shx/.prj/.cpg pour ne pas manquer ce cas. Idem MapInfo TAB (.tab + .dat + .map + .id + .ind). Single-file formats (GeoJSON/FGB/KML/CSV) restent en single-file mtime.

MapInfo TAB read : la build DuckDB GDAL bundlée n'inclut pas le driver MapInfo. Le détecteur route donc .tab via un fallback pyogrio (geopandas.read_file) — même contrat de hash que la fast path DuckDB, donc identité d'événements préservée si une future build DuckDB ramène le driver.

Limitations connues v1.6.1 :

  • UPDATE est indétectable (pas de PK stable dans le format) — un edit produit DELETE (vieux hash) + INSERT (nouveau hash). Déclarer when: [INSERT, DELETE] dans le trigger pour réagir aux deux côtés.
  • Polling uniquement (pas d'inotify) — l'intervalle est fixé par le watcher loop.
  • Single-layer par fichier (multi-layers = pipeline GPKG).
  • Pas d'exécution SQL contre le fichier (execute_sql lève NotImplementedError) — pour ad-hoc SQL utilisez l'engine duckdb standalone via gispulse run.

Lecture par lots (chunked)

Pour les fichiers volumineux, read_vector_chunked() permet une lecture par lots de 50 000 features, évitant de charger tout en mémoire.

Formats raster (avec gispulse[raster])

ExtensionFormatLectureÉcriture
.tif, .tiffGeoTIFFouioui
.tif (COG)Cloud-Optimized GeoTIFFouioui
.jp2JPEG2000ouinon
.ascASCII Gridouinon
.vrtGDAL VRTouinon
.imgERDAS Imagineouinon
.ncNetCDFouinon
.hdf, .h5HDF5ouinon
.ecwECWouinon
.sidMrSIDouinon
.pngPNG (géoréférencé)ouinon

Raster

Les formats raster nécessitent pip install "gispulse[raster]" (dépendance rasterio).

Détection automatique

GISPulse détecte le format à partir de l'extension :

bash
# Format détecté automatiquement
gispulse run input.fgb --rules rules.json -o output.gpkg
gispulse run input.geojson --rules rules.json -o output.fgb
gispulse run input.shp --rules rules.json -o output.parquet

Si le fichier n'a pas d'extension reconnue, forcer avec --layer et --crs.

Conseils de format

Pour de gros volumes (> 100 000 features)

  1. FlatGeobuf (.fgb) — lecture/écriture la plus rapide, indexé spatialement
  2. GeoParquet (.parquet) — excellent pour les dizaines de colonnes attributaires, natif DuckDB
  3. GPKG — polyvalent, supporte les styles

Pour l'interopérabilité GIS desktop

  • GeoPackage (.gpkg) — supporte les styles QGIS (QML) et SLD, multi-layers
  • GISPulse copie automatiquement les styles lors d'un pipeline --all-layers

Pour le web / API

  • GeoJSON — standard universel, lisible humainement
  • FlatGeobuf — streaming performant pour les grandes datasets côté client
  • MVT — tuiles vectorielles via l'endpoint /ogc/collections/{id}/tiles/

Pour la data spatiale "moderne"

  • GeoParquet — compatible DuckDB, Pandas, Arrow, cloud-native
  • COG — Cloud-Optimized GeoTIFF pour le raster

Multi-layers (GPKG)

GeoPackage supporte plusieurs layers dans un seul fichier :

bash
# Traiter une layer spécifique
gispulse run projet.gpkg --rules rules.json -o output.gpkg --layer batiments

# Traiter toutes les layers (styles copiés)
gispulse run projet.gpkg --rules rules.json -o output.gpkg --all-layers
bash
# Inspecter les layers d'un GPKG
gispulse layers projet.gpkg

3 layer(s):
  - parcelles
  - batiments
  - routes

Published under AGPL-3.0 license.