Supported file formats¶
The library supports the following file formats. Please see the project issues for upcoming formats and feature requests.
Supported formats:
- CSV (comma-separated values) (.csv, .txt)
- Vector data (.shp, .shx, .dbf, .prj, .geojson, .json, .gpkg, .gdb, .gpx, .kml, .kmz, .gml, .fgb)
- Raster data (.tif, .tiff, .geotiff, .nc, .netcdf, .asc, .wld, .jgw, .pgw, .pngw, .tfw, .tifw, .bpw, .gfw)
- Point cloud data (.las, .laz)
Supported data repositories:
- Wikidata (wikidata.org)
- Dryad (datadryad.org)
- 4TU.ResearchData (data.4tu.nl)
- Figshare (figshare.com)
- Zenodo (zenodo.org)
- InvenioRDM (inveniosoftware.org/products/rdm)
- Pangaea (pangaea.de)
- OSF (osf.io)
- Dataverse (dataverse.org)
- GFZ (dataservices.gfz-potsdam.de)
- RADAR (radar-service.eu)
- Arctic Data Center (arcticdata.io)
- DataONE (dataone.org)
- GBIF (gbif.org)
- Pensoft (pensoft.net)
- BGR (geoportal.bgr.de)
- BAW (datenrepository.baw.de)
- MDI-DE (mdi-de.org)
- GDI-DE (geoportal.de)
- Opara (opara.zih.tu-dresden.de)
- Senckenberg (dataportal.senckenberg.de)
- CKAN (ckan.org)
- Mendeley Data (data.mendeley.com)
- DEIMS-SDR (deims.org)
- NFDI4Earth (onestop4all.nfdi4earth.de)
- HALO DB (halo-db.pa.op.dlr.de)
- SEANOE (seanoe.org)
- GeoScienceWorld (pubs.geoscienceworld.org)
- UKCEH (catalogue.ceh.ac.uk)
- STAC (stacspec.org)
- GitHub (github.com)
- GitLab (gitlab.com)
- Forgejo (codeberg.org)
- Software Heritage (softwareheritage.org)
- Remote Raster (COG) (cogeo.org)
Examples¶
GeoJSON¶
The file used in the example can be in the code repository: muenster_ring_zeit.geojson.
geoextent -b -t muenster_ring_zeit.geojson
CSV¶
Different CSV delimiters (;, ,) are automatically detected.
GDAL-based column detection (preferred): geoextent first tries to open CSV files using the GDAL CSV driver with open options for automatic coordinate column detection. The following column names are recognised:
Longitude/X:
Longitude,Long,Lon,Lng,X,Easting,CoordXLatitude/Y:
Latitude,Lat,Y,Northing,CoordYGeometry (WKT/WKB):
geometry,geom,the_geom,wkt,WKT,wkb,WKB,coordinates,coords
CSVT sidecar files: If a .csvt file is present alongside the CSV, GDAL uses it to determine column types. Supported geometric type declarations include CoordX, CoordY, Point(X), Point(Y), and WKT. See the GDAL CSV driver documentation for details.
PRJ sidecar files: A .prj file alongside the CSV provides CRS information in OGC WKT format. When absent, WGS84 (EPSG:4326) is assumed.
GeoCSV support: geoextent recognises two GeoCSV dialects:
giswiki.ch/OST GeoCSV: Semicolon-delimited CSV with
CoordX/CoordYcoordinate columns, optional.csvtand.prjsidecar files.EarthScope GeoCSV: Uses
#-prefixed metadata header lines (e.g.# dataset: GeoCSV 2.0,# delimiter: ,). These comment lines are automatically stripped before parsing.
WKT geometry columns: CSV files with a column containing Well-Known Text geometry strings (e.g. POINT, POLYGON, MULTIPOLYGON) are supported via both GDAL auto-detection and manual WKT parsing.
Regex fallback: If GDAL cannot detect coordinate columns, geoextent falls back to Regular expressions-based column name matching:
Latitude -
(.)*latitude(.)*-^lat-lat$-^y-y$Longitude -
(.)*longitude"-(.)*long(.)-^lon-lon$-(.)*lng(.)*-^x-x$Time -
(.)*timestamp(.)*-(.)*datetime(.)*-(.)*time(.)*-^date-date$
The file used in the example can be obtained from Zenodo Sandbox record 256820.
geoextent -b -t cities_NL.csv
GeoTIFF¶
The file used in the example is available online: wf_100m_klas.tif.
geoextent -b wf_100m_klas.tif
{'format': 'tif',
'geoextent_handler': 'handle_raster',
'bbox': [50.310251974108326,
5.915300756475311,
52.530775532873264,
9.468398712484138],
'crs': '4326',
'file_size_bytes': 637403}
World Files¶
World files provide geospatial transformation information for raster images that don’t have embedded georeferencing. GDAL automatically detects and uses world files when they are present alongside the image file with the appropriate naming convention.
Supported world file extensions:
.wld- Generic world file.jgw- JPEG world file.pgw- PNG world file.pngw- PNG world file (alternative).tfw- TIFF world file.tifw- TIFF world file (alternative).bpw- BMP world file.gfw- GIF world file
Important notes:
World files contain only geospatial transformation parameters (position, scale, rotation), not coordinate system information
When a world file is present but no CRS is specified, geoextent assumes WGS84 (EPSG:4326)
For proper CRS support, use a
.prjfile alongside the world file
Example: PNG image with world file
Test data from: Zenodo record 820562
geoextent -b image_with_worldfile.png
The world file (image_with_worldfile.pngw or image_with_worldfile.pgw) must be in the same directory as the image.
References:
Esri File Geodatabase¶
Esri File Geodatabases (.gdb) are directory-based containers that can hold multiple feature classes, tables, and raster datasets.
geoextent supports reading File Geodatabases via GDAL’s OpenFileGDB driver.
Important notes:
A
.gdbis a directory, not a single file, but geoextent treats it as a single datasetAll layers in the geodatabase are processed and their extents merged
Only the OpenFileGDB driver (read-only, included with GDAL) is needed; the proprietary FileGDB SDK is not required
geoextent -b my_data.gdb
Shapefile¶
The file used in the example can be found at Geofabrik: shapefiles_toulouse.zip.
geoextent -b gis_osm_buildings_a_07_1.shp
Archive: shapefiles_toulouse.zip
extracting: gis_osm_adminareas_a_07_1.cpg
inflating: gis_osm_adminareas_a_07_1.dbf
inflating: gis_osm_adminareas_a_07_1.prj
inflating: gis_osm_adminareas_a_07_1.shp
inflating: gis_osm_adminareas_a_07_1.shx
extracting: gis_osm_barriers_07_1.cpg
inflating: gis_osm_barriers_07_1.dbf
inflating: gis_osm_barriers_07_1.prj
inflating: gis_osm_barriers_07_1.shp
inflating: gis_osm_barriers_07_1.shx
extracting: gis_osm_boundaries_07_1.cpg
inflating: gis_osm_boundaries_07_1.dbf
inflating: gis_osm_boundaries_07_1.prj
inflating: gis_osm_boundaries_07_1.shp
inflating: gis_osm_boundaries_07_1.shx
extracting: gis_osm_buildings_a_07_1.cpg
inflating: gis_osm_buildings_a_07_1.dbf
inflating: gis_osm_buildings_a_07_1.prj
inflating: gis_osm_buildings_a_07_1.shp
inflating: gis_osm_buildings_a_07_1.shx
extracting: gis_osm_coastline_07_1.cpg
inflating: gis_osm_coastline_07_1.dbf
inflating: gis_osm_coastline_07_1.prj
inflating: gis_osm_coastline_07_1.shp
inflating: gis_osm_coastline_07_1.shx
extracting: gis_osm_landuse_a_07_1.cpg
inflating: gis_osm_landuse_a_07_1.dbf
inflating: gis_osm_landuse_a_07_1.prj
inflating: gis_osm_landuse_a_07_1.shp
inflating: gis_osm_landuse_a_07_1.shx
extracting: gis_osm_natural_07_1.cpg
inflating: gis_osm_natural_07_1.dbf
inflating: gis_osm_natural_07_1.prj
inflating: gis_osm_natural_07_1.shp
inflating: gis_osm_natural_07_1.shx
extracting: gis_osm_natural_a_07_1.cpg
inflating: gis_osm_natural_a_07_1.dbf
inflating: gis_osm_natural_a_07_1.prj
inflating: gis_osm_natural_a_07_1.shp
inflating: gis_osm_natural_a_07_1.shx
extracting: gis_osm_nonop_07_1.cpg
inflating: gis_osm_nonop_07_1.dbf
inflating: gis_osm_nonop_07_1.prj
inflating: gis_osm_nonop_07_1.shp
inflating: gis_osm_nonop_07_1.shx
extracting: gis_osm_places_07_1.cpg
inflating: gis_osm_places_07_1.dbf
inflating: gis_osm_places_07_1.prj
inflating: gis_osm_places_07_1.shp
inflating: gis_osm_places_07_1.shx
extracting: gis_osm_places_a_07_1.cpg
inflating: gis_osm_places_a_07_1.dbf
inflating: gis_osm_places_a_07_1.prj
inflating: gis_osm_places_a_07_1.shp
inflating: gis_osm_places_a_07_1.shx
extracting: gis_osm_pofw_07_1.cpg
inflating: gis_osm_pofw_07_1.dbf
inflating: gis_osm_pofw_07_1.prj
inflating: gis_osm_pofw_07_1.shp
inflating: gis_osm_pofw_07_1.shx
extracting: gis_osm_pofw_a_07_1.cpg
inflating: gis_osm_pofw_a_07_1.dbf
inflating: gis_osm_pofw_a_07_1.prj
inflating: gis_osm_pofw_a_07_1.shp
inflating: gis_osm_pofw_a_07_1.shx
extracting: gis_osm_pois_07_1.cpg
inflating: gis_osm_pois_07_1.dbf
inflating: gis_osm_pois_07_1.prj
inflating: gis_osm_pois_07_1.shp
inflating: gis_osm_pois_07_1.shx
extracting: gis_osm_pois_a_07_1.cpg
inflating: gis_osm_pois_a_07_1.dbf
inflating: gis_osm_pois_a_07_1.prj
inflating: gis_osm_pois_a_07_1.shp
inflating: gis_osm_pois_a_07_1.shx
extracting: gis_osm_power_07_1.cpg
inflating: gis_osm_power_07_1.dbf
inflating: gis_osm_power_07_1.prj
inflating: gis_osm_power_07_1.shp
inflating: gis_osm_power_07_1.shx
extracting: gis_osm_power_a_07_1.cpg
inflating: gis_osm_power_a_07_1.dbf
inflating: gis_osm_power_a_07_1.prj
inflating: gis_osm_power_a_07_1.shp
inflating: gis_osm_power_a_07_1.shx
extracting: gis_osm_powerlines_07_1.cpg
inflating: gis_osm_powerlines_07_1.dbf
inflating: gis_osm_powerlines_07_1.prj
inflating: gis_osm_powerlines_07_1.shp
inflating: gis_osm_powerlines_07_1.shx
extracting: gis_osm_railways_07_1.cpg
inflating: gis_osm_railways_07_1.dbf
inflating: gis_osm_railways_07_1.prj
inflating: gis_osm_railways_07_1.shp
inflating: gis_osm_railways_07_1.shx
extracting: gis_osm_roads_07_1.cpg
inflating: gis_osm_roads_07_1.dbf
inflating: gis_osm_roads_07_1.prj
inflating: gis_osm_roads_07_1.shp
inflating: gis_osm_roads_07_1.shx
extracting: gis_osm_routes_07_1.cpg
inflating: gis_osm_routes_07_1.dbf
inflating: gis_osm_routes_07_1.prj
inflating: gis_osm_routes_07_1.shp
inflating: gis_osm_routes_07_1.shx
extracting: gis_osm_runways_07_1.cpg
inflating: gis_osm_runways_07_1.dbf
inflating: gis_osm_runways_07_1.prj
inflating: gis_osm_runways_07_1.shp
inflating: gis_osm_runways_07_1.shx
extracting: gis_osm_runways_a_07_1.cpg
inflating: gis_osm_runways_a_07_1.dbf
inflating: gis_osm_runways_a_07_1.prj
inflating: gis_osm_runways_a_07_1.shp
inflating: gis_osm_runways_a_07_1.shx
extracting: gis_osm_traffic_07_1.cpg
inflating: gis_osm_traffic_07_1.dbf
inflating: gis_osm_traffic_07_1.prj
inflating: gis_osm_traffic_07_1.shp
inflating: gis_osm_traffic_07_1.shx
extracting: gis_osm_traffic_a_07_1.cpg
inflating: gis_osm_traffic_a_07_1.dbf
inflating: gis_osm_traffic_a_07_1.prj
inflating: gis_osm_traffic_a_07_1.shp
inflating: gis_osm_traffic_a_07_1.shx
extracting: gis_osm_transport_07_1.cpg
inflating: gis_osm_transport_07_1.dbf
inflating: gis_osm_transport_07_1.prj
inflating: gis_osm_transport_07_1.shp
inflating: gis_osm_transport_07_1.shx
extracting: gis_osm_transport_a_07_1.cpg
inflating: gis_osm_transport_a_07_1.dbf
inflating: gis_osm_transport_a_07_1.prj
inflating: gis_osm_transport_a_07_1.shp
inflating: gis_osm_transport_a_07_1.shx
extracting: gis_osm_water_a_07_1.cpg
inflating: gis_osm_water_a_07_1.dbf
inflating: gis_osm_water_a_07_1.prj
inflating: gis_osm_water_a_07_1.shp
inflating: gis_osm_water_a_07_1.shx
extracting: gis_osm_waterways_07_1.cpg
inflating: gis_osm_waterways_07_1.dbf
inflating: gis_osm_waterways_07_1.prj
inflating: gis_osm_waterways_07_1.shp
inflating: gis_osm_waterways_07_1.shx
{'format': 'shp',
'geoextent_handler': 'handle_vector',
'bbox': [43.4682, 1.24951, 43.74498, 1.695996],
'crs': '4326',
'file_size_bytes': 85810944}
GeoPackage¶
The file used in the example is available online: sample1_2.gpkg.
geoextent -b sample1_2.gpkg
{'format': 'gpkg',
'geoextent_handler': 'handle_vector',
'bbox': [18.921783447265625,
-178.2176055908203,
71.40624237060547,
-66.96926879882812],
'crs': '4326',
'file_size_bytes': 2322432}
GPS Exchange Format¶
The file used in the example is available online: run.gpx.
geoextent -b run.gpx
{'format': 'gpx',
'geoextent_handler': 'handle_vector',
'bbox': [38.920014034956694,
-77.02575484290719,
38.92795957624912,
-77.01215906068683],
'crs': '4326',
'file_size_bytes': 66711}
Geography Markup Language¶
The file used in the example is available online: clc_1000_PT.gml.
geoextent -b clc_1000_PT.gml
Keyhole Markup Language¶
The file used in the example is available online: KML_Samples.kml.
geoextent -b KML_Samples.kml
{'format': 'kml',
'geoextent_handler': 'handle_vector',
'bbox': [36.07954952145647,
-122.0860162273783,
38.87291016281703,
15.35832653742206],
'crs': '4326',
'file_size_bytes': 35920}