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.0a23.tar.gz (182.6 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.0a23-cp39-abi3-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.1.0a23-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.0a23-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.1.0a23-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.0a23.tar.gz.

File metadata

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

File hashes

Hashes for polars_st-0.1.0a23.tar.gz
Algorithm Hash digest
SHA256 df1c409f7f5cde2bd109187884868f6c4ef81cfeb900af9a8dbb5cc282427fd2
MD5 12d1475f1e9376811b7f8f1664f71a3d
BLAKE2b-256 1a8fb9386e95eb1c6f40842bf99f6b98ecf67a2643fb41f991e9b4ce0adc8e51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a23-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b2f7e8fe2a5f7ec6b134aeba9c3ce0281f5d8101e829a288112b0275c69b7f3e
MD5 40cdaf2a4263899c8015597118c66802
BLAKE2b-256 d2ec685bdd55a13c25c873bcc4750bad6c8331f44125f81476bebb473bd580f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a23-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51c0b36bf9d247d781fbe5bc8592248fdb74714214aedcfa8e8d523493373dac
MD5 85d60984ea709ac734c765ba48999d2a
BLAKE2b-256 7113281f6f788ec97d53614b2bf793490490f90c159fa16f1e01be858994f750

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a23-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7c382b5cfa7fc63f272c1544e791dda28df3a2ad2054d1c23c3ddfb4a338e039
MD5 fb91dd29c22e21eaf9a36c4db0abf2df
BLAKE2b-256 b182b8d8ea86117b80a31318749aaa949809e453de371539eaa824613f5ce1d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a23-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67cc34f06236b67674b279d2e50bc7e009af327230d9673f9daabb120e925b3e
MD5 1e4ce62dac4c80d9bc4af1330ec19c90
BLAKE2b-256 4463f614c02c44f3550118d470c7458cac8059cf5314f583fa40aba1f568070f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a23-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0acb97bf52583802cfbbe852eceefa2a9589ac4346121fbcf27b8cab255a5cb4
MD5 fde1149a9e57b42886df450617688c16
BLAKE2b-256 169ca0b2df398c9dbfe299342ddacb4f09745f440deb5db6ac4f78d28b345849

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