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

Uploaded CPython 3.7+Windows x86-64

roaring_landmask-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.7 MB view details)

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

roaring_landmask-0.7.1-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (43.6 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ i686

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

File metadata

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

File hashes

Hashes for roaring_landmask-0.7.1.tar.gz
Algorithm Hash digest
SHA256 0a289eaf276f59f46f7924faa5cf058b3b6d2be02a0f437c1466b572f75f0aef
MD5 d919d2ccf8880e61f1537ffe528f7c80
BLAKE2b-256 31cc861515523f6186434a19eeac8d5d2e9122a13977b5f8b0ae2dc99469714c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.7.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6bd816a13b445694bfef7e0fdffeb24d8c3ded9b47801e5a07d21eb2832ef2c8
MD5 19a5769acd2ede0dad10a378b2731f2c
BLAKE2b-256 2397478fb1be6c963bcd743aa27fd055c5694e473ebba064daafc82de06e1778

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb11e6246c73fbe4b36ce6b4a65583e9d3409776bc7cda3a13019555788a737d
MD5 8427b62e62565e9a2efce74e854ffc94
BLAKE2b-256 c15e08804b58f8cafd32cfebc1581a79cff179f66adf3b7291d854bf1f130f36

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.1-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.7.1-cp37-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2389f28a2e665c11e4c5bc0d3af620a1d196523e2a75b4e5b395323b6b6499aa
MD5 8ba004be77da71374eb2f3187c534acf
BLAKE2b-256 e6aa3bf05f91b6250f2ef42683cabebccd0ddae99dcb7b212d3523f9f9ee9ace

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.7.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.7.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 68550d8edbffb578fc3be6644737ac3285ebfbc369f4bdedc8c3518cac7293db
MD5 6c6e3f7a56216528a54c7bbf01307520
BLAKE2b-256 41d4c47f7e76fc3c48c000a1fde936cde51a7b6feb9da6ff7377d9fbbe235822

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for roaring_landmask-0.7.1-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 53094cb5eae805fd48a164d54c185f173c8f3e27e9c03f4dc2f6dc2222a1b9cf
MD5 e523e044935ebcf3979f2ff7e730c96e
BLAKE2b-256 8f6ebdf3075245bfd22544d0446c3e686f871db247c9bfedbe54ea4c7dca10bc

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