maplibre-gl-layers 0.11.0 → 0.13.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 +7 -2
- package/dist/SpriteLayer.d.ts +12 -52
- package/dist/calculationHost.d.ts +63 -0
- package/dist/config.d.ts +18 -0
- package/dist/const.d.ts +51 -13
- package/dist/default.d.ts +29 -0
- package/dist/degreeInterpolation.d.ts +2 -2
- package/dist/distanceInterpolation.d.ts +2 -2
- package/dist/easing.d.ts +2 -2
- package/dist/image.d.ts +32 -0
- package/dist/index.cjs +4383 -1979
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +4383 -1980
- package/dist/index.mjs.map +1 -1
- package/dist/internalTypes.d.ts +340 -77
- package/dist/interpolation.d.ts +2 -2
- package/dist/interpolationChannels.d.ts +2 -2
- package/dist/looseQuadTree.d.ts +10 -10
- package/dist/mapLibreProjectionHost.d.ts +18 -0
- package/dist/math.d.ts +110 -171
- package/dist/projectionHost.d.ts +60 -0
- package/dist/rotationInterpolation.d.ts +2 -2
- package/dist/shader.d.ts +83 -0
- package/dist/types.d.ts +16 -8
- package/dist/utils.d.ts +25 -20
- package/dist/wasm/offloads-nosimd.wasm +0 -0
- package/dist/wasm/offloads-simd.wasm +0 -0
- package/dist/wasmCalculationHost.d.ts +68 -0
- package/dist/wasmHost.d.ts +127 -0
- package/dist/wasmProjectionHost.d.ts +19 -0
- package/package.json +8 -7
- package/dist/location.d.ts +0 -24
package/dist/math.d.ts
CHANGED
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* name: maplibre-gl-layers
|
|
3
|
-
* version: 0.
|
|
3
|
+
* version: 0.13.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:
|
|
8
|
+
* git.commit.hash: 4934aa7f4fed93594ece419184b32b5b972bbb88
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import { SpriteAnchor, SpriteImageOffset, SpriteLocation, SpriteScalingOptions } from './types';
|
|
11
|
+
import { SpriteAnchor, SpriteImageOffset, SpriteLocation, SpritePoint, SpriteScalingOptions, SpriteScreenPoint } from './types';
|
|
12
|
+
import { InternalSpriteCurrentState, MatrixInput, ProjectionHost, SpriteMercatorCoordinate } from './internalTypes';
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
* Used to convert one radian of longitude into meters when scaling sprites.
|
|
15
|
-
* @constant
|
|
14
|
+
* Produces a deep copy so later updates do not mutate the original object.
|
|
16
15
|
*/
|
|
17
|
-
export declare const
|
|
16
|
+
export declare const cloneSpriteLocation: (location: SpriteLocation) => SpriteLocation;
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* Linearly interpolates longitude, latitude, and optionally altitude.
|
|
19
|
+
* The `ratio` may fall outside [0, 1]; callers are responsible for clamping if needed.
|
|
21
20
|
*/
|
|
22
|
-
export declare const
|
|
21
|
+
export declare const lerpSpriteLocation: (from: SpriteLocation, to: SpriteLocation, ratio: number) => SpriteLocation;
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @constant
|
|
23
|
+
* Compares two locations. Treats altitude as equal when either side is undefined.
|
|
26
24
|
*/
|
|
27
|
-
export declare const
|
|
25
|
+
export declare const spriteLocationsEqual: (a: SpriteLocation, b: SpriteLocation) => boolean;
|
|
28
26
|
/**
|
|
29
|
-
*
|
|
30
|
-
* @
|
|
27
|
+
* Multiplies a 4x4 matrix with a 4-component vector using row-major indexing.
|
|
28
|
+
* @param {MatrixInput} matrix - Matrix to multiply.
|
|
29
|
+
* @param {number} x - X component of the vector.
|
|
30
|
+
* @param {number} y - Y component of the vector.
|
|
31
|
+
* @param {number} z - Z component of the vector.
|
|
32
|
+
* @param {number} w - W component of the vector.
|
|
33
|
+
* @returns {[number, number, number, number]} Resulting homogeneous coordinate.
|
|
31
34
|
*/
|
|
32
|
-
export declare const
|
|
35
|
+
export declare const multiplyMatrixAndVector: (matrix: MatrixInput, x: number, y: number, z: number, w: number) => [number, number, number, number];
|
|
33
36
|
/**
|
|
34
37
|
* Structure holding resolved sprite scaling options.
|
|
35
38
|
* @property {number} metersPerPixel - Effective number of meters represented by each rendered pixel.
|
|
@@ -110,24 +113,18 @@ export declare const calculateBillboardPixelDimensions: (imageWidth: number | un
|
|
|
110
113
|
* @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
|
|
111
114
|
* @param {number} effectivePixelsPerMeter - Conversion factor from meters to pixels.
|
|
112
115
|
* @param {number} [sizeScaleAdjustment=1] - Additional scale factor applied when sprite size is clamped.
|
|
113
|
-
* @returns {
|
|
116
|
+
* @returns {SpriteScreenPoint} Screen-space offset relative to the billboard center.
|
|
114
117
|
*/
|
|
115
|
-
export declare const calculateBillboardOffsetPixels: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number, sizeScaleAdjustment?: number) =>
|
|
116
|
-
x: number;
|
|
117
|
-
y: number;
|
|
118
|
-
};
|
|
118
|
+
export declare const calculateBillboardOffsetPixels: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, effectivePixelsPerMeter: number, sizeScaleAdjustment?: number) => SpriteScreenPoint;
|
|
119
119
|
/**
|
|
120
120
|
* Computes the screen-space shift caused by anchor rotation for billboards.
|
|
121
121
|
* @param {number} halfWidth - Half of the sprite width in pixels.
|
|
122
122
|
* @param {number} halfHeight - Half of the sprite height in pixels.
|
|
123
123
|
* @param {SpriteAnchor | undefined} anchor - Anchor definition normalized to [-1, 1] range.
|
|
124
124
|
* @param {number} totalRotateDeg - Rotation applied to the sprite, combining user and bearing rotations.
|
|
125
|
-
* @returns {
|
|
125
|
+
* @returns {SpritePoint} Pixel delta required to bring the anchor back to the requested origin.
|
|
126
126
|
*/
|
|
127
|
-
export declare const calculateBillboardAnchorShiftPixels: (halfWidth: number, halfHeight: number, anchor: SpriteAnchor | undefined, totalRotateDeg: number) =>
|
|
128
|
-
x: number;
|
|
129
|
-
y: number;
|
|
130
|
-
};
|
|
127
|
+
export declare const calculateBillboardAnchorShiftPixels: (halfWidth: number, halfHeight: number, anchor: SpriteAnchor | undefined, totalRotateDeg: number) => SpritePoint;
|
|
131
128
|
/**
|
|
132
129
|
* Calculates surface image dimensions in world meters.
|
|
133
130
|
* @param {number | undefined} imageWidth - Source bitmap width in pixels.
|
|
@@ -152,65 +149,44 @@ export declare const calculateSurfaceWorldDimensions: (imageWidth: number | unde
|
|
|
152
149
|
* @param {number} halfHeightMeters - Half of the world-space height.
|
|
153
150
|
* @param {SpriteAnchor | undefined} anchor - Anchor definition normalized to [-1, 1] range.
|
|
154
151
|
* @param {number} totalRotateDeg - Rotation angle applied to the surface.
|
|
155
|
-
* @returns {
|
|
152
|
+
* @returns {SurfaceCorner} Displacement in meters required to apply the anchor.
|
|
156
153
|
*/
|
|
157
|
-
export declare const calculateSurfaceAnchorShiftMeters: (halfWidthMeters: number, halfHeightMeters: number, anchor: SpriteAnchor | undefined, totalRotateDeg: number) =>
|
|
158
|
-
east: number;
|
|
159
|
-
north: number;
|
|
160
|
-
};
|
|
154
|
+
export declare const calculateSurfaceAnchorShiftMeters: (halfWidthMeters: number, halfHeightMeters: number, anchor: SpriteAnchor | undefined, totalRotateDeg: number) => SurfaceCorner;
|
|
161
155
|
/**
|
|
162
156
|
* Calculates surface image offsets in meters.
|
|
163
157
|
* @param {SpriteImageOffset | undefined} offset - Offset configuration for the surface sprite.
|
|
164
158
|
* @param {number} imageScale - User-provided scale multiplier applied to the offset distance.
|
|
165
159
|
* @param {number} zoomScaleFactor - Zoom-dependent scale multiplier.
|
|
166
160
|
* @param {number} [sizeScaleAdjustment=1] - Additional scale factor applied when sprite size is clamped.
|
|
167
|
-
* @returns {
|
|
161
|
+
* @returns {SurfaceCorner} Offset vector in meters.
|
|
168
162
|
*/
|
|
169
|
-
export declare const calculateSurfaceOffsetMeters: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, sizeScaleAdjustment?: number) =>
|
|
170
|
-
east: number;
|
|
171
|
-
north: number;
|
|
172
|
-
};
|
|
163
|
+
export declare const calculateSurfaceOffsetMeters: (offset: SpriteImageOffset | undefined, imageScale: number, zoomScaleFactor: number, sizeScaleAdjustment?: number) => SurfaceCorner;
|
|
173
164
|
/**
|
|
174
165
|
* Adds east/north distances (meters) to a longitude/latitude pair.
|
|
175
|
-
* @param {number}
|
|
176
|
-
* @param {number} baseLat - Base latitude in degrees.
|
|
166
|
+
* @param {number} location - Base location in degrees.
|
|
177
167
|
* @param {number} east - Eastward displacement in meters.
|
|
178
168
|
* @param {number} north - Northward displacement in meters.
|
|
179
169
|
* @returns {SpriteLocation} New geographic position after applying the displacement.
|
|
180
170
|
*/
|
|
181
|
-
export declare const applySurfaceDisplacement: (
|
|
171
|
+
export declare const applySurfaceDisplacement: (location: SpriteLocation, corner: SurfaceCorner) => SpriteLocation;
|
|
182
172
|
/**
|
|
183
173
|
* Converts screen coordinates to clip space.
|
|
184
|
-
* @param {number}
|
|
185
|
-
* @param {number} y - Screen-space y coordinate in CSS pixels.
|
|
174
|
+
* @param {number} point - Screen-space coordinate in CSS pixels.
|
|
186
175
|
* @param {number} drawingBufferWidth - WebGL drawing buffer width in device pixels.
|
|
187
176
|
* @param {number} drawingBufferHeight - WebGL drawing buffer height in device pixels.
|
|
188
177
|
* @param {number} pixelRatio - Device pixel ratio used to scale CSS pixels to device pixels.
|
|
189
178
|
* @returns {[number, number]} Clip-space coordinates in the range [-1, 1].
|
|
190
179
|
*/
|
|
191
|
-
export declare const screenToClip: (
|
|
180
|
+
export declare const screenToClip: (point: SpriteScreenPoint, drawingBufferWidth: number, drawingBufferHeight: number, pixelRatio: number) => [number, number];
|
|
192
181
|
/**
|
|
193
182
|
* Converts homogeneous clip coordinates back into screen-space pixels.
|
|
194
183
|
* @param {[number, number, number, number]} clipPosition - Homogeneous clip coordinates.
|
|
195
184
|
* @param {number} drawingBufferWidth - WebGL drawing buffer width in device pixels.
|
|
196
185
|
* @param {number} drawingBufferHeight - WebGL drawing buffer height in device pixels.
|
|
197
186
|
* @param {number} pixelRatio - Device pixel ratio relating CSS pixels to device pixels.
|
|
198
|
-
* @returns {
|
|
199
|
-
*/
|
|
200
|
-
export declare const clipToScreen: (clipPosition: readonly [number, number, number, number], drawingBufferWidth: number, drawingBufferHeight: number, pixelRatio: number) => {
|
|
201
|
-
x: number;
|
|
202
|
-
y: number;
|
|
203
|
-
} | null;
|
|
204
|
-
/**
|
|
205
|
-
* Index order used to decompose a quad into two triangles.
|
|
206
|
-
* @constant
|
|
207
|
-
*/
|
|
208
|
-
export declare const TRIANGLE_INDICES: readonly [0, 1, 2, 2, 1, 3];
|
|
209
|
-
/**
|
|
210
|
-
* UV coordinates for each corner of a quad following the index order in {@link TRIANGLE_INDICES}.
|
|
211
|
-
* @constant
|
|
187
|
+
* @returns {SpriteScreenPoint | null} Screen-space coordinates or `null` when invalid.
|
|
212
188
|
*/
|
|
213
|
-
export declare const
|
|
189
|
+
export declare const clipToScreen: (clipPosition: readonly [number, number, number, number], drawingBufferWidth: number, drawingBufferHeight: number, pixelRatio: number) => SpriteScreenPoint | null;
|
|
214
190
|
/**
|
|
215
191
|
* Calculates the conversion factor between meters and pixels taking perspective into account.
|
|
216
192
|
* @param {number} metersPerPixelAtLatitude - Meters covered by a single pixel at the sprite latitude.
|
|
@@ -221,34 +197,26 @@ export declare const calculateEffectivePixelsPerMeter: (metersPerPixelAtLatitude
|
|
|
221
197
|
/**
|
|
222
198
|
* Projects a geographic coordinate and elevation into homogeneous clip space.
|
|
223
199
|
* @typedef ProjectToClipSpaceFn
|
|
224
|
-
* @param {number}
|
|
225
|
-
* @param {number} lat - Latitude in degrees.
|
|
226
|
-
* @param {number} elevationMeters - Elevation offset in meters.
|
|
200
|
+
* @param {number} location - Location in degrees.
|
|
227
201
|
* @returns {[number, number, number, number] | null} Homogeneous clip coordinates or `null` when outside the view.
|
|
228
202
|
*/
|
|
229
|
-
export type ProjectToClipSpaceFn = (
|
|
203
|
+
export type ProjectToClipSpaceFn = (location: Readonly<SpriteLocation>) => [number, number, number, number] | null;
|
|
230
204
|
/**
|
|
231
205
|
* Unprojects a screen-space point back to longitude/latitude.
|
|
232
206
|
* @typedef UnprojectPointFn
|
|
233
|
-
* @param {
|
|
207
|
+
* @param {SpriteScreenPoint} point - Screen-space coordinates in pixels.
|
|
234
208
|
* @returns {SpriteLocation | null} Geographic location or `null` when unprojection fails.
|
|
235
209
|
*/
|
|
236
|
-
export type UnprojectPointFn = (point:
|
|
237
|
-
x: number;
|
|
238
|
-
y: number;
|
|
239
|
-
}) => SpriteLocation | null;
|
|
210
|
+
export type UnprojectPointFn = (point: Readonly<SpriteScreenPoint>) => SpriteLocation | null;
|
|
240
211
|
/**
|
|
241
212
|
* Resolves a depth key for billboards by sampling the clip-space Z at the sprite center.
|
|
242
|
-
* @param {
|
|
213
|
+
* @param {SpriteScreenPoint} center - Screen-space center of the billboard in pixels.
|
|
243
214
|
* @param {SpriteLocation} spriteLocation - Geographic location including optional altitude.
|
|
244
215
|
* @param {UnprojectPointFn} unproject - Function for converting screen coordinates to geographic coordinates.
|
|
245
216
|
* @param {ProjectToClipSpaceFn} projectToClipSpace - Function that projects a geographic coordinate to clip space.
|
|
246
217
|
* @returns {number | null} Negative normalized device coordinate Z used for depth sorting, or `null` when unavailable.
|
|
247
218
|
*/
|
|
248
|
-
export declare const calculateBillboardDepthKey: (center:
|
|
249
|
-
x: number;
|
|
250
|
-
y: number;
|
|
251
|
-
}, spriteLocation: SpriteLocation, unproject: UnprojectPointFn, projectToClipSpace: ProjectToClipSpaceFn) => number | null;
|
|
219
|
+
export declare const calculateBillboardDepthKey: (center: Readonly<SpriteScreenPoint>, unproject: UnprojectPointFn, projectToClipSpace: ProjectToClipSpaceFn) => number | null;
|
|
252
220
|
/**
|
|
253
221
|
* Signature for surface depth bias callbacks that tweak clip-space Z/W.
|
|
254
222
|
* @typedef SurfaceDepthBiasFn
|
|
@@ -267,12 +235,11 @@ export type SurfaceDepthBiasFn = (params: {
|
|
|
267
235
|
* Computes a depth key for surface quads by projecting each corner and tracking the deepest point.
|
|
268
236
|
* @param {SpriteLocation} baseLngLat - Base longitude/latitude of the quad center.
|
|
269
237
|
* @param {readonly SurfaceCorner[]} displacements - Corner offsets in meters from the center.
|
|
270
|
-
* @param {SpriteLocation} spriteLocation - Sprite world location including optional altitude.
|
|
271
238
|
* @param {ProjectToClipSpaceFn} projectToClipSpace - Projection function used to reach clip space.
|
|
272
239
|
* @param {{ readonly indices?: readonly number[]; readonly biasFn?: SurfaceDepthBiasFn }} [options] - Optional overrides.
|
|
273
240
|
* @returns {number | null} Depth key suitable for sorting, or `null` when any corner cannot be projected.
|
|
274
241
|
*/
|
|
275
|
-
export declare const calculateSurfaceDepthKey: (baseLngLat: SpriteLocation
|
|
242
|
+
export declare const calculateSurfaceDepthKey: (baseLngLat: Readonly<SpriteLocation>, displacements: readonly SurfaceCorner[], projectToClipSpace: ProjectToClipSpaceFn, options?: {
|
|
276
243
|
readonly indices?: readonly number[];
|
|
277
244
|
readonly biasFn?: SurfaceDepthBiasFn;
|
|
278
245
|
}) => number | null;
|
|
@@ -280,16 +247,13 @@ export declare const calculateSurfaceDepthKey: (baseLngLat: SpriteLocation, disp
|
|
|
280
247
|
* Projects a longitude/latitude pair to screen-space pixels.
|
|
281
248
|
* @typedef ProjectLngLatFn
|
|
282
249
|
* @param {SpriteLocation} lngLat - Geographic coordinate to project.
|
|
283
|
-
* @returns {
|
|
250
|
+
* @returns {SpriteScreenPoint | null} Screen coordinates or `null` when projection fails.
|
|
284
251
|
*/
|
|
285
|
-
export type ProjectLngLatFn = (lngLat: SpriteLocation) =>
|
|
286
|
-
x: number;
|
|
287
|
-
y: number;
|
|
288
|
-
} | null;
|
|
252
|
+
export type ProjectLngLatFn = (lngLat: Readonly<SpriteLocation>) => SpriteScreenPoint | null;
|
|
289
253
|
/**
|
|
290
254
|
* Parameters required to resolve a billboard center position.
|
|
291
255
|
* @typedef BillboardCenterParams
|
|
292
|
-
* @property {
|
|
256
|
+
* @property {SpriteScreenPoint} base - Reference screen-space position (usually anchor point).
|
|
293
257
|
* @property {number} [imageWidth] - Source bitmap width in pixels.
|
|
294
258
|
* @property {number} [imageHeight] - Source bitmap height in pixels.
|
|
295
259
|
* @property {number} baseMetersPerPixel - Meters represented by a pixel at the sprite latitude.
|
|
@@ -302,11 +266,8 @@ export type ProjectLngLatFn = (lngLat: SpriteLocation) => {
|
|
|
302
266
|
* @property {SpriteAnchor} [anchor] - Anchor definition normalized between -1 and 1.
|
|
303
267
|
* @property {SpriteImageOffset} [offset] - Offset definition applied in meters/deg.
|
|
304
268
|
*/
|
|
305
|
-
export
|
|
306
|
-
base:
|
|
307
|
-
x: number;
|
|
308
|
-
y: number;
|
|
309
|
-
};
|
|
269
|
+
export interface BillboardCenterParams {
|
|
270
|
+
base: Readonly<SpriteScreenPoint>;
|
|
310
271
|
imageWidth?: number;
|
|
311
272
|
imageHeight?: number;
|
|
312
273
|
baseMetersPerPixel: number;
|
|
@@ -316,37 +277,29 @@ export type BillboardCenterParams = {
|
|
|
316
277
|
spriteMinPixel: number;
|
|
317
278
|
spriteMaxPixel: number;
|
|
318
279
|
totalRotateDeg: number;
|
|
319
|
-
anchor?: SpriteAnchor
|
|
320
|
-
offset?: SpriteImageOffset
|
|
321
|
-
}
|
|
280
|
+
anchor?: Readonly<SpriteAnchor>;
|
|
281
|
+
offset?: Readonly<SpriteImageOffset>;
|
|
282
|
+
}
|
|
322
283
|
/**
|
|
323
284
|
* Resolved properties describing the billboard center and derived dimensions.
|
|
324
285
|
* @typedef BillboardCenterResult
|
|
325
|
-
* @property {
|
|
326
|
-
* @property {number} centerY - Screen-space y coordinate after offset adjustments.
|
|
286
|
+
* @property {SpriteScreenPoint} center - Screen-space coordinate after offset adjustments.
|
|
327
287
|
* @property {number} halfWidth - Half of the clamped pixel width.
|
|
328
288
|
* @property {number} halfHeight - Half of the clamped pixel height.
|
|
329
289
|
* @property {number} pixelWidth - Full pixel width after scaling and clamping.
|
|
330
290
|
* @property {number} pixelHeight - Full pixel height after scaling and clamping.
|
|
331
|
-
* @property {
|
|
332
|
-
* @property {
|
|
291
|
+
* @property {SpritePoint} anchorShift - Pixel delta caused by anchor rotation.
|
|
292
|
+
* @property {SpritePoint} offsetShift - Pixel delta caused by radial offset.
|
|
333
293
|
*/
|
|
334
|
-
export
|
|
335
|
-
|
|
336
|
-
centerY: number;
|
|
294
|
+
export interface BillboardCenterResult {
|
|
295
|
+
center: SpriteScreenPoint;
|
|
337
296
|
halfWidth: number;
|
|
338
297
|
halfHeight: number;
|
|
339
298
|
pixelWidth: number;
|
|
340
299
|
pixelHeight: number;
|
|
341
|
-
anchorShift:
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
};
|
|
345
|
-
offsetShift: {
|
|
346
|
-
x: number;
|
|
347
|
-
y: number;
|
|
348
|
-
};
|
|
349
|
-
};
|
|
300
|
+
anchorShift: SpritePoint;
|
|
301
|
+
offsetShift: SpritePoint;
|
|
302
|
+
}
|
|
350
303
|
/**
|
|
351
304
|
* Calculates the final billboard center position, applying scaling, anchor, and offset adjustments.
|
|
352
305
|
* @param {BillboardCenterParams} params - Inputs describing sprite geometry and scaling context.
|
|
@@ -356,52 +309,43 @@ export declare const calculateBillboardCenterPosition: (params: BillboardCenterP
|
|
|
356
309
|
/**
|
|
357
310
|
* Parameters controlling how billboard corners are computed in screen space.
|
|
358
311
|
* @typedef BillboardCornerParams
|
|
359
|
-
* @property {
|
|
360
|
-
* @property {number} centerY - Screen-space y coordinate for the billboard center after offsets.
|
|
312
|
+
* @property {SpriteScreenPoint} center - Screen-space coordinate for the billboard center after offsets.
|
|
361
313
|
* @property {number} halfWidth - Half of the billboard width in pixels.
|
|
362
314
|
* @property {number} halfHeight - Half of the billboard height in pixels.
|
|
363
315
|
* @property {SpriteAnchor} [anchor] - Optional anchor definition normalized between -1 and 1.
|
|
364
316
|
* @property {number} totalRotateDeg - Total rotation applied to the billboard in degrees.
|
|
365
317
|
*/
|
|
366
|
-
export
|
|
367
|
-
|
|
368
|
-
centerY: number;
|
|
318
|
+
export interface BillboardCornerParams {
|
|
319
|
+
center: Readonly<SpriteScreenPoint>;
|
|
369
320
|
halfWidth: number;
|
|
370
321
|
halfHeight: number;
|
|
371
|
-
anchor?: SpriteAnchor
|
|
322
|
+
anchor?: Readonly<SpriteAnchor>;
|
|
372
323
|
totalRotateDeg: number;
|
|
373
|
-
}
|
|
324
|
+
}
|
|
374
325
|
/**
|
|
375
326
|
* Screen-space coordinates combined with UV data for a quad corner.
|
|
376
327
|
* @typedef QuadCorner
|
|
377
|
-
* @property {number} x - Screen-space x coordinate.
|
|
378
|
-
* @property {number} y - Screen-space y coordinate.
|
|
379
328
|
* @property {number} u - Texture u coordinate.
|
|
380
329
|
* @property {number} v - Texture v coordinate.
|
|
381
330
|
*/
|
|
382
|
-
export
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
v: number;
|
|
387
|
-
};
|
|
331
|
+
export interface QuadCorner extends SpriteScreenPoint {
|
|
332
|
+
readonly u: number;
|
|
333
|
+
readonly v: number;
|
|
334
|
+
}
|
|
388
335
|
/**
|
|
389
336
|
* Produces the rotated, anchor-adjusted screen-space positions for each billboard corner.
|
|
390
337
|
* @param {BillboardCornerParams} params - Inputs describing the billboard geometry.
|
|
391
338
|
* @returns {QuadCorner[]} Array containing screen- and texture-space information per corner.
|
|
392
339
|
*/
|
|
393
340
|
export declare const calculateBillboardCornerScreenPositions: (params: BillboardCornerParams) => QuadCorner[];
|
|
394
|
-
export
|
|
395
|
-
baseLngLat: SpriteLocation
|
|
341
|
+
export interface SurfaceShaderModelParams {
|
|
342
|
+
baseLngLat: Readonly<SpriteLocation>;
|
|
396
343
|
worldWidthMeters: number;
|
|
397
344
|
worldHeightMeters: number;
|
|
398
|
-
anchor: SpriteAnchor
|
|
345
|
+
anchor: Readonly<SpriteAnchor>;
|
|
399
346
|
totalRotateDeg: number;
|
|
400
|
-
offsetMeters:
|
|
401
|
-
|
|
402
|
-
north: number;
|
|
403
|
-
};
|
|
404
|
-
};
|
|
347
|
+
offsetMeters: Readonly<SurfaceCorner>;
|
|
348
|
+
}
|
|
405
349
|
export type SurfaceShaderCornerModel = SurfaceCorner & SpriteLocation;
|
|
406
350
|
export declare const computeSurfaceCornerShaderModel: (params: SurfaceShaderModelParams) => SurfaceShaderCornerModel[];
|
|
407
351
|
/**
|
|
@@ -424,19 +368,18 @@ export declare const computeSurfaceCornerShaderModel: (params: SurfaceShaderMode
|
|
|
424
368
|
* @property {number} [drawingBufferWidth] - WebGL drawing buffer width in device pixels.
|
|
425
369
|
* @property {number} [drawingBufferHeight] - WebGL drawing buffer height in device pixels.
|
|
426
370
|
* @property {number} [pixelRatio] - Device pixel ratio relating CSS pixels to device pixels.
|
|
427
|
-
* @property {number} [altitudeMeters] - Altitude used when projecting points into clip space.
|
|
428
371
|
* @property {boolean} [resolveAnchorless] - When true, also computes the anchorless center.
|
|
429
372
|
*/
|
|
430
|
-
export
|
|
431
|
-
baseLngLat: SpriteLocation
|
|
373
|
+
export interface SurfaceCenterParams {
|
|
374
|
+
baseLngLat: Readonly<SpriteLocation>;
|
|
432
375
|
imageWidth?: number;
|
|
433
376
|
imageHeight?: number;
|
|
434
377
|
baseMetersPerPixel: number;
|
|
435
378
|
imageScale: number;
|
|
436
379
|
zoomScaleFactor: number;
|
|
437
380
|
totalRotateDeg: number;
|
|
438
|
-
anchor?: SpriteAnchor
|
|
439
|
-
offset?: SpriteImageOffset
|
|
381
|
+
anchor?: Readonly<SpriteAnchor>;
|
|
382
|
+
offset?: Readonly<SpriteImageOffset>;
|
|
440
383
|
effectivePixelsPerMeter?: number;
|
|
441
384
|
spriteMinPixel?: number;
|
|
442
385
|
spriteMaxPixel?: number;
|
|
@@ -445,45 +388,32 @@ export type SurfaceCenterParams = {
|
|
|
445
388
|
drawingBufferWidth?: number;
|
|
446
389
|
drawingBufferHeight?: number;
|
|
447
390
|
pixelRatio?: number;
|
|
448
|
-
altitudeMeters?: number;
|
|
449
391
|
resolveAnchorless?: boolean;
|
|
450
|
-
}
|
|
392
|
+
}
|
|
451
393
|
/**
|
|
452
394
|
* Output describing the resolved surface center and displacement details.
|
|
453
395
|
* @typedef SurfaceCenterResult
|
|
454
|
-
* @property {
|
|
396
|
+
* @property {SpriteScreenPoint | null} center - Projected screen coordinates or `null` when projection fails.
|
|
455
397
|
* @property {{ width: number; height: number; scaleAdjustment: number }} worldDimensions - Sprite dimensions in world meters.
|
|
456
|
-
* @property {
|
|
398
|
+
* @property {SurfaceCorner} totalDisplacement - Combined anchor and offset displacement in meters.
|
|
457
399
|
* @property {SpriteLocation} displacedLngLat - Geographic coordinates after applying displacement.
|
|
458
|
-
* @property {
|
|
459
|
-
* @property {
|
|
400
|
+
* @property {SpriteScreenPoint | null | undefined} [anchorlessCenter] - Anchorless screen coordinates when requested.
|
|
401
|
+
* @property {SurfaceCorner | undefined} [anchorlessDisplacement] - Offset-only displacement when requested.
|
|
460
402
|
* @property {SpriteLocation | undefined} [anchorlessLngLat] - Anchorless geographic coordinate when requested.
|
|
461
403
|
*/
|
|
462
|
-
export
|
|
463
|
-
center:
|
|
464
|
-
|
|
465
|
-
y: number;
|
|
466
|
-
} | null;
|
|
467
|
-
worldDimensions: {
|
|
404
|
+
export interface SurfaceCenterResult {
|
|
405
|
+
center: Readonly<SpriteScreenPoint> | null;
|
|
406
|
+
worldDimensions: Readonly<{
|
|
468
407
|
width: number;
|
|
469
408
|
height: number;
|
|
470
409
|
scaleAdjustment: number;
|
|
471
|
-
}
|
|
472
|
-
totalDisplacement:
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
x: number;
|
|
479
|
-
y: number;
|
|
480
|
-
} | null;
|
|
481
|
-
anchorlessDisplacement?: {
|
|
482
|
-
east: number;
|
|
483
|
-
north: number;
|
|
484
|
-
};
|
|
485
|
-
anchorlessLngLat?: SpriteLocation;
|
|
486
|
-
};
|
|
410
|
+
}>;
|
|
411
|
+
totalDisplacement: Readonly<SurfaceCorner>;
|
|
412
|
+
displacedLngLat: Readonly<SpriteLocation>;
|
|
413
|
+
anchorlessCenter?: Readonly<SpriteScreenPoint> | null;
|
|
414
|
+
anchorlessDisplacement?: Readonly<SurfaceCorner>;
|
|
415
|
+
anchorlessLngLat?: Readonly<SpriteLocation>;
|
|
416
|
+
}
|
|
487
417
|
/**
|
|
488
418
|
* Calculates the projected center of a surface sprite and derives related world-space displacements.
|
|
489
419
|
* @param {SurfaceCenterParams} params - Inputs describing the sprite geometry and projection context.
|
|
@@ -497,31 +427,40 @@ export declare const calculateSurfaceCenterPosition: (params: SurfaceCenterParam
|
|
|
497
427
|
* @property {number} worldHeightMeters - Height of the sprite footprint in meters.
|
|
498
428
|
* @property {SpriteAnchor} anchor - Anchor definition normalized between -1 and 1.
|
|
499
429
|
* @property {number} totalRotateDeg - Rotation applied to the surface in degrees.
|
|
500
|
-
* @property {
|
|
430
|
+
* @property {SurfaceCorner} offsetMeters - Additional displacement applied uniformly to all corners.
|
|
501
431
|
*/
|
|
502
|
-
export
|
|
432
|
+
export interface SurfaceCornerParams {
|
|
503
433
|
worldWidthMeters: number;
|
|
504
434
|
worldHeightMeters: number;
|
|
505
|
-
anchor: SpriteAnchor
|
|
435
|
+
anchor: Readonly<SpriteAnchor>;
|
|
506
436
|
totalRotateDeg: number;
|
|
507
|
-
offsetMeters:
|
|
508
|
-
|
|
509
|
-
north: number;
|
|
510
|
-
};
|
|
511
|
-
};
|
|
437
|
+
offsetMeters: Readonly<SurfaceCorner>;
|
|
438
|
+
}
|
|
512
439
|
/**
|
|
513
440
|
* East/north displacement for an individual surface corner.
|
|
514
441
|
* @typedef SurfaceCorner
|
|
515
442
|
* @property {number} east - Eastward offset in meters relative to the base center.
|
|
516
443
|
* @property {number} north - Northward offset in meters relative to the base center.
|
|
517
444
|
*/
|
|
518
|
-
export
|
|
519
|
-
east: number;
|
|
520
|
-
north: number;
|
|
521
|
-
}
|
|
445
|
+
export interface SurfaceCorner {
|
|
446
|
+
readonly east: number;
|
|
447
|
+
readonly north: number;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Number of surface corners returns from `calculateSurfaceCornerDisplacements`.
|
|
451
|
+
*/
|
|
452
|
+
export declare const SURFACE_CORNER_DISPLACEMENT_COUNT: number;
|
|
522
453
|
/**
|
|
523
454
|
* Converts normalized surface corners into world-space displacements honoring anchor, rotation, and offsets.
|
|
524
455
|
* @param {SurfaceCornerParams} params - Inputs describing quad geometry and positioning.
|
|
525
456
|
* @returns {SurfaceCorner[]} Array of corner displacements in meters relative to the base center.
|
|
526
457
|
*/
|
|
527
458
|
export declare const calculateSurfaceCornerDisplacements: (params: SurfaceCornerParams) => SurfaceCorner[];
|
|
459
|
+
/**
|
|
460
|
+
* Ensures the sprite's cached Mercator coordinate matches its current location.
|
|
461
|
+
* Recomputes the coordinate lazily when longitude/latitude/altitude change.
|
|
462
|
+
* @param {ProjectionHost} projectionHost - Projection host.
|
|
463
|
+
* @param {InternalSpriteCurrentState<T>} sprite - Target sprite.
|
|
464
|
+
* @returns {SpriteMercatorCoordinate} Cached Mercator coordinate representing the current location.
|
|
465
|
+
*/
|
|
466
|
+
export declare const resolveSpriteMercator: <T>(projectionHost: ProjectionHost, sprite: InternalSpriteCurrentState<T>) => SpriteMercatorCoordinate;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* name: maplibre-gl-layers
|
|
3
|
+
* version: 0.13.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: 4934aa7f4fed93594ece419184b32b5b972bbb88
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { mat4 as Mat4 } from 'gl-matrix';
|
|
12
|
+
import { Map as MapLibreMap } from 'maplibre-gl';
|
|
13
|
+
import { SpriteLocation } from './types';
|
|
14
|
+
import { ClipContext, ProjectionHost } from './internalTypes';
|
|
15
|
+
/**
|
|
16
|
+
* Required projection parameters. These correspond to the MapLibre transform state.
|
|
17
|
+
*/
|
|
18
|
+
export interface ProjectionHostParams {
|
|
19
|
+
readonly zoom: number;
|
|
20
|
+
readonly width: number;
|
|
21
|
+
readonly height: number;
|
|
22
|
+
readonly center: Readonly<SpriteLocation>;
|
|
23
|
+
readonly pitchDeg?: number;
|
|
24
|
+
readonly bearingDeg?: number;
|
|
25
|
+
readonly rollDeg?: number;
|
|
26
|
+
readonly fovDeg?: number;
|
|
27
|
+
readonly centerElevationMeters?: number;
|
|
28
|
+
readonly minElevationMeters?: number;
|
|
29
|
+
readonly cameraToCenterDistance?: number;
|
|
30
|
+
readonly centerOffsetX?: number;
|
|
31
|
+
readonly centerOffsetY?: number;
|
|
32
|
+
readonly tileSize?: number;
|
|
33
|
+
readonly autoCalculateNearFarZ?: boolean;
|
|
34
|
+
readonly nearZOverride?: number;
|
|
35
|
+
readonly farZOverride?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface PreparedProjectionState {
|
|
38
|
+
readonly zoom: number;
|
|
39
|
+
readonly mercatorMatrix: Mat4 | null;
|
|
40
|
+
readonly pixelMatrix: Mat4 | null;
|
|
41
|
+
readonly pixelMatrixInverse: Mat4 | null;
|
|
42
|
+
readonly worldSize: number;
|
|
43
|
+
readonly pixelPerMeter: number;
|
|
44
|
+
readonly cameraToCenterDistance: number;
|
|
45
|
+
readonly clipContext: ClipContext | null;
|
|
46
|
+
}
|
|
47
|
+
export declare const prepareProjectionState: (params: ProjectionHostParams) => PreparedProjectionState;
|
|
48
|
+
/**
|
|
49
|
+
* Create a pure calculation projection host.
|
|
50
|
+
* @param params Projection parameters
|
|
51
|
+
* @returns Projection host
|
|
52
|
+
*/
|
|
53
|
+
export declare const createProjectionHost: (params: ProjectionHostParams) => ProjectionHost;
|
|
54
|
+
/**
|
|
55
|
+
* Extract current MapLibre transform parameters into {@link ProjectionHostParams}.
|
|
56
|
+
* Falls back to safe defaults when certain transform fields are unavailable.
|
|
57
|
+
* @param map MapLibre map instance.
|
|
58
|
+
* @returns Projection parameters usable by {@link createProjectionHost}.
|
|
59
|
+
*/
|
|
60
|
+
export declare const createProjectionHostParamsFromMapLibre: (map: MapLibreMap) => ProjectionHostParams;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* name: maplibre-gl-layers
|
|
3
|
-
* version: 0.
|
|
3
|
+
* version: 0.13.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:
|
|
8
|
+
* git.commit.hash: 4934aa7f4fed93594ece419184b32b5b972bbb88
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { SpriteInterpolationOptions } from './types';
|