Skip to content

Native driver performance

Native driver timings use Julia 1.12.6, GeoDataFrames 0.4.3, and the fixtures in test/data. Each result is the median of 20 warmed BenchmarkTools samples. Values compare the ArchGDAL median with the native median; values greater than 1.11x make the native backend at least 10% faster.

CSV uses test_wkt.csv; GeoJSON uses test_points.geojson; Shapefile uses test_points.shp; FlatGeobuf uses countries.fgb; GeoParquet uses example.parquet; and GeoArrow uses example-multipolygon_z.arrow. Write measurements first use the same three-point in-memory table for every backend.

BackendOperationNative median (ms)ArchGDAL median (ms)ArchGDAL/native
CSVread0.190.532.85x
GeoJSONread0.260.542.09x
Shapefileread0.671.181.75x
FlatGeobufread11.601.000.09x
GeoParquetread0.7312.0716.55x
GeoArrowread0.440.541.21x
CSVwrite0.100.202.00x
GeoJSONwrite0.110.212.02x
Shapefilewrite0.420.481.14x
GeoParquetwrite0.140.503.49x
GeoArrowwrite0.290.301.03x

Write performance for 10,000 polygons

This workload repeats a GeoInterface.Wrappers.MultiPolygon 10,000 times. The polygon is backed by fully materialized nested coordinate vectors, avoiding backend-specific geometry representations. It measures serialization and output costs at a more representative scale.

BackendOperationNative median (ms)ArchGDAL median (ms)ArchGDAL/native
CSVwrite783.881078.821.38x
GeoJSONwrite882.1010837.5112.29x
Shapefilewrite768.961888.292.46x
GeoParquetwrite337.041187.143.52x
GeoArrowwrite1001.601238.351.24x

Read performance for 10,000 polygons

Each format is written once from the same native GeoInterface wrapper, then read repeatedly from that unchanged file. The write step is outside the timed region. CSV uses a WKT geometry column so its native reader parses the geometries.

BackendOperationNative median (ms)ArchGDAL median (ms)ArchGDAL/native
CSVread143.942432.7916.90x
GeoJSONread384.712971.837.72x
Shapefileread40.59130.613.22x
GeoParquetread26.1198.003.75x
GeoArrowread0.7695.06125.63x