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.2.0.tar.gz (225.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.2.0-cp39-abi3-win_amd64.whl (42.9 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.3 MB view details)

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

polars_st-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (36.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.2.0-cp39-abi3-macosx_11_0_arm64.whl (43.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl (45.9 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.2.0.tar.gz
Algorithm Hash digest
SHA256 eeb6a71ae2a389a4a47c97f17cb491a82884876b725d40736d23fb2bffbbdfa4
MD5 258ff8c3b2f04d01eaaf3529e63b8899
BLAKE2b-256 4201988ec5b79d73a4f3ce4cddaace43cdf9d9c8293515d5e5124373ccf51e67

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.2.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c5ffd95717f9865b52f7f8434a293f9cc1260ebaef09c0280c2e71ed49b7276e
MD5 30a1b22659e793442852d3b3d6bd6308
BLAKE2b-256 8b109e3dce82cfad894aaa2e2522fc9feb9fdd8d4f37dfcb7e2e4ae646c2f309

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3d5d3d2b27fed51629c475ad8042ba22444307201b4ea3570e5bb512b83881e
MD5 15aa82749606af13da96bafd9f5a4f89
BLAKE2b-256 acbc6ab09f4bd661df15bfaf4fb3a723813aea5bbe8399b0860b1c9cd4df1ef0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 90a83faedcc8eaa305c2852174236d5a96352564a95481e5ffe1c0f00a4b7b11
MD5 5f8f76d49173f5d72238642ad1592927
BLAKE2b-256 d119c0d3f1e924788ddc1e597835690851a4dd623dc2cc9868c5836fcfb8576f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3250a3ad79206754d5c1a82f82c46fcecf59fa2946a5d9e9b39462851d86a72a
MD5 83937668cdacd097d745c3fb7a391eb4
BLAKE2b-256 6c7fb521ad41fde0261950d1b69c2a7ca92db15b9ffd3700733cf8be48156938

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3a11e74fce68f52ee03b1b59ef383d39e85b1c6b482e5502d599e2823d130d4c
MD5 c4d24c0040024f427314543f346b6f22
BLAKE2b-256 14523c22d2fd582dec1a35ac5edb19e3d14185d1eb95aed2734e17c41bfd79f9

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