Comparison9 min readJune 19, 2025

GIS File Format Comparison Table 2025

Ten GIS vector formats, seven axes of comparison, one table. The reference to pin next to your desk for the next time someone asks 'which format should we use?'

How to use this comparison

Format choice is a function of who reads the file next. The axes in the table below capture what actually matters in that handoff: size ceilings, CRS handling, attribute fidelity, multi-layer capability, and whether a consumer reads the format natively.

The table

FormatMax sizeMulti-layerCRS supportBrowser-nativeAttribute typesBest forAvoid when
GeoJSONNone (practical ~1 GB)NoWGS 84 only (RFC 7946)Yes (every web library)JSON: string, number, bool, null, array, objectWeb maps, APIs, tooling interchangeMulti-layer datasets, projected CRSs
Shapefile2 GB per .shp / .dbfNoPer-file via .prjNodBase: string, int, float, date — no time, no bool, no nullLegacy GIS exchange, government deliveryNew projects, multi-layer, long field names
GeoPackage140 TB (SQLite cap)YesPer-layer, any EPSGNoSQLite: full SQL types incl. blobs and nullsModern desktop GIS, multi-layer projectsIn-browser delivery, REST API responses
KML / KMZNone (practical ~10s MB)Folders simulateWGS 84 onlyPartial (Google Earth, some libs)Strings + typed ExtendedDataGoogle Earth handoff, consumer mappingHeavy GIS workflows, analytical use
GMLNone (practical GBs)Yes (named feature types)Per-feature, any EPSGNoXSD-typed: full XML type systemGovernment / INSPIRE, schema-bound exchangeAnything you want a human to read
TopoJSONNone (practical 100s MB)Multiple objects per fileWGS 84 onlyYes (D3, topojson-client)JSON-serialisable onlyTopology-sharing web maps, choroplethsDatasets without shared boundaries
WKTNoneNo (one geometry per string)None (implicit / external)Yes (with libraries)None — geometry onlyDatabase queries, geometry-only exchangeAnything with attributes
DXFNone (practical 100s MB)Layers within drawingNone (units only)NoBlock attributes onlyCAD interchange, surveyor / architect handoffAnything requiring CRS or rich attributes
CSVNoneNoNone (lat/lon column convention)Yes (every browser)Strings only (typed downstream)Tabular sensor data, point-cloud listsLines, polygons, multi-geometry data
PostGIS32 TB per tableMultiple tables / schemasPer-column via SRIDNoFull Postgres type systemServer-side analytics, transactional GISFile handoffs (it's a database, not a file)

Notes on the columns

Max size. "None" means there is no inherent spec limit but practical limits exist (memory at read time, browser fetch ceilings, transport timeouts). Shapefile's 2 GB is a hard 32-bit offset cap. GeoPackage's 140 TB is the SQLite ceiling nobody will ever hit in practice.

Multi-layer. Whether one file can carry several feature collections elegantly. GeoPackage is the only widely-deployed format that does this cleanly. GML can via named feature types. KML simulates with folders. Everything else needs ZIP archives or per-feature conventions.

CRS support. GeoJSON and TopoJSON are pinned to WGS 84 by their RFCs; embedding any other CRS makes the file non-conformant. Shapefile carries CRS in a sibling .prj (easy to lose). GeoPackage and GML carry CRS as first-class metadata — the most robust choice.

Browser-native. Does a typical web map library read this directly? GeoJSON yes everywhere. TopoJSON yes with a small companion library. CSV yes with parsing. Shapefile and GeoPackage no without a WASM shim.

Attribute types. Expressivity of the column type system. Shapefile is the constraint case: 10-char names, no nulls, no booleans, dates without time. GeoPackage (SQLite under the hood) is the most flexible.

The decision in five common scenarios

  1. Publishing a public dataset: ship GeoPackage as primary plus GeoJSON as a web-friendly secondary. Skip Shapefile unless legally required.
  2. Building a Leaflet / Mapbox map: GeoJSON if under 5 MB, TopoJSON if topology-shared (adjacent polygons), tiled vector formats for anything larger.
  3. Government agency requires "GIS deliverables": read the procurement spec verbatim. "Shapefile" means Shapefile. "GIS-readable" means GeoPackage.
  4. Handing data to a CAD user: DXF. Coordinate units only — agree on CRS in the cover email.
  5. Storing data for an application: PostGIS. Everything else is a file format, not a data store.

What's not in the table

  • Raster formats (GeoTIFF, COG, NetCDF). Different beast — different comparison.
  • Point clouds (LAS, LAZ, COPC). Different beast again.
  • Tile formats (MBTiles, PMTiles, vector tiles). Distribution formats, not authoring.
  • Cloud-native vectors (FlatGeobuf, GeoParquet). Worth a separate post — they're the present and future of cloud-optimised vector data.

For most working GIS at the vector layer, the 10 above cover every conversation.

Closing rule of thumb

Default to GeoPackage for new authoring, GeoJSON for web delivery, Shapefile only when explicitly required, and PostGIS when you need a database. The other formats serve specific niches; reach for them when the niche fits.

Related Converters

Format References