maplibre-gl-layers 0.11.0 → 0.12.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.
@@ -1,83 +1,338 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.11.0
3
+ * version: 0.12.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 371efb126f281333d59ec75cfe788d45f3b1482e
8
+ * git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
9
9
  */
10
10
 
11
- import { MercatorCoordinate } from 'maplibre-gl';
12
- import { SpriteMode, SpriteAnchor, SpriteImageOffset, SpriteInterpolationOptions, SpriteImageOriginLocation, SpriteLocation, SpriteTextGlyphHorizontalAlign, SpriteTextureMagFilter, SpriteTextureMinFilter, SpriteInterpolationMode, EasingFunction } from './types';
11
+ import { SpriteMode, SpriteAnchor, SpriteImageOffset, SpriteInterpolationOptions, SpriteImageOriginLocation, SpriteLocation, SpriteTextGlyphHorizontalAlign, SpriteTextureMagFilter, SpriteTextureMinFilter, SpriteInterpolationMode, EasingFunction, SpriteScreenPoint, SpritePoint } from './types';
12
+ import { ResolvedSpriteScalingOptions, SurfaceCorner } from './math';
13
+ /**
14
+ * The handle value that using the instance.
15
+ */
16
+ export type IdHandle = number;
17
+ /**
18
+ * Id handler interface.
19
+ * @param T Identified instance type
20
+ * @remarks It is used for (wasm) interoperability for identity.
21
+ */
22
+ export interface IdHandler<T> {
23
+ /**
24
+ * Allocates a numeric handle for the specified identifier.
25
+ * @param {string} rawId - Raw identifier.
26
+ * @returns {IdHandle} Allocated handle.
27
+ */
28
+ readonly allocate: (rawId: string) => IdHandle;
29
+ /**
30
+ * Stores an instance reference at the given handle index.
31
+ * @param {IdHandle} handle - Numeric handle.
32
+ * @param {T} instance - Registered instance.
33
+ */
34
+ readonly store: (handle: IdHandle, instance: T) => void;
35
+ /**
36
+ * Get instance by handle.
37
+ * @param handle Numeric handle
38
+ * @returns Instance.
39
+ */
40
+ readonly get: (handle: IdHandle) => T;
41
+ /**
42
+ * Releases the handle associated with the provided identifier.
43
+ * @param {string} rawId - Raw identifier.
44
+ */
45
+ readonly release: (rawId: string) => void;
46
+ /**
47
+ * Clears all handle bookkeeping state.
48
+ */
49
+ readonly reset: () => void;
50
+ }
51
+ /**
52
+ * Buffers exposing image metadata indexed by handle.
53
+ * @remarks It is used for (wasm) interoperability for image identity.
54
+ */
55
+ export interface ImageHandleBuffers {
56
+ readonly widths: Float32Array;
57
+ readonly heights: Float32Array;
58
+ readonly textureReady: Uint8Array;
59
+ }
60
+ /**
61
+ * Registered image references aligned by handle index.
62
+ * @remarks It is used for (wasm) interoperability for image identity.
63
+ */
64
+ export type ImageResourceTable = readonly (Readonly<RegisteredImage> | undefined)[];
65
+ /**
66
+ * Image handle buffer controller interface.
67
+ * @remarks It is used for (wasm) interoperability for image identity.
68
+ */
69
+ export interface ImageHandleBufferController {
70
+ /**
71
+ * Flag metadata buffers for regeneration.
72
+ * @param images Image map.
73
+ */
74
+ readonly markDirty: (images: ReadonlyMap<string, RegisteredImage>) => void;
75
+ /**
76
+ * Rebuilds the metadata buffers when flagged as dirty.
77
+ * @returns {ImageHandleBuffers} Metadata buffers aligned by handle index.
78
+ */
79
+ readonly ensure: () => ImageHandleBuffers;
80
+ /**
81
+ * Returns registered images aligned by handle index. Ensures buffers are up to date.
82
+ */
83
+ readonly getResourcesByHandle: () => ImageResourceTable;
84
+ }
85
+ /**
86
+ * Encoded pointer representing the target of an origin reference.
87
+ * @remarks It is used for (wasm) interoperability for image identity.
88
+ * The high bits encode the sub-layer while the low bits encode the order slot.
89
+ */
90
+ export type SpriteOriginReferenceKey = number;
91
+ /** Sentinel used when the image does not reference another sprite image. */
92
+ export declare const SPRITE_ORIGIN_REFERENCE_KEY_NONE = -1;
93
+ /**
94
+ * Index into the render target bucket pointing at the resolved origin image.
95
+ * @remarks It is used for (wasm) interoperability for image identity.
96
+ * When no origin is assigned or the reference could not be resolved,
97
+ * the value will be {@link SPRITE_ORIGIN_REFERENCE_INDEX_NONE}.
98
+ */
99
+ export type SpriteOriginReferenceIndex = number;
100
+ /** Sentinel indicating that the origin pointer has not been resolved yet. */
101
+ export declare const SPRITE_ORIGIN_REFERENCE_INDEX_NONE = -1;
102
+ /**
103
+ * Encode/Decode interface for a (subLayer, order) pair into a compact numeric key.
104
+ * @remarks It is used for (wasm) interoperability for image identity.
105
+ */
106
+ export interface SpriteOriginReference {
107
+ /**
108
+ * Encodes a (subLayer, order) pair into a compact numeric key.
109
+ * @param subLayer Sub-layer identifier within the sprite.
110
+ * @param order Order slot inside the sub-layer.
111
+ * @returns Encoded origin reference key.
112
+ */
113
+ readonly encodeKey: (subLayer: number, order: number) => SpriteOriginReferenceKey;
114
+ /**
115
+ * Decodes an origin reference key back into the sub-layer and order pair.
116
+ * @param key Encoded origin reference key.
117
+ * @returns `subLayer` and `order` components; when the key is invalid, both values are set to `-1`.
118
+ */
119
+ readonly decodeKey: (key: SpriteOriginReferenceKey) => {
120
+ readonly subLayer: number;
121
+ readonly order: number;
122
+ };
123
+ }
124
+ /**
125
+ * Tuple representing a single entry in a render target bucket.
126
+ * @remarks It is used for (wasm) interoperability for sprite origin.
127
+ * The first item is the sprite's frame-level state and the second item is
128
+ * the specific image being rendered,
129
+ * mirroring how the renderer stores draw calls on the CPU side.
130
+ * Keeping the pair immutable prevents accidental divergence between cached data
131
+ * and the GPU buffers derived from it.
132
+ */
133
+ export type RenderTargetEntryLike<TTag> = readonly [
134
+ InternalSpriteCurrentState<TTag>,
135
+ InternalSpriteImageState
136
+ ];
137
+ /**
138
+ * Parallel typed arrays that expose bucket metadata in a WASM-friendly layout.
139
+ * @remarks It is used for (wasm) interoperability for sprite origin.
140
+ * Both arrays always share the same length as the bucket, allowing shader-side
141
+ * code (or WASM helpers) to traverse origin reference metadata without touching
142
+ * the heavyweight tuple objects.
143
+ */
144
+ export interface RenderTargetBucketBuffers {
145
+ /**
146
+ * Encoded origin metadata (sub-layer/order pairs) for each queued image,
147
+ * mirroring `image.originReferenceKey`. A value of
148
+ * `SPRITE_ORIGIN_REFERENCE_KEY_NONE` denotes that the entry is self-originating.
149
+ */
150
+ readonly originReferenceKeys: Int32Array;
151
+ /**
152
+ * Bucket index pointing to the entry that should provide the origin image for
153
+ * the current sprite. Values equal to
154
+ * `SPRITE_ORIGIN_REFERENCE_INDEX_NONE` or outside the bucket range mark the
155
+ * origin as unresolved.
156
+ */
157
+ readonly originTargetIndices: Int32Array;
158
+ }
159
+ /**
160
+ * Represents a projected three dimensional position.
161
+ * `MercatorCoordinate` uses the web mercator projection ([EPSG:3857](https://epsg.io/3857)) with slightly different units:
162
+ * - the size of 1 unit is the width of the projected world instead of the "mercator meter"
163
+ * - the origin of the coordinate space is at the north-west corner instead of the middle
164
+ */
165
+ export interface SpriteMercatorCoordinate {
166
+ readonly x: number;
167
+ readonly y: number;
168
+ readonly z: number;
169
+ }
170
+ export interface Releaseable {
171
+ readonly release: () => void;
172
+ }
173
+ /**
174
+ * Abstraction that exposes projection-related helpers.
175
+ */
176
+ export interface ProjectionHost extends Releaseable {
177
+ /**
178
+ * Get current zoom level.
179
+ * @returns Zoom level.
180
+ */
181
+ readonly getZoom: () => number;
182
+ /**
183
+ * Extracts the current clip-space context if the mercator matrix is available.
184
+ * @returns {ClipContext | null} Clip context or `null` when the transform is not ready.
185
+ */
186
+ readonly getClipContext: () => ClipContext | null;
187
+ /**
188
+ * Get mercator coordinate from the location
189
+ * @param location Location.
190
+ * @returns Mercator coordinate.
191
+ */
192
+ readonly fromLngLat: (location: Readonly<SpriteLocation>) => SpriteMercatorCoordinate;
193
+ /**
194
+ * Project the location.
195
+ * @param location Location.
196
+ * @returns Projected point if valid location.
197
+ */
198
+ readonly project: (location: Readonly<SpriteLocation>) => SpritePoint | null;
199
+ /**
200
+ * Unproject the location.
201
+ * @param point Projected point.
202
+ * @returns Location if valid point.
203
+ */
204
+ readonly unproject: (point: Readonly<SpritePoint>) => SpriteLocation | null;
205
+ /**
206
+ * Calculate perspective ratio.
207
+ * @param location Location.
208
+ * @param cachedMercator Mercator coodinate when available earlier calculation.
209
+ * @returns The ratio.
210
+ */
211
+ readonly calculatePerspectiveRatio: (location: Readonly<SpriteLocation>, cachedMercator?: SpriteMercatorCoordinate) => number;
212
+ }
213
+ export interface PrepareDrawSpriteImageParamsBase {
214
+ readonly imageResources: ImageResourceTable;
215
+ readonly imageHandleBuffers: Readonly<ImageHandleBuffers>;
216
+ readonly baseMetersPerPixel: number;
217
+ readonly spriteMinPixel: number;
218
+ readonly spriteMaxPixel: number;
219
+ readonly drawingBufferWidth: number;
220
+ readonly drawingBufferHeight: number;
221
+ readonly pixelRatio: number;
222
+ readonly clipContext: Readonly<ClipContext> | null;
223
+ }
224
+ export interface PrepareDrawSpriteImageParamsBefore<TTag> extends PrepareDrawSpriteImageParamsBase {
225
+ readonly bucket: readonly Readonly<RenderTargetEntryLike<TTag>>[];
226
+ readonly bucketBuffers: Readonly<RenderTargetBucketBuffers>;
227
+ readonly resolvedScaling: ResolvedSpriteScalingOptions;
228
+ readonly zoomScaleFactor: number;
229
+ }
230
+ export interface PrepareDrawSpriteImageParamsAfter extends PrepareDrawSpriteImageParamsBase {
231
+ readonly identityScaleX: number;
232
+ readonly identityScaleY: number;
233
+ readonly identityOffsetX: number;
234
+ readonly identityOffsetY: number;
235
+ readonly screenToClipScaleX: number;
236
+ readonly screenToClipScaleY: number;
237
+ readonly screenToClipOffsetX: number;
238
+ readonly screenToClipOffsetY: number;
239
+ }
240
+ export interface PrepareDrawSpriteImageParams<TTag> extends PrepareDrawSpriteImageParamsBefore<TTag>, PrepareDrawSpriteImageParamsAfter {
241
+ }
242
+ /**
243
+ * Prepared parameters for WebGL rendering.
244
+ */
245
+ export interface PreparedDrawSpriteImageParams<T> {
246
+ readonly spriteEntry: InternalSpriteCurrentState<T>;
247
+ readonly imageEntry: InternalSpriteImageState;
248
+ readonly imageResource: RegisteredImage;
249
+ readonly vertexData: Float32Array;
250
+ readonly opacity: number;
251
+ readonly hitTestCorners: readonly [
252
+ Readonly<SpriteScreenPoint>,
253
+ Readonly<SpriteScreenPoint>,
254
+ Readonly<SpriteScreenPoint>,
255
+ Readonly<SpriteScreenPoint>
256
+ ] | null;
257
+ readonly screenToClip: {
258
+ readonly scaleX: number;
259
+ readonly scaleY: number;
260
+ readonly offsetX: number;
261
+ readonly offsetY: number;
262
+ };
263
+ readonly useShaderSurface: boolean;
264
+ readonly surfaceShaderInputs: SurfaceShaderInputs | undefined;
265
+ readonly surfaceClipEnabled: boolean;
266
+ readonly useShaderBillboard: boolean;
267
+ readonly billboardUniforms: {
268
+ readonly center: SpritePoint;
269
+ readonly halfWidth: number;
270
+ readonly halfHeight: number;
271
+ readonly anchor: SpriteAnchor;
272
+ readonly sin: number;
273
+ readonly cos: number;
274
+ } | null;
275
+ }
276
+ /**
277
+ * The render calculation host.
278
+ * Abstraction that render calculations.
279
+ * @param TTag Tag type.
280
+ */
281
+ export interface RenderCalculationHost<TTag> extends Releaseable {
282
+ readonly prepareDrawSpriteImages: (params: PrepareDrawSpriteImageParams<TTag>) => PreparedDrawSpriteImageParams<TTag>[];
283
+ }
13
284
  /**
14
285
  * Corner model describing world displacements and resulting geographic coordinates for shader validation.
15
286
  */
