Marjan Moderc
Marjan Moderc

Reputation: 2859

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.

Upvotes: 6

Views: 2512

Answers (2)

htenkanen
htenkanen

Reputation: 196

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!

Upvotes: 8

Benjamin
Benjamin

Reputation: 11860

No. Only formats supported by OGR can be opened with ogr.Open().

Upvotes: 3

Related Questions