Live Online Convertershapefile → geojson

Shapefile to GeoJSON Converter

Turns the Shapefiles in a ZIP into GeoJSON files with GDAL's ogr2ogr.

Upload a ZIP with one or more Shapefiles. One Shapefile gives one .geojson file; several give a ZIP with one .geojson per layer. The worker does not reproject: coordinates stay in the Shapefile's coordinate system, which GDAL records in the GeoJSON's crs member.

Drag a file here to convert, or select file

Accepted: .zip · max. 50 MB

Includes: .shp, .shx, .dbf
Direct upload to the GDAL worker (Fly.io, Frankfurt)Files are deleted after the conversion

What the converter does

  • The ZIP may hold several Shapefiles, also in subfolders; each becomes a layer. macOS files are ignored, the text encoding is detected (.cpg, DBF header, otherwise UTF-8 or Windows-1252) and a missing .shx is rebuilt. The report lists what was found.
  • One Shapefile gives one .geojson file; several Shapefiles give a ZIP with one .geojson per layer.
  • The GeoJSON is always UTF-8, also when the Shapefile was in Windows-1252.
  • Nothing is reprojected. For EPSG:4326 GDAL writes "crs": urn:ogc:def:crs:OGC:1.3:CRS84; for other systems, e.g. EPSG:25832, it writes "crs": urn:ogc:def:crs:EPSG::25832 and keeps the metre values.
  • Dates are written as text in the form 2024-05-01.
  • The report below the upload shows layers and features read and written, skipped layers with the reason, GDAL's warnings and the exact commands.

GDAL command the worker runs

sh — gdal
$ogr2ogr -f GeoJSON converted.geojson input.shp input

With several Shapefiles in the ZIP the worker runs one command per layer, e.g. ogr2ogr -f GeoJSON layers/roads.geojson shapefiles roads. The worker does not reproject; for longitude/latitude output from projected data run the command locally with -t_srs EPSG:4326.

Tested with

Test fileResult
ZIP with 4 points in EPSG:43261 GeoJSON, 4 of 4 features, crs CRS84, dates as 2024-05-01
ZIP with 1 polygon in EPSG:25832Coordinates stay in metres (first vertex 356670.88, 5540547.37); crs EPSG::25832
Same polygon, locally with -t_srs EPSG:4326First vertex 7.0, 50.0; crs CRS84
ZIP with two ShapefilesZIP with flaechen.geojson and punkte.geojson, 5 of 5 features
Umlauts in Windows-1252 without .cpgValid UTF-8 GeoJSON with Köln and Görlitz spelled correctly

Tested on 24 Sep 2026 with the worker code of this site and GDAL 3.10.3 (conda-forge build on Windows). The worker image runs the Debian build of the same GDAL version; the live worker was not part of these tests.

Limits

  • Upload limit: 50 MB per file.
  • RFC 7946 allows only WGS84 longitude/latitude. A GeoJSON with EPSG:25832 coordinates is therefore not RFC 7946 compliant; programs that follow RFC 7946 read the metre values as degrees.
  • The worker never reprojects; use ogr2ogr locally with -t_srs EPSG:4326 if you need longitude/latitude.
  • Each GDAL step may run for up to 240 seconds; a longer run is stopped with an error message.

Frequently Asked Questions

Why are my coordinates not in degrees?

The worker keeps the Shapefile's coordinate system. A Shapefile in EPSG:25832 gives a GeoJSON with metre coordinates and the crs member urn:ogc:def:crs:EPSG::25832. Run ogr2ogr -t_srs EPSG:4326 locally to get degrees.

Why do I get a ZIP instead of one GeoJSON?

A GeoJSON file holds one layer. If your ZIP contains several Shapefiles, you get one .geojson per Shapefile, packed into a ZIP.

What happens to my file?

Your browser uploads it directly to the GDAL worker on Fly.io (region Frankfurt). The worker converts it in a temporary folder and deletes the folder after sending the result, or immediately if the conversion fails. Files are not stored permanently.

Related conversions