Skip to main content

A fast and limited-memory structure with a landmask based on GSHHG for determing whether a point on Earth is on land or in the ocean

Project description

Crates.io Documentation PyPI Actions Status

The Roaring Landmask

Have you ever needed to know whether you are in the ocean or on land? And you need to know it fast? And you need to know it without using too much memory or too much disk? Then try the Roaring Landmask!

The roaring landmask is a Rust + Python package for quickly determining whether a point given in latitude and longitude is on land or not. A landmask is stored in a tree of Roaring Bitmaps. Points close to the shore might still be in the ocean, so a positive value is then checked against the vector shapes of the coastline.

(source)

The landmask is generated from the GSHHG shoreline database (Wessel, P., and W. H. F. Smith, A Global Self-consistent, Hierarchical, High-resolution Shoreline Database, J. Geophys. Res., 101, 8741-8743, 1996).

An alternative is the opendrift-landmask-data, which is slightly faster, is pure Python, but requires more memory and disk space (memory-mapped 3.7Gb).

Performance

Microbenchmarks:

test tests::test_contains_in_ocean         ... bench:          24 ns/iter (+/- 0)
test tests::test_contains_on_land          ... bench:       3,795 ns/iter (+/- 214)

Many points, through Python:

------------------------------------------------------------------------------------------------------ benchmark: 5 tests -----------------------------------------------------------------------------------------------------
Name (time in us)                       Min                     Max                    Mean                StdDev                  Median                   IQR            Outliers           OPS            Rounds  Iterations
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_landmask_many_par          34,335.6220 (>1000.0)   39,922.9660 (>1000.0)   36,167.6438 (>1000.0)  1,602.6359 (>1000.0)   35,658.2270 (>1000.0)  1,722.6990 (>1000.0)       9;1       27.6490 (0.00)         30           1
test_landmask_many             130,760.1480 (>1000.0)  131,155.3400 (>1000.0)  130,863.7110 (>1000.0)    137.1064 (598.03)   130,809.7410 (>1000.0)    135.3770 (>1000.0)       1;1        7.6415 (0.00)          8           1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

The parallel version is significantly faster, while the sequential version is slightly slower than the equivalent benchmark in opendrift-landmask-data, which uses about 120 ms.

Usage from Python

from roaring_landmask import RoaringLandmask

l = RoaringLandmask.new()
x = np.arange(-180, 180, .5)
y = np.arange(-90, 90, .5)

xx, yy = np.meshgrid(x,y)

print ("points:", len(xx.ravel()))
on_land = l.contains_many(xx.ravel(), yy.ravel())

Building & installing

Pre-built wheels are available on PyPI:

  1. pip install roaring-landmask

To build from source, you can use pip:

  1. pip install .

or maturin:

  1. Install maturin.

  2. Build and install

maturin build --release
pip install target/wheels/... # choose your whl

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

roaring_landmask-0.7.3.tar.gz (494.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

roaring_landmask-0.7.3-cp38-abi3-win_amd64.whl (38.8 MB view details)

Uploaded CPython 3.8+Windows x86-64

roaring_landmask-0.7.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.7 MB view details)

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

roaring_landmask-0.7.3-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (43.7 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ i686

roaring_landmask-0.7.3-cp38-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (78.2 MB view details)

Uploaded CPython 3.8+macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

roaring_landmask-0.7.3-cp38-abi3-macosx_10_7_x86_64.whl (38.9 MB view details)

Uploaded CPython 3.8+macOS 10.7+ x86-64

File details

Details for the file roaring_landmask-0.7.3.tar.gz.

File metadata

  • Download URL: roaring_landmask-0.7.3.tar.gz
  • Upload date:
  • Size: 494.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for roaring_landmask-0.7.3.tar.gz
Algorithm Hash digest
SHA256 27b44a7004e6a25ee32e0fedc6b35936eb118aedb6187c237b8287255f7202ff
MD5 15372edebe7e56d0bdabea876b6f191e
BLAKE2b-256 e5e9d20070213002a224bc39d0c71fb5701590d2f20d2c1ac1a744d62a07ef7d

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.3-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.3-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b32e319468d9fb094c5cbd4b88078e5facbb928fb46660a6ab55d98edfa16625
MD5 bd4bff15f8667ccd95358715f8514265
BLAKE2b-256 8992d1cbd59d7f7409e2352adf939680d688983c27846edd3f5afdce96c6b71a

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10f192e6aeb5674efecdeedaf3063ce112270d9688cec075f8696bd609eabd81
MD5 1ac5931929f6660e15958959b7d51981
BLAKE2b-256 65c6d72be02ea839b829ba1a7bf41f4ee9387fb9db65b45f0e1e300607064528

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.3-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.3-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e03bf7a66efa8bc19a137064cc1778cc37fa6f92dcb62f5be423b3c3ae56f1f7
MD5 237ecd1b379b9b9c7e166094ae424490
BLAKE2b-256 35f1729215b7e7a87bcf9eecf7399e1bfb7e7be802361791fa1bea4e44bc6c9e

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.3-cp38-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.3-cp38-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7392b3f8957eed872a912687e78ec80e7055321aca1aa73462f4c74c7ad5bcfa
MD5 29ebef22b0e0c8f077ee6b0f17160caf
BLAKE2b-256 6c50d57554979bd04f2cef1fc7dcc1589f9ebfac60e9ff58337d485df61c0987

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.3-cp38-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.3-cp38-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 2f779a4ca72903e99bcc596d448425d65743e42aea873cdbc439bb887363ab14
MD5 03016fd820e90343647364307aebda66
BLAKE2b-256 97280a7f413504306fe7923996542cd656dabb8e70e1e2926b3835032b556c67

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