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)
}