yymap-turf 
yymap-turf 是一个空间数据计算工具库,内置坐标转换,空间数据计算等方法 base on turf
CDN 
html
<script src="https://unpkg.com/yymap-turf/dist/yymap-turf.min.js"></script>警告
unpkg 比较慢,如果你嫌慢的话,可以把这个资源下载下来
YY.Turf 
YY.Turf 为导出的命名空间
creation 
- constructor()
example 
js
const polygon = new YY.Polygon([
  [120.6114, 31.27683],
  [120.6666, 31.23761],
  [120.57162, 31.21344],
]);
console.log(YY.Turf.area(polygon)); //面积计算
vectorLayer.addOverlay(polygon);
const polygon = new YY.Polygon([
  [120.6114, 31.27683],
  [120.6666, 31.23761],
  [120.57162, 31.21344],
]);
vectorLayer.addOverlay(polygon);
const bboxPolygon = YY.Turf.bbox(polygon); //边界范围计算
vectorLayer.addOverlay(bboxPolygon);
const point1 = new YY.Point([117.35137542724613, 36.700332036478216]);
const point2 = new YY.Point([119.87823089599613, 38.35815013843134]);
vectorLayer.addOverlays([point1, point2]);
console.log(YY.Turf.bearing(point1, point2)); //两点之间角度计算methods 
TIP
static 表示静态方法, 即对象直接访问, 无需new
static area(polygon) 
- 面积计算 demo
- 参数 - {YY. Polygon} polygon :
 
- 返回值: Number
static bbox(overlay) 
- 计算覆盖物的边界矩形框 demo
- 参数 - {YY. Overlay} overlay :
 
- 返回值: YY. Polygon
static bearing(point1, point2) 
static center(overlay) 
- 获取覆盖物的绝对中心点
- 参数 - {YY. Overlay||Array[YY. Point]} overlay:
 
- 返回值: YY. Point
static centerOfMass(overlay) 
- 获取覆盖物的平均中心点
- 参数 - {YY. Overlay} overlay
 
- 返回值: YY. Point
static destination(point, radius, bearing) 
static distance(point1, point2) 
static length(polyline) 
- 长度计算,一般用于计算线的长度
- 参数 - {YY. Polyline} polyline
 
- 返回值: Number
static pointOnFeature(overlay) 
- 从给定分覆盖物上选取一个点
- 参数 - {YY. Overlay} overlay :
 
- 返回值: YY. Point
static polygonTangents(point, polygon) 
- 从一个点出发,获取所给面上的切点
- 参数 - {YY. Point} point :
- {YY. Polygon} polygon :
 
- 返回值: Array[YY. Point]
static pointToLineDistance(point, polyline) 
- 点到线的距离
- 参数 - {YY. Point} point :
- {YY. Polyline} polyline :
 
- 返回值: Number
static bboxClip(overlay, bbox) 
- 用给定的范围对覆盖物进行剪裁
- 参数 - {YY. Overlay} overlay :
- {Array} bbox : [120, 31, 121, 32];
 
- 返回值: YY. Overlay||Array[YY. Overlay]
js
var polygon = new YY.Polygon([
    [120.6114, 31.27683],
    [120.6666, 31.23761],
    [120.57162, 31.21344],
]);
vectorLayer.addOverlay(polygon);
let bbox = [
    120.62635004014328, 31.221444396450096, 120.66102563828781, 31.266647891838005,
];
let clipPolygon = YY.Turf.bboxClip(polygon, bbox);
vectorLayer.addOverlay(
    clipPolygon.setStyle(YY.Style.formatFill({
        polygonFill: "green"
    }))
);static bezierSpline(polyline) 
- 求线的贝塞尔曲线
- 参数 - {YY. Polyline} polyline :
 
- 返回值: YY. Polyline
static buffer(overlay, radius) 
- 对覆盖物进行缓冲 demo
- 参数 - {YY. Overlay} overlay :
- {Number} radius : 缓冲的距离
 
- 返回值: YY. Polygon
static circle(point, radius, steps) 
- 构造一个圆
- 参数 - {YY. Point} point :
- {Number} radius : 缓冲的距离
- {Number} steps : 步数,切割的值越大,圆的边界越圆
 
