Skip to main content

Minimal Python S2 Geometry cell ID, token and lat/lon conversion library

Project description

s2cell logo

s2cell

Minimal Python S2 Geometry cell ID, token and lat/lon conversion library.

Docs | PyPI | GitHub

CI Status Documentation Status License PyPI Version

Overview

This library does conversion between S2 cell ID, S2 token and latitude/longitude and was written as a method to understand the way the S2 cell system works; hopefully this is useful to others as a single-file reference on the process, where tracing the relevant parts from the reference C++ implementation can be somewhat daunting. All steps in the conversions are well commented and written to be understandable and functional rather than strictly fast, although little is different from the reference implementation.

The library is checked against a test suite generated from the reference C++ implementation to ensure conformity with the standard.

Should you need more complete S2 Geometry functionality or a fast C-based implementation, please consider using the Python extension included in the s2geometry repository or the pure-Python s2sphere implementation.

Issues and PRs are very welcome to improve the implementation, descriptions or to correct any misunderstandings of the S2 cell system. Please note that this library strives to be an easy to read reference rather than aiming for peak performance (it is in Python after all), so PRs which reduce readability of the implementation (such as for Python specific speed optimisations) are generally discouraged. However, if you have optimisations that are applicable to S2 implementations across many languages and can be described easily, please do consider making a PR.

Installation

This package can be installed from PyPI with pip or any other Python package manager:

pip install s2cell

Usage

The full documentation, including the API Reference, is available at docs.s2cell.aliddell.com. Below is a quick start guide for the most common uses.

The library is designed to be minimal, predictable and purely functional. Conversion from lat/lon (in degrees) to a cell ID or token can be done with the following two functions:

s2cell.lat_lon_to_cell_id(-10.490091, 105.641318)  # -> 3383782026967071427
s2cell.lat_lon_to_token(-10.490091, 105.641318)    # -> '2ef59bd352b93ac3'

By default, these conversions will give you a level 30 leaf-cell as output. If you require a lower precision level, you can specify this:

s2cell.lat_lon_to_cell_id(-10.490091, 105.641318, 10)  # -> 3383781119341101056
s2cell.lat_lon_to_token(-10.490091, 105.641318, 0)     # -> '3'

Conversion from a cell ID or token to lat/lon (in degrees) can be done with the following two functions:

s2cell.cell_id_to_lat_lon(3383781119341101056)  # -> (-10.452552407574101, 105.6412526632361)
s2cell.token_to_lat_lon('3')                    # -> (0.0, 90.0)

The lat/lon returned will be the center of the cell at the level available in the provided cell ID or token.

There are also a few other useful functions for inspecting or converting a cell ID/token:

# Conversion between cell ID and token
s2cell.cell_id_to_token(3383781119341101056)  # -> '2ef59b'
s2cell.token_to_cell_id('3')                  # -> 3458764513820540928
# Level extraction
s2cell.cell_id_to_level(3383781119341101056)  # -> 10
s2cell.token_to_level('3')                    # -> 0
# Parent cell calculation
s2cell.cell_id_to_parent_cell_id(3383781119341101056)     # -> 3383782218852728832
s2cell.cell_id_to_parent_cell_id(3383781119341101056, 2)  # -> 3386706919782612992

s2cell.token_to_parent_token('2ef59b')                    # -> '2ef59c'
s2cell.token_to_parent_token('2ef59b', 2)                 # -> '2f'
# Token canonicalisation
s2cell.token_to_canonical_token('2ef59BD352b90') # -> '2ef59bd352b9'

License

This project is released under the same license as the reference C++ S2 Geometry implementation, namely the Apache 2.0 License.

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

s2cell-1.8.0.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

s2cell-1.8.0-py3-none-any.whl (19.2 kB view details)

Uploaded Python 3

File details

Details for the file s2cell-1.8.0.tar.gz.

File metadata

  • Download URL: s2cell-1.8.0.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for s2cell-1.8.0.tar.gz
Algorithm Hash digest
SHA256 6ba0f06b2c9fe415259194295ef1e0794e18dafcb84880de5b6fa627c4a8eea8
MD5 53bde19808194e6a3f275a4169378a1d
BLAKE2b-256 e620af36f1ea970ac6b1a9acb481d039d433a6f3add736b6a7630e840ac25652

See more details on using hashes here.

File details

Details for the file s2cell-1.8.0-py3-none-any.whl.

File metadata

  • Download URL: s2cell-1.8.0-py3-none-any.whl
  • Upload date:
  • Size: 19.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for s2cell-1.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25b488fc8955b7919bc6477c9be38abce7793b70400dd3a1463e858dffb59568
MD5 875ade20bc97a816322bdc4fb9f70311
BLAKE2b-256 8c9caf2c4e20b132c3351a2b026488c4ee2d515732315bc34d9a46f4b6db617b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page