Skip to content

线型缓冲区(BufferLineLayer)

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

示例

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

const App = () => {
  const [mapCenter] = useState([116.20381, 39.95155464])
  const [zoom, setZoom] = useState(10)

  const [lineString] = useState([
    [116.17381, 39.92155464],
    [116.25105956968257, 40.02398993628292],
    [116.31591012802686, 39.96769599504311],
    [116.3234327392287, 39.892836286211754],
  ])

  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']} />
        <MbBufferLineLayer
          lineString={lineString}
          radius={2}
          borderOpacity={0.5}
          resizerColor="blue"
          backgroundOpacity={0.1}
          closable={true}
          countable={true}
          draggable={true}
          resizable={true}
        />
      </MbMap>
    </div>
  )
}

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

手工模式示例

  • 单击地图画点
  • Esc,Del,Backspace键,删除前一个点
  • 双击或者Enter结束手工模式
  • 手工模式下,lineString数据无效
  • 不支持动态改变manual参数值
示例源码
tsx
import React, { useEffect, useRef, useState } from 'react'
import ReactDOM from 'react-dom'
import { MbBufferLineLayer, MbMap, MbTiandituLayer } from '@mapbox-react/core'

const App = () => {
  const [mapCenter] = useState([116.20381, 39.95155464])
  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']} />
        <MbBufferLineLayer
          lineString={[]}
          radius={2}
          manual={true}
          borderOpacity={0.5}
          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-
lineString坐标数组Array<number[]>[]
manual是在地图上手工选点。设置为true时,polygon数据无效booleanfalse
radius半径,单位千米number10
borderColor边框颜色stringblue
borderOpacity边框透明度number0.5
borderWidth边框宽度number5
backgroundColor背景色stringblue
backgroundOpacity背景透明度number0.1
resizerColor缩放器Icon颜色stringblack
closable是否显示关闭Iconbooleanfalse
countable是否显示半径指示器,需要加载mapbox字体文件booleanfalse
resizable是是否显示缩放器Iconbooleanfalse
draggable是否可拖拽位置booleanfalse
visible是否显示booleantrue
resizerRadius缩放器Icon圆圈半径number8
textFontscountable字体设置string[]['Open Sans Regular']
textColorcountable字体颜色string#000000
textSizecountable字体大小number16
formattercountable文字格式化器function(area) => string
closeSize关闭Icon放大倍数number0.7
closeOffset关闭Icon偏移number[][65, -20]
closeIconUrl自定义关闭Icon URLstring-

EVENTS

名称描述参数
onUpdate改变缓冲区时触发事件参数:{lineString, polygon}
onComplete手工模式,缓冲区完成时触发事件参数:{lineString, polygon}
onClose点击关闭操作MapMouseEvent
onMouseEnter鼠标滑入缓冲区-
onMouseLeave鼠标滑出缓冲区-

METHODS

名称描述定义