Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有标准Javascript的Deck.gl六边形图层工具提示_Javascript_Mapbox_Deck.gl - Fatal编程技术网

带有标准Javascript的Deck.gl六边形图层工具提示

带有标准Javascript的Deck.gl六边形图层工具提示,javascript,mapbox,deck.gl,Javascript,Mapbox,Deck.gl,我有以下代码,将纬度和经度分组为六格点,并使用mapbox底图(顶部有deck.gl层)在地图上绘制它们: <!doctype html> <html lang="en"> <head> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> <!--

我有以下代码,将纬度和经度分组为六格点,并使用mapbox底图(顶部有deck.gl层)在地图上绘制它们:

<!doctype html>
<html lang="en">
<head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <meta content="utf-8" http-equiv="encoding">
  <!-- deck.gl standalone bundle -->
  <script src="https://cdn.jsdelivr.net/npm/deck.gl@8.1.5/dist.min.js"></script>

  <!-- d3 -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.16.0/d3.min.js"></script>

  <!-- Mapbox dependencies -->
  <script src="https://api.tiles.mapbox.com/mapbox-gl-js/v1.4.0/mapbox-gl.js"></script>
  <link href="https://api.tiles.mapbox.com/mapbox-gl-js/v1.4.0/mapbox-gl.css" rel="stylesheet" />
  <style>
    body {
      width: 100vw;
      height: 100vh;
      margin: 0;
    }

    #control-panel {
      font-family: Helvetica, Arial, sans-serif;
      position: absolute;
      background: #fff;
      top: 0;
      left: 0;
      margin: 12px;
      padding: 20px;
      z-index: 1;
    }

    label {
      display: inline-block;
      width: 140px;
    }
  </style>
</head>
  <body>
  <div id="control-panel">
    <div>
      <label>Radius</label>
      <input id="radius" type="range" min="1000" max="20000" step="1000" value="1000"></input>
      <span id="radius-value"></span>
    </div>
    <div>
      <label>Coverage</label>
      <input id="coverage" type="range" min="0" max="1" step="0.1" value="1"></input>
      <span id="coverage-value"></span>
    </div>
    <div>
      <label>Upper Percentile</label>
      <input id="upperPercentile" type="range" min="90" max="100" step="1" value="100"></input>
      <span id="upperPercentile-value"></span>
    </div>
  </div>
  <script>
    const deckgl = new deck.DeckGL({
      mapboxApiAccessToken: '<mapbox_pk_token>',
      mapStyle: 'mapbox://styles/mapbox/dark-v9',
      initialViewState: {
        longitude: -122.413756,
        latitude: 37.779528,
        zoom: 6,
        minZoom: 0,
        maxZoom: 21,
        pitch: 40.5
      },
      controller: true
    });

    //const data = d3.csv('https://raw.githubusercontent.com/uber-common/deck.gl-data/master/examples/3d-heatmap/heatmap-data.csv');

    const data = [
        {name: 'Colma1', passengers: 4214, lng: '-122.466233', lat: '37.684638'},
        {name: 'Colma2', passengers: 4214, lng: '-122.466233', lat: '37.684638'},
        {name: 'Colma3', passengers: 4214, lng: '-122.466233', lat: '37.684638'},
        {name: 'Civic Center1', passengers: 24798, lng: '-122.413756', lat: '37.779528'},
        {name: 'Civic Center2', passengers: 24798, lng: '-122.413756', lat: '37.779528'},
        {name: 'Civic Center3', passengers: 24798, lng: '-122.413756', lat: '37.779528'},
        {name: 'Civic Center4', passengers: 24798, lng: '-122.413756', lat: '37.779528'},
        {name: 'Civic Center5', passengers: 24798, lng: '-122.413756', lat: '37.779528'},
    ];

    const OPTIONS = ['radius', 'coverage', 'upperPercentile'];

    const COLOR_RANGE = [
      [1, 152, 189],
      [73, 227, 206],
      [216, 254, 181],
      [254, 237, 177],
      [254, 173, 84],
      [209, 55, 78]
    ];

    OPTIONS.forEach(key => {
      document.getElementById(key).oninput = renderLayer;
    });

    renderLayer();

    function renderLayer () {
      const options = {};
      OPTIONS.forEach(key => {
        const value = +document.getElementById(key).value;
        document.getElementById(key + '-value').innerHTML = value;
        options[key] = value;
      });

      const hexagonLayer = new deck.HexagonLayer({
        id: 'heatmap',
        colorRange: COLOR_RANGE,
        data,
        elevationRange: [0, 1000],
        elevationScale: 250,
        extruded: true,
        getPosition: d => [Number(d.lng), Number(d.lat)],
        opacity: 1,
        pickable: true,
        onHover: ({object, x, y}) => {
            const tooltip = `Count: 12`;
        },
        ...options
      });

      deckgl.setProps({
        layers: [hexagonLayer],
        tooltip: {
          'html': '<b>Elevation Value:</b>',
          'style': {
              'color': 'white'
          }
        }
      });
    }
  </script>
</body>
</html>

它还引用了${object.centroid.join','}\n帐户:${object.points.length},但这给出了一个错误。

最简单的方法是使用属性。如果你想使用onHover属性,这会给你更多的控制权,你必须自己动手

    tooltip: {
      'html': '<b>Elevation Value:</b>',
      'style': {
          'color': 'white'
      }
    }
pickable: true,
onHover: ({object, x, y}) => {
  const tooltip = `Count: 12`;
},