Home

Awesome

Contour-wasm

Contour and contour-isobands rust crates, compiled to WebAssembly, for use in the browser.

Usage

This module exposes two functions:

isobands

With default values

import * as contours from 'contour-wasm';

const data = [
  0, 0, 0, 0,
  0, 2, 2, 0,
  0, 2, 2, 0,
  0, 0, 0, 0,
];

const result = contours.isobands(data, 4, 4, [0, 1.5]);

With options

import * as contours from 'contour-wasm';

const data = [
  0, 0, 0, 0,
  0, 2, 2, 0,
  0, 2, 2, 0,
  0, 0, 0, 0,
];

const options = {
  use_quad_tree: false, // default: true
  x_origin: 22.5, // default: 0
  y_origin: 22.5, // default: 0
  x_step: 45, // default: 1
  y_step: -45, // default: 1
}

const result = contours.isobands(data, 4, 4, [0, 1.5], options);

isolines

With default values

import * as contours from 'contour-wasm';

const data = [
  0, 0, 0, 0,
  0, 2, 2, 0,
  0, 2, 2, 0,
  0, 0, 0, 0,
];

const result = contours.isolines(data, 4, 4, [0, 1.5]);

With options

import * as contours from 'contour-wasm';

const data = [
  0, 0, 0, 0,
  0, 2, 2, 0,
  0, 2, 2, 0,
  0, 0, 0, 0,
];

const options = {
  x_origin: 22.5, // default: 0
  y_origin: 22.5, // default: 0
  x_step: 45, // default: 1
  y_step: -45, // default: 1
}

const result = contours.isolines(data, 4, 4, [0, 1.5], options);

Micro-benchmark

Performance of isobands function from this module compared to MarchingSquaresJS.isoBands (which is also the package used internally by turf-isobands).

Data size (number of points)Number of intervalsMarchingSquares.jscontour-wasm
53072316ms12ms
176081525ms15ms
33696014369ms186ms
101088014832ms492ms

Installation instructions

📦 Install with npm

npm install contour-wasm

Build instructions

Only for developers. Otherwise, you can use the npm package.

🛠️ Build with wasm-pack

wasm-pack build

🔬 Test in Headless Browsers with wasm-pack test

wasm-pack test --headless --firefox

🎁 Publish to NPM with wasm-pack publish

wasm-pack publish

Demo

Demonstration page is available at https://mthh.github.io/contour-wasm/.