const turf = require('../tools/turf');
// import * as turf from '../tools/turf';
/**
* 计算球面两点距离的方法([经度1,纬度1],[经度2,纬度2])
* @param start
* @param end
* return {Number} 米
*/
function getGreatCircleDistance(start, end) {
let from = turf.point(start);
let to = turf.point(end);
let options = {steps: 10, units: 'kilometers'};
return 1000 * turf.distance(from, to, options);
}
/**
*@计算球面几何图形的面积
* [[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]
*@author lc
*@date 2018-04-13 15:38:15
*/
function getArea(coords) {
let polygon = turf.polygon(coords);
return turf.area(polygon);
}
/**
* 将地球球面上的两个坐标转化为一个二维向量
* @param startPoint
* @param endPoint
* @returns {Array}
*/
function coordinateToVector(startPoint, endPoint) {
let distanceX = getGreatCircleDistance(startPoint, [endPoint[0], startPoint[1]]); //获取起止点的经线方向的距离
let distanceY = getGreatCircleDistance(startPoint, [startPoint[0], endPoint[1]]); //获取起止点的纬线方向的距离
if (endPoint[1] >= startPoint[1]) {
distanceY = -distanceY;
}
if (endPoint[0] >= startPoint[0]) {
distanceX = -distanceX;
}
return [distanceX, distanceY];
}
/**
* 根据指定半径查询周边数据
* @param center
* @param radius
* @param geojson
*/
function doQuerys(center, radius, geojson) {
//查询的圆形范围
let circle = turf.circle(center, radius, 50, 'kilometers');
let searchWithin = turf.featureCollection([
circle
]);
//做相交运算得到结果
return turf.within(geojson, searchWithin);
}
/**
* 数组中每相邻两个数之间插入n个数
* @param arr
* @param num
* @returns {Array}
*/
function insertInArray(arr, num) {
let tem = [];
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < num; j++) {
tem.push([arr[i][0] + j / num * (arr[i + 1][0] - arr[i][0]), arr[i][1] + j / num * (arr[i + 1][1] - arr[i][1])]);
}
}
return tem;
}
/**
* 返回指定范围内的数
* @param low
* @param high
* @returns {*}
*/
function randomRange(low, high) {
return Math.random() * (high - low) + low;
}
export {
doQuerys,
coordinateToVector,
insertInArray,
randomRange,
getGreatCircleDistance,
getArea
};