UNPKG

vue-cesium-jyt

Version:
1 lines 27 kB
{"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'\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<any>(null)\n const selectedFeature = ref<any>(null)\n let unwatchFns: Array<WatchStopHandle> = []\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 }\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 ? scene.imageryLayers.pickImageryLayerFeatures(pickRay, scene) : Promise.resolve()\n\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, when } = Cesium\n ignoreSplitter = defaultValue(ignoreSplitter, false)\n const result = new PickedFeatures()\n\n result.providerCoords = providerCoords\n result.pickPosition = pickPosition\n\n result.allFeaturesAvailablePromise = when\n .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 .otherwise(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 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 continue\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, result) => {\n const { viewer } = $services\n return 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 pickedFeatures,\n position,\n computeScreenSpacePosition,\n update,\n animateAppear,\n animateDepart\n })\n\n return {\n pickFromScreenPosition,\n rootRef,\n rootStyle,\n onPostRender\n }\n}\n"],"names":[],"mappings":"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"}