# pyogrio - Vectorized spatial vector file format I/O using GDAL/OGR

Pyogrio provides a GeoPandas-oriented API to OGR vector data sources, such as ESRI Shapefile, GeoPackage, and GeoJSON. Vector data sources have geometries, such as points, lines, or polygons, and associated records with potentially many columns worth of data.

Pyogrio uses a vectorized approach for reading and writing GeoDataFrames to and from OGR vector data sources in order to give you faster interoperability. It uses pre-compiled bindings for GDAL/OGR so that the performance is primarily limited by the underlying I/O speed of data source drivers in GDAL/OGR rather than multiple steps of converting to and from Python data types within Python.

We have seen >5-10x speedups reading files and >5-20x speedups writing files compared to using non-vectorized approaches (Fiona and current I/O support in GeoPandas).

You can read these data sources into `GeoDataFrames`, read just the non-geometry columns into Pandas `DataFrames`, or even read non-spatial data sources that exist alongside vector data sources, such as tables in a ESRI File Geodatabase, or antiquated DBF files.

Pyogrio also enables you to write `GeoDataFrames` to at least a few different OGR vector data source formats.

Warning

Pyogrio is still at an early version and the API is subject to substantial change.

Contents

- About
  - How it works
  - Comparison to Fiona
- Concepts and Terminology
  - GDAL / OGR
  - OGR vector data source
  - OGR vector data layer
  - OGR vector driver
- Supported vector formats
  - Full read and write support
  - Read support
  - Support for other formats
- Installation
  - Requirements
  - Installation
  - Development
  - GDAL and PROJ data files
- Introduction to Pyogrio
  - Display GDAL version
  - List available drivers
  - List available layers
  - Read basic information about a data layer
  - Read a data layer into a GeoPandas GeoDataFrame
  - Read a subset of columns
  - Read a subset of features
  - Filter records by attribute value
  - Filter records by spatial extent
  - Filter records by a geometry
  - Execute a sql query
  - Force geometries to be read as 2D geometries
  - Read without geometry into a Pandas DataFrame
  - Read feature bounds
  - Write a GeoPandas GeoDataFrame
  - Appending to an existing data source
  - Reading from compressed files / archives
  - Reading from remote filesystems
  - Reading and writing DateTimes
  - Dataset and layer creation options
  - Reading from and writing to in-memory datasets
  - Configuration options
- API reference
  - Core
  - GeoPandas integration
  - Arrow integration
- Error handling
- Limitations and Known Issues
  - Support for null values
  - No support for measured geometries
  - No support for curvilinear, triangle, TIN, and surface geometries
  - Character encoding
  - No validation of geometry or field types
  - Support for OpenStreetMap (OSM) data
  - Incorrect results when using a spatial filter and Arrow interface