| 
                        1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
                        - /**
 -  * @Author: Caven
 -  * @Date: 2020-08-16 11:14:23
 -  */
 - 
 - /**
 -  * Some of the code borrows from MAPV
 -  * https://github.com/huiyan-fe/mapv/blob/3292c7c25dbbf29af3cf7b3acb48108d60b3eed8/src/utils/curve.js
 -  */
 - export default function curve(points, options) {
 -   options = options || {}
 -   let curvePoints = []
 -   for (let i = 0; i < points.length - 1; i++) {
 -     let p = getCurveByTwoPoints(points[i], points[i + 1], options.count)
 -     if (p && p.length > 0) {
 -       curvePoints = curvePoints.concat(p)
 -     }
 -   }
 -   return curvePoints
 - }
 - 
 - /**
 -  * Get a curvilinear coordinate set of points based on two points
 -  * @param obj1
 -  * @param obj2
 -  * @param count
 -  * @returns {null|[]}
 -  */
 - function getCurveByTwoPoints(obj1, obj2, count) {
 -   if (!obj1 || !obj2) {
 -     return null
 -   }
 -   let curveCoordinates = []
 -   count = count || 40 // 曲线是由一些小的线段组成的,这个表示这个曲线所有到的折线的个数
 -   let B1 = function(x) {
 -     return 1 - 2 * x + x * x
 -   }
 -   let B2 = x => {
 -     return 2 * x - 2 * x * x
 -   }
 -   let B3 = x => {
 -     return x * x
 -   }
 - 
 -   let t, h, h2, lat3, lng3, t2
 -   let inc = 0
 -   let lat1 = parseFloat(obj1.lat)
 -   let lat2 = parseFloat(obj2.lat)
 -   let lng1 = parseFloat(obj1.lng)
 -   let lng2 = parseFloat(obj2.lng)
 - 
 -   // 计算曲线角度的方法
 -   if (lng2 > lng1) {
 -     if (lng2 - lng1 > 180) {
 -       if (lng1 < 0) {
 -         lng1 = 180 + 180 + lng1
 -         lng2 = 180 + 180 + lng2
 -       }
 -     }
 -   }
 -   // 此时纠正了 lng1 lng2
 - 
 -   t2 = 0
 -   // 纬度相同
 -   if (lat2 === lat1) {
 -     t = 0
 -     h = lng1 - lng2
 -     // 经度相同
 -   } else if (lng2 === lng1) {
 -     t = Math.PI / 2
 -     h = lat1 - lat2
 -   } else {
 -     t = Math.atan((lat2 - lat1) / (lng2 - lng1))
 -     h = (lat2 - lat1) / Math.sin(t)
 -   }
 -   if (t2 === 0) {
 -     t2 = t + Math.PI / 5
 -   }
 -   h2 = h / 2
 -   lng3 = h2 * Math.cos(t2) + lng1
 -   lat3 = h2 * Math.sin(t2) + lat1
 - 
 -   for (let i = 0; i < count + 1; i++) {
 -     let x = lng1 * B1(inc) + lng3 * B2(inc) + lng2 * B3(inc)
 -     let y = lat1 * B1(inc) + lat3 * B2(inc) + lat2 * B3(inc)
 -     let lng1_src = obj1.lng
 -     let lng2_src = obj2.lng
 -     curveCoordinates.push([lng1_src < 0 && lng2_src > 0 ? x - 360 : x, y])
 -     inc = inc + 1 / count
 -   }
 -   return curveCoordinates
 - }
 
 
  |