UNPKG

vue-cesium

Version:
1 lines 29.2 kB
{"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 as unknown as h337.HeatmapConfiguration)\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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"}