-1

I know Esri shapefile can be converted into GeoJSON using Python and GDAL/OGR. Following command works on the terminal.

ogr2ogr -f GeoJSON -t_srs crs:84 outfile.geojson inputfile.shp

I want to do the conversion in a python script so that I can convert multiple files inside a loop. And combine it in my pipeline script.

Is there any way to do this conversion in python script? Can this terminal command be used in a python script?

1 Answers1

2

This can be used using GDAL. First, install GDAL for your OS. You can convert files from the terminal by using following command:

#ogr2ogr -f GeoJSON -t_srs crs:84 [output_filename].geojson [input_filename].shp

If you want to use python script then by calling subprocess, this can be achieved. Python script example is given below:

#Convert Esri .shp file into .geoJson file

import subprocess

input_shp = 'inputfile.shp'
output_geoJson = 'outputfile.geojson'
cmd = "ogr2ogr -f GeoJSON -t_srs crs:84 "  + output_geoJson +" " + input_shp
print(cmd)
subprocess.call(cmd , shell=True)    
  • 4
    No need for subprocess. You can use gdal.VectorTranslate directly. – user2856 Oct 02 '19 at 22:24
  • 3
    The help for subprocess warns against using call with shell=True, use Popen like pcs=subprocess.Popen(['ogr2ogr','-f','GeoJSON','-t_srs','crs:84',output_geoJson,input_shp]) then pcs.wait() to wait until the process finishes (optional). Beware of spaces in path names, if there is even a slim possibility of a space it's safer to use '"{}"'.format(output_geoJson) as an example to quote the element for the command processor - paths that don't have spaces but are still quoted are not a problem for the operating system. – Michael Stimson Oct 02 '19 at 23:47
  • @user2856 Thanks, gdal.VectorTranslate will be cleaner. – Hariom Ahlawat Oct 03 '19 at 17:54
  • @MichaelStimson Thanks, I will try Popen. I wasn't aware of it. Thanks for the tips. – Hariom Ahlawat Oct 03 '19 at 17:55