- 返回值: YY. Polygon
static difference(polygon1, polygon2) 
- 寻找两个多边形的不同之处
- 参数 - {YY. Polygon} polygon1 :
- {YY. Polygon} polygon2 :
 
- 返回值: YY. Polygon||Array[ YY. Polygon]
static intersect((polygon1, polygon2) 
- 寻找两个多边形的相交之处
- 参数 - {YY. Polygon} polygon1 :
- {YY. Polygon} polygon2 :
 
- 返回值: YY. Polygon||Array[ YY. Polygon]
static tesselate(polygon) 
- 将多边形切割成多个三角形
- 参数 - {YY. Polygon} polygon :
- 返回值: Array[YY. Polygon]
static transformRotate(overlay, bearing) 
- 覆盖物旋转
- 参数 - {YY. Overlay} overlay :
- {Number} bearing :
 
- 返回值: YY. Overlay
static transformTranslate(overlay, radius, bearing) 
- 覆盖物按特定的角度平移一定的距离
- 参数 - {YY. Overlay} overlay :
- {Number} radius :
- {Number} bearing :
 
- 返回值: YY. Overlay
static transformScale(overlay, scale) 
- 覆盖物进行缩放
- 参数 - {YY. Overlay} overlay :
- {Number} scale :
 
- 返回值: YY. Overlay
static union(polygon1, polygon2) 
- 两个多边形的联合,补集
- 参数 - {YY. Polygon} polygon1 :
- {YY. Polygon} polygon2 :
 
- 返回值: YY. Overlay||ArrayYY. Overlay]
static voronoi(points, bbox) 
- 泰森多边形
- 参数 - {Array[YY. Point]}:points
- {Array} bbox : [120, 31, 122, 32]
 
- 返回值: Array[YY. Polygon]
static explode(overlay) 
- 覆盖物拆解成多个点
- 参数 - {YY. Overlay} overlay:
 
- 返回值: Array[YY. Point]
static lineToPolygon(polyline) 
- 线转换成面
- 参数 - {YY. Polyline} polyline:
 
- 返回值: YY. Polygon
static polygonToLine(polygon) 
- 多边形转换成线
- 参数 - {YY. Polygon} polygon
 
- 返回值: YY. Polyline
static kinks(overlay) 
- 覆盖物自我打结的点
- 参数 - {YY. Overlay} overlay:
 
- 返回值: Array[YY. Point]
static lineArc(point, radius, startBearing, endBearing) 
- 求特定点,特定距离,开始角度和结束角度的圆弧
- 参数 - {YY. Point} point:
- {Number} radius
- {Number} startBearing
- {Number} endBearing
 
- 返回值: YY. Polyline
static lineChunk(polyline, length) 
- 将线等分切割成多个小的的线段
- 参数 - {YY. Polyline} polyline
- {Number} length
 
- 返回值: Array[YY. Polyline]
static lineIntersect(polyline1, polyline2) 
- 两个线的相交点
- 参数 - {YY. Polyline} polyline1
- {YY. Polyline} polyline2
 
- 返回值: Array[YY. Point]
static lineOverlap(polyline1, polyline2) 
- 两个线的的重合段
- 参数 - {YY. Polyline} polyline1
- {YY. Polyline} polyline2
 
- 返回值: Array[YY. Polyline]
static lineSlice(startPoint, endPoint, polyline) 
- 一个开始点,一个结束点,对线进行截取
- 参数 - {YY. Point} startPoint
- {YY. Point} endPoint
- {YY. Polyline} polyline
 
- 返回值: YY. Polyline
static mask(polygon1, polygon2) 
- 多边形 1 对多边形 2 进行掩盖,返回带孔的多边形
- 参数 - {YY. Polygon} polygon1
- {YY. Polygon} polygon2
 
- 返回值: YY. Polygon
static nearestPointOnLine(polyline, point) 
- 寻找线上到指定点最近的点
- 参数 - {YY. Polyline} polyline
- {YY. Point} point
 
