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.0a19.tar.gz (178.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.1.0a19-cp39-abi3-win_amd64.whl (5.9 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.1.0a19-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view details)

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

polars_st-0.1.0a19-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.1.0a19-cp39-abi3-macosx_11_0_arm64.whl (5.6 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.1.0a19-cp39-abi3-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.1.0a19.tar.gz
Algorithm Hash digest
SHA256 090e004fe0d5c75ba4fe6e40d306a9be5bee4a5097150294996bd8a9808d5434
MD5 d7c02d7f0c9a0260af6972d7f1cbec42
BLAKE2b-256 278c1dd3edb23a19be9426d71db6016a09a5332e367b12186085509c8b64db8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a19-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c85ce31ba877d65890c168fd08fa4ad25247d35ae9774e05bc56b1a6e02fcec9
MD5 a5f65c61a374497a531b8e1e288fb239
BLAKE2b-256 a185cb444043f14b99542142625b97b8dde00c3e54f150826a739da840601b23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a19-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 184737c0e108d1ca1ab28aab5bad140fe622ec3fb73ed0052e27f5024ba0d314
MD5 1066bf39b80a4f3fa4539775af8e4aa5
BLAKE2b-256 c9d33713cbc556a792992b079e7ee8d0c0e2a971f84edef8f3de913d0731e2d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a19-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 49455f8a1e53ec71bf29e75594c58e0c2ba0182add1f1ccd0b9e37458a7a6117
MD5 c17fbac9c691b9a558064d637eeeb92f
BLAKE2b-256 6a6e327bb8a8908bf6baab4ef562c766c5f994ffe5c4d8dd8dda73d5114d5378

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a19-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56e613bc4e9cefb2ae781241235649b00326e63ccffbae69f7e8da8ddc88568b
MD5 1948b4781e0a0b3ad141017dac945856
BLAKE2b-256 ecfc9057be79f1686e1679becbd9512edc7df05e1cb9f71350d28ed7064ad9bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.0a19-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2c16d9fd7991db97aa403d745977ecefcd226a61ec128a745282912e17aa3390
MD5 c060102c571b51f77dfb8a24d714e2a2
BLAKE2b-256 ddfb3b28f53f2b6802095e83dd94fa60cb1d49fa4e98fc52c28944da2e333475

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