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

Reason this release was yanked:

No space for map files.

Project description

Crates.io Documentation PyPI Rust Python

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) and the OpenStreetMap (© OpenStreetMap).

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.9.0.tar.gz (559.3 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.9.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB view details)

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

roaring_landmask-0.9.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (5.3 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ i686

roaring_landmask-0.9.0-cp39-abi3-macosx_11_0_arm64.whl (98.4 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

roaring_landmask-0.9.0-cp39-abi3-macosx_10_12_x86_64.whl (97.7 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: roaring_landmask-0.9.0.tar.gz
  • Upload date:
  • Size: 559.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.1

File hashes

Hashes for roaring_landmask-0.9.0.tar.gz
Algorithm Hash digest
SHA256 6430dd20a73b7aca492824a704ca008c1d34199b8d5a4f9d89dcce5e01886b69
MD5 b1c0da7648aa6f6d55f179185f689816
BLAKE2b-256 61ab29599578199d65f001be54cf9a159da377128cddfc1d4a3d31c2099be139

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.9.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.9.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 063d38c0363bbec3342308acde162a1dbf154762d17c184b3358b444cb5157a3
MD5 72bde10336aa92b456a1d5ab8f4eb833
BLAKE2b-256 0dc63811b50d5fb810147b9b91faf388c365088f525eb48e522a1ff0445afc37

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.9.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.9.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6810ebef27756393cdf506018e52b445fb2b96d3f151898fcf2b0d912283c7a1
MD5 7358f21a258cbec706620bae30ba2da9
BLAKE2b-256 e394495f7800a6cf9c655f0e4490b0ce6e72f43187577b59755d57af538efd16

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.9.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.9.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 23611b12360d0907198dea4ca6a5f34841c0c9f41caea427d1a55bdebe0e297b
MD5 a2d580fa547a8e2bd8e91699262881f4
BLAKE2b-256 d915f3ab77a5439a9ffd3ae6c7a3d94f490c56a9c40d558834e31409bc30e4cd

See more details on using hashes here.

File details

Details for the file roaring_landmask-0.9.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for roaring_landmask-0.9.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f2cb328dd4c9713ee10d8eab92d25600ed929f0617b9bf58a0ccf2ecd5f1dd2a
MD5 90775e6a1e8928756a71292e18557b5c
BLAKE2b-256 e18b8f15d5f1a846f9a5ea9254f0ce2d3ef43982d2dc297bdcf69b0a42e77e8a

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