UNPKG

leaflet-canvaslayer-field

Version:

A set of layers using canvas to draw ASCIIGrid or GeoTIFF files. This includes a basic raster layer (*ScalaField*) and an animated layer for vector fields, such as wind or currents (*VectorFieldAnim*)

98 lines (80 loc) 3.07 kB
describe('VectorField', function() { let Vector = L.Vector; let Cell = L.Cell; let VectorField = L.VectorField; let dataFolder = 'base/docs/data'; let vf; beforeEach(function(filesLoaded) { d3.text(`${dataFolder}/U.asc`, function(u) { d3.text(`${dataFolder}/V.asc`, function(v) { vf = VectorField.fromASCIIGrids(u, v); filesLoaded(); }); }); }); it('can be created from 2 ASCIIGrid files', function() { expect(vf).not.toBe(null); }); it('can return the value for (i, j) indexes', function() { // top-left expect(vf._valueAtIndexes(0, 0)).toEqual( new Vector(0.011275325901806355, -0.003540651174262166) ); // botton-right expect(vf._valueAtIndexes(9, 9)).toEqual( new Vector(0.14851005375385284, -0.015279672108590603) ); }); it('can return the value for a (lon, lat)', function() { // LL let pNearLL = vf.valueAt(-3.76921724303, 43.4605948227); expect(pNearLL.u).toBeCloseTo(0.00586759205907583, 4); expect(pNearLL.v).toBeCloseTo(-0.00329965655691922, 4); // UL let pNearUL = vf.valueAt(-3.76921740247, 43.4651398993); expect(pNearUL.u).toBeCloseTo(0.01127532590180643, 4); expect(pNearUL.v).toBeCloseTo(-0.00354065117426217, 4); // UR let pNearUR = vf.valueAt(-3.76467191838, 43.4651400146); expect(pNearUR.u).toBeCloseTo(0.215018898248672, 4); expect(pNearUR.v).toBeCloseTo(-0.00158081843983382, 4); // LR let pNearLR = vf.valueAt(-3.76467191746, 43.4605944395); expect(pNearLR.u).toBeCloseTo(0.148510053753853, 4); expect(pNearLR.v).toBeCloseTo(-0.0152796721085906, 4); }); it('can return its cells', function() { let grid = vf.getCells(); let p0 = grid[0]; let pN = grid[grid.length - 1]; expect(p0).not.toBe(null); expect(pN).not.toBe(null); }); it('can calculate the Range of its values (magnitude)', function() { expect(vf.range).not.toBe(null); expect(vf.range[0]).toEqual(0.0067317434565905545); expect(vf.range[1]).toEqual(0.2150247092568961); }); it('can be filtered', function() { const min = 0.1; const max = 0.15; expect(vf.range[0] >= min).toBeFalsy(); expect(vf.range[1] <= max).toBeFalsy(); vf.setFilter(function(v) { if (v) { const m = v.magnitude(); return m >= min && m <= max; } return false; }); expect(vf.range[0] >= min).toBeTruthy(); expect(vf.range[1] <= max).toBeTruthy(); }); it('can return a ScalarField with its Magnitude or Direction', function() { let types = ['magnitude', 'directionTo', 'directionFrom']; for (var i = 0; i < 3; i++) { let s = vf.getScalarField(types[i]); expect(s).not.toBe(null); } }); });