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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

roaring_landmask-0.6.0-cp37-abi3-win_amd64.whl (38.7 MB view details)

Uploaded CPython 3.7+Windows x86-64

roaring_landmask-0.6.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (43.4 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.12+ x86-64

roaring_landmask-0.6.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl (43.3 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.12+ i686

roaring_landmask-0.6.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (78.1 MB view details)

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

roaring_landmask-0.6.0-cp37-abi3-macosx_10_7_x86_64.whl (38.9 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

Details for the file roaring_landmask-0.6.0-cp37-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.6.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 147b35e7b8e4bdf9b684ab74f73af5b7a13f8f7260717ac27b5642da4d66e452
MD5 befc39852526e111bc1ba92d665abbda
BLAKE2b-256 81a691106f74e2beeade3daceeed9e04009e4a1f99e69bbb757ff5a95c0beb73

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.6.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.6.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0ae0b80cca39da24b6e2a64eca19facce35c4d7577a82043f0de676435d64fb6
MD5 d636f366d13a98fea57fddd10c7c32b0
BLAKE2b-256 d51851173ff9cdebed00d2cdea993c43a42b383cf1f75af6fa63de42da812e94

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.6.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.6.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 0f696fb29ece3aae0d67e824c7e206d36437d4e5ed422a3cb7bbaf8cb3772612
MD5 2c2fe6132492f80772e069bb3e90c041
BLAKE2b-256 003897eaf30bcc12614816af2a46d4c88645e988dfa97aff85f015dd421d3a6e

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.6.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.6.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2c9ecd81e6050414abd61442e2b08749ef8a91828663680a402f63451038848f
MD5 b0df064a94e92fbe78f728ebbed11804
BLAKE2b-256 59c58df17de9190b9d3019a092e11b1e88980970dba99e9aa59e921c9a970a2c

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.6.0-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.6.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 9c52c354c6e59fbc7462e3eb5b2dfa91013461bdca1f5f7a35bde6e8aa4ee545
MD5 a3d203c81255861d655e0586181cfc77
BLAKE2b-256 d6b6be2685f09199340dc1e45a9205fc6741ae1080ebf18731fd192610cbb171

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