Skip to content

圆形缓冲区(BufferCircleLayer)

支持拖拽改变位置,拖拽改变大小,实时显示半径等功能

TIP

MbBufferCircleLayerV2组件,使用平面像素算法画圆,用以解决4490,4326等坐标系下圆变形问题。 MbBufferCircleLayer组件使用turf.circle画圆,在3857坐标系下,仍可使继续使用。

示例

示例源码
tsx
import React, { useEffect, useRef, useState } from 'react'
import ReactDOM from 'react-dom'
import { MbBufferCircleLayer, MbMap, MbTiandituLayer } from '@mapbox-react/core'

const App = () => {
  const [mapCenter] = useState([116.10381, 39.92155464])
  const [zoom, setZoom] = useState(10)

  return (
    <div className="map-wrapper">
      <MbMap
        center={mapCenter}
        zoom={zoom}
        glyphs="https://mapbox-web.github.io/mapbox-react/fonts/{fontstack}/{range}.pbf"
        sprite="https://mapbox-web.github.io/mapbox-react/sprites/sprite"
      >
        <MbTiandituLayer types={['vec']} />
        <MbBufferCircleLayer
          center={mapCenter}
          radius={8}
          borderColor="blue"
          borderOpacity={0.5}
          backgroundColor="blue"
          centerColor="black"
          resizerColor="blue"
          backgroundOpacity={0.1}
          closable={true}
          countable={true}
          draggable={true}
          resizable={true}
        />
      </MbMap>
    </div>
  )
}

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

EPSG:4490坐标系

示例源码
tsx
import React, { useEffect, useRef, useState } from 'react'
import ReactDOM from 'react-dom'
import {
  MbBufferCircleLayer,
  MbBufferCircleLayerV2,
  MbMap,
  MbTiandituLayer,
} from '@mapbox-react/core'

const App = () => {
  const [mapCenter] = useState([116.10381, 39.92155464])
  const [zoom, setZoom] = useState(10)

  return (
    <div className="map-wrapper">
      <MbMap
        center={mapCenter}
        zoom={zoom}
        crs="EPSG:4490"
        glyphs="https://mapbox-web.github.io/mapbox-react/fonts/{fontstack}/{range}.pbf"
        sprite="https://mapbox-web.github.io/mapbox-react/sprites/sprite"
      >
        <MbTiandituLayer types={['vec']} />
        <MbBufferCircleLayer
          center={mapCenter}
          radius={8}
          borderColor="blue"
          borderOpacity={0.5}
          backgroundColor="blue"
          centerColor="black"
          resizerColor="blue"
          backgroundOpacity={0.1}
          closable={true}
          countable={true}
          draggable={true}
          resizable={true}
        />
        <MbBufferCircleLayerV2
          center={mapCenter}
          radius={8}
          borderColor="blue"
          borderOpacity={0.5}
          backgroundColor="blue"
          centerColor="black"
          resizerColor="blue"
          backgroundOpacity={0.1}
          closable={true}
          countable={true}
          draggable={true}
          resizable={true}
        />
      </MbMap>
    </div>
  )
}

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

API

PROPS

名称描述类型默认值
id图层idstring-
center缓冲区中心点number[]-
radius缓冲区半径,单位千米number10
borderColor边框颜色stringblue
borderOpacity边框透明度number0.5
borderWidth边框宽度number5
backgroundColor背景色stringblue
backgroundOpacity背景透明度number0.1
resizerColor缩放器Icon颜色stringblack
centerColor中心点Icon颜色stringred
closable是否显示关闭Iconbooleanfalse
countable是否显示半径数值文字,需要加载Mapbox字体文件booleanfalse
resizable是否显示缩放器Iconbooleanfalse
draggable是否可拖拽位置booleanfalse
visible是否显示booleantrue
resizerRadius缩放器Icon圆圈半径number8
centerRadius中心点Icon圆圈半径number8
textFontscountable字体设置string[]['Open Sans Regular']
textColorcountable字体颜色string#000000
textSizecountable字体大小number16
formattercountable文字格式化器function(radius) => string
closeSize关闭Icon放大倍数number0.7
closeOffset关闭Icon偏移number[][70, 0]
closeIconUrl自定义关闭Icon URLstring-

EVENTS

名称描述参数
onUpdate改变缓冲区时触发事件参数:{center,radius}
onClose点击关闭操作MapMouseEvent
onMouseEnter鼠标滑入缓冲区-
onMouseLeave鼠标滑出缓冲区-

METHODS

名称描述定义