UNPKG

vue-cesium

Version:
1 lines 17.1 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/distance-legend/index.ts"],"sourcesContent":["import { CSSProperties, Teleport } from 'vue'\nimport { computed, createCommentVNode, defineComponent, getCurrentInstance, h, nextTick, reactive, ref, watch } from 'vue'\nimport { $, getInstanceListener, getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport usePosition from '@vue-cesium/composables/private/use-position'\nimport type { VcDistanceLegendEvt, VcComponentInternalInstance, VcReadyObject, VcComponentPublicInstance } from '@vue-cesium/utils/types'\nimport throttle from '@vue-cesium/utils/private/throttle'\nimport { useCommon } from '@vue-cesium/composables'\nimport defaultProps from './defaultProps'\nimport { VcBtn } from '@vue-cesium/components/ui'\nimport type { VcBtnRef } from '@vue-cesium/components/ui'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nconst emits = {\n ...commonEmits,\n distanceLegendEvt: (evt: VcDistanceLegendEvt) => true\n}\n\nexport const distanceLegendProps = defaultProps\nexport default defineComponent({\n name: 'VcDistanceLegend',\n props: distanceLegendProps,\n emits: emits,\n setup(props: VcDistanceLegendProps, ctx) {\n // state\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'VcDistanceLegend'\n instance.cesiumEvents = []\n const commonState = useCommon(props, ctx, instance)\n if (commonState === void 0) {\n return\n }\n const parentInstance = getVcParentInstance(instance)\n const { $services } = commonState\n const rootRef = ref<VcBtnRef>(null)\n const distanceLabel = ref<string>('')\n const positionState = usePosition(props, $services)\n const hasVcNavigation = parentInstance.proxy?.$options.name === 'VcNavigation'\n const canRender = ref(hasVcNavigation)\n const rootStyle = reactive<CSSProperties>({})\n let lastLegendUpdate = 0\n const barWidth = ref(0)\n let distance = 0\n // watch\n watch(\n () => props,\n val => {\n nextTick(() => {\n if (!instance.mounted) {\n return\n }\n updateRootStyle()\n })\n },\n {\n deep: true\n }\n )\n const barStyle = computed(() => {\n return {\n width: `${barWidth.value}px`,\n left: `${5 + (props.width + 15 - barWidth.value) / 2}px`,\n height: '2px',\n background: props.barBackground\n }\n })\n // methods\n instance.createCesiumObject = async () => {\n distanceLabel.value = ''\n return rootRef\n }\n\n instance.mount = async () => {\n canRender.value = true\n nextTick(() => {\n updateRootStyle()\n })\n\n const { viewer } = $services\n viewer.scene.postRender.addEventListener(onScenePostRender)\n viewer.viewerWidgetResized?.raiseEvent({\n type: instance.cesiumClass,\n status: 'mounted',\n target: $(rootRef)?.$el\n })\n return true\n }\n\n instance.unmount = async () => {\n canRender.value = false\n const { viewer } = $services\n viewer.scene.postRender.removeEventListener(onScenePostRender)\n viewer.viewerWidgetResized?.raiseEvent({\n type: instance.cesiumClass,\n status: 'unmounted',\n target: $(rootRef)?.$el\n })\n\n return true\n }\n\n const updateRootStyle = () => {\n const css: CSSProperties = positionState.style.value\n rootStyle.left = css.left\n rootStyle.top = css.top\n rootStyle.transform = css.transform\n\n css.background = props.background\n css.color = props.color\n\n if (typeof props.teleportToViewer === 'undefined' || props.teleportToViewer) {\n const side = positionState.attach.value\n if ((side.bottom || side.top) && !side.left && !side.right) {\n css.left = '50%'\n css.transform = 'translate(-50%, 0)'\n }\n\n if ((side.left || side.right) && !side.top && !side.bottom) {\n css.top = '50%'\n css.transform = 'translate(0, -50%)'\n }\n }\n\n css.width = `${props.width}px`\n\n Object.assign(rootStyle, css)\n }\n\n const onScenePostRender = throttle(scene => {\n const { Cartesian2, defined, getTimestamp, EllipsoidGeodesic } = Cesium\n const now = getTimestamp()\n if (now < lastLegendUpdate + 250) {\n return\n }\n\n lastLegendUpdate = now\n const geodesic = new EllipsoidGeodesic()\n // Find the distance between two pixels at the bottom center of the screen.\n const width = scene.canvas.clientWidth\n const height = scene.canvas.clientHeight\n\n const left = scene.camera.getPickRay(new Cartesian2((width / 2) | 0, height - 1))\n const right = scene.camera.getPickRay(new Cartesian2((1 + width / 2) | 0, height - 1))\n\n const globe = scene.globe\n const leftPosition = globe.pick(left, scene)\n const rightPosition = globe.pick(right, scene)\n\n if (!defined(leftPosition) || !defined(rightPosition)) {\n barWidth.value = 0\n distanceLabel.value = ''\n return\n }\n\n const leftCartographic = globe.ellipsoid.cartesianToCartographic(leftPosition)\n const rightCartographic = globe.ellipsoid.cartesianToCartographic(rightPosition)\n\n geodesic.setEndPoints(leftCartographic, rightCartographic)\n const pixelDistance = geodesic.surfaceDistance\n\n // Find the first distance that makes the scale bar less than 100 pixels.\n const maxBarWidth = props.width - 10\n let _distance\n for (let i = distances.length - 1; !defined(_distance) && i >= 0; --i) {\n if (distances[i] / pixelDistance < maxBarWidth) {\n _distance = distances[i]\n if (distance !== _distance) {\n distance = _distance\n const listener = getInstanceListener(instance, 'distanceLegendEvt')\n listener &&\n ctx.emit('distanceLegendEvt', {\n type: 'distanceLegend',\n distance,\n status: 'changed'\n })\n }\n }\n }\n\n if (defined(_distance)) {\n let label\n if (distance >= 1000) {\n label = (_distance / 1000).toString() + ' km'\n } else {\n label = _distance.toString() + ' m'\n }\n\n barWidth.value = (_distance / pixelDistance) | 0\n distanceLabel.value = label\n } else {\n barWidth.value = 0\n distanceLabel.value = ''\n }\n }, 500)\n\n return () => {\n if (canRender.value && distanceLabel.value !== void 0) {\n const renderContent = h(\n VcBtn,\n {\n ref: rootRef,\n class: `vc-distance-legend ${positionState.classes.value} ${props.customClass}`,\n style: rootStyle,\n stack: true,\n noCaps: true\n },\n () => [\n h('label', null, distanceLabel.value),\n h('div', {\n style: barStyle.value,\n class: 'vc-bar'\n })\n ]\n )\n\n return !hasVcNavigation && props.teleportToViewer ? h(Teleport, { to: $services.viewer._element }, renderContent) : renderContent\n } else {\n return createCommentVNode('v-if')\n }\n }\n }\n})\n\nconst distances = [\n 1, 2, 3, 5, 10, 20, 30, 50, 100, 200, 300, 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000, 1000000,\n 2000000, 3000000, 5000000, 10000000, 20000000, 30000000, 50000000\n]\n\nexport type VcDistanceLegendEmits = typeof emits\nexport type VcDistanceLegendProps = {\n /**\n * Specify the position of the VcDistanceLegend.\n * Default value: bottom-right\n */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left'\n /**\n * An array of two numbers to offset the VcDistanceLegend horizontally and vertically in pixels.\n * Default value: [0, 0]\n */\n offset?: [number, number]\n /**\n * Specify the css color of the VcDistanceLegend.\n * Default value: #fff\n */\n color?: string\n /**\n * Specify the css background of the VcDistanceLegend.\n * Default value: #3f4854\n */\n background?: string\n /**\n * Specify the width of the VcDistanceLegend.\n * Default value: 100\n */\n width?: number\n /**\n * Specify the css color of the horizontal line on the VcDistanceLegend.\n * Default value: #fff\n */\n barBackground?: string\n /**\n * Specify the customClass of the vc-distance-legend.\n */\n customClass?: string\n /**\n * Specify whether to add to the cesium-viewer node.\n * Default value: true\n */\n teleportToViewer?: boolean\n /**\n * Triggers before the VcCompass is loaded.\n */\n onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the VcCompass 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 VcCompass is destroyed.\n */\n onDestroyed?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the distance scale changed.\n */\n onDistanceLegendEvt?: (evt: VcDistanceLegendEvt) => void\n}\n\nexport type VcDistanceLegendRef = VcComponentPublicInstance<VcDistanceLegendProps>\n"],"names":["defaultProps","_a"],"mappings":"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"}