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.with_columns(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 also stores information about the CRS of each geometry as an integer code called SRID.

For every spatial operations, the WKB 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 WKB. Because of that round-trip, some operations might turn out to be slower than GeoPandas. In most cases however, the performance penalty will be marginal 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 the GeoArrow specification. 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 Z / M coordinates, curved geometry types (CircularString, CurvePolygon, ...) and Series with mixed geometry type and SRIDs.

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 is an exclusive extension to Polars, and as a tribute to the effectiveness of the original design.

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.4.1.tar.gz (253.5 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.4.1-cp39-abi3-win_amd64.whl (44.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.4.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.2 MB view details)

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

polars_st-0.4.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (37.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.4.1-cp39-abi3-macosx_11_0_arm64.whl (44.6 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.4.1-cp39-abi3-macosx_10_12_x86_64.whl (47.3 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file polars_st-0.4.1.tar.gz.

File metadata

  • Download URL: polars_st-0.4.1.tar.gz
  • Upload date:
  • Size: 253.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.9.6

File hashes

Hashes for polars_st-0.4.1.tar.gz
Algorithm Hash digest
SHA256 6eb92729a10614c24823d9d427300b7add1de3fe8b1303556c71818c9e31fcde
MD5 d315c757c82f0ac0b873b1207a402420
BLAKE2b-256 f18d2a0cefc329100d1cd3c0847baa2c5c44aa1109e1a10ead201be7c18de406

See more details on using hashes here.

File details

Details for the file polars_st-0.4.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: polars_st-0.4.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 44.1 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.9.6

File hashes

Hashes for polars_st-0.4.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 686fc81128aa5b7c262b02b823d6bd1eede8164b884d9c8a5a70a905966cf9ac
MD5 14edb5aba71f4f61437c6840f4782125
BLAKE2b-256 789fd328b8b0b8e92bd3ccdc227f9f1b8d8d62b440d87b4f6a0d46874fcce81e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.4.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 20cc999b427d52f1dbbaae89d64963dbecda8ab35b94e1dd92e317dedae4e372
MD5 c1cf0f3ec66e912d2108c4b58c202476
BLAKE2b-256 b7e566cb9fb477711716470f5937ccf4dc6b584d9a0d7f9fcb1bb1a07b992418

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.4.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2880ba4863225a6b079e37f0071c2fa125ed1eae6cb155840ee8436c70cb2086
MD5 1ba5920fcf3a482ba4640b1bf55d2841
BLAKE2b-256 263214d64b91dab2964be747a78e2e2ac83f9d99c13016bf795e928492ae151a

See more details on using hashes here.

File details

Details for the file polars_st-0.4.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polars_st-0.4.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b15aebb5b97e5bc5be5a91e83b362dfacf1d64a17fe9662b6b9fd0a1e1bfe70
MD5 90ef267d92353ddc358ea984ad72db70
BLAKE2b-256 1547f548c3b3fb86977ef596fbed12499372229e4dfd272d83c530f0c8b919c4

See more details on using hashes here.

File details

Details for the file polars_st-0.4.1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for polars_st-0.4.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 355bf41d1c726ba90c4e2810c93b4143f6e13b364856ebb29251d7ba61c9cdd7
MD5 475fe95084a0e024d45b311c41838b4c
BLAKE2b-256 d229c1a08e253f0d0ae50fd956e3406b77a53323f276bdf40a5a5061df212846

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