Skip to content

HexagonLayer

Example

Example Source Code
tsx
import React, { useEffect, useRef, useState } from 'react'
import ReactDOM from 'react-dom'
import { MbMap, MbTiandituLayer } from '@mapbox-react/core'
import { MbHexagonLayer } from '@mapbox-react/deck-layers'

const App = () => {
  const [mapCenter] = useState([116.314177, 39.832819])
  const [zoom, setZoom] = useState(8)
  const [pitch, setPitch] = useState(40)
  const mapInst = useRef<any>()

  const data = 'https://mapbox-web.github.io/mapbox-react/geojson/beijing_price.json'
  const [radius, setRadius] = useState(1000)

  const mousemoveHandler = ({ object }: { object: any }) => {
    console.log(object)
  }

  return (
    <div className="map-wrapper">
      <MbMap ref={mapInst} center={mapCenter} zoom={zoom} pitch={pitch}>
        <MbTiandituLayer types={['vec']} />
        <MbHexagonLayer
          data={data}
          radius={radius}
          position={(d) => d.lnglat}
          colorWeight={(d) => d.transPrice}
          colorAggregation="MEAN"
          elevationWeight={(d) => d.transPrice}
          elevationAggregation="MEAN"
          pickable={true}
          elevationScale={50}
          onMouseMove={mousemoveHandler}
        />
      </MbMap>
    </div>
  )
}

ReactDOM.render(<App />, document.querySelector('#root'))

API

PROPS

NameDescriptionTypeDefault
idLayer ID. A unique identifier for the layer.string-
radiusRadius of the hexagon in meters.number1000
positionFunction to retrieve the position of each data point. This function should accept a data item as an argument and return an array representing the [longitude, latitude] or [longitude, latitude, altitude/elevation].AnyFunc-
autoHighlightWhen this property is true and pickable is also true, the object under the mouse cursor will be highlighted. This provides visual feedback when hovering over interactive elements.booleanfalse
colorAggregationAggregation method for hexagon colors. This property takes effect when used in conjunction with color-weight.string ('SUM', 'MEAN', 'MIN', 'MAX')'SUM'
colorRangeColor range used for mapping values to colors. This is an array of color strings, typically in RGB or hexadecimal format.string[][ "rgb(255, 255, 178)", "rgb(254, 217, 118)", "rgb(254, 178, 76)", "rgb(253, 141, 60)", "rgb(240, 59, 32)", "rgb(189, 0, 38)" ]
colorValueFunction to calculate the color for each hexagon. For example, you can calculate the color based on the number of points within the hexagon (density heatmap): (points) => points.length. If this property is set, color-weight and color-aggregation are disabled.AnyFunc-
colorWeightFunction to calculate the color weight for each point within a hexagon. This property takes effect when used in conjunction with color-aggregation.AnyFunc-
coverageThe coverage ratio of the hexagonal grid. This value is between 0 and 1. The final rendered hexagon radius will be radius * coverage.number1
dataSource data for the layer. This can be an array, object, Promise that resolves to data, or a string representing a URL.array / object / Promise / string[]
elevationAggregationAggregation method for hexagon elevation/height.string ('SUM', 'MEAN', 'MIN', 'MAX')'SUM'
elevationScaleScaling factor for the height of the extruded hexagons.number1
elevationValueFunction to calculate the elevation/height of each hexagon. For example, you can calculate the height based on the number of points within the hexagon: (points) => points.length. If this property is set, elevation-weight and elevation-aggregation are disabled.AnyFunc-
elevationWeightFunction to calculate the elevation weight for each point within a hexagon.AnyFunc() => 1
extrudedWhether the hexagons are rendered in 3D (extruded).booleantrue
highlightColorThe color to blend with the original color of the highlighted hexagon. This creates the highlight effect. The value can be a color string or an RGBA array.string / number[][255, 255, 128, 1]
highlightedObjectIndexThe index of the currently highlighted hexagon within the data. A value of -1 indicates that no object is currently highlighted.number-1
materialWhether the 3D hexagons have material properties (e.g., lighting, shading). This only takes effect when extruded is true.booleantrue
opacityThe opacity of the hexagons (0-1). 0 is fully transparent, and 1 is fully opaque.number1
pickableWhether the layer responds to mouse events. If false, the component will not emit mouse-related events (e.g., click, hover).booleanfalse
showWhether the layer is visible. If true, the layer will be rendered; otherwise, it will be hidden.booleantrue

EVENTS

NameDescriptionParameters
onCreatedInitialization complete event-
onMouseMove-{ object: any; coordinates: mapboxgl.LngLat; pixel: [number, number] }
onMouseLeave--
onClick-{ object: any; coordinates: mapboxgl.LngLat; pixel: [number, number] }

METHODS

NameDescriptionDefinition