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.2.tar.gz (244.1 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.2-cp39-abi3-win_amd64.whl (46.5 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.4 MB view details)

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

polars_st-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (39.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.4.2-cp39-abi3-macosx_11_0_arm64.whl (46.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl (48.4 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.4.2.tar.gz
Algorithm Hash digest
SHA256 b0f64d1d83c8293688065db632850f9d49613e89ae23e9e6c48b94e9e9a5e3f3
MD5 e971d47bd5f2e697ff39eb1fd198eb95
BLAKE2b-256 977c0ced442d425f925679984e1613326f238513b1d02273c86e8e63ff581554

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.4.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 baefe1b440d116b3d95d0db51a83d239242a1080f42c9ad0bdf5922b47d1948e
MD5 8e305cd5f3802d50561e61d2c5714633
BLAKE2b-256 6c4df34b65cb107f9e565f6b20925cec01441b7a74b60be5344d8e464ce94967

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9da33313bb67053870a724949b4052e0ab7f6ea1fcfbcc708677c03afdc75c7a
MD5 d008ff4bf669065ae7f9f528a77be053
BLAKE2b-256 fc4389cdd2eb4b9a55de812fcc7c22fed8b4458585b58ce0bbc99d39f94e7dca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 66e2ada151dda5feee8c63b2a6ca6ca7a741163a79fd0fe98491e7c9e0ce1052
MD5 13c4f5eab4f9eccd4cf911a6379327a0
BLAKE2b-256 63b0f55be3d17667f50a69164a07454fea496d2dabcdeca9d9470affb69c26f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.4.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03ecf3afeedbbc6134ec1dc2d06eb7a258106d4a7eb0c1216fa56214be42c8a8
MD5 f133a755d34bf321b7248b88134c0590
BLAKE2b-256 a1f97cf79ec12d1daf2f4568ae01d1e48a7587ce56e7a9c067f533ba577505d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9a9faaea73630b629bb68396d7df71b4a54ee76297161fdd60d64a50a2bb5e0e
MD5 05405cccd9656aba0fb0bb94ca033f8f
BLAKE2b-256 a0d26602597f73d54aaa89f5faa1bc828374ec040b6c834e6de8b983688f116f

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