{"version":3,"file":"cesium-helpers.mjs","sources":["../../../../packages/utils/cesium-helpers.ts"],"sourcesContent":["import type {\n  AnyFunction,\n  Cartesian2Option,\n  Cartesian3Option,\n  Cartesian4Option,\n  PolygonHierarchyOption,\n  CartographicInDegreeOption,\n  NearFarScalarOption,\n  DistanceDisplayConditionOption,\n  ColorInByteOption,\n  MaterialOption,\n  VcComponentInternalInstance,\n  RectangleInDegreeOption,\n  BoundingRectangleOption,\n  PlaneOption,\n  TranslationRotationScaleOption,\n  VcCamera,\n  HeadingPitchRollOption,\n  CesiumAppearance,\n  VcPosition,\n  CesiumPosition,\n  VcRectangle,\n  CesiumRectangle,\n  VcColor,\n  CesiumColor,\n  VcAppearance,\n  CesiumDistanceDisplayCondition,\n  VcDistanceDisplayCondition,\n  VcCartesian2,\n  CesiumCartesian2,\n  CesiumCartesian3Array,\n  VcCartesian3Array,\n  VcCartesian2Array,\n  CesiumCartesian2Array,\n  CesiumNearFarScalar,\n  VcNearFarScalar,\n  VcPolygonHierarchy,\n  CesiumPolygonHierarchy,\n  VcMaterial,\n  VcMaterialProperty,\n  CesiumMaterialProperty,\n  CesiumMaterial,\n  VcBoundingRectangle,\n  CesiumBoundingRectangle\n} from './types'\nimport { hasOwn, isFunction, isArray, isString, isPlainObject, isEmptyObj, getObjClassName, isUndefined } from './util'\n\n/**\n * 将对象或数组转换为 Cesium.Cartesian2\n * @param {Object} val\n * @returns {Cartesian2 | CallbackProperty} 返回 Cartesian2 或者 CallbackProperty\n * @example\n * const options = [100, 100]\n * // const options = [x: 100, y: 100]\n * const position = makeCartesian2(options)\n */\nexport function makeCartesian2(val: VcCartesian2, isConstant = false): CesiumCartesian2 | undefined {\n  const { Cartesian2, CallbackProperty } = Cesium\n\n  if (val instanceof Cesium.Cartesian2 || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isPlainObject(val)) {\n    if (hasOwn(val, 'x') && hasOwn(val, 'y')) {\n      const value = val as Cartesian2Option\n      return new Cartesian2(value.x, value.y)\n    }\n  }\n\n  if (isArray(val)) {\n    return new Cartesian2(val[0], val[1])\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 将对象或者数组转换为 Cesium.Cartesian3\n * @param {Object} val 传入的对象或数组\n * @param {Boolean} isConstant 传入function时生效，true 代表回调 function 每时每刻都返回值， false 代表改变才会返回值。默认false。\n * @returns 返回 Cartesian3 或者 CallbackProperty\n * @example\n * const options = {\n *  lng: 108,\n *  lat: 35,\n *  height: 1000\n * }\n * // const options = [108, 35, 1000]\n * const position = makeCartesian3 (options) // return Cesium.Cartesian3\n */\nexport function makeCartesian3(val: VcPosition, ellipsoid?: Cesium.Ellipsoid, isConstant = false): CesiumPosition | undefined {\n  const {\n    CallbackProperty,\n    Cartesian3,\n    Ellipsoid,\n    SampledPositionProperty,\n    CompositePositionProperty,\n    ConstantPositionProperty,\n    TimeIntervalCollectionPositionProperty\n  } = Cesium\n\n  if (\n    val instanceof Cartesian3 ||\n    val instanceof CallbackProperty ||\n    val instanceof SampledPositionProperty ||\n    val instanceof CompositePositionProperty ||\n    val instanceof ConstantPositionProperty ||\n    val instanceof TimeIntervalCollectionPositionProperty\n  ) {\n    return val\n  }\n\n  ellipsoid = ellipsoid || Ellipsoid.WGS84\n\n  if (isPlainObject(val)) {\n    if (hasOwn(val, 'x') && hasOwn(val, 'y') && hasOwn(val, 'z')) {\n      const value = val as Cartesian3Option\n      return new Cartesian3(value.x, value.y, value.z)\n    } else if (hasOwn(val, 'lng') && hasOwn(val, 'lat')) {\n      const value = val as CartographicInDegreeOption\n      return Cartesian3.fromDegrees(value.lng!, value.lat!, value.height || 0, ellipsoid)\n    }\n  }\n  // 经纬度数组\n  if (isArray(val)) {\n    return Cartesian3.fromDegrees(val[0], val[1], val[2] || 0, ellipsoid)\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 将数组 [lng, lat, height, ……，lng, lat, height] 转换为 Cesium.Cartesian3 数组\n * @param {Array} val\n * @returns {Array<Cartesian3>}\n */\nexport function makeCartesian3Array(vals: VcCartesian3Array, ellipsoid?: Cesium.Ellipsoid, isConstant = false): CesiumCartesian3Array | undefined {\n  const { CallbackProperty, Cartesian3, Ellipsoid } = Cesium\n\n  if (vals instanceof CallbackProperty) {\n    return vals\n  }\n\n  if (isFunction(vals)) {\n    return new CallbackProperty(vals, isConstant)\n  }\n\n  ellipsoid = ellipsoid || Ellipsoid.WGS84\n\n  if (isArray(vals)) {\n    if (isArray(vals[0]) || isPlainObject(vals[0])) {\n      const results: Array<any> = []\n      vals.forEach(val => {\n        results.push(makeCartesian3(val, ellipsoid))\n      })\n      return results\n    }\n\n    return Cartesian3.fromDegreesArrayHeights(vals as Array<number>, ellipsoid)\n  }\n\n  return undefined\n}\n\n/**\n * 将形如 [lng, lat, ……，lng, lat] 数组转换为 Cesium.Cartesian2 数组\n * @param {Array} vals\n * @returns {Array<Cartesian2>}\n */\nexport function makeCartesian2Array(vals: VcCartesian2Array, isConstant): CesiumCartesian2Array | undefined {\n  const { CallbackProperty } = Cesium\n\n  if (vals instanceof CallbackProperty) {\n    return vals\n  }\n\n  if (isFunction(vals)) {\n    return new CallbackProperty(vals, isConstant)\n  }\n\n  if (isArray(vals)) {\n    const points: Array<Cesium.Cartesian2> = []\n    vals.forEach(val => {\n      points.push(makeCartesian2(val) as Cesium.Cartesian2)\n    })\n    return points\n  }\n\n  return undefined\n}\n\n/**\n * 将对象或数组 转换为 Cesium.Quaternion\n * @param {Object} val\n * @example\n * const options = {x: 0, y: 0, z: 0, w: 0}\n * // const options = [0, 0, 0, 0]\n * const orientation = makeQuaternion(options) // returns Cesium.Quaternion\n */\nexport function makeQuaternion(\n  val: Cesium.CallbackProperty | Cesium.Quaternion | Cartesian4Option | Array<number> | AnyFunction<any>,\n  isConstant = false\n): Cesium.CallbackProperty | Cesium.Quaternion | Cesium.VelocityOrientationProperty | undefined {\n  const { CallbackProperty, Quaternion, VelocityOrientationProperty } = Cesium\n\n  if (val instanceof Quaternion || val instanceof CallbackProperty || val instanceof VelocityOrientationProperty) {\n    return val\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'x') && hasOwn(val, 'y')) {\n    const value = val as Cartesian4Option\n    return new Quaternion(value.x, value.y, value.z, value.w)\n  }\n\n  if (isArray(val)) {\n    return new Quaternion(val[0], val[1], val[2], val[3])\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 解析 HierarchyJson\n * @param {Object} val\n */\nfunction parsePolygonHierarchyJson(val: Array<PolygonHierarchyOption>, ellipsoid?: Cesium.Ellipsoid) {\n  val.forEach(item => {\n    item.positions = makeCartesian3Array(item.positions, ellipsoid) as Array<Cesium.Cartesian3>\n    if (item.holes) {\n      parsePolygonHierarchyJson(item.holes, ellipsoid)\n    }\n  })\n}\n\n/**\n * 普通数组或对象转 Cesium.PolygonHierarchy 对象。\n * @param {Object|Array} val\n */\nexport function makePolygonHierarchy(val: VcPolygonHierarchy, ellipsoid?: Cesium.Ellipsoid, isConstant = false): CesiumPolygonHierarchy | undefined {\n  const { PolygonHierarchy, CallbackProperty } = Cesium\n\n  if (val instanceof PolygonHierarchy || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  if (isArray(val) && val.length >= 3) {\n    const points = makeCartesian3Array(val, ellipsoid) as Array<Cesium.Cartesian3>\n    return new PolygonHierarchy(points)\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'positions')) {\n    const value = val as PolygonHierarchyOption\n    value.positions = makeCartesian3Array(value.positions, ellipsoid) as Array<Cesium.Cartesian3>\n    value.holes?.length && parsePolygonHierarchyJson(value.holes, ellipsoid)\n    return value\n  }\n\n  return undefined\n}\n\n/**\n * 对象或数组转 Cesium.NearFarScalar。\n * @param {Object} val\n * @returns {NearFarScalar}\n * @example\n * const options = {near: 1000, nearValue: 1.0, far: 10000, farValue: 0.5}\n * // const options = [1000, 1.0, 10000, 1.5]\n * const nearFarScalar = makeNearFarScalar(options)\n */\nexport function makeNearFarScalar(val: VcNearFarScalar, isConstant = false): CesiumNearFarScalar | undefined {\n  const { NearFarScalar, CallbackProperty } = Cesium\n\n  if (val instanceof NearFarScalar || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'near') && hasOwn(val, 'far')) {\n    const value = val as NearFarScalarOption\n    return new NearFarScalar(value.near, value.nearValue || 0.0, value.far, value.farValue || 1.0)\n  }\n\n  if (isArray(val)) {\n    return new NearFarScalar(val[0], val[1], val[2], val[3])\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n/**\n * 对象或数组转 Cesium.DistanceDisplayCondition。\n * @param {Object} val\n * @returns {DistanceDisplayCondition}\n * @example\n * const options = [0, 1000]\n * // const options = {near: 0, far: 1000}\n * const distanceDisplayCondition = makeDistanceDisplayCondition(options) // return Cesium.DistanceDisplayCondition\n */\nexport function makeDistanceDisplayCondition(val: VcDistanceDisplayCondition, isConstant = false): CesiumDistanceDisplayCondition | undefined {\n  const { DistanceDisplayCondition, CallbackProperty } = Cesium\n\n  if (val instanceof DistanceDisplayCondition || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'near') && hasOwn(val, 'far')) {\n    const value = val as DistanceDisplayConditionOption\n    return new DistanceDisplayCondition(value.near, value.far)\n  }\n\n  if (isArray(val)) {\n    return new DistanceDisplayCondition(val[0], val[1])\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 普通对象、数组或字符串转 Cesium.Color。\n * @param {String|Array|Object|Function} val\n * @returns {Color}\n * @example\n * const options = 'red'\n * // const options = [1, 0, 0, 1.0] // r g b a\n * // const options = {red: 255, green: 0, bule: 0, alpha: 255}\n * const color = makeColor(options) // return Cesium.Color\n */\nexport function makeColor(val: VcColor, isConstant = false): CesiumColor | undefined {\n  const { Color, CallbackProperty } = Cesium\n\n  if (val instanceof Color || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isString(val)) {\n    return Color.fromCssColorString(val)\n  }\n\n  if (isPlainObject(val)) {\n    if (hasOwn(val, 'red')) {\n      const value = val as ColorInByteOption\n      return Color.fromBytes(value.red, value.green || 255, value.blue || 255, value.alpha || 255)\n    } else if (hasOwn(val, 'x')) {\n      const value = val as Cartesian4Option\n      return new Color(value.x, value.y || 1, value.z || 1, value.w || 1)\n    }\n  }\n\n  if (isArray(val)) {\n    return Color.fromBytes(val[0], val[1], val[2], val[3] || 255)\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\nexport function makeColors(vals: VcColor[]): Cesium.Color[] {\n  if (isArray(vals)) {\n    const results: Cesium.Color[] = []\n    vals.forEach(val => {\n      results.push(makeColor(val) as Cesium.Color)\n    })\n\n    return results\n  } else {\n    return vals\n  }\n}\n\n/**\n * 普通对象或数组 [r, g, b, a] 或字符串转 MaterialProperty\n * @param {String|Array|Object} val\n */\nexport function makeMaterialProperty(val: VcMaterialProperty, isConstant = false): CesiumMaterialProperty {\n  const {\n    CallbackProperty,\n    Color,\n    CheckerboardMaterialProperty,\n    ColorMaterialProperty,\n    GridMaterialProperty,\n    ImageMaterialProperty,\n    PolylineArrowMaterialProperty,\n    PolylineDashMaterialProperty,\n    PolylineGlowMaterialProperty,\n    PolylineOutlineMaterialProperty,\n    StripeMaterialProperty,\n    StripeOrientation\n  } = Cesium\n\n  if (\n    val instanceof CallbackProperty ||\n    val instanceof Color ||\n    val instanceof CheckerboardMaterialProperty ||\n    val instanceof ColorMaterialProperty ||\n    val instanceof ImageMaterialProperty ||\n    val instanceof PolylineArrowMaterialProperty ||\n    val instanceof PolylineDashMaterialProperty ||\n    val instanceof PolylineGlowMaterialProperty ||\n    val instanceof PolylineOutlineMaterialProperty ||\n    val instanceof StripeMaterialProperty ||\n    getObjClassName(val as any).indexOf('MaterialProperty') !== -1\n  ) {\n    return val as CesiumMaterialProperty\n  }\n  if (\n    (isString(val) && /(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$/.test(val)) ||\n    val instanceof HTMLImageElement ||\n    val instanceof HTMLCanvasElement ||\n    val instanceof HTMLVideoElement\n  ) {\n    return new ImageMaterialProperty({\n      image: val,\n      repeat: makeCartesian2({ x: 1.0, y: 1.0 }),\n      color: Color.WHITE,\n      transparent: true\n    })\n  }\n\n  if (isArray(val) || isString(val)) {\n    return new ColorMaterialProperty(makeColor(val))\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'fabric')) {\n    const value = val as MaterialOption\n    switch (value.fabric.type) {\n      case 'Image':\n        return new ImageMaterialProperty({\n          image: value.fabric.uniforms.image,\n          repeat: makeCartesian2((value.fabric.uniforms.repeat as Cartesian2Option) || { x: 1.0, y: 1.0 }),\n          color: makeColor(value.fabric.uniforms.color!) || Color.WHITE,\n          transparent: value.fabric.uniforms.transparent || false\n        })\n      case 'Color':\n        return new ColorMaterialProperty(makeColor(value.fabric.uniforms.color || Color.WHITE))\n      case 'PolylineArrow':\n        return new PolylineArrowMaterialProperty(makeColor(value.fabric.uniforms.color || Color.WHITE))\n      case 'PolylineDash':\n        return new PolylineDashMaterialProperty({\n          color: makeColor(value.fabric.uniforms.color || 'white') || Color.WHITE,\n          gapColor: makeColor(value.fabric.uniforms.gapColor!) || Color.TRANSPARENT,\n          dashLength: value.fabric.uniforms.taperPower || 16.0,\n          dashPattern: value.fabric.uniforms.taperPower || 255.0\n        })\n      case 'PolylineGlow':\n        return new PolylineGlowMaterialProperty({\n          color: makeColor(value.fabric.uniforms.color!) || Color.WHITE,\n          glowPower: value.fabric.uniforms.glowPower || 0.25,\n          taperPower: value.fabric.uniforms.taperPower || 1.0\n        })\n      case 'PolylineOutline':\n        return new PolylineOutlineMaterialProperty({\n          color: makeColor(value.fabric.uniforms.color!) || Color.WHITE,\n          outlineColor: makeColor(value.fabric.uniforms.outlineColor!) || Color.BLACK,\n          outlineWidth: value.fabric.uniforms.outlineWidth || 1.0\n        })\n      case 'Checkerboard':\n        return new CheckerboardMaterialProperty({\n          evenColor: makeColor(value.fabric.uniforms.evenColor!) || Color.WHITE,\n          oddColor: makeColor(value.fabric.uniforms.oddColor!) || Color.BLACK,\n          repeat: makeCartesian2((value.fabric.uniforms.repeat as Cartesian2Option) || { x: 2, y: 2 })\n        })\n      case 'Grid':\n        return new GridMaterialProperty({\n          color: makeColor(value.fabric.uniforms.color!) || Color.WHITE,\n          cellAlpha: value.fabric.uniforms.cellAlpha || 0.1,\n          lineCount: makeCartesian2((value.fabric.uniforms.lineCount as Cartesian2Option) || { x: 8, y: 8 }),\n          lineThickness: makeCartesian2((value.fabric.uniforms.lineThickness as Cartesian2Option) || { x: 1, y: 1 }),\n          lineOffset: makeCartesian2((value.fabric.uniforms.lineOffset as Cartesian2Option) || { x: 0, y: 0 })\n        })\n      case 'Stripe':\n        return new StripeMaterialProperty({\n          orientation: value.fabric.uniforms.orientation || StripeOrientation.HORIZONTAL,\n          evenColor: makeColor(value.fabric.uniforms.evenColor || 'white'),\n          oddColor: makeColor(value.fabric.uniforms.oddColor || 'black'),\n          offset: value.fabric.uniforms.offset || 0,\n          repeat: (value.fabric.uniforms.repeat as number) || 1\n        })\n    }\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return val as CesiumMaterialProperty\n}\n\n/**\n * 转 Material\n * @param {String|Array|Object} val\n */\nexport function makeMaterial(this, val: VcMaterial): CesiumMaterial {\n  const vcInstance = this as VcComponentInternalInstance\n  const cmpName = vcInstance?.proxy?.$options.name\n  if (\n    cmpName &&\n    (cmpName.indexOf('Graphics') !== -1 || cmpName.indexOf('Datasource') !== -1 || cmpName === 'VcOverlayDynamic' || cmpName === 'VcEntity')\n  ) {\n    return makeMaterialProperty(val as VcMaterialProperty)\n  }\n  const { Material, combine } = Cesium\n  if (val instanceof Material) {\n    return val\n  }\n  if (isPlainObject(val) && hasOwn(val, 'fabric')) {\n    const f = obj => {\n      for (const i in obj) {\n        if (!isArray(obj[i]) && isPlainObject(obj[i])) {\n          f(obj[i])\n        } else {\n          if (i.toLocaleLowerCase().indexOf('color') !== -1 && !isEmptyObj(obj[i])) {\n            const result = makeColor(obj[i])\n            // Cesium 通过对象属性个数判断具体材质类型的，通过 Cesium.combine 移除 vue 传的一些属性\n            obj[i] = combine(result, result, true)\n          }\n        }\n      }\n    }\n    f(val)\n    return new Material(val as MaterialOption)\n  }\n\n  if (isArray(val) || isString(val)) {\n    const material = Material.fromType('Color')\n    material.uniforms.color = makeColor(val)\n    return material\n  }\n\n  return undefined\n}\n\nexport function makeAppearance(this: VcComponentInternalInstance, val: VcAppearance): CesiumAppearance | undefined {\n  const {\n    Appearance,\n    DebugAppearance,\n    MaterialAppearance,\n    PolylineColorAppearance,\n    EllipsoidSurfaceAppearance,\n    PerInstanceColorAppearance,\n    PolylineMaterialAppearance\n  } = Cesium\n\n  if (\n    val instanceof Appearance ||\n    val instanceof DebugAppearance ||\n    val instanceof MaterialAppearance ||\n    val instanceof PolylineColorAppearance ||\n    val instanceof EllipsoidSurfaceAppearance ||\n    val instanceof PerInstanceColorAppearance ||\n    val instanceof PolylineMaterialAppearance ||\n    getObjClassName(val as any).indexOf('Appearance') !== -1\n  ) {\n    return val as CesiumAppearance\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'type')) {\n    const options: any = {\n      ...val.options\n    }\n    if (val.options?.material) {\n      options.material = makeMaterial.call(this, val.options.material as any)\n    }\n\n    return new Cesium[val.type!]({\n      ...options\n    })\n  }\n\n  return undefined\n}\n\n/**\n * 将对象 {west: number, south: number, east: number, north: number} 或者[west, south, east, north]数组 转 Cesium.Rectangle 对象。\n * @param {Object} val\n * @returns {Rectangle}\n */\nexport function makeRectangle(val: VcRectangle, isConstant = false): CesiumRectangle | Cesium.RectangleGraphics | undefined {\n  const { Rectangle, RectangleGraphics, CallbackProperty } = Cesium\n\n  // Entiy 的 rectangle 属性不能调用这个方法\n  if (val instanceof RectangleGraphics || val instanceof Rectangle) {\n    return val\n  }\n\n  if (isArray(val)) {\n    return Rectangle.fromDegrees(val[0], val[1], val[2], val[3])\n  }\n\n  if (isPlainObject(val)) {\n    if (hasOwn(val, 'west')) {\n      const value = val as RectangleInDegreeOption\n      return Rectangle.fromDegrees(value.west, value.south, value.east, value.north)\n    } else if (hasOwn(val, 'x')) {\n      const value = val as Cartesian4Option\n      return new Rectangle(value.x, value.y, value.z, value.w)\n    }\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 对象或数组转 Cesium.BoundingRectangle。\n * @param {Object} val\n * @returns {Cesium.BoundingRectangle}\n * @example\n * const options = [0, 0, 100, 100]\n * // const options = {x: 0, y: 0, width: 100, height: 100}\n * const boundingRectangle = makeBoundingRectangle(options)\n */\nexport function makeBoundingRectangle(val: VcBoundingRectangle, isConstant = false): CesiumBoundingRectangle | undefined {\n  const { BoundingRectangle, CallbackProperty } = Cesium\n\n  if (val instanceof BoundingRectangle || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'x')) {\n    const value = val as BoundingRectangleOption\n    return new BoundingRectangle(value.x, value.y, value.width, value.height)\n  }\n\n  if (isArray(val)) {\n    return new BoundingRectangle(val[0], val[1], val[2], val[3])\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 普通对象 {normal: number, distance: number} 转 Cesium.Plane 对象。\n * @param {Object} val\n * @returns {Plane}\n */\nexport function makePlane(\n  val: Cesium.CallbackProperty | Cesium.Plane | PlaneOption | Array<any> | AnyFunction<any>,\n  isConstant = false\n): Cesium.CallbackProperty | Cesium.Plane | Cesium.PlaneGraphics | undefined {\n  const { Cartesian3, Plane, PlaneGraphics, CallbackProperty } = Cesium\n\n  // Entiy 和 PlaneGraphics 都有个 plane 属性 要区别一下\n  if (val instanceof PlaneGraphics || val instanceof Plane || val instanceof CallbackProperty) {\n    return val\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'normal')) {\n    const value = val as PlaneOption\n    // normal 法向量 需要写成 {x: number, y: number, z: number} 形式\n    Cartesian3.normalize(makeCartesian3(value.normal) as Cesium.Cartesian3, value.normal as Cesium.Cartesian3)\n    return new Plane(value.normal as Cesium.Cartesian3, value.distance)\n  }\n\n  if (isArray(val)) {\n    const point3D = makeCartesian3(val[0]) as Cesium.Cartesian3\n    const normalizePoint3D = Cartesian3.normalize(point3D, new Cartesian3())\n    return new Plane(normalizePoint3D, val[1])\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n\n  return undefined\n}\n\n/**\n * 普通对象转平移、旋转、缩放变换对象。\n * @param {*} val\n */\nexport function makeTranslationRotationScale(\n  val: Cesium.TranslationRotationScale | Cesium.CallbackProperty | TranslationRotationScaleOption | AnyFunction<any> | Array<any>,\n  isConstant = false\n) {\n  const { TranslationRotationScale, CallbackProperty } = Cesium\n  if (val instanceof CallbackProperty || val instanceof TranslationRotationScale) {\n    return val\n  }\n\n  if (isPlainObject(val) && hasOwn(val, 'translation')) {\n    const value = val as TranslationRotationScaleOption\n    // note\n    // translation scale需要写成 { x: number, y: number, z: number } 的形式\n    return new TranslationRotationScale(\n      makeCartesian3(value.translation) as Cesium.Cartesian3,\n      makeQuaternion(value.rotation) as Cesium.Quaternion,\n      makeCartesian3(value.scale) as Cesium.Cartesian3\n    )\n  }\n\n  if (isArray(val)) {\n    return new TranslationRotationScale(\n      makeCartesian3(val[0]) as Cesium.Cartesian3,\n      makeQuaternion(val[1]) as Cesium.Quaternion,\n      makeCartesian3(val[2]) as Cesium.Cartesian3\n    )\n  }\n\n  if (isFunction(val)) {\n    return new CallbackProperty(val, isConstant)\n  }\n  return val\n}\n\nexport function makeOptions(this, val) {\n  const vcInstance = this as VcComponentInternalInstance\n  const cmpName = vcInstance.proxy?.$options.name\n  const result: any = {}\n  switch (cmpName) {\n    case 'VcDatasourceGeojson':\n      Object.assign(result, val)\n      result && result.markerColor && (result.markerColor = makeColor(result.markerColor))\n      result && result.stroke && (result.stroke = makeColor(result.stroke))\n      result && result.fill && (result.fill = makeColor(result.fill))\n      return result\n  }\n  return val\n}\n\nexport function captureScreenshot(viewer: Cesium.Viewer) {\n  const scene = viewer.scene\n  const promise: Promise<string> = new Promise((resolve, reject) => {\n    const removeCallback = viewer.scene.postRender.addEventListener(() => {\n      removeCallback()\n      try {\n        const cesiumCanvas = viewer.scene.canvas\n        const canvas = cesiumCanvas\n        resolve(canvas.toDataURL('image/png'))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  })\n\n  scene.render(viewer.clock.currentTime)\n  return promise\n}\n\nexport function makeCameraOptions(camera: VcCamera, ellipsoid?: Cesium.Ellipsoid) {\n  const { Math: CesiumMath, Rectangle } = Cesium\n\n  let destination: Cesium.Cartesian3 | Cesium.Rectangle | undefined = undefined\n  let orientation: HeadingPitchRollOption = {}\n\n  if (hasOwn(camera, 'position')) {\n    const position = camera.position\n    destination = makeCartesian3(position!, ellipsoid) as Cesium.Cartesian3\n    if ((hasOwn(position!, 'lng') && hasOwn(position!, 'lat')) || isArray(position)) {\n      orientation = {\n        heading: CesiumMath.toRadians(camera.heading || 360),\n        pitch: CesiumMath.toRadians(camera.pitch || -90),\n        roll: CesiumMath.toRadians(camera.roll || 0)\n      }\n    } else {\n      orientation = {\n        heading: camera.heading || 2 * Math.PI,\n        pitch: camera.pitch || -Math.PI / 2,\n        roll: camera.roll || 0\n      }\n    }\n  } else if (hasOwn(camera, 'rectangle')) {\n    const rectangle = camera.retangle\n    destination = makeRectangle(rectangle!) as Cesium.Rectangle\n    Rectangle.validate(destination)\n    if (\n      (hasOwn(rectangle!, 'west') && hasOwn(rectangle!, 'south') && hasOwn(rectangle!, 'east') && hasOwn(rectangle!, 'north')) ||\n      isArray(rectangle)\n    ) {\n      orientation = {\n        heading: CesiumMath.toRadians(camera.heading || 360),\n        pitch: CesiumMath.toRadians(camera.pitch || -90),\n        roll: CesiumMath.toRadians(camera.roll || 0)\n      }\n    } else {\n      orientation = {\n        heading: camera.heading || 2 * Math.PI,\n        pitch: camera.pitch || -Math.PI / 2,\n        roll: camera.roll || 0\n      }\n    }\n  }\n\n  return {\n    destination,\n    orientation\n  }\n}\n\nexport function setViewerCamera(viewer: Cesium.Viewer, camera: VcCamera) {\n  const { destination, orientation } = makeCameraOptions(camera, viewer.scene.globe.ellipsoid)\n  viewer.camera.setView({\n    destination: destination,\n    orientation: orientation\n  })\n}\n\nexport function flyToCamera(viewer: Cesium.Viewer, camera: VcCamera, options?) {\n  const { destination, orientation } = makeCameraOptions(camera, viewer.scene.globe.ellipsoid)\n  viewer.camera.flyTo({\n    destination: options.destination || destination,\n    orientation: options.orientation || orientation,\n    duration: options.duration,\n    complete: options.complete,\n    cancel: options.cancel\n  })\n}\n\nexport function getGeodesicDistance(start: Cesium.Cartesian3, end: Cesium.Cartesian3, ellipsoid: Cesium.Ellipsoid) {\n  const { EllipsoidGeodesic, Ellipsoid } = Cesium\n  ellipsoid = ellipsoid || Ellipsoid.WGS84\n  const pickedPointCartographic = ellipsoid.cartesianToCartographic(start)\n  const lastPointCartographic = ellipsoid.cartesianToCartographic(end)\n  const geodesic = new EllipsoidGeodesic(pickedPointCartographic, lastPointCartographic)\n  return geodesic.surfaceDistance\n}\n\nexport function getHeadingPitchRoll(start: Cesium.Cartesian3, end: Cesium.Cartesian3, scene: Cesium.Scene, result?: Array<number>) {\n  const { Camera, Cartesian3, Math: CesiumMath } = Cesium\n  const camera = new Camera(scene)\n  if (Cartesian3.equals(start, end)) {\n    return undefined\n  }\n\n  let direction = Cartesian3.subtract(end, start, {} as any)\n  direction = Cartesian3.normalize(direction, direction)\n  let up = Cartesian3.subtract(start, new Cartesian3(), {} as any)\n  up = Cartesian3.normalize(up, up)\n  camera.setView({\n    destination: start,\n    orientation: {\n      direction,\n      up\n    }\n  })\n\n  result = result || [0, 0, 0]\n  let heading = camera.heading\n  heading -= CesiumMath.PI_OVER_TWO\n  if (heading < 0) {\n    heading += CesiumMath.TWO_PI\n  }\n  result.splice(0, result.length, heading, camera.pitch, camera.roll)\n  return result\n}\n\nexport function getPolylineSegmentEndpoint(start: Cesium.Cartesian3, heading: number, distance: number, ellipsoid: Cesium.Ellipsoid) {\n  const { HeadingPitchRoll, Transforms, Matrix4, Cartesian3, Cartesian4, Quaternion, Cartographic, Ellipsoid } = Cesium\n  ellipsoid = ellipsoid || Ellipsoid.WGS84\n  const hpr = new HeadingPitchRoll(heading, 0, 0)\n  const scale = new Cartesian3(1, 1, 1)\n  const matrix = Transforms.headingPitchRollToFixedFrame(start, hpr)\n  const translation = Matrix4.getColumn(matrix, 1, new Cartesian4())\n  const axis = new Cartesian3(translation.x, translation.y, translation.z)\n  const quaternion = Quaternion.fromAxisAngle(axis, distance * ellipsoid.oneOverRadii.x)\n  const hprMatrix = Matrix4.fromTranslationQuaternionRotationScale(Cartesian3.ZERO, quaternion, scale)\n  const position = Matrix4.multiplyByPoint(hprMatrix, start, new Cartesian3())\n  const startCartographic = Cartographic.fromCartesian(start, ellipsoid)\n  const positionCartographic = Cartographic.fromCartesian(position, ellipsoid)\n  positionCartographic.height = startCartographic.height\n  return Cartographic.toCartesian(positionCartographic, ellipsoid)\n}\n\nexport function calculateAreaByPostions(positions: Array<Cesium.Cartesian3>) {\n  let area = 0\n  const { CoplanarPolygonGeometry, VertexFormat, defined, Cartesian3 } = Cesium\n  const geometry = CoplanarPolygonGeometry.createGeometry(\n    CoplanarPolygonGeometry.fromPositions({\n      positions: positions,\n      vertexFormat: VertexFormat.POSITION_ONLY\n    })\n  )\n\n  if (!isUndefined(geometry) && defined(geometry)) {\n    const indices = geometry.indices\n    const positionValues = geometry.attributes.position.values as number[]\n    for (let i = 0; i < indices.length; i += 3) {\n      const indice0 = indices[i]\n      const indice1 = indices[i + 1]\n      const indice2 = indices[i + 2]\n\n      area += triangleArea(\n        Cartesian3.unpack(positionValues, 3 * indice0, {} as any),\n        Cartesian3.unpack(positionValues, 3 * indice1, {} as any),\n        Cartesian3.unpack(positionValues, 3 * indice2, {} as any)\n      )\n    }\n  }\n\n  return area\n}\n\nconst triangleArea = (vertexA, vertexB, vertexC) => {\n  const { Cartesian3 } = Cesium\n  const vectorBA = Cartesian3.subtract(vertexA, vertexB, {} as any)\n  const vectorBC = Cartesian3.subtract(vertexC, vertexB, {} as any)\n  const crossProduct = Cartesian3.cross(vectorBA, vectorBC, vectorBA)\n  return 0.5 * Cartesian3.magnitude(crossProduct)\n}\n\nconst restoreCursors: Array<string> = []\nexport function setViewerCursor(viewer: Cesium.Viewer, cursor: string) {\n  const restoreCursor = getComputedStyle(viewer.canvas).cursor\n  restoreCursors[restoreCursors.length - 1] !== restoreCursor && restoreCursors.push(restoreCursor)\n  viewer.canvas.setAttribute('style', `cursor: ${cursor}`)\n}\n\nexport function restoreViewerCursor(viewer: Cesium.Viewer, count = 1) {\n  for (let i = 0; i < count; i++) {\n    const cursor = restoreCursors.pop()\n    viewer.canvas.setAttribute('style', `cursor: ${cursor}`)\n  }\n}\n\nexport function makeJulianDate(val: string | Date | Cesium.JulianDate): Cesium.JulianDate {\n  const { JulianDate } = Cesium\n  if (val instanceof JulianDate) {\n    return val\n  } else if (isString(val)) {\n    return Cesium.JulianDate.fromIso8601(val)\n  } else if (val instanceof Date) {\n    return Cesium.JulianDate.fromDate(val)\n  }\n\n  return Cesium.JulianDate.now()\n}\n\nexport function getPolylineSegmentHeading(start: Cesium.Cartesian3, end: Cesium.Cartesian3) {\n  const { Cartesian3, Matrix4, Transforms, Math: CesiumMath } = Cesium\n  const cartesian3Scratch = new Cartesian3()\n  const matrix4Scratch = Transforms.eastNorthUpToFixedFrame(start)\n  Matrix4.inverse(matrix4Scratch, matrix4Scratch)\n  Matrix4.multiplyByPoint(matrix4Scratch, end, cartesian3Scratch)\n  Cartesian3.normalize(cartesian3Scratch, cartesian3Scratch)\n  return CesiumMath.toDegrees(Math.atan2(cartesian3Scratch.x, cartesian3Scratch.y))\n}\n\nexport function getPolylineSegmentPitch(start: Cesium.Cartesian3, end: Cesium.Cartesian3) {\n  const { Cartesian3, Matrix4, Transforms, Math: CesiumMath } = Cesium\n  const cartesian3Scratch = new Cartesian3()\n  const matrix4Scratch = Transforms.eastNorthUpToFixedFrame(start)\n  Matrix4.inverse(matrix4Scratch, matrix4Scratch)\n  Matrix4.multiplyByPoint(matrix4Scratch, end, cartesian3Scratch)\n  Cartesian3.normalize(cartesian3Scratch, cartesian3Scratch)\n  return CesiumMath.toDegrees(Math.asin(cartesian3Scratch.z))\n}\n\nexport function getFirstIntersection(\n  start: Cesium.Cartesian3,\n  end: Cesium.Cartesian3,\n  viewer: Cesium.Viewer,\n  objectsToExclude = []\n): Cesium.Cartesian3 {\n  const { Cartesian3, Ray, defined } = Cesium\n  const direction = Cartesian3.normalize(Cartesian3.subtract(end, start, new Cartesian3()), new Cartesian3())\n  const ray = new Ray(start, direction)\n  const result = viewer.scene.pickFromRay(ray, objectsToExclude)\n  if (defined(result)) {\n    if (defined(result.position)) {\n      const intersection = result.position\n      return intersection\n    }\n  }\n\n  return undefined\n}\n\n// 粗略计算\nexport function heightToLevel(altitude: number) {\n  const A = 40487.57\n  const B = 0.00007096758\n  const C = 91610.74\n  const D = -40467.74\n\n  return Math.round(D + (A - D) / (1 + Math.pow(altitude / C, B)))\n}\n"],"names":[],"mappings":"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"}