16
- export interface SurfaceShaderCornerState {
17
- east: number;
18
- north: number;
19
- lng: number;
20
- lat: number;
287
+ export interface SurfaceShaderCornerState extends SpriteLocation, SurfaceCorner {
21
288
  }
22
289
  /**
23
290
  * Aggregated inputs required to reproduce surface geometry on the GPU.
24
291
  */
25
292
  export interface SurfaceShaderInputs {
26
- mercatorCenter: {
27
- x: number;
28
- y: number;
29
- z: number;
30
- };
31
- worldToMercatorScale: {
32
- east: number;
33
- north: number;
34
- };
35
- halfSizeMeters: {
36
- east: number;
37
- north: number;
293
+ readonly mercatorCenter: {
294
+ readonly x: number;
295
+ readonly y: number;
296
+ readonly z: number;
38
297
  };
39
- anchor: SpriteAnchor;
40
- offsetMeters: {
41
- east: number;
42
- north: number;
298
+ readonly worldToMercatorScale: Readonly<SurfaceCorner>;
299
+ readonly halfSizeMeters: Readonly<SurfaceCorner>;
300
+ readonly anchor: Readonly<SpriteAnchor>;
301
+ readonly offsetMeters: Readonly<SurfaceCorner>;
302
+ readonly sinCos: {
303
+ readonly sin: number;
304
+ readonly cos: number;
43
305
  };
44
- sinCos: {
45
- sin: number;
46
- cos: number;
47
- };
48
- totalRotateDeg: number;
49
- depthBiasNdc: number;
50
- centerDisplacement: {
51
- east: number;
52
- north: number;
53
- };
54
- baseLngLat: SpriteLocation;
55
- displacedCenter: SpriteLocation;
56
- scaleAdjustment: number;
57
- corners: SurfaceShaderCornerState[];
306
+ readonly totalRotateDeg: number;
307
+ readonly depthBiasNdc: number;
308
+ readonly centerDisplacement: Readonly<SurfaceCorner>;
309
+ readonly baseLngLat: Readonly<SpriteLocation>;
310
+ readonly displacedCenter: Readonly<SpriteLocation>;
311
+ readonly scaleAdjustment: number;
312
+ readonly corners: readonly Readonly<SurfaceShaderCornerState>[];
58
313
  clipCenter: {
59
- x: number;
60
- y: number;
61
- z: number;
62
- w: number;
314
+ readonly x: number;
315
+ readonly y: number;
316
+ readonly z: number;
317
+ readonly w: number;
63
318
  };
64
319
  clipBasisEast: {
65
- x: number;
66
- y: number;
67
- z: number;
68
- w: number;
320
+ readonly x: number;
321
+ readonly y: number;
322
+ readonly z: number;
323
+ readonly w: number;
69
324
  };
70
325
  clipBasisNorth: {
71
- x: number;
72
- y: number;
73
- z: number;
74
- w: number;
326
+ readonly x: number;
327
+ readonly y: number;
328
+ readonly z: number;
329
+ readonly w: number;
75
330
  };
76
- clipCorners: Array<{
77
- x: number;
78
- y: number;
79
- z: number;
80
- w: number;
331
+ clipCorners: ReadonlyArray<{
332
+ readonly x: number;
333
+ readonly y: number;
334
+ readonly z: number;
335
+ readonly w: number;
81
336
  }>;
82
337
  }
83
338
  /**
@@ -141,10 +396,14 @@ export interface ResolvedTextureFilteringOptions {
141
396
  * Image metadata ready for use as a WebGL texture.
142
397
  */
143
398
  export interface RegisteredImage {
144
- id: string;
145
- width: number;
146
- height: number;
147
- bitmap: ImageBitmap;
399
+ readonly id: string;
400
+ /**
401
+ * For use (wasm) interoperability id.
402
+ */
403
+ readonly handle: number;
404
+ readonly width: number;
405
+ readonly height: number;
406
+ readonly bitmap: ImageBitmap;
148
407
  texture: WebGLTexture | undefined;
149
408
  }
150
409
  /**
@@ -187,7 +446,7 @@ export interface ResolvedTextGlyphOptions {
187
446
  /**
188
447
  * Mutable point reused when computing hit-test corners.
189
448
  */
190
- export interface MutableSpriteScreenPoint {
449
+ export interface MutableSpriteScreenPoint extends SpriteScreenPoint {
191
450
  x: number;
192
451
  y: number;
193
452
  }
@@ -198,9 +457,9 @@ export type MatrixInput = ArrayLike<number>;
198
457
  /**
199
458
  * Cached clip-space context containing the mercator matrix required to project coordinates.
200
459
  */
201
- export type ClipContext = {
460
+ export interface ClipContext {
202
461
  readonly mercatorMatrix: MatrixInput;
203
- };
462
+ }
204
463
  /**
205
464
  * 2D canvas rendering context accepted by the glyph renderer.
206
465
  */
@@ -216,25 +475,28 @@ export interface InternalSpriteImageState {
216
475
  subLayer: number;
217
476
  order: number;
218
477
  imageId: string;
478
+ imageHandle: number;
219
479
  mode: SpriteMode;
220
480
  opacity: number;
221
481
  scale: number;
222
- anchor: SpriteAnchor;
482
+ anchor: Readonly<SpriteAnchor>;
223
483
  offset: SpriteImageOffset;
224
484
  rotateDeg: number;
225
485
  displayedRotateDeg: number;
226
486
  autoRotation: boolean;
227
487
  autoRotationMinDistanceMeters: number;
228
488
  resolvedBaseRotateDeg: number;
229
- originLocation?: SpriteImageOriginLocation;
230
- rotationInterpolationState: DegreeInterpolationState | null;
231
- rotationInterpolationOptions: SpriteInterpolationOptions | null;
232
- offsetDegInterpolationState: DegreeInterpolationState | null;
233
- offsetMetersInterpolationState: DistanceInterpolationState | null;
489
+ originLocation?: Readonly<SpriteImageOriginLocation>;
490
+ originReferenceKey: SpriteOriginReferenceKey;
491
+ originRenderTargetIndex: SpriteOriginReferenceIndex;
492
+ rotationInterpolationState: Readonly<DegreeInterpolationState> | null;
493
+ rotationInterpolationOptions: Readonly<SpriteInterpolationOptions> | null;
494
+ offsetDegInterpolationState: Readonly<DegreeInterpolationState> | null;
495
+ offsetMetersInterpolationState: Readonly<DistanceInterpolationState> | null;
234
496
  lastCommandRotateDeg: number;
235
497
  lastCommandOffsetDeg: number;
236
498
  lastCommandOffsetMeters: number;
237
- surfaceShaderInputs?: SurfaceShaderInputs;
499
+ surfaceShaderInputs?: Readonly<SurfaceShaderInputs>;
238
500
  hitTestCorners?: [
239
501
  MutableSpriteScreenPoint,
240
502
  MutableSpriteScreenPoint,
@@ -247,19 +509,20 @@ export interface InternalSpriteImageState {
247
509
  */
248
510
  export interface InternalSpriteCurrentState<TTag> {
249
511
  spriteId: string;
512
+ handle: IdHandle;
250
513
  isEnabled: boolean;
251
- currentLocation: SpriteLocation;
252
- fromLocation?: SpriteLocation;
253
- toLocation?: SpriteLocation;
514
+ currentLocation: Readonly<SpriteLocation>;
515
+ fromLocation?: Readonly<SpriteLocation>;
516
+ toLocation?: Readonly<SpriteLocation>;
254
517
  images: Map<number, Map<number, InternalSpriteImageState>>;
255
518
  tag: TTag | null;
256
519
  interpolationState: InternalSpriteInterpolationState | null;
257
520
  pendingInterpolationOptions: SpriteInterpolationOptions | null;
258
- lastCommandLocation: SpriteLocation;
259
- lastAutoRotationLocation: SpriteLocation;
521
+ lastCommandLocation: Readonly<SpriteLocation>;
522
+ lastAutoRotationLocation: Readonly<SpriteLocation>;
260
523
  lastAutoRotationAngleDeg: number;
261
- cachedMercator: MercatorCoordinate;
524
+ cachedMercator: Readonly<SpriteMercatorCoordinate>;
262
525
  cachedMercatorLng: number;
263
526
  cachedMercatorLat: number;
264
- cachedMercatorZ: number;
527
+ cachedMercatorZ: number | undefined;
265
528
  }
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.11.0
3
+ * version: 0.12.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 371efb126f281333d59ec75cfe788d45f3b1482e
8
+ * git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
9
9
  */
10
10
 
11
11
  import { SpriteInterpolationOptions, SpriteLocation } from './types';
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.11.0
3
+ * version: 0.12.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 371efb126f281333d59ec75cfe788d45f3b1482e
8
+ * git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
9
9
  */
10
10
 
11
11
  import { SpriteInterpolationOptions, SpriteImageOffset } from './types';
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: maplibre-gl-layers
3
- * version: 0.11.0
3
+ * version: 0.12.0
4
4
  * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
- * git.commit.hash: 371efb126f281333d59ec75cfe788d45f3b1482e
8
+ * git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
9
9
  */
10
10
 
11
11
  export interface Rect {
@@ -17,18 +17,18 @@ export interface Rect {
17
17
  export interface Item<TState> extends Rect {
18
18
  readonly state: TState;
19
19
  }
20
+ export interface LooseQuadTree<TState> {
21
+ readonly size: number;
22
+ readonly add: (item: Item<TState>) => void;
23
+ readonly remove: (x0: number, y0: number, x1: number, y1: number, item: Item<TState>) => boolean;
24
+ readonly update: (oldX0: number, oldY0: number, oldX1: number, oldY1: number, newX0: number, newY0: number, newX1: number, newY1: number, item: Item<TState>) => boolean;
25
+ readonly lookup: (x0: number, y0: number, x1: number, y1: number) => Item<TState>[];
26
+ readonly clear: () => void;
27
+ }
20
28
  export interface LooseQuadTreeOptions {
21
29
  readonly bounds: Rect;
22
30
  readonly maxItemsPerNode?: number;
23
31
  readonly maxDepth?: number;
24
32
  readonly looseness?: number;
25
33
  }
26
- export interface LooseQuadTree<TState> {
27
- readonly size: number;
28
- add(item: Item<TState>): void;
29
- remove(x0: number, y0: number, x1: number, y1: number, item: Item<TState>): boolean;
30
- update(oldX0: number, oldY0: number, oldX1: number, oldY1: number, newX0: number, newY0: number, newX1: number, newY1: number, item: Item<TState>): boolean;
31
- lookup(x0: number, y0: number, x1: number, y1: number): Item<TState>[];
32
- clear(): void;
33
- }
34
34
  export declare const createLooseQuadTree: <TState>(options: LooseQuadTreeOptions) => LooseQuadTree<TState>;
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * name: maplibre-gl-layers
3
+ * version: 0.12.0
4
+ * description: MapLibre's layer extension library enabling the display, movement, and modification of large numbers of dynamic sprite images
5
+ * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
+ * license: MIT
7
+ * repository.url: https://github.com/kekyo/maplibre-gl-layers.git
8
+ * git.commit.hash: e8e2cd81aeec4b10f2898c0ede5880ac56bf748d
9
+ */
10
+
11
+ import { Map as MapLibreMap } from 'maplibre-gl';
12
+ import { ProjectionHost } from './internalTypes';
13
+ /**
14
+ * Create a projection host that delegates to MapLibre.
15
+ * @param map MapLibre map instance
16
+ * @returns Projection host
17
+ */
18
+ export declare const createMapLibreProjectionHost: (map: MapLibreMap) => ProjectionHost;