utils/Turf.js

import { polygon, pointGrid, bbox } from '@turf/turf'
/**
 * turf相关计算方法
 * @module Turf
 */

/**
 * 计算geojson四至,默认微调0.1
 * @method
 * @param {Object} [geojson] geojson数据对象
 * @param {Number} [per=0.1] 微调系数,在获取到四至后,根据该系数进行微调,比如计算后四至为[110,20,120,30],微调系数为0.1,则返回四至为[109,19,121,31]。注:109=110-(120-110)*0.1,121=120+(120-110)*0.1
 * @returns {Array<Number>} 当前Geojson数据计算后的四至 => [west,south,east,north]
 */
export const turfExtent = (geojson, per = 0.1) => {
  const _bbox = bbox(geojson)
  if (!_bbox) return undefined
  const _minX = _bbox[0]
  const _minY = _bbox[1]
  const _maxX = _bbox[2]
  const _maxY = _bbox[3]
  const minX = _minX - (_maxX - _minX) * per
  const maxX = _maxX + (_maxX - _minX) * per
  const minY = _minY - (_maxY - _minY) * per
  const maxY = _maxY + (_maxY - _minY) * per
  return [minX, minY, maxX, maxY]
}

/**
 * 在指定四至范围内,按照等距离进行插值,并返回插值后的对象
 * @method
 * @param {Array<Number>} box 范围[west,south,east,north],经纬度坐标
 * @param {Array<Number[]>} positions 待插值的点集,如[[110,23],[120,24]]
 * @param {Number} dis 插值距离,间距,单位为千米(km)
 * @returns {Object} 插值后的对象
 */
export const interPointsByDistance = (box, positions, dis) => {
  const coords = [positions]
  const mask = new polygon(coords)
  var options = { units: 'kilometers', mask: mask }
  return pointGrid(box, dis, options)
}