@geoql/v-maplibre 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/arc-oPHfD4K7.js +2 -0
- package/dist/arc-oPHfD4K7.js.map +1 -0
- package/dist/arrow-4ecDVUFv.js +2 -0
- package/dist/arrow-4ecDVUFv.js.map +1 -0
- package/dist/bitmap-C04WgKea.js +2 -0
- package/dist/bitmap-C04WgKea.js.map +1 -0
- package/dist/cog-Cq7xvN9B.js +2 -0
- package/dist/cog-Cq7xvN9B.js.map +1 -0
- package/dist/column-Dx4A711w.js +2 -0
- package/dist/column-Dx4A711w.js.map +1 -0
- package/dist/contour-Dgvb_bGm.js +2 -0
- package/dist/contour-Dgvb_bGm.js.map +1 -0
- package/dist/generic-BKvcZn9n.js +2 -0
- package/dist/generic-BKvcZn9n.js.map +1 -0
- package/dist/geoarrow-path-B2LJ956d.js +2 -0
- package/dist/geoarrow-path-B2LJ956d.js.map +1 -0
- package/dist/geoarrow-polygon-C9mZ7552.js +2 -0
- package/dist/geoarrow-polygon-C9mZ7552.js.map +1 -0
- package/dist/geoarrow-scatterplot-CM5842q_.js +2 -0
- package/dist/geoarrow-scatterplot-CM5842q_.js.map +1 -0
- package/dist/geoarrow-solid-polygon-DIm9mciL.js +2 -0
- package/dist/geoarrow-solid-polygon-DIm9mciL.js.map +1 -0
- package/dist/geoarrow-text-ClY3q_nR.js +2 -0
- package/dist/geoarrow-text-ClY3q_nR.js.map +1 -0
- package/dist/geoarrow-trips-BqbIoMt8.js +2 -0
- package/dist/geoarrow-trips-BqbIoMt8.js.map +1 -0
- package/dist/geohash-Pq83atW2.js +2 -0
- package/dist/geohash-Pq83atW2.js.map +1 -0
- package/dist/geojson-cOxJcO-8.js +2 -0
- package/dist/geojson-cOxJcO-8.js.map +1 -0
- package/dist/great-circle-C6GDbX1c.js +2 -0
- package/dist/great-circle-C6GDbX1c.js.map +1 -0
- package/dist/grid-BPfXfID8.js +2 -0
- package/dist/grid-BPfXfID8.js.map +1 -0
- package/dist/grid-cell-T0-xdlk_.js +2 -0
- package/dist/grid-cell-T0-xdlk_.js.map +1 -0
- package/dist/h3-cluster-BsvMbaYv.js +2 -0
- package/dist/h3-cluster-BsvMbaYv.js.map +1 -0
- package/dist/h3-hexagon-Cx1qlgKb.js +2 -0
- package/dist/h3-hexagon-Cx1qlgKb.js.map +1 -0
- package/dist/heatmap-ByafStP6.js +2 -0
- package/dist/heatmap-ByafStP6.js.map +1 -0
- package/dist/hexagon-CWRkTkkj.js +2 -0
- package/dist/hexagon-CWRkTkkj.js.map +1 -0
- package/dist/icon-WggKPJv7.js +2 -0
- package/dist/icon-WggKPJv7.js.map +1 -0
- package/dist/index.d.ts +265 -4733
- package/dist/index.js +1 -42
- package/dist/index.js.map +1 -1
- package/dist/line-B5e9w1td.js +2 -0
- package/dist/line-B5e9w1td.js.map +1 -0
- package/dist/mosaic-Cl7rtAXN.js +43 -0
- package/dist/mosaic-Cl7rtAXN.js.map +1 -0
- package/dist/multi-cog-DAJbnElE.js +2 -0
- package/dist/multi-cog-DAJbnElE.js.map +1 -0
- package/dist/mvt-D0GYYs-Z.js +2 -0
- package/dist/mvt-D0GYYs-Z.js.map +1 -0
- package/dist/path-mcVHjyaA.js +2 -0
- package/dist/path-mcVHjyaA.js.map +1 -0
- package/dist/point-cloud-CNpLW-hf.js +2 -0
- package/dist/point-cloud-CNpLW-hf.js.map +1 -0
- package/dist/polygon-B5mGSTte.js +2 -0
- package/dist/polygon-B5mGSTte.js.map +1 -0
- package/dist/quadkey-DGHCEKmx.js +2 -0
- package/dist/quadkey-DGHCEKmx.js.map +1 -0
- package/dist/s2-MuPaEFbo.js +2 -0
- package/dist/s2-MuPaEFbo.js.map +1 -0
- package/dist/scatterplot-BBeJkOdi.js +2 -0
- package/dist/scatterplot-BBeJkOdi.js.map +1 -0
- package/dist/scenegraph-DTM4oQ_J.js +2 -0
- package/dist/scenegraph-DTM4oQ_J.js.map +1 -0
- package/dist/screen-grid-CxlQC4Kb.js +2 -0
- package/dist/screen-grid-CxlQC4Kb.js.map +1 -0
- package/dist/simple-mesh-BxLUvOJK.js +2 -0
- package/dist/simple-mesh-BxLUvOJK.js.map +1 -0
- package/dist/solid-polygon-DwQBLTy0.js +2 -0
- package/dist/solid-polygon-DwQBLTy0.js.map +1 -0
- package/dist/starfield-D0gIX-34.js +2 -0
- package/dist/starfield-D0gIX-34.js.map +1 -0
- package/dist/symbols-CFCXX1_B.js +2 -0
- package/dist/symbols-CFCXX1_B.js.map +1 -0
- package/dist/terrain-f-XAakfL.js +2 -0
- package/dist/terrain-f-XAakfL.js.map +1 -0
- package/dist/text-BOvG9JHc.js +2 -0
- package/dist/text-BOvG9JHc.js.map +1 -0
- package/dist/tile-3d-DG91zS0N.js +2 -0
- package/dist/tile-3d-DG91zS0N.js.map +1 -0
- package/dist/tile-AhmnAg8V.js +2 -0
- package/dist/tile-AhmnAg8V.js.map +1 -0
- package/dist/trips-DwzBmfe0.js +2 -0
- package/dist/trips-DwzBmfe0.js.map +1 -0
- package/dist/v-maplibre.css +2 -2
- package/dist/wind-particle-DW0nCMls.js +2 -0
- package/dist/wind-particle-DW0nCMls.js.map +1 -0
- package/dist/wms-vy1yMBNb.js +2 -0
- package/dist/wms-vy1yMBNb.js.map +1 -0
- package/dist/zarr-6SNoX07d.js +2 -0
- package/dist/zarr-6SNoX07d.js.map +1 -0
- package/package.json +13 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-AhmnAg8V.js","names":[],"sources":["../src/layers/deckgl/tile/VLayerDeckglTile.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Generic XYZ raster / vector tile viewer (deck.gl TileLayer).\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/geo-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/geo-layers`\n */\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { TileLayer } from '@deck.gl/geo-layers';\n import type { TileLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo, Layer } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface TileData {\n x: number;\n y: number;\n z: number;\n url: string;\n signal: AbortSignal;\n bbox: {\n west: number;\n north: number;\n east: number;\n south: number;\n };\n }\n\n interface Props {\n id: string;\n data?: string | string[] | ((tileData: TileData) => Promise<unknown>);\n getTileData?: (tileData: TileData) => Promise<unknown>;\n renderSubLayers?: (props: object) => Layer | Layer[] | null;\n tileSize?: number;\n maxZoom?: number;\n minZoom?: number;\n maxCacheSize?: number;\n maxCacheByteSize?: number;\n refinementStrategy?: 'best-available' | 'no-overlap' | 'never';\n zRange?: [number, number];\n maxRequests?: number;\n extent?: [number, number, number, number];\n loadOptions?: object;\n zoomOffset?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n tileSize: 512,\n minZoom: 0,\n refinementStrategy: 'best-available',\n maxRequests: 6,\n zoomOffset: 0,\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n viewportLoad: [tiles: unknown[]];\n tileLoad: [tile: unknown];\n tileUnload: [tile: unknown];\n tileError: [error: Error, tile: unknown];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new TileLayer({\n id: props.id,\n data: props.data,\n getTileData: props.getTileData,\n renderSubLayers: props.renderSubLayers,\n tileSize: props.tileSize,\n maxZoom: props.maxZoom,\n minZoom: props.minZoom,\n maxCacheSize: props.maxCacheSize,\n maxCacheByteSize: props.maxCacheByteSize,\n refinementStrategy: props.refinementStrategy,\n zRange: props.zRange,\n maxRequests: props.maxRequests,\n extent: props.extent,\n loadOptions: props.loadOptions,\n zoomOffset: props.zoomOffset,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n onViewportLoad: (tiles: unknown[]) => emit('viewportLoad', tiles),\n onTileLoad: (tile: unknown) => emit('tileLoad', tile),\n onTileUnload: (tile: unknown) => emit('tileUnload', tile),\n onTileError: (error: Error, tile: unknown) =>\n emit('tileError', error, tile),\n } as TileLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.tileSize,\n props.maxZoom,\n props.minZoom,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"gwBAwDE,IAAM,EAAQ,EAYR,EAAO,EASP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,MACG,IAAI,EAAU,CACnB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,gBAAiB,EAAM,gBACvB,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,aAAc,EAAM,aACpB,iBAAkB,EAAM,iBACxB,mBAAoB,EAAM,mBAC1B,OAAQ,EAAM,OACd,YAAa,EAAM,YACnB,OAAQ,EAAM,OACd,YAAa,EAAM,YACnB,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,eAAiB,GAAqB,EAAK,eAAgB,EAAK,CAChE,WAAa,GAAkB,EAAK,WAAY,EAAI,CACpD,aAAe,GAAkB,EAAK,aAAc,EAAI,CACxD,aAAc,EAAc,IAC1B,EAAK,YAAa,EAAO,EAAI,CACd,CAAA,CAGf,MAAwB,CAC5B,EAAS,GAAa,CAAA,SAGxB,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,CACJ,EAAM,KACN,EAAM,SACN,EAAM,QACN,EAAM,QACN,EAAM,QACN,EAAM,QACR,KACM,EAAY,EAAM,GAAI,GAAa,CAAA,CACzC,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as e,o as t,t as n}from"./symbols-CFCXX1_B.js";import{defineComponent as r,onBeforeUnmount as i,onMounted as a,renderSlot as o,watch as s}from"vue";import{TripsLayer as c}from"@deck.gl/geo-layers";const l=r({__name:`VLayerDeckglTrips`,props:{id:{},data:{},getPath:{},getTimestamps:{},getColor:{},getWidth:{},currentTime:{default:0},trailLength:{default:120},fadeTrail:{type:Boolean,default:!0},widthUnits:{default:`pixels`},widthScale:{default:1},widthMinPixels:{default:0},widthMaxPixels:{default:2**53-1},capRounded:{type:Boolean,default:!1},jointRounded:{type:Boolean,default:!1},billboard:{type:Boolean,default:!1},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!0},autoHighlight:{type:Boolean,default:!1},highlightColor:{},beforeId:{}},emits:[`click`,`hover`],setup(r,{emit:l}){let u=r,d=l,f=e(n),{addLayer:p,removeLayer:m,updateLayer:h}=t(f),g=()=>new c({id:u.id,data:u.data,getPath:u.getPath,getTimestamps:u.getTimestamps,getColor:u.getColor??[253,128,93],getWidth:u.getWidth??1,currentTime:u.currentTime,trailLength:u.trailLength,fadeTrail:u.fadeTrail,widthUnits:u.widthUnits,widthScale:u.widthScale,widthMinPixels:u.widthMinPixels,widthMaxPixels:u.widthMaxPixels,capRounded:u.capRounded,jointRounded:u.jointRounded,billboard:u.billboard,opacity:u.opacity,visible:u.visible,pickable:u.pickable,autoHighlight:u.autoHighlight,highlightColor:u.highlightColor,beforeId:u.beforeId,onClick:e=>d(`click`,e),onHover:e=>d(`hover`,e)}),_=()=>{p(g())};return a(()=>{f.value?.isStyleLoaded()?_():f.value?.once(`style.load`,_)}),s(()=>u.currentTime,()=>h(u.id,g())),s(()=>[u.data,u.getPath,u.trailLength,u.getColor,u.opacity,u.visible],()=>h(u.id,g()),{deep:!0}),i(()=>{m(u.id)}),(e,t)=>o(e.$slots,`default`)}});export{l as VLayerDeckglTrips};
|
|
2
|
+
//# sourceMappingURL=trips-DwzBmfe0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trips-DwzBmfe0.js","names":[],"sources":["../src/layers/deckgl/trips/VLayerDeckglTrips.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Animated trail paths over time (vehicle / animal tracks).\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/geo-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/geo-layers`\n */\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { TripsLayer } from '@deck.gl/geo-layers';\n import type { TripsLayerProps } from '@deck.gl/geo-layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPath: Accessor<D, Position[]>;\n getTimestamps?: Accessor<D, number[]>;\n getColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n currentTime?: number;\n trailLength?: number;\n fadeTrail?: boolean;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n capRounded?: boolean;\n jointRounded?: boolean;\n billboard?: boolean;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n currentTime: 0,\n trailLength: 120,\n fadeTrail: true,\n widthUnits: 'pixels',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n capRounded: false,\n jointRounded: false,\n billboard: false,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new TripsLayer({\n id: props.id,\n data: props.data,\n getPath: props.getPath,\n getTimestamps: props.getTimestamps,\n getColor: props.getColor ?? [253, 128, 93],\n getWidth: props.getWidth ?? 1,\n currentTime: props.currentTime,\n trailLength: props.trailLength,\n fadeTrail: props.fadeTrail,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n capRounded: props.capRounded,\n jointRounded: props.jointRounded,\n billboard: props.billboard,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as TripsLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => props.currentTime,\n () => updateLayer(props.id, createLayer()),\n );\n\n watch(\n () => [\n props.data,\n props.getPath,\n props.trailLength,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"8zBA8CE,IAAM,EAAQ,EAiBR,EAAO,EAKP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,MACG,IAAI,EAAW,CACpB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,QAAS,EAAM,QACf,cAAe,EAAM,cACrB,SAAU,EAAM,UAAY,CAAC,IAAK,IAAK,GAAE,CACzC,SAAU,EAAM,UAAY,EAC5B,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UACjB,WAAY,EAAM,WAClB,WAAY,EAAM,WAClB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,WAAY,EAAM,WAClB,aAAc,EAAM,aACpB,UAAW,EAAM,UACjB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CAChC,CAAA,CAGhB,MAAwB,CAC5B,EAAS,GAAa,CAAA,SAGxB,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,EAAM,gBACN,EAAY,EAAM,GAAI,GAAa,CAC3C,CAAA,CAEA,MACQ,CACJ,EAAM,KACN,EAAM,QACN,EAAM,YACN,EAAM,SACN,EAAM,QACN,EAAM,QACR,KACM,EAAY,EAAM,GAAI,GAAa,CAAA,CACzC,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
package/dist/v-maplibre.css
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as e,o as t,t as n}from"./symbols-CFCXX1_B.js";import{computed as r,defineComponent as i,onBeforeUnmount as a,onMounted as o,ref as s,renderSlot as c,watch as l}from"vue";import{WindParticleLayer as u,generateWindTexture as d}from"maplibre-gl-wind";const f=i({__name:`VLayerDeckglWindParticle`,props:{id:{},imageUrl:{},windData:{},bounds:{default:()=>[-180,-90,180,90]},uMin:{default:-50},uMax:{default:50},vMin:{default:-50},vMax:{default:50},numParticles:{default:8192},maxAge:{default:30},speedFactor:{default:50},color:{default:()=>[255,255,255,200]},colorRamp:{default:()=>[[0,[59,130,189,255]],[.1,[102,194,165,255]],[.2,[171,221,164,255]],[.3,[230,245,152,255]],[.4,[254,224,139,255]],[.5,[253,174,97,255]],[.6,[244,109,67,255]],[1,[213,62,79,255]]]},speedRange:{default:()=>[0,30]},width:{default:1.5},animate:{type:Boolean,default:!0},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!1},beforeId:{}},emits:[`click`,`hover`,`loaded`,`error`],setup(i,{emit:f}){let p=i,m=f,h=e(n),{addLayer:g,removeLayer:_,updateLayer:v}=t(h),y=s(!1),b=s(null),x=s({uMin:p.uMin,uMax:p.uMax,vMin:p.vMin,vMax:p.vMax}),S=r(()=>{let e=x.value.uMax-x.value.uMin,t=x.value.vMax-x.value.vMin;return[Math.min(e,t)*-1,Math.max(e,t)]}),C=()=>b.value?new u({id:p.id,image:b.value,bounds:p.bounds,imageUnscale:S.value,numParticles:p.numParticles,maxAge:p.maxAge,speedFactor:p.speedFactor,color:p.color,colorRamp:p.colorRamp,speedRange:p.speedRange,width:p.width,animate:p.animate,wrapLongitude:!0,opacity:p.opacity,visible:p.visible,pickable:p.pickable,beforeId:p.beforeId,onClick:e=>m(`click`,e),onHover:e=>m(`hover`,e)}):null,w=e=>{try{let t=d(e,{width:360,height:180,bounds:p.bounds});return x.value={uMin:t.uMin,uMax:t.uMax,vMin:t.vMin,vMax:t.vMax},b.value=t.canvas.toDataURL(`image/png`),!0}catch(e){return m(`error`,e instanceof Error?e:Error(String(e))),!1}},T=()=>{if(p.windData&&p.windData.length>0){if(!w(p.windData))return}else if(p.imageUrl)b.value=p.imageUrl,x.value={uMin:p.uMin,uMax:p.uMax,vMin:p.vMin,vMax:p.vMax};else return;let e=C();e&&(g(e),y.value=!0,m(`loaded`))},E=()=>{if(!y.value)return;let e=C();e&&v(p.id,e)};return o(()=>{h.value?.isStyleLoaded()?T():h.value?.once(`style.load`,T)}),l(()=>p.windData,e=>{e&&e.length>0&&w(e)&&E()},{deep:!0}),l(()=>p.imageUrl,e=>{e&&!p.windData&&(b.value=e,x.value={uMin:p.uMin,uMax:p.uMax,vMin:p.vMin,vMax:p.vMax},E())}),l(()=>[p.numParticles,p.maxAge,p.speedFactor,p.color,p.colorRamp,p.speedRange,p.width,p.animate,p.opacity,p.visible],()=>{E()},{deep:!0}),a(()=>{_(p.id)}),(e,t)=>c(e.$slots,`default`)}});export{f as VLayerDeckglWindParticle};
|
|
2
|
+
//# sourceMappingURL=wind-particle-DW0nCMls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wind-particle-DW0nCMls.js","names":[],"sources":["../src/layers/deckgl/wind-particle/VLayerDeckglWindParticle.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * GPU-animated wind/current particle field on top of a vector field texture.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `maplibre-gl-wind`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox maplibre-gl-wind`\n */\n import { ref, computed, onMounted, onBeforeUnmount, watch } from 'vue';\n import type { PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import { WindParticleLayer, generateWindTexture } from 'maplibre-gl-wind';\n import type { ColorStop, WindDataPoint } from 'maplibre-gl-wind';\n import type { Color } from '../_shared/types';\n\n interface Props {\n id: string;\n imageUrl?: string;\n windData?: WindDataPoint[];\n bounds?: [number, number, number, number];\n uMin?: number;\n uMax?: number;\n vMin?: number;\n vMax?: number;\n numParticles?: number;\n maxAge?: number;\n speedFactor?: number;\n color?: Color;\n colorRamp?: ColorStop[];\n speedRange?: [number, number];\n width?: number;\n animate?: boolean;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n bounds: () => [-180, -90, 180, 90],\n uMin: -50,\n uMax: 50,\n vMin: -50,\n vMax: 50,\n numParticles: 8192,\n maxAge: 30,\n speedFactor: 50,\n color: () => [255, 255, 255, 200] as Color,\n colorRamp: () =>\n [\n [0.0, [59, 130, 189, 255]],\n [0.1, [102, 194, 165, 255]],\n [0.2, [171, 221, 164, 255]],\n [0.3, [230, 245, 152, 255]],\n [0.4, [254, 224, 139, 255]],\n [0.5, [253, 174, 97, 255]],\n [0.6, [244, 109, 67, 255]],\n [1.0, [213, 62, 79, 255]],\n ] as ColorStop[],\n speedRange: () => [0, 30],\n width: 1.5,\n animate: true,\n opacity: 1,\n visible: true,\n pickable: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n loaded: [];\n error: [error: Error];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const isLayerAdded = ref(false);\n const currentImageUrl = ref<string | null>(null);\n const windMetadata = ref({\n uMin: props.uMin,\n uMax: props.uMax,\n vMin: props.vMin,\n vMax: props.vMax,\n });\n\n const imageUnscale = computed(() => {\n const uRange = windMetadata.value.uMax - windMetadata.value.uMin;\n const vRange = windMetadata.value.vMax - windMetadata.value.vMin;\n return [Math.min(uRange, vRange) * -1, Math.max(uRange, vRange)];\n });\n\n const createLayer = () => {\n if (!currentImageUrl.value) return null;\n\n return new WindParticleLayer({\n id: props.id,\n image: currentImageUrl.value,\n bounds: props.bounds,\n imageUnscale: imageUnscale.value,\n numParticles: props.numParticles,\n maxAge: props.maxAge,\n speedFactor: props.speedFactor,\n color: props.color,\n colorRamp: props.colorRamp,\n speedRange: props.speedRange,\n width: props.width,\n animate: props.animate,\n wrapLongitude: true,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n });\n };\n\n const processWindData = (data: WindDataPoint[]) => {\n try {\n const result = generateWindTexture(data, {\n width: 360,\n height: 180,\n bounds: props.bounds,\n });\n\n windMetadata.value = {\n uMin: result.uMin,\n uMax: result.uMax,\n vMin: result.vMin,\n vMax: result.vMax,\n };\n\n currentImageUrl.value = result.canvas.toDataURL('image/png');\n return true;\n } catch (err) {\n emit('error', err instanceof Error ? err : new Error(String(err)));\n return false;\n }\n };\n\n const initializeLayer = () => {\n if (props.windData && props.windData.length > 0) {\n if (!processWindData(props.windData)) return;\n } else if (props.imageUrl) {\n currentImageUrl.value = props.imageUrl;\n windMetadata.value = {\n uMin: props.uMin,\n uMax: props.uMax,\n vMin: props.vMin,\n vMax: props.vMax,\n };\n } else {\n return;\n }\n\n const layer = createLayer();\n if (layer) {\n addLayer(layer);\n isLayerAdded.value = true;\n emit('loaded');\n }\n };\n\n const updateWindLayer = () => {\n if (!isLayerAdded.value) return;\n\n const layer = createLayer();\n if (layer) {\n updateLayer(props.id, layer);\n }\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => props.windData,\n (newData) => {\n if (newData && newData.length > 0) {\n if (processWindData(newData)) {\n updateWindLayer();\n }\n }\n },\n { deep: true },\n );\n\n watch(\n () => props.imageUrl,\n (newUrl) => {\n if (newUrl && !props.windData) {\n currentImageUrl.value = newUrl;\n windMetadata.value = {\n uMin: props.uMin,\n uMax: props.uMax,\n vMin: props.vMin,\n vMax: props.vMax,\n };\n updateWindLayer();\n }\n },\n );\n\n watch(\n () => [\n props.numParticles,\n props.maxAge,\n props.speedFactor,\n props.color,\n props.colorRamp,\n props.speedRange,\n props.width,\n props.animate,\n props.opacity,\n props.visible,\n ],\n () => {\n updateWindLayer();\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"s/BA0CE,IAAM,EAAQ,EA6BR,EAAO,EAOP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,EAAe,EAAI,GAAK,CACxB,EAAkB,EAAmB,KAAI,CACzC,EAAe,EAAI,CACvB,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,KAAM,EAAM,KACb,CAAA,CAEK,EAAe,MAAe,CAClC,IAAM,EAAS,EAAa,MAAM,KAAO,EAAa,MAAM,KACtD,EAAS,EAAa,MAAM,KAAO,EAAa,MAAM,KAC5D,MAAO,CAAC,KAAK,IAAI,EAAQ,EAAM,CAAI,GAAI,KAAK,IAAI,EAAQ,EAAO,CAAA,EAChE,CAEK,MACC,EAAgB,MAEd,IAAI,EAAkB,CAC3B,GAAI,EAAM,GACV,MAAO,EAAgB,MACvB,OAAQ,EAAM,OACd,aAAc,EAAa,MAC3B,aAAc,EAAM,aACpB,OAAQ,EAAM,OACd,YAAa,EAAM,YACnB,MAAO,EAAM,MACb,UAAW,EAAM,UACjB,WAAY,EAAM,WAClB,MAAO,EAAM,MACb,QAAS,EAAM,QACf,cAAe,GACf,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CACnD,CAAA,CAtBkC,KAyB/B,EAAmB,GAA0B,CACjD,GAAI,CACF,IAAM,EAAS,EAAoB,EAAM,CACvC,MAAO,IACP,OAAQ,IACR,OAAQ,EAAM,OACf,CAAA,CAUD,MARA,GAAa,MAAQ,CACnB,KAAM,EAAO,KACb,KAAM,EAAO,KACb,KAAM,EAAO,KACb,KAAM,EAAO,KACf,CAEA,EAAgB,MAAQ,EAAO,OAAO,UAAU,YAAW,CACpD,SACA,EAAK,CAEZ,OADA,EAAK,QAAS,aAAe,MAAQ,EAAU,MAAM,OAAO,EAAI,CAAC,CAAA,CAC1D,KAIL,MAAwB,CAC5B,GAAI,EAAM,UAAY,EAAM,SAAS,OAAS,MACxC,CAAC,EAAgB,EAAM,SAAQ,CAAG,YACjC,GAAI,EAAM,SACf,EAAgB,MAAQ,EAAM,SAC9B,EAAa,MAAQ,CACnB,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,KAAM,EAAM,KACd,MAEA,OAGF,IAAM,EAAQ,GAAY,CACtB,IACF,EAAS,EAAK,CACd,EAAa,MAAQ,GACrB,EAAK,SAAQ,GAIX,MAAwB,CAC5B,GAAI,CAAC,EAAa,MAAO,OAEzB,IAAM,EAAQ,GAAY,CACtB,GACF,EAAY,EAAM,GAAI,EAAK,SAI/B,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,EAAM,SACX,GAAY,CACP,GAAW,EAAQ,OAAS,GAC1B,EAAgB,EAAO,EACzB,GAAgB,EAItB,CAAE,KAAM,GACV,CAAA,CAEA,MACQ,EAAM,SACX,GAAW,CACN,GAAU,CAAC,EAAM,WACnB,EAAgB,MAAQ,EACxB,EAAa,MAAQ,CACnB,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,KAAM,EAAM,KACd,CACA,GAAgB,GAGtB,CAEA,MACQ,CACJ,EAAM,aACN,EAAM,OACN,EAAM,YACN,EAAM,MACN,EAAM,UACN,EAAM,WACN,EAAM,MACN,EAAM,QACN,EAAM,QACN,EAAM,QACR,KACM,CACJ,GAAgB,EAElB,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as e,o as t,t as n}from"./symbols-CFCXX1_B.js";import{defineComponent as r,onBeforeUnmount as i,onMounted as a,renderSlot as o,watch as s}from"vue";import{_WMSLayer as c}from"@deck.gl/geo-layers";const l=r({__name:`VLayerDeckglWMS`,props:{id:{},data:{},serviceType:{default:`wms`},layers:{},srs:{default:`EPSG:4326`},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!1},autoHighlight:{type:Boolean,default:!1},highlightColor:{},beforeId:{}},emits:[`click`,`hover`],setup(r,{emit:l}){let u=r,d=l,f=e(n),{addLayer:p,removeLayer:m,updateLayer:h}=t(f),g=()=>new c({id:u.id,data:u.data,serviceType:u.serviceType,layers:u.layers,srs:u.srs,opacity:u.opacity,visible:u.visible,pickable:u.pickable,autoHighlight:u.autoHighlight,highlightColor:u.highlightColor,beforeId:u.beforeId,onClick:e=>d(`click`,e),onHover:e=>d(`hover`,e)}),_=()=>{p(g())};return a(()=>{f.value?.isStyleLoaded()?_():f.value?.once(`style.load`,_)}),s(()=>[u.data,u.layers,u.srs,u.opacity,u.visible],()=>h(u.id,g()),{deep:!0}),i(()=>{m(u.id)}),(e,t)=>o(e.$slots,`default`)}});export{l as VLayerDeckglWMS};
|
|
2
|
+
//# sourceMappingURL=wms-vy1yMBNb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wms-vy1yMBNb.js","names":[],"sources":["../src/layers/deckgl/wms/VLayerDeckglWMS.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Consume WMS endpoints as deck.gl tiles.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/geo-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/geo-layers`\n */\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { _WMSLayer as WMSLayer } from '@deck.gl/geo-layers';\n import type { WMSLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n id: string;\n data: string;\n serviceType?: 'wms' | 'template';\n layers?: string[];\n srs?: string;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n serviceType: 'wms',\n srs: 'EPSG:4326',\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new WMSLayer({\n id: props.id,\n data: props.data,\n serviceType: props.serviceType,\n layers: props.layers,\n srs: props.srs,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as WMSLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [props.data, props.layers, props.srs, props.opacity, props.visible],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"ghBAgCE,IAAM,EAAQ,EASR,EAAO,EAKP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,MACG,IAAI,EAAS,CAClB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,OAAQ,EAAM,OACd,IAAK,EAAM,IACX,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClC,CAAA,CAGd,MAAwB,CAC5B,EAAS,GAAa,CAAA,SAGxB,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,CAAC,EAAM,KAAM,EAAM,OAAQ,EAAM,IAAK,EAAM,QAAS,EAAM,QAAO,KAClE,EAAY,EAAM,GAAI,GAAa,CAAA,CACzC,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as e,o as t,s as n,t as r}from"./symbols-CFCXX1_B.js";import{defineComponent as i,markRaw as a,onBeforeUnmount as o,onMounted as s,renderSlot as c,shallowRef as l,toRaw as u,watch as d}from"vue";const f=`pnpm add @deck.gl/core @deck.gl/layers @deck.gl/mapbox @developmentseed/deck.gl-raster @developmentseed/deck.gl-zarr @developmentseed/proj zarrita`,p=i({__name:`VLayerDeckglZarr`,props:{id:{},node:{},variable:{},selection:{},metadata:{},getTileData:{},renderTile:{},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!1},beforeId:{}},emits:[`click`,`hover`],setup(i,{emit:p}){let m=i,h=e(r),{addLayer:g,removeLayer:_,updateLayer:v}=t(h),y=l(null),b=l(null),x=()=>{if(!y.value)return null;let e={id:u(m.id),node:u(m.node),selection:u(m.selection),getTileData:m.getTileData,renderTile:m.renderTile,opacity:u(m.opacity),visible:u(m.visible),pickable:u(m.pickable)};return b.value&&(e.epsgResolver=b.value),m.variable!==void 0&&(e.variable=u(m.variable)),m.metadata!==void 0&&(e.metadata=u(m.metadata)),m.beforeId!==void 0&&(e.beforeId=u(m.beforeId)),a(new y.value(e))},S=async()=>{try{let[e,t]=await Promise.all([n(`@developmentseed/deck.gl-zarr`,()=>import(`@developmentseed/deck.gl-zarr`),f),n(`@developmentseed/proj`,()=>import(`@developmentseed/proj`),f)]);y.value=a(e.ZarrLayer),b.value=t.epsgResolver;let r=x();r&&g(r)}catch(e){console.error(`[deck.gl-raster] Error loading ZarrLayer:`,e),console.error(`Make sure @developmentseed/deck.gl-zarr, @developmentseed/proj, and zarrita are installed`)}};return s(()=>{h.value?.isStyleLoaded()?S():h.value?.once(`style.load`,S)}),d(()=>[m.node,m.variable,m.selection,m.metadata,m.opacity,m.visible,m.renderTile,m.getTileData],()=>{let e=x();e&&v(m.id,e)},{deep:!0}),o(()=>{_(m.id)}),(e,t)=>c(e.$slots,`default`)}});export{p as VLayerDeckglZarr};
|
|
2
|
+
//# sourceMappingURL=zarr-6SNoX07d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zarr-6SNoX07d.js","names":[],"sources":["../src/layers/deckgl/zarr/VLayerDeckglZarr.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * GeoZarr tile renderer with optional reprojection (caller supplies the store).\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@developmentseed/deck.gl-raster`\n * @requires `@developmentseed/deck.gl-zarr`\n * @requires `@developmentseed/proj`\n * @requires `zarrita`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @developmentseed/deck.gl-raster @developmentseed/deck.gl-zarr @developmentseed/proj zarrita`\n */\n /**\n * VLayerDeckglZarr — GeoZarr tile rendering with reprojection.\n *\n * Wraps @developmentseed/deck.gl-zarr ZarrLayer.\n * The caller MUST open the zarr store with zarrita and pass the opened\n * Array/Group as `node`, plus `selection` for non-spatial dims, plus\n * `getTileData` + `renderTile` callbacks. This wrapper is intentionally\n * thin — ZarrLayer is data-format / shader-pipeline agnostic by design.\n *\n * @see https://github.com/developmentseed/deck.gl-raster/blob/main/examples/dynamical-zarr-ecmwf/src/App.tsx\n */\n import {\n onMounted,\n onBeforeUnmount,\n watch,\n shallowRef,\n markRaw,\n toRaw,\n } from 'vue';\n import type { PickingInfo } from '@deck.gl/core';\n import type {\n MinimalTileData,\n RenderTileResult,\n } from '@developmentseed/deck.gl-raster';\n import type {\n GetTileDataOptions,\n SliceInput,\n } from '@developmentseed/deck.gl-zarr';\n import type * as zarr from 'zarrita';\n import { injectStrict, MapKey, requirePeer } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n const ZARR_PEER_INSTALL =\n 'pnpm add @deck.gl/core @deck.gl/layers @deck.gl/mapbox @developmentseed/deck.gl-raster @developmentseed/deck.gl-zarr @developmentseed/proj zarrita';\n\n interface Props {\n id: string;\n /**\n * Pre-opened zarrita Array OR Group. The caller builds the store\n * (e.g. zarr.FetchStore + withConsolidatedMetadata) and opens it.\n */\n node: zarr.Array<zarr.DataType, zarr.Readable> | zarr.Group<zarr.Readable>;\n /**\n * Optional path to a variable within the store. Only used when `node`\n * is a Group. Ignored for direct Array nodes.\n */\n variable?: string;\n /**\n * Selection for non-spatial dims. One entry per non-spatial dim.\n * Use a number to pin to an index, `zarr.Slice` for a range, or `null`\n * for zarrita's default. For pure spatial arrays, pass `{}`.\n */\n selection: Record<string, SliceInput>;\n /**\n * Optional raw group attrs override. Use when the data source lacks\n * GeoZarr metadata and you want to inject it.\n */\n metadata?: unknown;\n /**\n * Tile fetcher. Receives the zarr Array for the chosen zoom level and\n * a pre-built sliceSpec. Must return a tile-shaped `DataT`.\n */\n getTileData: (\n arr: zarr.Array<zarr.DataType, zarr.Readable>,\n options: GetTileDataOptions,\n ) => Promise<MinimalTileData>;\n /**\n * Convert a loaded tile into a `RenderTileResult` (either `{ image }`\n * or `{ renderPipeline }`).\n */\n renderTile: (data: MinimalTileData) => RenderTileResult;\n /** Layer opacity (0-1). */\n opacity?: number;\n /** Layer visibility. */\n visible?: boolean;\n /** Enable picking. */\n pickable?: boolean;\n /** Insert layer before this layer id. */\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n opacity: 1,\n visible: true,\n pickable: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const ZarrLayerClass = shallowRef<\n typeof import('@developmentseed/deck.gl-zarr').ZarrLayer | null\n >(null);\n const epsgResolverFn = shallowRef<\n typeof import('@developmentseed/proj').epsgResolver | null\n >(null);\n\n const createLayer = () => {\n if (!ZarrLayerClass.value) return null;\n\n const layerProps: Record<string, unknown> = {\n id: toRaw(props.id),\n node: toRaw(props.node),\n selection: toRaw(props.selection),\n getTileData: props.getTileData,\n renderTile: props.renderTile,\n opacity: toRaw(props.opacity),\n visible: toRaw(props.visible),\n pickable: toRaw(props.pickable),\n };\n\n if (epsgResolverFn.value) {\n layerProps.epsgResolver = epsgResolverFn.value;\n }\n if (props.variable !== undefined) {\n layerProps.variable = toRaw(props.variable);\n }\n if (props.metadata !== undefined) {\n layerProps.metadata = toRaw(props.metadata);\n }\n if (props.beforeId !== undefined) {\n layerProps.beforeId = toRaw(props.beforeId);\n }\n\n const layer = new ZarrLayerClass.value(layerProps);\n return markRaw(layer);\n };\n\n const initializeLayer = async () => {\n try {\n const [zarrModule, projModule] = await Promise.all([\n requirePeer(\n '@developmentseed/deck.gl-zarr',\n () => import('@developmentseed/deck.gl-zarr'),\n ZARR_PEER_INSTALL,\n ),\n requirePeer(\n '@developmentseed/proj',\n () => import('@developmentseed/proj'),\n ZARR_PEER_INSTALL,\n ),\n ]);\n\n ZarrLayerClass.value = markRaw(zarrModule.ZarrLayer);\n epsgResolverFn.value = projModule.epsgResolver;\n\n const layer = createLayer();\n if (layer) {\n addLayer(layer);\n }\n } catch (error) {\n console.error('[deck.gl-raster] Error loading ZarrLayer:', error);\n console.error(\n 'Make sure @developmentseed/deck.gl-zarr, @developmentseed/proj, and zarrita are installed',\n );\n }\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.node,\n props.variable,\n props.selection,\n props.metadata,\n props.opacity,\n props.visible,\n // Callbacks must be watched too: ZarrLayer captures `renderTile` and\n // `getTileData` at construction time, so consumers that swap closures\n // (e.g. AEF Mosaic rebuilding the SampleAefRgb shader pipeline with\n // new band indices) need the layer rebuilt to take effect.\n props.renderTile,\n props.getTileData,\n ],\n () => {\n const layer = createLayer();\n if (layer) {\n updateLayer(props.id, layer);\n }\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"4MA8CE,MAAM,EACJ,2ZAgDF,IAAM,EAAQ,EAWR,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,EAAiB,EAErB,KAAI,CACA,EAAiB,EAErB,KAAI,CAEA,MAAoB,CACxB,GAAI,CAAC,EAAe,MAAO,OAAO,KAElC,IAAM,EAAsC,CAC1C,GAAI,EAAM,EAAM,GAAE,CAClB,KAAM,EAAM,EAAM,KAAI,CACtB,UAAW,EAAM,EAAM,UAAS,CAChC,YAAa,EAAM,YACnB,WAAY,EAAM,WAClB,QAAS,EAAM,EAAM,QAAO,CAC5B,QAAS,EAAM,EAAM,QAAO,CAC5B,SAAU,EAAM,EAAM,SAAQ,CAChC,CAgBA,OAdI,EAAe,QACjB,EAAW,aAAe,EAAe,OAEvC,EAAM,WAAa,IAAA,KACrB,EAAW,SAAW,EAAM,EAAM,SAAQ,EAExC,EAAM,WAAa,IAAA,KACrB,EAAW,SAAW,EAAM,EAAM,SAAQ,EAExC,EAAM,WAAa,IAAA,KACrB,EAAW,SAAW,EAAM,EAAM,SAAQ,EAIrC,EAAQ,IADG,EAAe,MAAM,EACnB,CAAA,EAGhB,EAAkB,SAAY,CAClC,GAAI,CACF,GAAM,CAAC,EAAY,GAAc,MAAM,QAAQ,IAAI,CACjD,EACE,oCACM,OAAO,iCACb,EACF,CACA,EACE,4BACM,OAAO,yBACb,EAEJ,CAAC,CAAA,CAED,EAAe,MAAQ,EAAQ,EAAW,UAAS,CACnD,EAAe,MAAQ,EAAW,aAElC,IAAM,EAAQ,GAAY,CACtB,GACF,EAAS,EAAK,OAET,EAAO,CACd,QAAQ,MAAM,4CAA6C,EAAK,CAChE,QAAQ,MACN,4FACF,UAIJ,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,CACJ,EAAM,KACN,EAAM,SACN,EAAM,UACN,EAAM,SACN,EAAM,QACN,EAAM,QAKN,EAAM,WACN,EAAM,YACR,KACM,CACJ,IAAM,EAAQ,GAAY,CACtB,GACF,EAAY,EAAM,GAAI,EAAK,EAG/B,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geoql/v-maplibre",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Vue 3 components for MapLibre GL - reactive map components with full TypeScript support",
|
|
6
6
|
"keywords": [
|
|
@@ -90,19 +90,20 @@
|
|
|
90
90
|
"@luma.gl/engine": "^9.3.3",
|
|
91
91
|
"@luma.gl/shadertools": "^9.3.3",
|
|
92
92
|
"@tsdown/css": "^0.22.0",
|
|
93
|
-
"@types/node": "^25.
|
|
93
|
+
"@types/node": "^25.9.1",
|
|
94
94
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
95
|
-
"@vitest/coverage-v8": "^
|
|
95
|
+
"@vitest/coverage-v8": "^5.0.0-beta.3",
|
|
96
96
|
"@vue/test-utils": "^2.4.10",
|
|
97
|
+
"apache-arrow": "^21.1.0",
|
|
97
98
|
"happy-dom": "^20.9.0",
|
|
98
99
|
"maplibre-gl-lidar": "^0.13.0",
|
|
99
100
|
"maplibre-gl-wind": "^0.2.0",
|
|
100
101
|
"three": "^0.184.0",
|
|
101
102
|
"typescript": "^6.0.3",
|
|
102
103
|
"unplugin-vue": "^7.2.0",
|
|
103
|
-
"vite-plus": "^0.1.
|
|
104
|
+
"vite-plus": "^0.1.22",
|
|
104
105
|
"vue": "^3.5.34",
|
|
105
|
-
"vue-tsc": "^3.
|
|
106
|
+
"vue-tsc": "^3.3.1",
|
|
106
107
|
"zarrita": "^0.7.3"
|
|
107
108
|
},
|
|
108
109
|
"peerDependencies": {
|
|
@@ -117,12 +118,13 @@
|
|
|
117
118
|
"@developmentseed/deck.gl-zarr": "^0.6.0",
|
|
118
119
|
"@developmentseed/geotiff": "^0.6.0",
|
|
119
120
|
"@developmentseed/proj": "^0.6.0",
|
|
120
|
-
"zarrita": "^0.7.0",
|
|
121
121
|
"@geoql/maplibre-gl-starfield": "^0.1.0",
|
|
122
|
+
"apache-arrow": "^17.0.0",
|
|
122
123
|
"maplibre-gl-lidar": "^0.13.0",
|
|
123
124
|
"maplibre-gl-wind": "^0.2.0",
|
|
124
125
|
"three": ">=0.176.0",
|
|
125
|
-
"vue": "^3.5.0"
|
|
126
|
+
"vue": "^3.5.0",
|
|
127
|
+
"zarrita": "^0.7.0"
|
|
126
128
|
},
|
|
127
129
|
"peerDependenciesMeta": {
|
|
128
130
|
"@deck.gl/core": {
|
|
@@ -158,6 +160,9 @@
|
|
|
158
160
|
"@developmentseed/proj": {
|
|
159
161
|
"optional": true
|
|
160
162
|
},
|
|
163
|
+
"apache-arrow": {
|
|
164
|
+
"optional": true
|
|
165
|
+
},
|
|
161
166
|
"zarrita": {
|
|
162
167
|
"optional": true
|
|
163
168
|
},
|
|
@@ -174,5 +179,5 @@
|
|
|
174
179
|
"optional": true
|
|
175
180
|
}
|
|
176
181
|
},
|
|
177
|
-
"packageManager": "pnpm@11.1
|
|
182
|
+
"packageManager": "pnpm@11.2.1"
|
|
178
183
|
}
|