Format Support¶
Portolan converts data to cloud-native formats (GeoParquet, COG) for efficient cloud storage and querying.
Supported Formats¶
| Input Format | Output Format | Notes |
|---|---|---|
| Shapefile | GeoParquet | Auto-converted |
| GeoJSON | GeoParquet | Auto-converted |
| GeoPackage | GeoParquet | Auto-converted |
| CSV (with geometry) | GeoParquet | Auto-converted |
| TIFF/GeoTIFF | COG | Auto-converted |
| JPEG2000 | COG | Auto-converted |
| GeoParquet | GeoParquet | Already cloud-native |
| COG | COG | Already cloud-native |
| FlatGeobuf | — | Accepted as-is (cloud-native) |
ESRI File Geodatabase Rasters¶
Raster data stored in ESRI File Geodatabases (.gdb) cannot be converted by Portolan. The format was reverse-engineered exclusively for GDAL—no pure Python library can read it.
Workaround: Pre-convert to COG using GDAL before adding to your catalog:
# List rasters in the geodatabase
gdalinfo input.gdb
# Convert to COG
gdal_translate input.gdb/raster_name output.tif -of COG
Then add the resulting COG to your catalog as usual.
Vector GDB data is supported
This limitation applies only to raster data in geodatabases. Vector layers in .gdb files work normally.
Multi-Layer Formats¶
GeoPackage and FileGDB files can contain multiple vector layers. Portolan handles these specially:
| Format | Layer Detection | Notes |
|---|---|---|
| GeoPackage | ✅ geoparquet-io | No external dependencies |
| FileGDB | ✅ geoparquet-io | No external GDAL required |
API Functions¶
list_layers(path)— Returns list of layer names, orNonefor single-layer formatsis_multilayer(path)— ReturnsTrueif file has more than one layerconvert_multilayer_file(source, output_dir)— Converts each layer to a separate GeoParquet file
Output Naming¶
Each layer becomes a separate file: {source_stem}_{layer_name}.parquet
multilayer.gpkg (3 layers)
├── points
├── lines
└── polygons
→ multilayer_points.parquet
→ multilayer_lines.parquet
→ multilayer_polygons.parquet
COG Conversion Settings¶
COG (Cloud-Optimized GeoTIFF) conversion can be configured via config.yaml:
conversion:
cog:
compression: DEFLATE # DEFLATE, LZW, ZSTD, JPEG, WEBP
tile_size: 512 # 256, 512, 1024
predictor: 2 # 1=none, 2=horizontal, 3=floating-point
resampling: nearest # nearest, bilinear, cubic, lanczos, average
quality: 75 # JPEG/WEBP quality (1-100)
See get_cog_settings() and CogSettings for programmatic access.