# About

## How it works

Internally, Pyogrio uses a numpy-oriented approach in Cython to read information about data sources and records from spatial data layers. Geometries are extracted from the data layer as Well-Known Binary (WKB) objects and fields (attributes) are read into numpy arrays of the appropriate data type. These are then converted to GeoPandas `GeoDataFrame`s.

All records are read into memory, which may be problematic for very large data sources. You can use `skip_features` / `max_features` to read smaller parts of the file at a time.

The entire `GeoDataFrame` is written at once. Incremental writes or appends to existing data sources are not supported.

## Comparison to Fiona

Fiona is a full-featured Python library for working with OGR vector data sources. It is awesome, has highly-dedicated maintainers and contributors, and exposes more functionality than Pyogrio ever will. This project would not be possible without Fiona having come first.

Pyogrio uses a bulk-oriented approach for reading and writing spatial vector file formats, which enables faster I/O operations. It borrows from the internal mechanics and lessons learned of Fiona. It uses a stateless approach to reading or writing data; all data are read or written in a single pass.

`Fiona` is a general-purpose spatial format I/O library that is used within many projects in the Python ecosystem. In contrast, Pyogrio specifically targets GeoPandas in order to reduce the number of data transformations currently required to read and write data between GeoPandas `GeoDataFrame`s and OGR data sources using Fiona (the current default in GeoPandas).