Skip to main content

geofeather

Build Status Coverage Status

A faster file-based format for geometries with geopandas.

This project capitalizes on the very fast feather file format to store geometry (points, lines, polygons) data for interoperability with geopandas.

Introductory post.

Why does this exist?

This project exists because reading and writing standard spatial formats (e.g., shapefile) in geopandas is slow. I was working with millions of geometries in multiple processing steps, and needed a fast way to read and write intermediate files.

In our benchmarks, we see about 5-6x faster file writes than writing from geopandas to shapefile via .to_file() on a GeoDataFrame.

We see about 2x faster reads compared to geopandas read_file() function.

How does it work?

The feather format works brilliantly for standard pandas data frames. In order to leverage the feather format, we simply convert the geometry data from shapely objects into Well Known Binary (WKB) format, and then store that column as raw bytes.

We store the coordinate reference system using JSON format in a sidecar file .crs.

Installation

Available on PyPi at: https://pypi.org/project/geofeather/

pip install geofeather

Usage

Write

Given an existing GeoDataFrame my_gdf, pass this into to_geofeather:

to_geofeather(my_gdf, 'test.feather')

Read

my_gdf = from_geofeather('test.feather')

TEMPORARY

pygeos provides much faster operations of geospatial operations over arrays of geospatial data.

geopandas is in the process of migrating to using pygeos geometries as its internal data storage instead of shapely objects.

Until pygeos is fully integrated, there are shims in geofeather to support interoperability with pandas DataFrames containing pygeos geometries. If you are already using pygeos against data you read from geofeather, using the following shims will generate 3-7x speedups reading and writing data compared to geofeather reading into GeoDataFrames.

Internally, the feather file is identical to the one created above.

pygeos is required in order to use this functionality.

WARNING: this will be deprecated as soon as pygeos is integrated into geopandas.

from geofeather.pygeos import to_geofeather, from_geofeather

# given a DataFrame df containing pygeos geometries in 'geometry' column
# and a crs object

to_geofeather(df, 'test.feather', crs=crs)

df = from_geofeather('test.geofeather')

Note: no CRS information is returned when reading from geofeather into a DataFrame, in order to keep the function signature the same as above from_geofeather

Indexes

Right now, indexes are not supported in feather files. In order to get around this, simply reset your index before calling to_geofeather.

Changes

0.3.0

  • allow serializing to / from pandas DataFrames containing pygeos geometries (see notes above).
  • use new CRS object in geopandas data frames (#4)
  • dropped to_shp; use geopandas to_file() instead.

0.2.0

  • allow reading a subset of columns from a feather file
  • store geometry in 'geometry' column instead of 'wkb' column (simplification to avoid renaming columns)

0.1.0

  • Initial release

Credits

Everything that makes this fast is due to the hard work of contributors to pyarrow, geopandas, and shapely.

Metadata

Release files for geofeather 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for geofeather 0.3.0
File Size Uploaded
geofeather-0.3.0.tar.gz 4.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for geofeather 0.3.0
File Interpreter ABI Platform
geofeather-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.8 kB

Release files / geofeather-0.3.0.tar.gz

Download URL geofeather-0.3.0.tar.gz
Size 4.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5889ebc31c02dd38215884badb3fa20029628088dbe3d5936894d0488ec01fa4
BLAKE2b-256 checksum
How to use checksums
b624c9c9b285d79e18c098bc8c8140eb3b4b000753aecfc26a6daa82b1bb6dab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

Release files / geofeather-0.3.0-py3-none-any.whl

Download URL geofeather-0.3.0-py3-none-any.whl
Size 6.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
132a79ef3b31d53fe13287eba31b057d33ced233bf5ed01af25856ec6c60e5ff
BLAKE2b-256 checksum
How to use checksums
6c1e8a0a3b25b2fff01ab834bdc73794e83de1353f73f8ec481a60bcb5b71b00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page