vue-cesium-jyt
Version:
Vue 3.x components for CesiumJS.
1 lines • 18 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/controls/distance-legend/index.ts"],"sourcesContent":["import type { CSSProperties, ExtractPropTypes } 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 } 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 { commonEmits } from '@vue-cesium/utils/emits'\n\nconst emits = {\n ...commonEmits,\n distanceLegendEvt: (evt: VcDistanceLegendEvt) => true\n}\nexport const distanceLegendProps = defaultProps\nexport default defineComponent({\n name: 'VcDistanceLegend',\n props: distanceLegendProps,\n emits: emits,\n setup(props, 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<typeof VcBtn>(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 canRender.value = true\n distanceLabel.value = ''\n return new Promise((resolve, reject) => {\n nextTick(() => {\n const { viewer } = $services\n // const viewerElement = (viewer as any)._element as HTMLElement\n // viewerElement.appendChild($(rootRef)?.$el)\n // resolve($(rootRef)?.$el)\n if (!hasVcNavigation) {\n const viewerElement = (viewer as any)._element\n viewerElement.appendChild($(rootRef)?.$el)\n resolve($(rootRef)?.$el)\n } else {\n resolve($(rootRef)?.$el)\n }\n\n viewer.scene.postRender.addEventListener(onScenePostRender)\n })\n })\n }\n\n instance.mount = async () => {\n updateRootStyle()\n const { viewer } = $services\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 const { viewer } = $services\n viewer.scene.postRender.removeEventListener(onScenePostRender)\n const viewerElement = (viewer as any)._element as HTMLElement\n\n if (!hasVcNavigation) {\n viewerElement.contains($(rootRef)?.$el) && viewerElement.removeChild($(rootRef)?.$el)\n }\n\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 const side = positionState.attach.value\n\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 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 return h(\n VcBtn,\n {\n ref: rootRef,\n class: 'vc-distance-legend ' + positionState.classes.value,\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 } 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\n// export type VcDistanceLegendProps = ExtractPropTypes<typeof distanceLegendProps>\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 * 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 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"],"names":["defaultProps"],"mappings":"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"}