UNPKG

vesium

Version:

Core Vue composition hooks for Cesium

2 lines 15.2 kB
import{computedAsync as e,refThrottled as t,tryOnScopeDispose as n,unrefElement as r,useElementBounding as i,useElementSize as a,useMutationObserver as o,watchThrottled as s}from"@vueuse/core";import{Cartesian2 as c,EllipsoidGeodesic as l,ScreenSpaceEventHandler as u,ScreenSpaceEventType as d,Viewer as f}from"cesium";import{computed as p,getCurrentScope as m,inject as h,markRaw as g,nextTick as _,provide as v,readonly as y,ref as b,shallowReactive as x,shallowReadonly as S,shallowRef as C,toRaw as w,toRef as T,toValue as E,watch as D,watchEffect as O}from"vue";import{cartesianToCanvasCoord as k,isDef as A,isFunction as j,isPromise as M,resolvePick as N,throttle as P,toCartesian3 as F,tryRun as I}from"@vesium/shared";export*from"@vesium/shared";const L=Symbol(`CREATE_VIEWER_INJECTION_KEY`),R=new WeakMap;function ee(e,t){let i=C(),a=S(i);v(L,a);let s=m();s&&R.set(s,a);let c=p(()=>i.value?.canvas),l=typeof document<`u`?document.body:void 0;return l&&o(l,()=>{c.value&&!l.contains(c.value)&&(i.value=void 0)},{childList:!0,subtree:!0}),O(n=>{let a=w(E(e));a instanceof f?i.value=g(a):a?(i.value=new f(r(a),t),n(()=>!i.value?.isDestroyed()&&i.value?.destroy())):i.value=void 0}),n(()=>{i.value=void 0}),p(()=>i.value?.isDestroyed()?void 0:i.value)}async function z(e,t={}){let{raw:n=!0}=t,r;if(j(e))r=await e();else{let t=E(e);r=M(t)?await t:t}return n?w(r):r}function B(e,t,r={}){let i=T(r.isActive??!0),a=O(n=>{let r=E(e),a=Array.isArray(r)?r:[r];if(a&&a.length&&i.value){let e=a.map(e=>{let n=E(e);return n?.addEventListener(t,n)});n(()=>e.forEach(e=>e?.()))}});return n(a.stop),a.stop}function V(){let e=m(),t=e?R.get(e):void 0;if(t)return t;{let e=h(L);if(!e)throw Error("The `Viewer` instance injected by `createViewer` was not found in the current component or its ancestor components. Have you called `createViewer`?");return e}}function H(e={}){let n=e.camera;if(!n){let e=V();n=()=>e.value?.scene.camera}let r=p(()=>E(n)),i=p(()=>{let t=E(e.event)||`changed`;return r.value?.[t]}),a=t(C(Symbol(`camera change`)),e.delay??8,!0,!1),o=()=>{a.value=Symbol(`camera change`)};return D(r,()=>o()),B(i,()=>o()),{camera:r,position:p(()=>a.value?r.value?.position?.clone():void 0),direction:p(()=>a.value?r.value?.direction?.clone():void 0),up:p(()=>a.value?r.value?.up?.clone():void 0),right:p(()=>a.value?r.value?.right?.clone():void 0),positionCartographic:p(()=>a.value?r.value?.positionCartographic?.clone():void 0),positionWC:p(()=>a.value?r.value?.positionWC?.clone():void 0),directionWC:p(()=>a.value?r.value?.directionWC?.clone():void 0),upWC:p(()=>a.value?r.value?.upWC?.clone():void 0),rightWC:p(()=>a.value?r.value?.rightWC?.clone():void 0),viewRectangle:p(()=>a.value?r.value?.computeViewRectangle():void 0),heading:p(()=>a.value?r.value?.heading:void 0),pitch:p(()=>a.value?r.value?.pitch:void 0),roll:p(()=>a.value?r.value?.roll:void 0),level:p(()=>a.value&&r.value?.positionCartographic?.height!==void 0?te(r.value.positionCartographic.height):void 0)}}const U=-40467.74;function te(e){return U+(40487.57-U)/(1+(e/91610.74)**7096758e-11)}function ne(e={}){let{delay:t=100}=e,n=V(),r=C(performance.now());B(()=>n.value?.scene.postRender,()=>r.value=performance.now());let i=b(0);s(r,(e,t)=>{i.value=e-t},{throttle:t});let a=p(()=>1e3/i.value);return{interval:y(i),fps:a}}function W(e){let{addEffect:t,removeEffect:r,removeScopeArgs:i}=e,a=x(new Set),o=(e,...n)=>{let r=t(e,...n);return M(r)?new Promise((e,t)=>{r.then(t=>{a.add(t),e(t)}).catch(e=>t(e))}):(a.add(r),r)},s=(e,...t)=>(a.delete(e),r(e,...t)),c=(e,...t)=>{for(let n of Array.from(a))e(n)&&s(n,...t)},l=(...e)=>{for(let t of Array.from(a))s(t,...e)};return n(()=>l(...i??[])),{scope:S(a),add:o,remove:s,removeWhere:c,removeScope:l}}function G(t,n={}){let{destroyOnRemove:r,collection:i,isActive:a=!0,evaluating:o}=n,s=e(()=>z(t),void 0,{evaluating:o}),c=V();return O(e=>{if(E(a)){let t=Array.isArray(s.value)?[...s.value]:[s.value],n=i??c.value?.dataSources;t.forEach(e=>e&&n?.add(e)),e(()=>{let e=E(r);!n?.isDestroyed()&&t.forEach(t=>t&&n?.remove(t,e))})}}),s}function K(e={}){let{collection:t,destroyOnRemove:n}=e,r=V(),i=p(()=>E(t)??r.value?.dataSources);return W({addEffect(e){if(!i.value)throw Error(`collection is not defined`);return M(e)?new Promise((t,n)=>{e.then(e=>{try{i.value.add(e),t(e)}catch(e){n(e)}}).catch(e=>n(e))}):(i.value.add(e),e)},removeEffect(e,t){return!!i.value?.remove(e,t)},removeScopeArgs:[n]})}function q(e,t,n={}){let{referenceWindow:o,horizontal:s=`center`,vertical:l=`bottom`,clampToGround:u,offset:d={x:0,y:0}}=n,f=V(),m=p(()=>{let e=E(t);if(e)return F(e)}),h=C();B(()=>f.value?.scene.postUpdate,()=>{let e=f.value?.scene;if(!e||!m.value){h.value=void 0;return}let t=E(u)?e.clampToHeight(m.value):m.value;t??=m.value;let n=k(t,e);n&&(n.x=+n.x.toFixed(1),n.y=+n.y.toFixed(1),h.value=c.equals(n,h.value)?h.value:n)});let g=i(()=>f.value?.canvas.parentElement),_=a(e,void 0,{box:`border-box`}),v=p(()=>{let e=E(d),t=e?.x??0,n=E(s);n===`center`?t-=_.width.value/2:n===`right`&&(t-=_.width.value);let r=e?.y??0,i=E(l);return i===`center`?r-=_.height.value/2:i===`bottom`&&(r-=_.height.value),{x:t,y:r}}),y=p(()=>{let e=h.value?.x??0;return E(o)&&(e+=g.x.value),+(e+v.value.x).toFixed(1)}),b=p(()=>{let e=h.value?.y??0;return E(o)&&(e+=g.y.value),+(e+v.value.y).toFixed(1)}),x=p(()=>`left:${y.value}px;top:${b.value}px;`);return O(()=>{let t=E(n.applyStyle??!0);if(!t)return;let i=r(e);i&&t&&(i.style?.setProperty?.(`left`,`${y.value}px`),i.style?.setProperty?.(`top`,`${b.value}px`))},{flush:`post`}),{x:y,y:b,style:x}}function J(t,n={}){let{collection:r,isActive:i=!0,evaluating:a}=n,o=e(()=>z(t),[],{evaluating:a}),s=V();return O(e=>{if(E(i)){let t=Array.isArray(o.value)?[...o.value]:[o.value],n=r??s.value?.entities;t.forEach(e=>e&&n?.add(e)),e(()=>{t.forEach(e=>e&&n?.remove(e))})}}),o}function Y(e={}){let{collection:t}=e,n=V(),r=p(()=>E(t)??n.value?.entities);return W({addEffect(e){if(!r.value)throw Error(`collection is not defined`);return M(e)?new Promise((t,n)=>{e.then(e=>{r.value.add(e),t(e)}).catch(e=>n(e))}):(r.value.add(e),e)},removeEffect(e){return!!r.value?.remove(e)},removeScopeArgs:[]})}const X=new WeakMap;function Z(e,n={}){let{width:r=3,height:i=3,throttled:a=8}=n,o=T(n.isActive??!0),s=V(),c=t(p(()=>E(e)?.clone()),a,!1,!0),l=C();return O(()=>{if(s.value&&c.value&&o.value){let e=E(r),t=E(i),n=X.get(s.value);if(n&&n.position.equals(c.value)&&n.width===e&&n.height===t)l.value=n.pick;else try{let n=s.value?.scene.pick(c.value,e,t);l.value=n,X.set(s.value,{position:c.value.clone(),width:e,height:t,pick:n})}catch(e){console.error(`[useScenePick] Error during pick:`,e),l.value=void 0}}else l.value=void 0}),l}function Q(e,t,r={}){let{modifier:i}=r,a=V(),o=T(r.isActive??!0),s,c=p(()=>{if(a.value?.cesiumWidget?.canvas)return new u(a.value.cesiumWidget.canvas)}),l=D(c,(e,t)=>{t?.destroy(),s=e}),d=O(n=>{let r=E(e),a=E(i),l=E(c);s=l,!(!l||!o.value||!t)&&A(r)&&(l.setInputAction(t,r,a),n(()=>l.removeInputAction(r,a)))}),f=()=>{l(),d(),s?.destroy(),s=void 0};return n(f),f}function re(e){let t=C(),r=Z(t),i=C(),a=b(!1),o=V(),s=b(!1);D(s,e=>{o.value&&(o.value.scene.screenSpaceCameraController.enableRotate=!e)});let c=()=>{s.value=!0},l=(t,n,r)=>{e({event:{startPosition:n.clone(),endPosition:r.clone()},pick:t,dragging:a.value,lockCamera:c}),_(()=>{!a.value&&s.value&&(s.value=!1)})},u=Q(d.LEFT_DOWN,e=>{a.value=!0,t.value=e.position.clone()}),f=Q(d.MOUSE_MOVE,P(({startPosition:e,endPosition:t})=>{i.value={startPosition:i.value?.endPosition.clone()||e.clone(),endPosition:t.clone()}},8,!1,!0));D([r,i],([e,t])=>{if(e&&t){let{startPosition:n,endPosition:r}=t;a.value&&l(e,n,r)}});let p=Q(d.LEFT_UP,e=>{a.value=!1,r.value&&i.value&&l(r.value,i.value.endPosition,e.position),t.value=void 0,i.value=void 0}),m=()=>{u(),f(),p()};return n(m),m}function ie(e){let t=C(),n=Z(()=>t.value?.endPosition),r=(t,n,r,i)=>{e({event:{startPosition:n.clone(),endPosition:r.clone()},pick:t,hovering:i})};Q(d.MOUSE_MOVE,({startPosition:e,endPosition:n})=>{let r=t.value?.startPosition,i=t.value?.endPosition;(!r||!i||!e.equals(r)||!n.equals(i))&&(t.value={startPosition:e.clone(),endPosition:n.clone()})}),D([n,t],([e,t])=>{if(e&&t){let{startPosition:n,endPosition:i}=t;r(e,n,i,!0)}}),D(n,(e,n)=>{if(n&&t.value){let{startPosition:e,endPosition:i}=t.value;r(n,e,i,!1)}})}const ae={LEFT_DOWN:d.LEFT_DOWN,LEFT_UP:d.LEFT_UP,LEFT_CLICK:d.LEFT_CLICK,LEFT_DOUBLE_CLICK:d.LEFT_DOUBLE_CLICK,RIGHT_DOWN:d.RIGHT_DOWN,RIGHT_UP:d.RIGHT_UP,RIGHT_CLICK:d.RIGHT_CLICK,MIDDLE_DOWN:d.MIDDLE_DOWN,MIDDLE_UP:d.MIDDLE_UP,MIDDLE_CLICK:d.MIDDLE_CLICK};function oe(e,t){let n=ae[e],r=V();Q(n,e=>{let n=e.position,i=r.value?.scene.pick(n);i&&n&&t({event:{position:n},pick:i})})}const $=Symbol(`GLOBAL_GRAPHIC_SYMBOL`),se=[`LEFT_DOWN`,`LEFT_UP`,`LEFT_CLICK`,`LEFT_DOUBLE_CLICK`,`RIGHT_DOWN`,`RIGHT_UP`,`RIGHT_CLICK`,`MIDDLE_DOWN`,`MIDDLE_UP`,`MIDDLE_CLICK`];function ce(){let e=new WeakMap,t=new WeakMap,n=new WeakMap,r=(r,i,a)=>{let o=r===`global`?$:r;e?.get(o)?.get(i)?.delete(a),t?.get(o)?.get(i)?.delete(a),e?.get(o)?.get(i)?.size===0&&e.get(o).delete(i),e.get(o)?.size===0&&e.delete(o),t?.get(o)?.get(i)?.delete(a),t?.get(o)?.get(i)?.size===0&&t?.get(o)?.delete(i),t?.get(o)?.size===0&&t?.delete(o),n?.get(o)?.get(i)?.delete(a),n?.get(o)?.get(i)?.size===0&&n?.get(o)?.delete(i),n?.get(o)?.size===0&&n?.delete(o)},i=(i,a,o,s={})=>{let c=i===`global`?$:i;e.get(c)??e.set(c,new Map);let l=e.get(c);l.get(a)??l.set(a,new Set),l.get(a).add(o);let{cursor:u=`pointer`,dragCursor:d}=s;if(A(u)){let e=j(u)?u:()=>u;t.get(c)??t.set(c,new Map),t.get(c).get(a)??t.get(c).set(a,new Map),t.get(c).get(a).set(o,e)}if(a===`DRAG`&&(d??=(e=>e?.dragging?`crosshair`:void 0)),A(d)){let e=j(d)?d:()=>d;n.get(c)??n.set(c,new Map),n.get(c).get(a)??n.get(c).set(a,new Map),n.get(c).get(a).set(o,e)}return()=>r(i,a,o)},a=(r,i)=>{let a=r===`global`?$:r;if(i===`all`){e.delete(a),t.delete(a),n.delete(a);return}e.get(a)?.delete(i),e.get(a)?.size===0&&e.delete(a),t?.get(a)?.delete(i),n?.get(a)?.delete(i),t?.get(a)?.size===0&&t?.delete(a),n?.get(a)?.size===0&&n?.delete(a)};for(let t of se)oe(t,n=>{N(n.pick).concat($).forEach(r=>{e.get(r)?.get(t)?.forEach(e=>I(e)?.(n))})});let o=b(!1),s=V();return ie(n=>{N(n.pick).concat($).forEach(r=>{e.get(r)?.get(`HOVER`)?.forEach(e=>I(e)?.(n)),o.value||t.get(r)?.forEach(e=>{e.forEach(e=>{let t=n.hovering?I(e)(n):``;s.value?.canvas.style?.setProperty(`cursor`,t)})})})}),re(t=>{let r=N(t.pick).concat($);o.value=t.dragging,r.forEach(r=>{e.get(r)?.get(`DRAG`)?.forEach(e=>I(e)(t)),n.get(r)?.forEach(e=>{e.forEach(e=>{let n=t.dragging?I(e)(t):``;s.value?.canvas.style?.setProperty(`cursor`,n)})})})}),{add:i,remove:r,clear:a}}function le(t,n={}){let{destroyOnRemove:r,collection:i,isActive:a=!0,evaluating:o,index:s}=n,c=e(()=>z(t),[],{evaluating:o}),l=V();return O(e=>{if(E(a)){let t=Array.isArray(c.value)?[...c.value]:[c.value],n=i??l.value?.imageryLayers,a=E(s);if(i?.isDestroyed())return;t.forEach(e=>{if(e){if(e?.isDestroyed()){console.warn(`ImageryLayer is destroyed`);return}n?.add(e,a)}}),e(()=>{let e=E(r);t.forEach(t=>t&&n?.remove(t,e))})}}),c}function ue(e={}){let{collection:t,destroyOnRemove:n}=e,r=V(),i=p(()=>E(t)??r.value?.imageryLayers);return W({addEffect(e,t){if(!i.value)throw Error(`collection is not defined`);return M(e)?new Promise((n,r)=>{e.then(e=>{try{i.value.add(e,t),n(e)}catch(e){r(e)}}).catch(e=>r(e))}):(i.value.add(e,t),e)},removeEffect(e,t){return!!i.value?.remove(e,t)},removeScopeArgs:[n]})}function de(t,n={}){let{collection:r,destroyOnRemove:i=!0,isActive:a=!0,evaluating:o}=n,s=e(()=>z(t),void 0,{evaluating:o}),c=V();return O(e=>{if(c.value&&E(a)){let t=Array.isArray(s.value)?[...s.value]:[s.value],n=r??c.value.scene.postProcessStages;t.forEach(e=>e&&n.add(e)),e(()=>{t.forEach(e=>{e&&(n.remove(e),i&&typeof e.destroy==`function`&&!e.isDestroyed()&&e.destroy())})})}}),s}function fe(e={}){let{collection:t,destroyOnRemove:n=!0}=e,r=V(),i=p(()=>E(t)??r.value?.postProcessStages);return W({addEffect(e){if(!i.value)throw Error(`collection is not defined`);return M(e)?new Promise((t,n)=>{e.then(e=>{i.value.add(e),t(e)}).catch(e=>n(e))}):i.value.add(e)},removeEffect(e){if(!i.value)return!1;let t=i.value.remove(e);return t&&n&&e&&typeof e.destroy==`function`&&!e.isDestroyed()&&e.destroy(),!!t},removeScopeArgs:[]})}function pe(t,n={}){let{collection:r,destroyOnRemove:i=!0,isActive:a=!0,evaluating:o}=n,s=e(()=>z(t),void 0,{evaluating:o}),c=V();return O(e=>{if(c.value&&E(a)){let t=Array.isArray(s.value)?[...s.value]:[s.value],n=r===`ground`?c.value?.scene.groundPrimitives:r??c.value?.scene.primitives;t.forEach(e=>e&&n?.add(e)),e(()=>{!n?.isDestroyed()&&t.forEach(e=>{e&&(n?.remove(e),i&&typeof e.destroy==`function`&&!e.isDestroyed()&&e.destroy())})})}}),s}function me(e={}){let{collection:t,destroyOnRemove:n=!0}=e,r=V(),i=p(()=>{let e=E(t);return e===`ground`?r.value?.scene?.groundPrimitives:e||r.value?.scene.primitives}),{scope:a,add:o,remove:s,removeWhere:c,removeScope:l}=W({addEffect(e,...t){if(!i.value)throw Error(`collection is not defined`);return M(e)?new Promise((n,r)=>{e.then(e=>n(i.value.add(e,...t))).catch(e=>r(e))}):i.value.add(e,...t)},removeEffect(e){if(!i.value)return!1;let t=i.value.remove(e);return t&&n&&e&&typeof e.destroy==`function`&&!e.isDestroyed()&&e.destroy(),!!t},removeScopeArgs:[]});return{scope:a,add:o,remove:s,removeWhere:c,removeScope:l}}const he=[.01,.05,.1,.5,1,2,3,5,10,20,30,50,100,200,300,500,1e3,2e3,3e3,5e3,1e4,2e4,3e4,5e4,1e5,2e5,3e5,5e5,1e6,2e6,3e6,5e6,1e7,2e7,3e7,5e7].reverse();function ge(e={}){let{maxPixel:t=80,delay:n=8}=e,r=p(()=>E(t)),i=V(),o=a(()=>i.value?.canvas),s=b(),u=async()=>{await _();let e=i.value?.scene;if(!e)return;let t=e.camera.getPickRay(new c(Math.floor(o.width.value/2),o.height.value-1)),n=e.camera.getPickRay(new c(Math.floor(1+o.width.value/2),o.height.value-1));if(!t||!n)return;let r=e.globe.pick(t,e),a=e.globe.pick(n,e);!r||!a||(s.value=new l(e.globe.ellipsoid.cartesianToCartographic(r),e.globe.ellipsoid.cartesianToCartographic(a)).surfaceDistance)};D([i,()=>o.width.value,()=>o.height.value],()=>u(),{immediate:!0}),B(()=>i.value?.camera.changed,P(u,n));let d=p(()=>{if(s.value)return he.find(e=>s.value*r.value>e)}),f=p(()=>d.value&&s.value?d.value/s.value:0),m=p(()=>{if(d.value)return d.value>1e3?`${d.value/1e3||0}km`:`${d.value||0}m`});return{pixelDistance:y(s),width:f,distance:d,distanceText:m}}function _e(e,n={}){let{width:r=3,height:i=3,limit:a,throttled:o=8,isActive:s=!0}=n,c=V(),l=t(p(()=>E(e)),o,!1,!0);return p(()=>{if(l.value&&E(s))return c.value?.scene.drillPick(l.value,E(a),E(r),E(i))})}export{R as CREATE_VIEWER_COLLECTION,L as CREATE_VIEWER_INJECTION_KEY,ee as createViewer,z as toPromiseValue,H as useCameraState,B as useCesiumEventListener,ne as useCesiumFps,W as useCollectionScope,G as useDataSource,K as useDataSourceScope,q as useElementOverlay,J as useEntity,Y as useEntityScope,ce as useGraphicEvent,le as useImageryLayer,ue as useImageryLayerScope,de as usePostProcessStage,fe as usePostProcessStageScope,pe as usePrimitive,me as usePrimitiveScope,ge as useScaleBar,_e as useSceneDrillPick,Z as useScenePick,Q as useScreenSpaceEventHandler,V as useViewer}; //# sourceMappingURL=index.min.mjs.map