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.1.3.tar.gz (197.4 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.3-cp39-abi3-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.9+Windows x86-64

polars_st-0.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.6 MB view details)

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

polars_st-0.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.0 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.1.3-cp39-abi3-macosx_11_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.1.3-cp39-abi3-macosx_10_12_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.1.3.tar.gz
Algorithm Hash digest
SHA256 88d4d35409eb7aa222fa4ceeb570e66001dfa64270606a7dbf39df8654a9924a
MD5 4ce45b7594386add94bd40e0e263c957
BLAKE2b-256 c6de569fcf22a2501cea668b257cb1870cc25f0e2ee57fae27d14456686b5dfc

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.1.3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a39fa8203a0e81c4bb17a1383df8fadc668de50cfb0598461daa9b5353cfc9e5
MD5 3db9da180d017df746d9795b5f7532a2
BLAKE2b-256 377cecd5bf3888391092d939c22a0d21bf03acc92788ca920eac60bf5934bf3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d14a53d27850f3aa0ac3b2810480ab486c6880649e197ccd61421b32f5228ce
MD5 04fcfc68e38f77b6f71f40c4d30077e7
BLAKE2b-256 724a85196aaf8032364238c3a7e5ca1e4e5c77f4ffdd84e599c3ff913c4ebc7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 515d299911ab50515b4f02be422f8343754fa49b2524d9b620ad89bcfa049764
MD5 1d81a44304144c0709a5d3645f4ac0a8
BLAKE2b-256 b1abd5cf6a640945b9f0b67bf5161b5b868d0596f36fcd146c8448a1d352b246

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ba85f837bc79cfaf3503bcd3fe39fe967b6fb8297a51285012c82617fe95675
MD5 8b5943cc78d43324bf4e9bdc486ca439
BLAKE2b-256 081c6b31b2020f7f5235b3748c721572b858d324db2c05759e8b4e1b67be3541

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.1.3-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d0704141143c68917dca6589e5df12063285fbdc7548323e7344de7af6d44985
MD5 5e97b7ec16521b7ee4b4bfce48c5e671
BLAKE2b-256 feeea078135f5145d9e2bafe2af68860e7165ed80582a26551a7fbfef15accf1

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