Converting GeoJSON to Shapefile in Python

GeoJSON (.geojson) and shapefiles (.shp) are file formats for storing geographic data structures. This guide will go through three methods for converting a GeoJSON file into a shapefile.

Method 1: Using the ogr2ogr shell command

This command comes with the GDAL package, which can be installed from https://gdal.org/download.html#current-release (check the steps that match your platform if you need to install it). I found it preinstalled on Windows.

For Debian-based Linux users, you can install GDAL with the following command.

Once GDAL is installed, you can use the ogr2ogr command directly from the command line to convert GeoJSON to SHP.

For example, the following command converts the example.geojson file in the current directory into shapefile.

You can use the subprocess or os modules to run the ogr2ogr command within a Python script.

In particular, we will use os.system() and subprocess.call() functions to run the ogr2ogr command as a shell process (just like running the command above in the terminal). Here are the examples.

And for the os.system() function, we will work as follows.

After going through one of the above three options (using the command line, os, or subprocess), let’s check the contents of dest_shp (the output folder).

The output contains four files. All these files make up a complete shapefile.

Note: A valid shapefile contains at least three files. We will discuss what these files are for in the last section.

Method 2: Using the geopandas library

First, install the package using pip by running this command (https://geopandas.org/en/stable/docs/user_guide/io.html).

This module calls GDAL and Fiona libraries in the background to provide a simple way of converting GeoJSON to SHP. With this package, you conduct conversion in two simple steps: read the GeoJSON and write the data as SHP. Here is an example,

Once again, let’s view the output files in the file_shp folder.

Fiona package (https://pypi.org/project/Fiona/) also natively supports the conversion of GeoJSON into Shapefile. You can find an example here: https://gis.stackexchange.com/questions/404777/creating-shapefile-from-json-file-in-python.

Method 3: Using osgeo.gdal() function

The GDAL package discussed in the first method provides the osgeo module that can easily convert GeoJSON into SHP.

Files on a Shapefile

A valid shapefile has at least three files described below:

  • .shp – the file that holds the actual geometry for all the features,
  • .shx – the file containing the geometry indices,
  • .dbf – the file that stores feature attributes in a dBASE table.

Other files that can be contained within the shapefile include the following:

  • .prj – contains information on projection format, including the coordinate system and projection information.
  • .sbn and .sbx – any of these files hold the spatial indices of the features.
  • .shp.xml – this file contains the geospatial metadata in XML format.
  • .cpg – a file used to specify the code page for identifying the character encoding to be used.