Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 733
Marjan Moderc Avatar asked Dec 18 '22 09:12

Marjan Moderc


1 Answers

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!

like image 93
htenkanen Avatar answered Jan 02 '23 22:01

htenkanen