- 返回值: YY. Point
static randomPoint(count, bbox) 
- 给定范围内随机生成点
- 参数 - {number} count
- {Array} bbox : 边界范围 [120, 31, 122, 32];
 
- 返回值: Array[YY. Point]
static pointsWithinPolygon(points, polygon) 
- 给定点中,寻找落在多边形内的点
- 参数 - {Array[YY. Point]} points
- {YY. Polygon} polygon
 
- 返回值: Array[YY. Point]]
static hexGrid(bbox, cellSize) 
- 给定范围内进行蜂窝切割
- 参数 - {Array} bbox : 边界范围 [120, 31, 122, 32];
- {number} cellSize: 单个蜂窝的大小,越小生成的蜂窝个数越多
 
- 返回值: Array[YY. Polygon]
static pointGrid(bbox, cellSize) 
- 给定范围内进行点的切割
- 参数 - {Array} bbox : 边界范围 [120, 31, 122, 32];
- {number} cellSize: 点点之间的距离,越小生成的点个数越多
 
- 返回值: Array[YY. Point]
static squareGrid(bbox, cellSize) 
- 给定范围内进行正方形切割
- 参数 - {Array} bbox : 边界范围 [120, 31, 122, 32];
- {number} cellSize: 正方形大小
 
- 返回值: Array[YY. Polygon]
static triangleGrid(bbox, celSize) 
- 给定范围内进行三角形切割
- 参数 - {Array} bbox : 边界范围 [120, 31, 122, 32];
- {number} cellSize: 三角形大小
 
- 返回值: Array[YY. Polygon]
static booleanContains(overlay1, overlay2) 
- overlay1 是否包含 overlay2
- 参数 - {YY. Overlay} overlay1
- {YY. Overlay} overlay2
 
- 返回值: Boolean
static booleanCrosses(overlay1, overlay2) 
- overlay1 是否与 overlay2 相交
- 参数 - {YY. Overlay} overlay1
- {YY. Overlay} overlay2
 
- 返回值: Boolean
static booleanDisjoint(overlay1, overlay2) 
- overlay1 是否与 overlay2 隔离
- 参数 - {YY. Overlay} overlay1
- {YY. Overlay} overlay2
 
- 返回值: Boolean
static booleanEqual(overlay1, overlay2) 
- overlay1 是否与 overlay2 相等
- 参数 - {YY. Overlay} overlay1
- {YY. Overlay} overlay2
 
- 返回值: Boolean
static booleanPointInPolygon(point, polygon) 
- 点是否在面内
- 参数 - {YY. Point} point
- {YY. Polygon} polygon
 
- 返回值: Boolean
static booleanPointOnLine(point, polyline) 
- 点是否在线上
- 参数 - {YY. Point} point
- {YY. Polyline} polyline
 
- 返回值: Boolean
static booleanWithin(overlay1, overlay2) 
- overlay1 是否包含在 overlay2 内
- 参数 - {YY. Overlay} overlay1
- {YY. Overlay} overlay2
 
- 返回值: Boolean
static sliceByArea(polygon, params) 
- 多边形根据面积占比进行切割
- 参数 - {YY. Polygon|YY. MultiPolygon polygon
- {[]} params 参数
 
- 返回值: [YY.Polygon|YY.MultiPolygon]
js
//各个区域的面积占比,总和应该为1
const areas = [0.05, 0.11, 0.1, 0.055, 0.125, 0.05, 0.15, 0.25, 0.06, 0.05];
let params = [];
areas.forEach((element) => {
    params.push({
        percent: element, //必要字段
        id: YY.H.uuid(),
    });
});
let results = YY.Turf.sliceByArea(polygon, params);static douglas(lnglats, d) 
- 对经纬度进行抽稀
- 参数 - {[lnglat]} lnglats,二维数组
- {Number} d 抽稀的距离阈值
 
- 返回值: [lnglat]
js
      let lnglats = [
          ...,
          ...,
          ....,
          ....
      ]
      let maxD = 50;
      //对点进行抽稀,道格拉斯算法
      let douglasLngLats = YY.Turf.douglas(lnglats, maxD);