@deck.gl/maplibre 9.4.0-beta.1

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.
@@ -0,0 +1,296 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Deck, assert } from '@deck.gl/core';
5
+ import { createMapLibreInterleavedDeck, getMapLibreDefaultParameters, getMapLibreDefaultView, getMapLibreViewState, MAPLIBRE_VIEW_ID, removeMapLibreDeckInstance } from "./deck-utils.js";
6
+ import { getMapLibreProjection } from "./compatibility.js";
7
+ import { resolveMapLibreLayerGroups } from "./resolve-layer-groups.js";
8
+ /** Renders deck.gl layers over a MapLibre map and synchronizes with its camera. */
9
+ export default class MapLibreOverlay {
10
+ /** Creates a MapLibre overlay. */
11
+ constructor(props) {
12
+ this._handleStyleChange = () => {
13
+ resolveMapLibreLayerGroups(this._map, this._props.layers, this._props.layers);
14
+ if (!this._map) {
15
+ return;
16
+ }
17
+ if (getMapLibreProjection(this._map)) {
18
+ this._deck?.setProps({ views: this._getViews(this._map) });
19
+ }
20
+ };
21
+ this._updateContainerSize = () => {
22
+ if (this._map && this._container) {
23
+ const { clientWidth, clientHeight } = this._map.getContainer();
24
+ Object.assign(this._container.style, {
25
+ width: `${clientWidth}px`,
26
+ height: `${clientHeight}px`
27
+ });
28
+ }
29
+ };
30
+ this._updateViewState = () => {
31
+ const deck = this._deck;
32
+ const map = this._map;
33
+ if (deck && map) {
34
+ deck.setProps({
35
+ views: this._getViews(map),
36
+ viewState: getMapLibreViewState(map)
37
+ });
38
+ if (deck.isInitialized) {
39
+ deck.redraw();
40
+ }
41
+ }
42
+ };
43
+ // eslint-disable-next-line complexity
44
+ this._handleMouseEvent = (event) => {
45
+ const deck = this._deck;
46
+ if (!deck || !deck.isInitialized) {
47
+ return;
48
+ }
49
+ const mockEvent = {
50
+ type: event.type,
51
+ offsetCenter: event.point || { x: 0, y: 0 },
52
+ srcEvent: event
53
+ };
54
+ const lastDown = this._lastMouseDownPoint;
55
+ if (!event.point && lastDown && event.originalEvent instanceof MouseEvent) {
56
+ mockEvent.deltaX = event.originalEvent.clientX - lastDown.clientX;
57
+ mockEvent.deltaY = event.originalEvent.clientY - lastDown.clientY;
58
+ mockEvent.offsetCenter = {
59
+ x: lastDown.x + mockEvent.deltaX,
60
+ y: lastDown.y + mockEvent.deltaY
61
+ };
62
+ }
63
+ switch (mockEvent.type) {
64
+ case 'mousedown':
65
+ deck._onPointerDown(mockEvent);
66
+ if (!(event.originalEvent instanceof MouseEvent)) {
67
+ return;
68
+ }
69
+ this._lastMouseDownPoint = {
70
+ ...mockEvent.offsetCenter,
71
+ clientX: event.originalEvent.clientX,
72
+ clientY: event.originalEvent.clientY
73
+ };
74
+ break;
75
+ case 'dragstart':
76
+ mockEvent.type = 'panstart';
77
+ deck._onEvent(mockEvent);
78
+ break;
79
+ case 'drag':
80
+ mockEvent.type = 'panmove';
81
+ deck._onEvent(mockEvent);
82
+ break;
83
+ case 'dragend':
84
+ mockEvent.type = 'panend';
85
+ deck._onEvent(mockEvent);
86
+ break;
87
+ case 'click':
88
+ mockEvent.tapCount = 1;
89
+ deck._onEvent(mockEvent);
90
+ break;
91
+ case 'dblclick':
92
+ mockEvent.type = 'click';
93
+ mockEvent.tapCount = 2;
94
+ deck._onEvent(mockEvent);
95
+ break;
96
+ case 'mousemove':
97
+ mockEvent.type = 'pointermove';
98
+ deck._onPointerMove(mockEvent);
99
+ break;
100
+ case 'mouseout':
101
+ mockEvent.type = 'pointerleave';
102
+ deck._onPointerMove(mockEvent);
103
+ break;
104
+ default:
105
+ return;
106
+ }
107
+ };
108
+ const { interleaved = false } = props;
109
+ this._interleaved = interleaved;
110
+ this._props = this._filterProps(props);
111
+ }
112
+ _filterProps(props) {
113
+ const { interleaved: _, useDevicePixels, device, ...deckProps } = props;
114
+ if (!this._interleaved) {
115
+ if (useDevicePixels !== undefined) {
116
+ Object.assign(deckProps, { useDevicePixels });
117
+ }
118
+ if (device !== undefined) {
119
+ Object.assign(deckProps, { device });
120
+ }
121
+ }
122
+ return deckProps;
123
+ }
124
+ /** Updates partial properties of the underlying Deck instance. */
125
+ setProps(props) {
126
+ if (this._interleaved && props.layers) {
127
+ resolveMapLibreLayerGroups(this._map, this._props.layers, props.layers);
128
+ }
129
+ Object.assign(this._props, this._filterProps(props));
130
+ if (this._deck && this._map) {
131
+ this._deck.setProps({
132
+ ...this._props,
133
+ views: this._getViews(this._map),
134
+ parameters: {
135
+ ...getMapLibreDefaultParameters(this._map, this._interleaved),
136
+ ...this._props.parameters
137
+ }
138
+ });
139
+ }
140
+ }
141
+ /** Called when the control is added to a map. */
142
+ onAdd(map) {
143
+ this._map = map;
144
+ try {
145
+ return this._interleaved ? this._onAddInterleaved(map) : this._onAddOverlaid(map);
146
+ }
147
+ catch (error) {
148
+ if (this._deck) {
149
+ if (this._interleaved) {
150
+ this._onRemoveInterleaved(map);
151
+ }
152
+ else {
153
+ this._onRemoveOverlaid(map);
154
+ }
155
+ }
156
+ this._deck = undefined;
157
+ this._map = undefined;
158
+ this._container = undefined;
159
+ throw error;
160
+ }
161
+ }
162
+ /** Called when the control is removed from a map. */
163
+ onRemove(_map) {
164
+ const map = this._map;
165
+ if (map) {
166
+ if (this._interleaved) {
167
+ this._onRemoveInterleaved(map);
168
+ }
169
+ else {
170
+ this._onRemoveOverlaid(map);
171
+ }
172
+ }
173
+ this._deck = undefined;
174
+ this._map = undefined;
175
+ this._container = undefined;
176
+ }
177
+ /** Default control position. */
178
+ getDefaultPosition() {
179
+ return 'top-left';
180
+ }
181
+ /** Forwards to Deck.pickObject. */
182
+ pickObject(params) {
183
+ assert(this._deck);
184
+ return this._deck.pickObject(params);
185
+ }
186
+ /** Forwards to Deck.pickMultipleObjects. */
187
+ pickMultipleObjects(params) {
188
+ assert(this._deck);
189
+ return this._deck.pickMultipleObjects(params);
190
+ }
191
+ /** Forwards to Deck.pickObjects. */
192
+ pickObjects(params) {
193
+ assert(this._deck);
194
+ return this._deck.pickObjects(params);
195
+ }
196
+ /** Removes the control from its map and releases resources. */
197
+ finalize() {
198
+ this._map?.removeControl(this);
199
+ }
200
+ /** Returns the basemap canvas in interleaved mode and Deck's canvas otherwise. */
201
+ getCanvas() {
202
+ if (!this._map) {
203
+ return null;
204
+ }
205
+ return this._interleaved ? this._map.getCanvas() : this._deck.getCanvas();
206
+ }
207
+ _onAddOverlaid(map) {
208
+ const container = document.createElement('div');
209
+ Object.assign(container.style, {
210
+ position: 'absolute',
211
+ left: 0,
212
+ top: 0,
213
+ textAlign: 'initial',
214
+ pointerEvents: 'none'
215
+ });
216
+ this._container = container;
217
+ this._deck = new Deck({
218
+ ...this._props,
219
+ parent: container,
220
+ deviceProps: {
221
+ ...this._props.deviceProps,
222
+ createCanvasContext: {
223
+ ...(typeof this._props.deviceProps?.createCanvasContext === 'object'
224
+ ? this._props.deviceProps.createCanvasContext
225
+ : undefined),
226
+ pixelSizeSource: 'css-dpr'
227
+ }
228
+ },
229
+ parameters: {
230
+ ...getMapLibreDefaultParameters(map, false),
231
+ ...this._props.parameters
232
+ },
233
+ views: this._getViews(map),
234
+ viewState: getMapLibreViewState(map)
235
+ });
236
+ map.on('resize', this._updateContainerSize);
237
+ map.on('render', this._updateViewState);
238
+ map.on('mousedown', this._handleMouseEvent);
239
+ map.on('dragstart', this._handleMouseEvent);
240
+ map.on('drag', this._handleMouseEvent);
241
+ map.on('dragend', this._handleMouseEvent);
242
+ map.on('mousemove', this._handleMouseEvent);
243
+ map.on('mouseout', this._handleMouseEvent);
244
+ map.on('click', this._handleMouseEvent);
245
+ map.on('dblclick', this._handleMouseEvent);
246
+ this._updateContainerSize();
247
+ return container;
248
+ }
249
+ _onAddInterleaved(map) {
250
+ this._deck = createMapLibreInterleavedDeck(map, {
251
+ ...this._props,
252
+ views: this._getViews(map),
253
+ parameters: {
254
+ ...getMapLibreDefaultParameters(map, true),
255
+ ...this._props.parameters
256
+ }
257
+ });
258
+ map.on('styledata', this._handleStyleChange);
259
+ resolveMapLibreLayerGroups(map, [], this._props.layers);
260
+ return document.createElement('div');
261
+ }
262
+ _onRemoveOverlaid(map) {
263
+ map.off('resize', this._updateContainerSize);
264
+ map.off('render', this._updateViewState);
265
+ map.off('mousedown', this._handleMouseEvent);
266
+ map.off('dragstart', this._handleMouseEvent);
267
+ map.off('drag', this._handleMouseEvent);
268
+ map.off('dragend', this._handleMouseEvent);
269
+ map.off('mousemove', this._handleMouseEvent);
270
+ map.off('mouseout', this._handleMouseEvent);
271
+ map.off('click', this._handleMouseEvent);
272
+ map.off('dblclick', this._handleMouseEvent);
273
+ this._deck?.finalize();
274
+ }
275
+ _onRemoveInterleaved(map) {
276
+ map.off('styledata', this._handleStyleChange);
277
+ try {
278
+ resolveMapLibreLayerGroups(map, this._props.layers, []);
279
+ }
280
+ finally {
281
+ removeMapLibreDeckInstance(map);
282
+ }
283
+ }
284
+ _getViews(map) {
285
+ if (!this._props.views) {
286
+ return getMapLibreDefaultView(map);
287
+ }
288
+ const views = Array.isArray(this._props.views) ? this._props.views : [this._props.views];
289
+ const hasMapLibreView = views.some((view) => view.id === MAPLIBRE_VIEW_ID);
290
+ if (hasMapLibreView) {
291
+ return this._props.views;
292
+ }
293
+ return [getMapLibreDefaultView(map), ...views];
294
+ }
295
+ }
296
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC3B,wBAAqB;AACtB,OAAO,EAAC,qBAAqB,EAAC,2BAAwB;AACtD,OAAO,EAAC,0BAA0B,EAAC,kCAA+B;AAgClE,mFAAmF;AACnF,MAAM,CAAC,OAAO,OAAO,eAAe;IASlC,kCAAkC;IAClC,YAAY,KAA2B;QAuM/B,uBAAkB,GAAG,GAAG,EAAE;YAChC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9E,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC;QAEM,yBAAoB,GAAG,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjC,MAAM,EAAC,WAAW,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;oBACnC,KAAK,EAAE,GAAG,WAAW,IAAI;oBACzB,MAAM,EAAE,GAAG,YAAY,IAAI;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAeM,qBAAgB,GAAG,GAAG,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,QAAQ,CAAC;oBACZ,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC1B,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC;iBACrC,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,sCAAsC;QAC9B,sBAAiB,GAAG,CAAC,KAAyB,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAOX;gBACF,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY,EAAE,KAAK,CAAC,KAAK,IAAI,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC;gBACzC,QAAQ,EAAE,KAAK;aAChB,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,aAAa,YAAY,UAAU,EAAE,CAAC;gBAC1E,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAClE,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAClE,SAAS,CAAC,YAAY,GAAG;oBACvB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;oBAChC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;iBACjC,CAAC;YACJ,CAAC;YAED,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvB,KAAK,WAAW;oBACd,IAAI,CAAC,cAAc,CAAC,SAA2C,CAAC,CAAC;oBACjE,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,YAAY,UAAU,CAAC,EAAE,CAAC;wBACjD,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC,mBAAmB,GAAG;wBACzB,GAAG,SAAS,CAAC,YAAY;wBACzB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO;wBACpC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO;qBACrC,CAAC;oBACF,MAAM;gBAER,KAAK,WAAW;oBACd,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC;oBAC5B,IAAI,CAAC,QAAQ,CAAC,SAA2C,CAAC,CAAC;oBAC3D,MAAM;gBAER,KAAK,MAAM;oBACT,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;oBAC3B,IAAI,CAAC,QAAQ,CAAC,SAA2C,CAAC,CAAC;oBAC3D,MAAM;gBAER,KAAK,SAAS;oBACZ,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;oBAC1B,IAAI,CAAC,QAAQ,CAAC,SAA2C,CAAC,CAAC;oBAC3D,MAAM;gBAER,KAAK,OAAO;oBACV,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,SAA2C,CAAC,CAAC;oBAC3D,MAAM;gBAER,KAAK,UAAU;oBACb,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;oBACzB,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,SAA2C,CAAC,CAAC;oBAC3D,MAAM;gBAER,KAAK,WAAW;oBACd,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC;oBAC/B,IAAI,CAAC,cAAc,CAAC,SAA2C,CAAC,CAAC;oBACjE,MAAM;gBAER,KAAK,UAAU;oBACb,SAAS,CAAC,IAAI,GAAG,cAAc,CAAC;oBAChC,IAAI,CAAC,cAAc,CAAC,SAA2C,CAAC,CAAC;oBACjE,MAAM;gBAER;oBACE,OAAO;YACX,CAAC;QACH,CAAC,CAAC;QAxUA,MAAM,EAAC,WAAW,GAAG,KAAK,EAAC,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEO,YAAY,CAAC,KAA2B;QAC9C,MAAM,EAAC,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,SAAS,EAAC,GAAG,KAAK,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAC,eAAe,EAAC,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,SAAiC,CAAC;IAC3C,CAAC;IAED,kEAAkE;IAClE,QAAQ,CAAC,KAA2B;QAClC,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAClB,GAAG,IAAI,CAAC,MAAM;gBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,UAAU,EAAE;oBACV,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;oBAC7D,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;iBAC1B;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,GAAgB;QACpB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,IAAiB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,gCAAgC;IAChC,kBAAkB;QAChB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,mCAAmC;IACnC,UAAU,CAAC,MAAyC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,4CAA4C;IAC5C,mBAAmB,CACjB,MAAkD;QAElD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,oCAAoC;IACpC,WAAW,CAAC,MAA0C;QACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,+DAA+D;IAC/D,QAAQ;QACN,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,kFAAkF;IAClF,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAM,CAAC,SAAS,EAAE,CAAC;IAC7E,CAAC;IAEO,cAAc,CAAC,GAAgB;QACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;YAC7B,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;YACN,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAM;YACzB,GAAG,IAAI,CAAC,MAAM;YACd,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE;gBACX,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;gBAC1B,mBAAmB,EAAE;oBACnB,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB,KAAK,QAAQ;wBAClE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB;wBAC7C,CAAC,CAAC,SAAS,CAAC;oBACd,eAAe,EAAE,SAAS;iBAC3B;aACF;YACD,UAAU,EAAE;gBACV,GAAG,4BAA4B,CAAC,GAAG,EAAE,KAAK,CAAC;gBAC3C,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;aAC1B;YACD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC;SACrC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1C,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,iBAAiB,CAAC,GAAgB;QACxC,IAAI,CAAC,KAAK,GAAG,6BAA6B,CAAC,GAAG,EAAE;YAC9C,GAAG,IAAI,CAAC,MAAM;YACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAC1B,UAAU,EAAE;gBACV,GAAG,4BAA4B,CAAC,GAAG,EAAE,IAAI,CAAC;gBAC1C,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;aAC1B;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7C,0BAA0B,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAExD,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,iBAAiB,CAAC,GAAgB;QACxC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IACzB,CAAC;IAEO,oBAAoB,CAAC,GAAgB;QAC3C,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAuBO,SAAS,CAAC,GAAgB;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,gBAAgB,CAAC,CAAC;QAChF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACjD,CAAC;CAmGF"}
@@ -0,0 +1,4 @@
1
+ import type { LayersList } from '@deck.gl/core';
2
+ import type { Map as MapLibreMap } from 'maplibre-gl';
3
+ export declare function resolveMapLibreLayerGroups(map?: MapLibreMap, oldLayers?: LayersList, newLayers?: LayersList): void;
4
+ //# sourceMappingURL=resolve-layer-groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-layer-groups.d.ts","sourceRoot":"","sources":["../src/resolve-layer-groups.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAQ,UAAU,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAC,GAAG,IAAI,WAAW,EAAC,MAAM,aAAa,CAAC;AAMpD,wBAAgB,0BAA0B,CACxC,GAAG,CAAC,EAAE,WAAW,EACjB,SAAS,CAAC,EAAE,UAAU,EACtB,SAAS,CAAC,EAAE,UAAU,GACrB,IAAI,CA+DN"}
@@ -0,0 +1,65 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { _flatten as flatten } from '@deck.gl/core';
5
+ import MapLibreLayerGroup from "./layer-group.js";
6
+ import { getMapLibreLayerGroupId } from "./layer-utils.js";
7
+ const LAYER_GROUPS = new WeakMap();
8
+ // eslint-disable-next-line complexity, max-statements
9
+ export function resolveMapLibreLayerGroups(map, oldLayers, newLayers) {
10
+ if (!map || !map.isStyleLoaded()) {
11
+ return;
12
+ }
13
+ let layerGroups = LAYER_GROUPS.get(map);
14
+ if (!layerGroups) {
15
+ layerGroups = new Map();
16
+ LAYER_GROUPS.set(map, layerGroups);
17
+ }
18
+ const layers = flatten(newLayers, Boolean);
19
+ const newLayerGroupIds = new Set(layers.map(getMapLibreLayerGroupId));
20
+ if (oldLayers !== newLayers) {
21
+ const previousLayers = flatten(oldLayers, Boolean);
22
+ const previousLayerGroupIds = new Set(previousLayers.map(getMapLibreLayerGroupId));
23
+ for (const groupId of previousLayerGroupIds) {
24
+ if (!newLayerGroupIds.has(groupId) && layerGroups.has(groupId)) {
25
+ if (map.getLayer(groupId)) {
26
+ map.removeLayer(groupId);
27
+ }
28
+ layerGroups.delete(groupId);
29
+ }
30
+ }
31
+ }
32
+ for (const layer of layers) {
33
+ const groupId = getMapLibreLayerGroupId(layer);
34
+ if (layerGroups.has(groupId)) {
35
+ if (!map.getLayer(groupId)) {
36
+ map.addLayer(layerGroups.get(groupId), layer.props.beforeId);
37
+ }
38
+ continue;
39
+ }
40
+ if (map.getLayer(groupId)) {
41
+ throw new Error(`MapLibre style already contains a non-deck layer with id ${groupId}`);
42
+ }
43
+ const group = new MapLibreLayerGroup({
44
+ id: groupId,
45
+ beforeId: layer.props.beforeId
46
+ });
47
+ layerGroups.set(groupId, group);
48
+ map.addLayer(group, layer.props.beforeId);
49
+ }
50
+ for (const groupId of newLayerGroupIds) {
51
+ const group = layerGroups.get(groupId);
52
+ const mapLayers = map.getLayersOrder();
53
+ const expectedGroupIndex = group.beforeId
54
+ ? mapLayers.indexOf(group.beforeId)
55
+ : mapLayers.length;
56
+ if (expectedGroupIndex < 0) {
57
+ continue;
58
+ }
59
+ const currentGroupIndex = mapLayers.indexOf(groupId);
60
+ if (currentGroupIndex !== expectedGroupIndex - 1) {
61
+ map.moveLayer(groupId, group.beforeId);
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=resolve-layer-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-layer-groups.js","sourceRoot":"","sources":["../src/resolve-layer-groups.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@deck.gl/maplibre",
3
+ "description": "Use deck.gl layers with MapLibre GL JS",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "version": "9.4.0-beta.1",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "keywords": [
11
+ "webgl",
12
+ "visualization",
13
+ "maplibre",
14
+ "overlay"
15
+ ],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/visgl/deck.gl.git"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/visgl/deck.gl/issues"
22
+ },
23
+ "homepage": "https://deck.gl",
24
+ "types": "dist/index.d.ts",
25
+ "module": "dist/index.js",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js"
30
+ }
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "src"
35
+ ],
36
+ "sideEffects": false,
37
+ "peerDependencies": {
38
+ "@deck.gl/core": "~9.4.0-alpha.2",
39
+ "@luma.gl/core": "~9.4.0-beta.3",
40
+ "maplibre-gl": "^4.5.1 || ^5.0.0 || ^6.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "maplibre-gl": "^6.3.0",
44
+ "maplibre-gl-v4": "npm:maplibre-gl@4.5.1",
45
+ "maplibre-gl-v5": "npm:maplibre-gl@5.0.0",
46
+ "maplibre-gl-v6": "npm:maplibre-gl@6.0.0"
47
+ },
48
+ "gitHead": "5b00a0ced09284c2a642c8ffc56748629f5e796b"
49
+ }
@@ -0,0 +1,58 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ export type MapLibreRenderParameters = {
6
+ farZ: number;
7
+ nearZ: number;
8
+ };
9
+
10
+ type CompatibleMapLibreMap = {
11
+ getCenterElevation?: () => number;
12
+ getCameraTargetElevation?: () => number;
13
+ getProjection?: () => {type?: unknown} | undefined;
14
+ };
15
+
16
+ export function getMapLibreElevation(map: CompatibleMapLibreMap): number | undefined {
17
+ if (map.getCenterElevation) {
18
+ return map.getCenterElevation();
19
+ }
20
+ return map.getCameraTargetElevation?.();
21
+ }
22
+
23
+ export function getMapLibreProjection(map: CompatibleMapLibreMap): 'mercator' | 'globe' {
24
+ let type: unknown = 'mercator';
25
+ try {
26
+ type = map.getProjection?.()?.type || 'mercator';
27
+ } catch {
28
+ // getProjection throws before a style is assigned
29
+ }
30
+ if (type === 'globe') {
31
+ return 'globe';
32
+ }
33
+ if (type !== 'mercator') {
34
+ throw new Error(`Unsupported MapLibre projection: ${String(type)}`);
35
+ }
36
+ return 'mercator';
37
+ }
38
+
39
+ export function getMapLibreRenderParameters(
40
+ parametersOrMatrix: unknown,
41
+ legacyParameters?: unknown
42
+ ): MapLibreRenderParameters {
43
+ if (isMapLibreRenderParameters(parametersOrMatrix)) {
44
+ return parametersOrMatrix;
45
+ }
46
+ if (isMapLibreRenderParameters(legacyParameters)) {
47
+ return legacyParameters;
48
+ }
49
+ throw new Error('MapLibreOverlay interleaved rendering requires MapLibre GL JS 4.5.1 or later');
50
+ }
51
+
52
+ function isMapLibreRenderParameters(value: unknown): value is MapLibreRenderParameters {
53
+ if (!value || typeof value !== 'object') {
54
+ return false;
55
+ }
56
+ const parameters = value as Partial<MapLibreRenderParameters>;
57
+ return Number.isFinite(parameters.nearZ) && Number.isFinite(parameters.farZ);
58
+ }