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.0.tar.gz (493.7 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.0-cp37-abi3-win_amd64.whl (38.7 MB view details)

Uploaded CPython 3.7+Windows x86-64

roaring_landmask-0.7.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (43.3 MB view details)

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

roaring_landmask-0.7.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.7.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.7.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.7.0.tar.gz.

File metadata

  • Download URL: roaring_landmask-0.7.0.tar.gz
  • Upload date:
  • Size: 493.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for roaring_landmask-0.7.0.tar.gz
Algorithm Hash digest
SHA256 250b9201e7aa29ebf81f2a4559f6ff5365f4588ea5a0bb62fd134f736c421bce
MD5 51d5e6bc36490c602aeb5517880eaf9d
BLAKE2b-256 18ba6c4972523b332e9384ff24a9e69c9369beba304877eeca51129f792386b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.7.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3525d8bd5abc75f7f824b68ac5fb108d4b823f9bdf272622504a3e3a6f4b8486
MD5 36c36e3660b8a0fe9acdbf4800b247e3
BLAKE2b-256 021a39ad05e7304e66be7f62e48a9a04acb75950e2dd7b19515df5e19f828dda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.7.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b8f8669b6deafc0a5bd573a7c34888af9a948460d432b473a54b2d9041dd21b2
MD5 c239b624b3add24465fde89edbd854d0
BLAKE2b-256 2d44f4433a32dc571d51d0c28037fd11444086e02b3bc061c3e5b8f27384f40d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.7.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 9e912a0977373039ce73cde0cf128f1d0ff969e0e843866c7daa6e0bf84a5280
MD5 d08f05a5b83d8ccc7c23f620a86c3f86
BLAKE2b-256 e082bc092d1e3357d67d741f7de16095c5508150a45fadc166a239f924a19768

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.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.7.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ea5ce8677e70e664be1d3341e2181fd7cbab774c2d6d72f87d58c2036fe4daa7
MD5 f76ff90ec53fff5dbd31a4611b756d66
BLAKE2b-256 026c6f02e00224d213649c38cb4f7d9dedf1a79e96659d5fd735d426bee6f658

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.7.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 675dc58428ed7076f306b0ddbafe2121a9f73b4c56af504d6f797e2730a806d1
MD5 811380bd26725d81606a1f2e4edac576
BLAKE2b-256 bf61d28ab4ae45713ac2b29791c51277f043ac22d8a8dc24c5864b4bcfc430a0

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