vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 28.1 kB
Source Map (JSON)
{"version":3,"file":"use-selection-indicatior.mjs","sources":["../../../../../../packages/components/controls/selection-indicator/use-selection-indicatior.ts"],"sourcesContent":["import { VcComponentInternalInstance, VcViewerProvider } from '@vue-cesium/utils/types'\nimport { CSSProperties, nextTick, onUnmounted, reactive, ref, watch, WatchStopHandle } from 'vue'\nimport Feature from './Feature'\nimport PickedFeatures from './PickedFeatures'\nimport { isArray } from '@vue-cesium/utils/util'\nimport { pickImageryLayerFeatures } from './util'\nimport { compareCesiumVersion } from '@vue-cesium/utils/cesium-helpers'\n\nexport default function (instance: VcComponentInternalInstance, props, $services: VcViewerProvider) {\n // state\n const offScreen = '-1000px'\n const screenPositionX = ref(offScreen)\n const screenPositionY = ref(offScreen)\n const transform = ''\n const opacity = 1.0\n const position = ref<Cesium.Cartesian3>()\n const rootRef = ref<HTMLElement | null>()\n let selectionIndicatorTween\n let selectionIndicatorIsAppearing\n const pickedFeatures = ref<PickedFeatures>(null)\n const selectedFeature = ref<Feature | Cesium.Entity>(null)\n let unwatchFns: Array<WatchStopHandle> = []\n let isCluster = false\n // computed\n const rootStyle = reactive<CSSProperties>({\n top: screenPositionY.value,\n left: screenPositionX.value,\n transform,\n opacity: opacity\n })\n // watch\n unwatchFns.push(\n watch(selectedFeature, val => {\n const selectedFeature: any = val\n const { defined } = Cesium\n if (defined(selectedFeature) && defined(selectedFeature?.position)) {\n const { viewer } = $services\n // Todo 高亮逻辑\n position.value =\n selectedFeature?.position instanceof Cesium.Cartesian3\n ? selectedFeature?.position\n : selectedFeature?.position?.getValue(viewer.clock.currentTime)\n animateAppear()\n instance.proxy?.$emit('pickEvt', selectedFeature)\n } else {\n animateDepart()\n instance.proxy?.$emit('pickEvt', selectedFeature)\n }\n\n update()\n })\n )\n\n unwatchFns.push(\n watch(pickedFeatures, val => {\n const { defined, Entity } = Cesium\n const pickedFeatures = val\n if (!defined(pickedFeatures)) {\n selectedFeature.value = undefined\n } else {\n const fakeFeature = new Entity({\n id: '__Vc__Pick__Location__'\n })\n fakeFeature.position = pickedFeatures.pickPosition\n selectedFeature.value = fakeFeature\n }\n\n nextTick(() => {\n if (defined(pickedFeatures.allFeaturesAvailablePromise)) {\n pickedFeatures.allFeaturesAvailablePromise.then(() => {\n // We only show features that are associated with a catalog item, so make sure the one we select to be\n // open initially is one we're actually going to show.\n const featuresShownAtAll = pickedFeatures.features.filter(x => defined(x))\n selectedFeature.value = featuresShownAtAll.filter(featureHasInfo)[0]\n if (!defined(selectedFeature.value) && featuresShownAtAll.length > 0) {\n // Handles the case when no features have info - still want something to be open.\n selectedFeature.value = featuresShownAtAll[0]\n if (isCluster) {\n if (selectedFeature.value instanceof Feature && selectedFeature.value?.pickedFeature?.primitive?.position) {\n selectedFeature.value.position = selectedFeature.value.pickedFeature.primitive.position\n }\n }\n }\n })\n }\n })\n })\n )\n // methods\n const featureHasInfo = feature => {\n const { defined } = Cesium\n return defined(feature.properties) || defined(feature.description)\n }\n\n const pickFromScreenPosition = (screenPosition: Cesium.Cartesian2) => {\n const { defined } = Cesium\n const { viewer } = $services\n const scene = viewer.scene\n const pickRay = scene.camera.getPickRay(screenPosition)\n let pickPosition = scene.globe.pick(pickRay, scene)\n if (!defined(pickPosition)) {\n pickPosition = scene.pickPosition(screenPosition)\n if (!defined(pickPosition)) {\n return\n }\n }\n const pickPositionCartographic = scene.globe.ellipsoid.cartesianToCartographic(pickPosition || new Cesium.Cartesian3())\n\n const vectorFeatures = pickVectorFeatures(screenPosition)\n\n const providerCoords = attachProviderCoordHooks()\n\n const pickRasterPromise = props.allowFeatureInfoRequests\n ? pickImageryLayerFeatures(pickRay, scene, props.includeImageryIds, props.excludeImageryIds)\n : Promise.resolve()\n const result = buildPickedFeatures(\n providerCoords,\n pickPosition,\n vectorFeatures,\n [pickRasterPromise],\n undefined,\n pickPositionCartographic.height,\n false,\n viewer\n )\n pickedFeatures.value = result\n }\n\n const buildPickedFeatures = (\n providerCoords,\n pickPosition,\n existingFeatures,\n featurePromises,\n imageryLayers,\n defaultHeight,\n ignoreSplitter,\n viewer\n ) => {\n const { defined, defaultValue } = Cesium\n ignoreSplitter = defaultValue(ignoreSplitter, false)\n const result = new PickedFeatures()\n\n result.providerCoords = providerCoords\n result.pickPosition = pickPosition\n\n result.allFeaturesAvailablePromise = Promise.all(featurePromises)\n .then(function (this, allFeatures) {\n result.isLoading = false\n\n result.features = allFeatures.reduce(\n function (this, resultFeaturesSoFar, imageryLayerFeatures, i) {\n if (!defined(imageryLayerFeatures)) {\n return resultFeaturesSoFar\n }\n\n const features = imageryLayerFeatures.map(\n function (feature) {\n if (defined(imageryLayers)) {\n feature.imageryLayer = imageryLayers[i]\n }\n\n if (!defined(feature.position)) {\n feature.position = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition)\n }\n\n // If the picked feature does not have a height, use the height of the picked location.\n // This at least avoids major parallax effects on the selection indicator.\n if (!defined(feature.position.height) || feature.position.height === 0.0) {\n feature.position.height = defaultHeight\n }\n return Feature.fromImageryLayerFeature(feature, viewer)\n }.bind(this)\n )\n\n return resultFeaturesSoFar.concat(features)\n }.bind(this),\n defaultValue(existingFeatures, [])\n )\n })\n .catch(function () {\n result.isLoading = false\n result.error = 'An unknown error occurred while picking features.'\n })\n\n return result\n }\n\n const pickVectorFeatures = (screenPosition: Cesium.Cartesian2) => {\n // Pick vector features\n const vectorFeatures: Array<any> = []\n const { defined } = Cesium\n const { viewer } = $services\n const scene = viewer.scene\n const pickedList = scene.drillPick(screenPosition, props.limit)\n for (let i = 0; i < pickedList.length; ++i) {\n const picked = pickedList[i]\n let id = picked.id\n\n // if (\n // id &&\n // id.entityCollection &&\n // id.entityCollection.owner &&\n // id.entityCollection.owner.name === featureHighlightName\n // ) {\n // continue\n // }\n if (!defined(id) && defined(picked.primitive)) {\n id = picked.primitive\n }\n\n const catalogItem = picked?.primitive?._catalogItem ?? id?._catalogItem\n\n if (typeof catalogItem?.getFeaturesFromPickResult === 'function') {\n const result = catalogItem.getFeaturesFromPickResult.bind(catalogItem)(screenPosition, picked)\n if (result) {\n if (Array.isArray(result)) {\n vectorFeatures.push(...result)\n } else {\n vectorFeatures.push(result)\n }\n }\n } else {\n const pickedFeature = picked\n if (pickedFeature.id) {\n if (isArray(pickedFeature.id) && pickedFeature.id[0] instanceof Cesium.Entity) {\n // 数据源集合(集群)\n isCluster = true\n pickedFeature.id.forEach(entity => {\n const feature = Feature.fromPickedFeature(entity, pickedFeature, viewer, screenPosition)\n vectorFeatures.push(feature)\n })\n continue\n } else if (pickedFeature.id instanceof Cesium.Entity) {\n // 实体 or 数据源\n const feature = Feature.fromPickedFeature(pickedFeature.id, pickedFeature, viewer, screenPosition)\n vectorFeatures.push(feature)\n isCluster = false\n continue\n } else {\n isCluster = false\n }\n }\n // 图元\n if (pickedFeature.primitive) {\n const feature = Feature.fromPickedFeature(pickedFeature.primitive, pickedFeature, viewer, screenPosition)\n vectorFeatures.push(feature)\n } else if (pickedFeature.collection) {\n // 图元集合\n const feature = Feature.fromPickedFeature(pickedFeature.collection, pickedFeature, viewer, screenPosition)\n vectorFeatures.push(feature)\n }\n }\n }\n\n return vectorFeatures\n }\n\n const attachProviderCoordHooks = () => {\n const providerCoords = {}\n const { viewer } = $services\n const scene = viewer.scene\n\n const pickFeaturesHook = function (imageryProvider, oldPick, x, y, level, longitude, latitude) {\n if (oldPick) {\n const featuresPromise = oldPick.call(imageryProvider, x, y, level, longitude, latitude)\n\n // Use url to uniquely identify providers because what else can we do?\n if (imageryProvider.url) {\n providerCoords[imageryProvider.url] = {\n x: x,\n y: y,\n level: level\n }\n }\n\n imageryProvider.pickFeatures = oldPick\n return featuresPromise\n }\n\n return Promise.reject(false)\n }\n\n for (let j = 0; j < scene.imageryLayers.length; j++) {\n const imageryProvider = scene.imageryLayers.get(j).imageryProvider\n imageryProvider.pickFeatures = pickFeaturesHook.bind(undefined, imageryProvider, imageryProvider.pickFeatures)\n }\n\n return providerCoords\n }\n\n const computeScreenSpacePosition = (position: Cesium.Cartesian3, result: Cesium.Cartesian2) => {\n const { viewer } = $services\n\n return compareCesiumVersion(Cesium.VERSION, '1.121')\n ? Cesium.SceneTransforms.worldToWindowCoordinates(viewer.scene, position, result)\n : Cesium.SceneTransforms['wgs84ToWindowCoordinates'](viewer.scene, position, result)\n }\n\n const update = () => {\n const { defined, Cartesian2 } = Cesium\n if (props.show && defined(position.value)) {\n const screenPosition = computeScreenSpacePosition(position.value, new Cartesian2())\n if (!defined(screenPosition)) {\n // rootStyle.left = offScreen\n // rootStyle.right = offScreen\n } else {\n const { viewer } = $services\n const container = viewer.container\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n // const selectionIndicatorElement = $(rootRef)\n // const indicatorSize = selectionIndicatorElement?.clientWidth || 0\n const indicatorSize = props.width\n const halfSize = indicatorSize * 0.5\n\n screenPosition.x = Math.min(Math.max(screenPosition.x, -indicatorSize), containerWidth + indicatorSize) - halfSize\n screenPosition.y = Math.min(Math.max(screenPosition.y, -indicatorSize), containerHeight + indicatorSize) - halfSize\n\n rootStyle.left = Math.floor(screenPosition.x + 0.25) + 'px'\n rootStyle.top = Math.floor(screenPosition.y + 0.25) + 'px'\n }\n }\n }\n\n const animateAppear = () => {\n const { viewer } = $services\n const { defined, EasingFunction } = Cesium\n if (defined(selectionIndicatorTween)) {\n if (selectionIndicatorIsAppearing) {\n // Already appearing; don't restart the animation.\n return\n }\n selectionIndicatorTween.cancelTween()\n selectionIndicatorTween = undefined\n }\n\n selectionIndicatorIsAppearing = true\n\n selectionIndicatorTween = viewer.scene.tweens.add({\n startObject: {\n scale: 2.0,\n opacity: 0.0,\n rotate: -180\n },\n stopObject: {\n scale: 1.0,\n opacity: 1.0,\n rotate: 0\n },\n duration: 0.8,\n easingFunction: EasingFunction.EXPONENTIAL_OUT,\n update: function (value) {\n rootStyle.opacity = value.opacity\n rootStyle.transform = 'scale(' + value.scale + ') rotate(' + value.rotate + 'deg)'\n },\n complete: function () {\n selectionIndicatorTween = undefined\n },\n cancel: function () {\n selectionIndicatorTween = undefined\n }\n })\n }\n\n const animateDepart = () => {\n const { viewer } = $services\n const { defined, EasingFunction } = Cesium\n if (defined(selectionIndicatorTween)) {\n if (!selectionIndicatorIsAppearing) {\n // Already disappearing, don't restart the animation.\n return\n }\n selectionIndicatorTween.cancelTween()\n selectionIndicatorTween = undefined\n }\n\n selectionIndicatorIsAppearing = false\n selectionIndicatorTween = viewer.scene.tweens.add({\n startObject: {\n scale: 1.0,\n opacity: 1.0\n },\n stopObject: {\n scale: 1.5,\n opacity: 0.0\n },\n duration: 0.8,\n easingFunction: EasingFunction.EXPONENTIAL_OUT,\n update: function (value) {\n rootStyle.opacity = value.opacity\n rootStyle.transform = 'scale(' + value.scale + ') rotate(0deg)'\n },\n complete: function () {\n selectionIndicatorTween = undefined\n },\n cancel: function () {\n selectionIndicatorTween = undefined\n }\n })\n }\n\n const onPostRender = () => {\n update()\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 selectedFeature,\n position,\n computeScreenSpacePosition,\n update,\n animateAppear,\n animateDepart,\n getPickedFeatures: () => pickedFeatures\n })\n\n return {\n pickFromScreenPosition,\n rootRef,\n rootStyle,\n onPostRender\n }\n}\n"],"names":["selectedFeature","pickedFeatures","position"],"mappings":"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"}