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.5.0.tar.gz (244.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.5.0-cp39-abi3-win_amd64.whl (48.3 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.5.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.1 MB view details)

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

polars_st-0.5.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (40.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.5.0-cp39-abi3-macosx_11_0_arm64.whl (49.5 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.5.0-cp39-abi3-macosx_10_12_x86_64.whl (52.3 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.5.0.tar.gz
Algorithm Hash digest
SHA256 cf70140889656c3bc4b29e157d7590e959eae2959b53babcc0f3e0297ff88c24
MD5 04173d9ad5d6a81ac1be847c42b0670a
BLAKE2b-256 7e341c663564eb9a4897043133edc1036985501b4865a0c626fa00a332e556a6

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.5.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7e77cbd29599f1bc8460903d04ed8958147d1356c0ab3e479147dc2438c6c1ec
MD5 68d4417ce279a2c5d15ba9c384ba6d17
BLAKE2b-256 2b13dbcc9a6fc289b84f39f314273df5b8d48865b6db70e7359e34b6e3febfd5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.5.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e96fee19da61d3b072f2e5fa138ab910aad1b9acf415e9428f5f3dc85013a863
MD5 1a70341a326d032a22ee129dc7e0912a
BLAKE2b-256 d7f5dd2b7dd4bca9712994d4d1915f18cab703a75559922f78276584b170d434

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.5.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 05020fa0b833c6a5a71a22dfa473e912483cc39245f412b2df28fce2c5e996bf
MD5 1ab41a2347ce0d999659dae7ad2a2e1e
BLAKE2b-256 924867a916eab8cbd7a25aee075435ab5dad5fc8e0b71f6c62a25923737e4018

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.5.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b1de3fb90811a7cd568cdb22208c59d44621f9c516b131fa08e42d2f1aa86e8
MD5 8a8b3cc4fe4f090be461e5ced5e80337
BLAKE2b-256 5450cda57f8e539ef74f33d11ec8075062884f4bf92d4aea8c342cc90fb72870

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.5.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bbfa4a6ece1b443231848bb0b4544aa93a318cd1f97fef40478bb3e00197e932
MD5 9bf69019a479051ea5b2b8b47c1403a8
BLAKE2b-256 5feef5850eb21d49af0e3655547bc5a61cbd98ccf56f76ad4b94c150d683d601

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