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

Uploaded CPython 3.7+Windows x86-64

roaring_landmask-0.6.1-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.1-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.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: roaring_landmask-0.6.1.tar.gz
  • Upload date:
  • Size: 493.2 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.6.1.tar.gz
Algorithm Hash digest
SHA256 8d7511628881e41f62f249a54695271ef4ff76db160362cbcd24921b49516dba
MD5 fd2ce5ef7ad702c045f45d8430adac73
BLAKE2b-256 489a80890d5d430297d548d5b75d95713d603e9e47e3ec14949eafeca13944ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.6.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f0d88b9f81652ea12cf1e493faf8dd582b1ba667d6b8f0a98974095988be55ce
MD5 d498bb1230fb62c10df20a89a4314d5f
BLAKE2b-256 0ca00fd87ae9f39969aad584b3cb285e590d80afe1c4ea68b486bdd18947819e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.6.1-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0f5e1bca9228f683b6e32ecf64c5da76128e05751b514d79bef725c614f75fa8
MD5 b4caa074b892bea29c0d59670f63d834
BLAKE2b-256 54e3af2f8fff55f02c7fc0b3066ea7a3eb06225abb0d835a561fac729df3488e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.6.1-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 0a5bcb0f9c990e29e926964dfed735de50a3118c44cc0e88a4d3680c9bf1632a
MD5 c803d759f89d0a4fe4c357b57bbadc7b
BLAKE2b-256 a5cdef2b688744a465f3497654ad1f1e3e624f9ae75e2d532c11facb1c142e3c

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.6.1-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.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 aff5a1a1954f10f64e029a69aca771aa1c6af637963db174b814ba656dd97f51
MD5 e5ef040d17f53e9122c936e19f6206a0
BLAKE2b-256 84a4a869f5b245079e1f15b51899e630ff0199b9d5d58aa0f930c686a2bc13f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.6.1-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 ad638a653f9cef4516f782c1f40ff16226a63b398e0d466628b33368eb87cdb7
MD5 e54ca121e660949dbca4b1f6b38c1bd5
BLAKE2b-256 01f81e7a7a320ec8d61d334f26f35ba5f23393ebb119eb27add66f7e5b06f59d

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