vue-cesium-jyt
Version:
Vue 3.x components for CesiumJS.
1 lines • 28.2 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/heatmap/index.ts"],"sourcesContent":["import type { ExtractPropTypes, 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} 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 type VcHeatMapData = {\n x: number\n y: number\n value: number\n}\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,\n type: {\n type: String,\n default: 'primitive'\n },\n segments: {\n type: Array as PropType<Array<VcColorSegments>>,\n default: () => []\n },\n projection: {\n type: String,\n default: '3857' // 4326\n }\n}\nexport default defineComponent({\n name: 'VcOverlayHeatmap',\n props: heatmapOverlayProps,\n emits: commonEmits,\n setup(props, 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>(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>(null)\n const material = ref<MaterialOption>(null!)\n const image = ref<any>(null)\n const childRef = ref<typeof VcLayerImagery | typeof VcEntity | typeof VcPrimitiveGround | null>(null)\n const appearance = ref<AppearanceOption>(null!)\n const canRender = ref(false)\n const config = ref<any>(null)\n\n const vcParent = getVcParentInstance(instance)\n ;(vcParent.proxy as VcComponentPublicInstance).createPromise?.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 x: Math.round((mp.x - xoffset) / factor + spacing),\n y: Math.round((mp.y - yoffset) / factor + spacing),\n value: undefined\n }\n hp.y = height - hp.y\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 type VcOverlayHeatmapProps = ExtractPropTypes<typeof heatmapOverlayProps>\n"],"names":["VcEntity","VcLayerImagery"],"mappings":"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"}