UNPKG

globe.gl

Version:

UI component for Globe Data Visualization using ThreeJS/WebGL

46 lines (39 loc) 1.82 kB
<head> <style> body { margin: 0; } </style> <script src="//cdn.jsdelivr.net/npm/globe.gl"></script> <!--<script src="../../dist/globe.gl.js"></script>--> </head> <body> <div id="globeViz"></div> <script type="module"> import { scaleSequentialSqrt } from 'https://esm.sh/d3-scale'; import { interpolateYlOrRd } from 'https://esm.sh/d3-scale-chromatic'; const colorScale = scaleSequentialSqrt(interpolateYlOrRd); // GDP per capita (avoiding countries with small pop) const getVal = feat => feat.properties.GDP_MD_EST / Math.max(1e5, feat.properties.POP_EST); fetch('../datasets/ne_110m_admin_0_countries.geojson').then(res => res.json()).then(countries => { const maxVal = Math.max(...countries.features.map(getVal)); colorScale.domain([0, maxVal]); const world = new Globe(document.getElementById('globeViz')) .globeImageUrl('//cdn.jsdelivr.net/npm/three-globe/example/img/earth-night.jpg') .backgroundImageUrl('//cdn.jsdelivr.net/npm/three-globe/example/img/night-sky.png') .lineHoverPrecision(0) .polygonsData(countries.features.filter(d => d.properties.ISO_A2 !== 'AQ')) .polygonAltitude(0.06) .polygonCapColor(feat => colorScale(getVal(feat))) .polygonSideColor(() => 'rgba(0, 100, 0, 0.15)') .polygonStrokeColor(() => '#111') .polygonLabel(({ properties: d }) => ` <b>${d.ADMIN} (${d.ISO_A2}):</b> <br /> GDP: <i>${d.GDP_MD_EST}</i> M$<br/> Population: <i>${d.POP_EST}</i> `) .onPolygonHover(hoverD => world .polygonAltitude(d => d === hoverD ? 0.12 : 0.06) .polygonCapColor(d => d === hoverD ? 'steelblue' : colorScale(getVal(d))) ) .polygonsTransitionDuration(300); }); </script> </body>