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*)
88 lines (74 loc) • 3.46 kB
HTML
<html>
<head>
<title>ScalarField / Geotiff</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">ScalarField GeoTIFF</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="//npmcdn.com/geotiff@0.3.6/dist/geotiff.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');
/* Dark basemap */
let url = 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_nolabels/{z}/{x}/{y}.png';
L.tileLayer(url, {
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="https://carto.com/attributions">CARTO</a>',
subdomains: 'abcd'
}).addTo(map);
/* Temperature and Geopotencial Height in GeoTIFF with 2 bands */
d3.request("data/tz850.tiff").responseType('arraybuffer').get(
function (error, tiffData) {
// Geopotential height (BAND 0)
let geo = L.ScalarField.fromGeoTIFF(tiffData.response, bandIndex = 0);
let layerGeo = L.canvasLayer.scalarField(geo, {
color: chroma.scale('RdPu').domain(geo.range),
opacity: 0.65
}).addTo(map);
layerGeo.on('click', function (e) {
if (e.value !== null) {
let v = e.value.toFixed(0);
let html = (`<span class="popupText">Geopotential height ${v} m</span>`);
let popup = L.popup()
.setLatLng(e.latlng)
.setContent(html)
.openOn(map);
}
});
// Temperature (BAND 1)
let t = L.ScalarField.fromGeoTIFF(tiffData.response, bandIndex = 1);
let layerT = L.canvasLayer.scalarField(t, {
color: chroma.scale('OrRd').domain(t.range),
opacity: 0.65
});
layerT.on('click', function (e) {
if (e.value !== null) {
let v = e.value.toFixed(1);
let html = (`<span class="popupText">Temperature ${v} ºC</span>`);
let popup = L.popup()
.setLatLng(e.latlng)
.setContent(html)
.openOn(map);
}
});
L.control.layers({
"Geopotential Height": layerGeo,
"Temperature": layerT
}, {}, {
position: 'bottomleft',
collapsed: false
}).addTo(map);
map.fitBounds(layerGeo.getBounds());
});
</script>
</body>
</html>