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
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
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 file | Result |
|---|---|
| ZIP with 4 points in EPSG:4326 | 1 GeoJSON, 4 of 4 features, crs CRS84, dates as 2024-05-01 |
| ZIP with 1 polygon in EPSG:25832 | Coordinates stay in metres (first vertex 356670.88, 5540547.37); crs EPSG::25832 |
| Same polygon, locally with -t_srs EPSG:4326 | First vertex 7.0, 50.0; crs CRS84 |
| ZIP with two Shapefiles | ZIP with flaechen.geojson and punkte.geojson, 5 of 5 features |
| Umlauts in Windows-1252 without .cpg | Valid 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.