Inventory of the collection
Lists layers, formats, CRS, encoding, count and extent with ogrinfo, gdalinfo -json and pyogrio, without touching the files.
Octo for GDAL, GeoPandas, Shapely and rasterio
GDAL 3.13 (3.13.3, from Aug 18, 2026) is the layer that QGIS, map servers and geospatial Python use to read and write. Octo converts entire collections to GeoPackage and GeoParquet, generates COGs with overviews, audits geometry and CRS and calculates indices per field plot, all in batch and with a log. Declaring a CRS, accepting a geometry fix and signing the map stay with the technical lead.
Six possible deliverables, taken from the survey. All of them start by reading the collection without changing the original, and all go through the technical lead before becoming official data.
Lists layers, formats, CRS, encoding, count and extent with ogrinfo, gdalinfo -json and pyogrio, without touching the files.
Shapefile, FileGDB and CSV to GeoPackage and GeoParquet with ogr2ogr, explicit encoding, PROMOTE_TO_MULTI and a log per file.
Flags layers with no CRS, invalid, empty and duplicate geometries and mixed types with vectorized Shapely 2, across millions of features.
Deliverable: table by layer to decide what to fixGenerates COGs with chosen blocks, compression and overviews, and checks the generated file: structure, CRS, band statistics against the original.
Deliverable: checked COG + report of the options usedChooses the transformation between SIRGAS 2000 and older datums with pyproj and shows the expected shift before applying it.
Deliverable: reprojected layer + note on the transformation usedClips the scene by field plots with rasterio, applies a cloud mask, calculates NDVI and summarizes by polygon with the fraction of valid pixels.
Deliverable: index COG + CSV per plot for the agronomistThe same Octo cycle, applied to conversion and processing. Each arm has a narrow role; people decide the datum, the fixes and the use of the data.
GDAL version, available drivers, folders, formats, layers, sizes and what each in-house system reads.
Each layer's datum, encoding, field types, invalid geometries and what is lost in conversion.
Layers with personal data (LGPD), cloud storage credentials kept out of scripts and the license of each source.
GeoPackage for delivery and editing, GeoParquet for analysis, COG for remote raster; compression and blocks.
Conversion, audit and index scripts with a dry-run mode, a log per file and the library version recorded.
Count before and after, extent, area, COG structure, band statistics. Exit code zero is not a check.
Replacing a collection, publishing a COG or a shared GeoParquet happens with the lead's approval.
Where each file came from, with which version and options it was converted, what was fixed and who approved.
Octo works with read access and as support. It does not declare a CRS, replace the original or publish without approval, and it does not sign maps or reports.
The criteria Octo uses to choose, with the documentation for the installed version.
| Task | Path | Note |
|---|---|---|
| Inventory a collection | ogrinfo -so -al, gdalinfo -json | Read-only |
| Shapefile to GeoPackage | ogr2ogr -f GPKG -nlt PROMOTE_TO_MULTI | Explicit source encoding |
| Vector to GeoParquet | ogr2ogr -f Parquet or to_parquet | The driver depends on Arrow; check the specification version |
| Reproject and validate in one pass | gdal vector pipeline | Provisional command since 3.11 |
| Raster to COG | gdal raster convert --of COG | Lossy compression is a human decision |
| Clip raster by polygon | gdalwarp -cutline or rasterio.mask | Same CRS first |
| Audit geometry | Shapely 2 (is_valid, is_empty) | Flag, don't fix without sign-off |
| Batch spatial join | geopandas.sjoin | Projected CRS for measuring |
| Transform between datums | pyproj.Transformer | Check the chosen operation |
| Check a COG | rasterio: blocks, overviews, statistics | By the file, not by the command |
Three steps. Each one only makes sense after the previous one has shown results on your team.
A proposal, not a promise
Octo shows what exists, in which format and datum, without changing anything.
GeoPackage, GeoParquet and COG generated by script, each file checked against the source.
When new data arrives, the same batch runs, compares with the previous version and records what changed.
Each point below has a source published by the project or by the organization responsible for the standard. The sources are in the next section.
4
points with a published source, each with its reference shown alongside.
gdal commandBLOCKSIZE 512 and LZW by default; GeoParquet 1.0 since 3.8 and 1.1 since 3.9.Source: COG and Parquet driver pagesOcto prepares everything, but it does not sign. The document of record stays with whoever is accountable for it.
Surveys, calculates, organizes and produces the documents: spreadsheets, reports, maps and drafts.
Deliverable: material ready to checkThe licensed professional checks what Octo delivered before signing. If something doesn't add up, it goes back to Octo with the correction.
Step: review by the signerOcto does not sign. Projects, technical reports, ART/RRT, accountability reports and any official document are still signed by the company's or agency's licensed professional: here, the technical lead for the map or the survey.
Signature: technical lead for the map or surveyGDAL documentation, GeoPandas changelog, the Python package index and project repositories, consulted on Oct 31, 2026.
The assessment starts with an inventory of the collection, without changing anything: formats, datums, problem geometries and what would be lost in a conversion. You get the list and the decisions only your team makes, and you decide with it in hand.