{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/heatmap/index.ts"],"sourcesContent":["import type { PropType, VNode, WatchStopHandle } from 'vue'\nimport { defineComponent, getCurrentInstance, ref, h, createCommentVNode, watch, onUnmounted, computed } from 'vue'\nimport type {\n  AppearanceOption,\n  VcColorSegments,\n  HeatmapConfiguration,\n  MaterialOption,\n  VcComponentInternalInstance,\n  VcComponentPublicInstance,\n  VcHeatMapData,\n  VcRectangle,\n  VcReadyObject\n} from '@vue-cesium/utils/types'\nimport { useCommon } from '@vue-cesium/composables'\nimport { show, rectangle } from '@vue-cesium/utils/cesium-props'\nimport { makeColor, makeRectangle } from '@vue-cesium/utils/cesium-helpers'\nimport h337 from '@zouyaoji/heatmap.js'\nimport VcEntity from '@vue-cesium/components/entity'\nimport VcLayerImagery from '@vue-cesium/components/imagery-layer'\nimport { VcPrimitiveGround } from '@vue-cesium/components/primitives'\nimport { getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nexport const heatmapOverlayProps = {\n  ...show,\n  ...rectangle,\n  min: {\n    type: Number,\n    default: 0\n  },\n  max: {\n    type: Number,\n    default: 100\n  },\n  data: Array as PropType<Array<VcHeatMapData>>,\n  options: Object as PropType<HeatmapConfiguration>,\n  type: {\n    type: String as PropType<'primitive' | 'entity' | 'imagery-layer'>,\n    default: 'primitive'\n  },\n  segments: {\n    type: Array as PropType<Array<VcColorSegments>>,\n    default: () => []\n  },\n  projection: {\n    type: String as PropType<'3857' | '4326'>,\n    default: '3857' // 4326\n  }\n}\nexport default defineComponent({\n  name: 'VcOverlayHeatmap',\n  props: heatmapOverlayProps,\n  emits: commonEmits,\n  setup(props: VcOverlayHeatmapProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcOverlayHeatmap'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n    const rootRef = ref<HTMLElement>(null)\n    const project = ref<Cesium.WebMercatorProjection | Cesium.GeographicProjection>(null)\n    const defaultOptions: HeatmapConfiguration = {\n      minCanvasSize: 700, // minimum size (in pixels) for the heatmap canvas\n      maxCanvasSize: 2000, // maximum size (in pixels) for the heatmap canvas\n      radiusFactor: 60, // data point size factor used if no radius is given (the greater of height and width divided by this number yields the used radius)\n      spacingFactor: 1.5, // extra space around the borders (point radius multiplied by this number yields the spacing)\n      maxOpacity: 0.8, // the maximum opacity used if not given in the heatmap options object\n      minOpacity: 0.1, // the minimum opacity used if not given in the heatmap options object\n      blur: 0.85, // the blur used if not given in the heatmap options object\n      gradient: {\n        // the gradient used if not given in the heatmap options object\n        '.3': 'blue',\n        '.65': 'yellow',\n        '.8': 'orange',\n        '.95': 'red'\n      },\n      xField: 'x',\n      yField: 'y',\n      valueField: 'value',\n      container: undefined\n    }\n    const coordinates = ref<any>()\n    const material = ref<MaterialOption>()\n    const image = ref<any>()\n    const childRef = ref<typeof VcLayerImagery | typeof VcEntity | typeof VcPrimitiveGround>()\n    const appearance = ref<AppearanceOption>()\n    const canRender = ref(false)\n    const config = ref<any>()\n\n    const vcParent = getVcParentInstance(instance)\n    ;(vcParent.proxy as VcComponentPublicInstance).creatingPromise?.then(() => {\n      canRender.value = true\n    })\n\n    // computed\n    const options = computed<HeatmapConfiguration>(() => {\n      return Object.assign({}, defaultOptions, props.options)\n    })\n\n    // watcch\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => image,\n        val => {\n          material.value.fabric.uniforms.image = val.value\n          ;(appearance.value.options.material as MaterialOption).fabric.uniforms.image = val.value\n        },\n        {\n          deep: true\n        }\n      )\n    )\n    unwatchFns.push(\n      watch(\n        () => props.data,\n        (newVal, oldVal) => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const heatmapInstance = instance.cesiumObject as h337.Heatmap<string, string, string>\n\n          if (Array.isArray(newVal) && Array.isArray(oldVal)) {\n            setData(newVal, heatmapInstance)\n            image.value = heatmapInstance.getDataURL()\n          } else {\n            commonState.reload()\n          }\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => [props.max, props.min],\n        vals => {\n          const heatmapInstance = instance.cesiumObject as h337.Heatmap<string, string, string>\n          heatmapInstance.setDataMax(vals[0] || 0)\n          heatmapInstance.setDataMin(vals[1] || 0)\n          image.value = heatmapInstance.getDataURL()\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => [props.type, props.projection, props.rectangle],\n        vals => {\n          commonState.reload()\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.options,\n        val => {\n          const heatmapInstance = instance.cesiumObject as h337.Heatmap<string, string, string>\n          heatmapInstance.configure(val as any)\n          image.value = heatmapInstance.getDataURL()\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    // methods\n    instance.createCesiumObject = async () => {\n      const { WebMercatorProjection, GeographicProjection } = Cesium\n      project.value = props.projection === '3857' ? new WebMercatorProjection() : new GeographicProjection()\n      const id = getID()\n      config.value = getConfig(props.rectangle)\n      const container = document.createElement('div')\n      if (Cesium.defined(id)) {\n        container.setAttribute('id', id)\n      }\n      container.setAttribute('style', 'width: ' + config.value.width + 'px; height: ' + config.value.height + 'px; margin: 0px; display: none;')\n      document.body.appendChild(container)\n      options.value.container = container\n\n      if (props.segments.length) {\n        options.value.gradient = {}\n        const Δ = props.max - props.min\n\n        for (let i = 0; i < props.segments.length; i++) {\n          options.value.gradient[`${(props.segments[i][0] - props.min) / Δ}`] = (makeColor(props.segments[i][1]) as Cesium.Color).toCssColorString()\n        }\n      }\n\n      const heatmapInstance = h337.create(options.value)\n      container.children[0].setAttribute('id', id + '-hm')\n      if (Array.isArray(props.data)) {\n        setData(props.data, heatmapInstance)\n        material.value = {\n          fabric: {\n            type: 'Image',\n            uniforms: {\n              image: image.value,\n              transparent: true\n            }\n          }\n        }\n        appearance.value = {\n          type: 'MaterialAppearance',\n          options: {\n            material: {\n              fabric: {\n                type: 'Image',\n                uniforms: {\n                  image: image.value\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return heatmapInstance\n    }\n    instance.unmount = async () => {\n      document.body.removeChild((instance.cesiumObject as any)._config.container)\n      return true\n    }\n\n    const getID = (len?: number) => {\n      let id = ''\n      const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n\n      for (let i = 0; i < (len || 8); i++) {\n        id += possible.charAt(Math.floor(Math.random() * possible.length))\n      }\n\n      return id\n    }\n\n    const getConfig = bounds => {\n      const rectangle = makeRectangle(bounds) as Cesium.Rectangle\n      const swmb = project.value.project(new Cesium.Cartographic(rectangle.west, rectangle.south))\n      const nemb = project.value.project(new Cesium.Cartographic(rectangle.east, rectangle.north))\n      const mbb = {\n        north: nemb.y,\n        east: nemb.x,\n        south: swmb.y,\n        west: swmb.x\n      }\n\n      let width = mbb.east > 0 && mbb.west < 0 ? mbb.east + Math.abs(mbb.west) : Math.abs(mbb.east - mbb.west)\n      let height = mbb.north > 0 && mbb.south < 0 ? mbb.north + Math.abs(mbb.south) : Math.abs(mbb.north - mbb.south)\n      let factor = 1\n      if (width > height && width > options.value.maxCanvasSize) {\n        factor = width / options.value.maxCanvasSize\n        if (height / factor < options.value.minCanvasSize) {\n          factor = height / options.value.minCanvasSize\n        }\n      } else if (height > width && height > options.value.maxCanvasSize) {\n        factor = height / options.value.maxCanvasSize\n        if (height / factor < options.value.minCanvasSize) {\n          factor = width / options.value.minCanvasSize\n        }\n      } else if (width < height && width < options.value.minCanvasSize) {\n        factor = width / options.value.minCanvasSize\n        if (height / factor > options.value.maxCanvasSize) {\n          factor = height / options.value.maxCanvasSize\n        }\n      } else if (height < width && height < options.value.minCanvasSize) {\n        factor = height / options.value.minCanvasSize\n        if (width / factor > options.value.maxCanvasSize) {\n          factor = width / options.value.maxCanvasSize\n        }\n      }\n\n      width = width / factor\n      height = height / factor\n\n      if (!Cesium.defined(options.value.radius)) {\n        options.value.radius = width > height ? width / options.value.radiusFactor : height / options.value.radiusFactor\n      }\n\n      const spacing = (options.value.radius || 1) * options.value.spacingFactor\n      const xoffset = mbb.west\n      const yoffset = mbb.south\n      width = Math.round(width + spacing * 2)\n      height = Math.round(height + spacing * 2)\n      mbb.west -= spacing * factor\n      mbb.east += spacing * factor\n      mbb.south -= spacing * factor\n      mbb.north += spacing * factor\n      const swmw = project.value.unproject(new Cesium.Cartesian3(mbb.west, mbb.south))\n      const nemw = project.value.unproject(new Cesium.Cartesian3(mbb.east, mbb.north))\n\n      const mwb = {\n        north: Cesium.Math.toDegrees(nemw.latitude),\n        east: Cesium.Math.toDegrees(nemw.longitude),\n        south: Cesium.Math.toDegrees(swmw.latitude),\n        west: Cesium.Math.toDegrees(swmw.longitude)\n      }\n      coordinates.value = mwb\n      return {\n        height,\n        width,\n        factor,\n        xoffset,\n        yoffset,\n        spacing\n      }\n    }\n\n    const setData = (data, heatmapInstance: h337.Heatmap<string, string, string>) => {\n      if (data) {\n        const { height, xoffset, yoffset, factor, spacing } = config.value\n        const xField = options.value.xField || 'x'\n        const yField = options.value.yField || 'y'\n        const valueField = options.value.valueField || 'value'\n        const datas: Array<VcHeatMapData> = []\n        for (let i = 0; i < data.length; i++) {\n          const gp = data[i]\n          if (!Cesium.defined(gp.id)) {\n            gp.id = i\n          }\n          const mp = project.value.project(Cesium.Cartographic.fromDegrees(gp[xField], gp[yField]))\n          const hp: VcHeatMapData = {\n            [xField]: Math.round((mp.x - xoffset) / factor + spacing),\n            [yField]: Math.round((mp.y - yoffset) / factor + spacing),\n            [valueField]: undefined\n          }\n          hp[yField] = height - hp[yField]\n          if (gp[valueField] || gp[valueField] === 0) {\n            hp[valueField] = gp[valueField]\n          }\n          if (hp[valueField] > props.max || hp[valueField] < props.min) {\n            continue\n          }\n          datas.push(hp)\n        }\n\n        heatmapInstance.setData({\n          min: props.min,\n          max: props.max,\n          data: datas\n        })\n\n        image.value = heatmapInstance.getDataURL()\n      }\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    // expose public methods\n    Object.assign(instance.proxy, {\n      rootRef: rootRef,\n      childRef: childRef\n    })\n\n    return () => {\n      if (canRender.value) {\n        const child: Array<VNode> = []\n        if (props.type === 'entity' && image.value) {\n          child.push(\n            h(VcEntity, {\n              ref: childRef,\n              show: props.show,\n              rectangle: {\n                coordinates: coordinates.value,\n                material: material.value\n              }\n            })\n          )\n        } else if (props.type === 'primitive') {\n          child.push(\n            h(VcPrimitiveGround, {\n              ref: childRef,\n              show: props.show,\n              appearance: appearance.value,\n              releaseGeometryInstances: false,\n              geometryInstances: new Cesium.GeometryInstance({\n                geometry: new Cesium.RectangleGeometry({\n                  rectangle: makeRectangle(coordinates.value) as Cesium.Rectangle\n                })\n              })\n            })\n          )\n        } else if (props.type === 'imagery-layer' && image.value) {\n          child.push(\n            h(VcLayerImagery, {\n              ref: childRef,\n              show: props.show,\n              imageryProvider: new Cesium.SingleTileImageryProvider({\n                url: image.value,\n                rectangle: makeRectangle(coordinates.value) as Cesium.Rectangle\n              })\n            })\n          )\n        }\n\n        return h(\n          'i',\n          {\n            ref: rootRef,\n            class: 'vc-overlay-heatmap',\n            style: 'display: none !important'\n          },\n          child\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport interface VcOverlayHeatmapProps {\n  /**\n   * Specify whether to display the heatmap overlay.\n   * Default value: true\n   */\n  show?: boolean\n  /**\n   * Specify a rectangle with north, south, east and west properties.\n   */\n  rectangle?: VcRectangle\n  /**\n   * Specify the minimum value of the heat map data.\n   * Default value: 0\n   */\n  min?: number\n  /**\n   * Specify the maximum value of the heat map data.\n   * Default value: 100\n   */\n  max?: number\n  data?: Array<VcHeatMapData>\n  /**\n   * Specify the heatmap configs.\n   */\n  options?: HeatmapConfiguration\n  /**\n   * Specify the render type of heat map object.\n   * Default value: primitive\n   */\n  type?: 'primitive' | 'entity' | 'imagery-layer'\n  /**\n   * Specify the color segment of the heatmap.\n   */\n  segments?: Array<VcColorSegments>\n  /**\n   * Specify the projection.\n   * Default value: 3857\n   */\n  projection?: '3857' | '4326'\n  /**\n   * Triggers before the VcOverlayHeatmap is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcOverlayHeatmap is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcOverlayHeatmap is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport type VcOverlayHeatmapRef = VcComponentPublicInstance<VcOverlayHeatmapProps>\n"],"names":["rectangle","VcEntity","VcLayerImagery"],"mappings":"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"}