Search code examples
pythonogrgeopandas

Use GeoDataFrame as a osgeo.ogr DataSource


I have read shapefile into a GeoDataFrame and did some modification to it:

import geopandas as gpd

# Read shapefile into geodataframe
geodf = gpd.read_file("shapefile.shp")

# Do some "pandas-like" modifications to shapefile
geodf = modify_geodf(geodf)

However, I would also like to apply some functionality of osgeo.ogr module on it:

from osgeo import ogr

# Read shapefile into ogr DataSource
ds=ogr.Open("shapefile.shp")

# Do some "gdal/ogr-like" modifications to shapefile
ds = modify_ds(ds)

QUESTION: Is there any way to use or convert an already in-memory shapefile, currently in a form of a GeoDataFrame, as an osgeo.ogr.DataSource directly?

The way I do it so far is to save GeoDataFrame to file with to_file() and then osgeo.ogr.Open() it again, but this seems kind of redundant to me.


Solution

  • Yes, it is possible. You can pass the GeoDataFrame into ogr.Open in GeoJson format which is supported OGR vector format. Hence, you don't need to save temporary file into a disk:

    import geopandas as gpd
    from osgeo import ogr
    
    # Read file into GeoDataFrame
    data = gpd.read_file("my_shapefile.shp")
    
    # Pass the GeoDataFrame into ogr as GeoJson
    shp = ogr.Open(data.to_json())
    
    # Do your stuff with ogr ...
    

    Hopefully this helps!