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 incredibly promising tool for manipulating geographic data in Polars based on GeoArrow that likely will outperform this library's performance by a long shot. 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.

Storing geometry as EWKB and delegating core functionality to GEOS allows polars-st to be ready now, and provide additional features such as XYZM coordinates, curved geometry types and per-geometry CRS information.

I really hope Geopolars get there soon, and that maybe some of the API design explorations made here will have helped make it even more pleasant to use.

About Polars

This project is not affiliated with Polars. The design language was made very close to that of Polars because I found it amazingly appealing and liked the challenge of adding geographic meaning to it, and to also highlight the fact that this project is an exclusive extension to Polars.

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.0a17.tar.gz (178.2 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.0a17-cp38-abi3-win_amd64.whl (6.3 MB view details)

Uploaded CPython 3.8+Windows x86-64

polars_st-0.1.0a17-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view details)

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

polars_st-0.1.0a17-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

polars_st-0.1.0a17-cp38-abi3-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

polars_st-0.1.0a17-cp38-abi3-macosx_10_12_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.1.0a17.tar.gz
Algorithm Hash digest
SHA256 3e67fe7951260b41695daa23622558c42989461bf4afacc6956e220c36016f93
MD5 8a7428a2520473dd5fb8eacb9ac8a375
BLAKE2b-256 1654d5e26a4f21bc1dfb76bd7e2f812d596df6edc923b1321cd772ddfb24e692

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a17-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a17-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 29e9d90b7a05ed373ddc25874c660bf23528e8ce67330ff6e20d3ead452fe49a
MD5 7d7e9f76c2e5d3c60e00f1947f162238
BLAKE2b-256 76cc99d0c76e86e249e6b2ef9a116f0c306190effa00a8a9028ec205c845f6b8

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a17-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a17-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b4912335f14ceb9c02c69a27f0a4b4b4729318509fbff3af4ce5e9aa5863a9d5
MD5 7c121b5226b5a4bf1a01f39477205ab0
BLAKE2b-256 4f36697af181b5ed4bea50b223e7e1308409cc20413b0cd6cd2afc651aa231f8

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a17-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a17-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0e18b7d4b4ab620bb1884e67437392f50da8b1616cbbc8dd7bdf40fb22d0a85d
MD5 4b36ea65ab304c061a8d5a75eed8035d
BLAKE2b-256 c6301a30013e2ad91db44a179ae519d804a84fcc36d2041926ba098ec1630d81

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a17-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a17-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 299b1cf7049626030fb070a27793b4106e3588b232afbacd8a0baebe0456fbd1
MD5 31e9d6c34352f5d8b7c48c474543b241
BLAKE2b-256 753f2a66f85675ab4d323fef0f9ae80a2490b5eaff4c0020a544f024f8efea9a

See more details on using hashes here.

File details

Details for the file polars_st-0.1.0a17-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for polars_st-0.1.0a17-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ff991df5697add22367b72479901e8d9016c1ee1295fc69ac99b99239520a579
MD5 7b5be6d4afbd94afa1199d5173ee9a46
BLAKE2b-256 12ae5700247ca64320865b517c8c96eeb6d3d0ea8adc0249a0b67c3afe978529

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