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*)
69 lines (58 loc) • 2.45 kB
HTML
<html>
<head>
<title>VectorFieldAnim / Style</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="//unpkg.com/leaflet@1.2.0/dist/leaflet.css" />
<link rel="stylesheet" href="examples.css" />
<link href="https://fonts.googleapis.com/css?family=Roboto:100,400" rel="stylesheet">
</head>
<body>
<h1 class="title mapTitle">VectorFieldAnim styles</h1>
<div id="map"></div>
<!-- CDN -->
<script src="//d3js.org/d3.v4.min.js"></script>
<script src="//npmcdn.com/leaflet@1.2.0/dist/leaflet.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/chroma-js/1.3.0/chroma.min.js"></script>
<!-- Plugin -->
<script src="dist/leaflet.canvaslayer.field.js"></script>
<script>
let map = L.map("map");
let url = 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_nolabels/{z}/{x}/{y}.png';
L.tileLayer(url, {
attribution: 'OSM & Carto',
subdomains: 'abcd',
maxZoom: 19
}).addTo(map);
// Vectorfield animations with custom parameters
d3.text('data/Atlantic_U.asc', function (u) {
d3.text('data/Atlantic_V.asc', function (v) {
let vf = L.VectorField.fromASCIIGrids(u, v, 0.001); // scalefactor to get units in m/s
let layer = L.canvasLayer.vectorFieldAnim(vf, {
paths: 100,
color: "#FF6699",
width: 3,
velocityScale: 1 / 10,
mouseMoveCursor: null
}).addTo(map);
var layer2 = L.canvasLayer.vectorFieldAnim(vf, {
paths: 10000,
color: "cyan",
width: 0.5,
fade: 0.92,
maxAge: 2000,
velocityScale: 1 / 100,
mouseMoveCursor: null
}).addTo(map);
map.fitBounds(layer.getBounds());
// Change color of layer2, every n secs.
var colors = ['cyan', 'yellow', 'pink', 'aqua', 'DeepSkyBlue'];
setInterval(function () {
var r = Math.random() * colors.length | 0;
layer.options.color = colors[r];
}, 5000);
});
});
</script>
</body>
</html>