Skip to main content

Spatial extension for Polars DataFrames

Project description

Banner

Polars ST

Polars ST provides spatial operations on Polars DataFrames, Series, and Expressions. Just like Shapely and GeoPandas, it make use of the GEOS library, meaning that its API is mostly identical to theirs.

>>> import polars_st as st
>>> gdf = st.GeoDataFrame({
...     "category": ["A", "A", "B"],
...     "geometry": [
...         "POLYGON((0 0, 0 4, 4 2, 0 0))",
...         "POLYGON((4 0, 4 4, 0 2, 4 0))",
...         "POLYGON((0 0, 2 2, 2 0, 0 0))",
...     ]
... })
>>> gdf = gdf.group_by("category").agg(st.intersection_all()).with_columns(area=st.area())
>>> gdf.st.to_wkt()
shape: (2, 3)
┌──────────┬─────────────────────────────────────┬──────┐
│ category ┆ geometry                            ┆ area │
│ ---      ┆ ---                                 ┆ ---  │
│ str      ┆ str                                 ┆ f64  │
╞══════════╪═════════════════════════════════════╪══════╡
│ B        ┆ POLYGON ((0 0, 2 2, 2 0, 0 0))      ┆ 2.0  │
│ A        ┆ POLYGON ((4 2, 2 1, 0 2, 2 3, 4 2)) ┆ 4.0  │
└──────────┴─────────────────────────────────────┴──────┘

Installation

Polars ST is published on PyPI so you can install it with your preferred package manager.

pip install polars-st

How it works

Geometries are stored as EWKB in regular Polars Binary columns. EWKB is a extension to the WKB standard popularized by PostGIS, that can also store information about the CRS of each geometry as an integer code called SRID.

For every spatial operations, the WKB binary blob will be parsed into a Geometry object so the operation can be done. If the operation result is a geometry, it will then be serialized back to EWKB. Because of that round-trip, some operations might turn out to be slower than GeoPandas. In most cases however, the performance penalty of that round-trip will be marginal compared to the spatial operation, and you will fully benefit from the parallelization capabilities of Polars.

About GeoPolars

GeoPolars is an very promising tool for manipulating geographic data in Polars based on GeoArrow that likely will outperform this library's performance. It however seems to be quite a long way from being ready and feature-complete, mostly due to Polars lack of support for Arrow Extension Types and subclassing of core datatypes.

polars-st stores geometry as EWKB in regular Binary columns and delegates core functionality to GEOS, which allows it to be ready now, with full support for 3D / 4D coordinates, curved geometry types (CircularString, CurvePolygon, ...) and per-geometry CRS information.

About Polars

This project is not affiliated with Polars. The design language was deliberately made very close to that of Polars to highlight the fact that this project is an exclusive extension to Polars, and as a tribute to its effectiveness.

About GEOS

In order to save myself (and yourself) from the burden of GEOS version-specific features and bugs, polars-st statically link to GEOS main. This means that all documented features are guaranteed to be available. This also means that this project is LGPL licensed, the same way GEOS is.

License

Copyright (C) 2024 Aurèle Ferotin

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polars_st-0.1.0a21.tar.gz (179.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

polars_st-0.1.0a21-cp39-abi3-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.1.0a21-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

polars_st-0.1.0a21-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.1.0a21-cp39-abi3-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.1.0a21-cp39-abi3-macosx_10_12_x86_64.whl (6.4 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file polars_st-0.1.0a21.tar.gz.

File metadata

  • Download URL: polars_st-0.1.0a21.tar.gz
  • Upload date:
  • Size: 179.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.8.3

File hashes

Hashes for polars_st-0.1.0a21.tar.gz
Algorithm Hash digest
SHA256 41bde7607f20ce9d4592aab30d567e62baa07b5afd1bae49fd0f834037f1c105
MD5 5f7a08955ec4c330ce5a8750e1aacc38
BLAKE2b-256 aec684407a311a7391e34e571ad6ce136187cc405cd0fad9f15949d4738b731c

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a21-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a21-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7ffaed3c523dd205a94c06fab862bed118d515ffc907e17dd8dcd43dc1cb64f5
MD5 ac10fd8144223d840b2699e8f8bb08fd
BLAKE2b-256 e2e070840a00d0d98ab9d19d95776155e01a580ca9a4a937f7af9c03e9fa5dfc

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a21-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a21-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f3802b4fa2e20c28074ea56c3765b6df5193939e88e5e04d3bdafb2f46da6ee4
MD5 eaa3bb3e5b2c326da833117e6ca23ba2
BLAKE2b-256 9609fd4103920cd04b956c5a224803e2fbde25b21371b80b53885e13a76238d2

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a21-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a21-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 428369f61519cf74aa623f82fe5d2a4ccdb2ff3a576ecfd712cf48c18092b17e
MD5 934c172c7c7114d22bb8ce24db139a57
BLAKE2b-256 a7f781f7111cbf2e1a3511173a423431b75a4e2606ddbd1dc16b4e932793f029

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a21-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a21-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b3337a7080f990745a7cc9336518c04cdd7533e6027096d50d142bcd7bf070f
MD5 eb8e8954e9f61242d71acbd8dd25ecbe
BLAKE2b-256 be74438d9cd146cbd18c08fcd1555f3c1e0ad15b20b3a9816e42e25488b16144

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a21-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a21-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fe98b5d60b50862f89575050e2d1994ea28011ed83ddcb649674fbb9830958a7
MD5 28fb7bcc6eab5fd3d5b51f31113d6fd3
BLAKE2b-256 dd9031a2806e27c1af7b0661b2d5331b0ee42f9465d06f013f278e7d5a1a1a75

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page