Shapefile to GeoPackage Converter
Puts every Shapefile from a ZIP into one GeoPackage file, using GDAL's ogr2ogr.
Upload a ZIP with one or more Shapefiles (.shp, .shx, .dbf, ideally .prj and .cpg). The GDAL worker unpacks it, finds every .shp and writes all of them as layers into a single GeoPackage. The coordinate system from each .prj is kept.
Drag a file here to convert, or select file
Accepted: .zip · max. 50 MB
What the converter does
- Every .shp in the ZIP becomes a layer named after its file, including Shapefiles in subfolders. If two files share a name, the second one gets the suffix _2.
- macOS metadata (__MACOSX/ folders and ._ files) is ignored; the report counts it.
- Encoding: GDAL uses the .cpg file or the code page in the DBF header. If neither exists, the worker checks the text: valid UTF-8 is read as UTF-8, anything else as Windows-1252. The report says which one was used.
- A missing .shx is rebuilt by GDAL (SHAPE_RESTORE_SHX=YES). Without .dbf the layer has no attributes, without .prj it has no coordinate system. The report notes each case.
- Nothing is reprojected: the coordinates stay in the coordinate system of the source. Each layer keeps its own coordinate system.
- File and layer names are reduced to ASCII letters, digits, _ . and - (Gebäude_Straße.shp becomes the layer Gebaude_Strae).
- 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
For a ZIP with one Shapefile called input.shp. With several Shapefiles the worker passes the unpacked folder and all layer names in one call, e.g. ogr2ogr -f GPKG converted.gpkg shapefiles roads buildings. If a .shx is missing, --config SHAPE_RESTORE_SHX YES is added. The report shows the exact commands for your file.
Tested with
| Test file | Result |
|---|---|
| ZIP with one point Shapefile: 4 points in EPSG:4326, fields id, name, datum | 1 layer, 4 of 4 features, EPSG:4326; field types Integer, String and Date kept |
| ZIP with two Shapefiles: 4 points (EPSG:4326) and 1 polygon (EPSG:25832) | 1 GeoPackage with 2 layers, 5 of 5 features; each layer keeps its coordinate system |
| ZIP made on macOS (with __MACOSX/ and ._ files) | 4 of 4 features; report: 4 macOS metadata files ignored |
| Umlauts in Windows-1252, no .cpg, no code page in the DBF header | Köln and Görlitz spelled correctly; report: read as Windows-1252 |
| Shapefile without .shx | 4 of 4 features; .shx rebuilt, noted in the report |
| Shapefile without .prj | 4 of 4 features; layer without coordinate system, noted in the report |
| punkte.shp in two different folders of the ZIP | 2 layers: punkte and punkte_2 |
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. Unpacked, the ZIP may hold up to 500 MB.
- Field names that were cut to 10 characters when the Shapefile was made cannot be restored.
- No reprojection. To change the coordinate system, run ogr2ogr locally with -t_srs (see the EPSG guides).
- Files in the ZIP that do not belong to a Shapefile are ignored.
- Each GDAL step may run for up to 240 seconds; a longer run is stopped with an error message.
Frequently Asked Questions
Why do I have to upload a ZIP?
A Shapefile consists of several files (.shp, .shx, .dbf, usually .prj and .cpg). The upload takes one file, so the parts travel together in a ZIP. For Shapefile input the worker accepts only .zip.
Is the coordinate system kept?
Yes. GDAL reads the .prj and writes the same coordinate system to the GeoPackage layer; in the test a layer in EPSG:25832 stayed EPSG:25832. Without .prj the layer has no coordinate system and the report says so.
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.