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

Uploaded CPython 3.9+Windows x86-64

polars_st-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.2 MB view details)

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

polars_st-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (41.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

polars_st-0.6.0-cp39-abi3-macosx_11_0_arm64.whl (49.8 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

polars_st-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl (52.6 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars_st-0.6.0.tar.gz
Algorithm Hash digest
SHA256 601a1177ff0ca1974b60694795f272adf3f1c920c3f4097180c9768af71a1c57
MD5 d0d2fff3f6068b1657503d8b577936bb
BLAKE2b-256 7ccafdefac3fb2d7efcca791f76fc5f91a2327bdfdc7e907f0e9279013c33ee6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: polars_st-0.6.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.6.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 26916b50c5a23193d8d2ff33fa3c43c01789940e9081824c85f9fd2f8fda6a2f
MD5 cffa06cc42314b4ede51d1efbd08717f
BLAKE2b-256 06754e510d33955f1c920e3ca31f4da35f196bd7f9b7d552c8763ebec5bdb59f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d430bf6ae7984f062e322087feab3bcae028f5b561a974e9fb5865369575f8c0
MD5 c73ebde3c39e491651339286e1666e22
BLAKE2b-256 a9dcc6e30ee3150b0544877acb590de3048eb1beeb44185ca64c0b58911a0512

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2a902d43ffe30e0bd328e6b81b5f7ed93673e48e02da3914ebcf9832c220a2a4
MD5 7916bcb1385826a153808a309f26cb10
BLAKE2b-256 a05fcd589b8ee572862023957eca53a68e05f947877b1823adc2d7cf0eee1847

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.6.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a86b687c2cf96053a00977685237619e45f3cdf0bbb696a8ef19f2333849fd2
MD5 c13ed74d68095cb013a97e584270c86d
BLAKE2b-256 5eec4c07c217519512c8f91692bba0adef910b56f5ae3a878c3f15b910a57287

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars_st-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 097f8094cb9300e4f07816bc0251918f6b0fa1b45d25e63040869f9f1ebda853
MD5 33c90970e64031ef38468e8399fd6e25
BLAKE2b-256 9cd268249bf4746443abc94e8d9667c919ac1c54335de8d62ed9b744b91c829f

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