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