leaflet-shadow-simulator 0.44.0 → 0.48.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.
Files changed (28) hide show
  1. package/dist/leaflet-shadow-simulator.d.ts +1 -0
  2. package/dist/leaflet-shadow-simulator.esm.js +2 -2
  3. package/dist/leaflet-shadow-simulator.umd.min.js +2 -2
  4. package/dist/shademap/leaflet-shademap/dist/ShadeMap.d.ts +121 -0
  5. package/dist/shademap/leaflet-shademap/dist/ShadeMapLeaflet.d.ts +14 -0
  6. package/dist/shademap/leaflet-shademap/dist/ShadeMapMapbox.d.ts +26 -0
  7. package/dist/shademap/leaflet-shademap/dist/buildings/BuildingRasterizer.d.ts +37 -0
  8. package/dist/shademap/leaflet-shademap/dist/buildings/fetch-buildings.d.ts +12 -0
  9. package/dist/shademap/leaflet-shademap/dist/buildings/normalize-buildings.d.ts +8 -0
  10. package/dist/shademap/leaflet-shademap/dist/components/CanvasOverlay.d.ts +11 -0
  11. package/dist/shademap/leaflet-shademap/dist/index.d.ts +7 -0
  12. package/dist/shademap/leaflet-shademap/dist/lib/EventEmitter.d.ts +10 -0
  13. package/dist/shademap/leaflet-shademap/dist/lib/TileMerger.d.ts +40 -0
  14. package/dist/shademap/leaflet-shademap/dist/lib/heightMap.d.ts +33 -0
  15. package/dist/shademap/leaflet-shademap/dist/lib/helpers.d.ts +27 -0
  16. package/dist/shademap/leaflet-shademap/dist/lib/image.d.ts +13 -0
  17. package/dist/shademap/leaflet-shademap/dist/lib/projection.d.ts +3 -0
  18. package/dist/shademap/leaflet-shademap/dist/lib/shadowMap.d.ts +16 -0
  19. package/dist/shademap/leaflet-shademap/dist/map/geometryLeaflet.d.ts +11 -0
  20. package/dist/shademap/leaflet-shademap/dist/map/umap.d.ts +26 -0
  21. package/dist/shademap/leaflet-shademap/dist/shader/gpu.d.ts +29 -0
  22. package/dist/shademap/leaflet-shademap/dist/shader/kernel.d.ts +68 -0
  23. package/dist/shademap/leaflet-shademap/dist/types/color.d.ts +5 -0
  24. package/dist/shademap/leaflet-shademap/dist/types/constants.d.ts +3 -0
  25. package/dist/shademap/leaflet-shademap/dist/types/quality.d.ts +5 -0
  26. package/dist/shademap/leaflet-shademap/dist/types/shadeMapOptions.d.ts +46 -0
  27. package/dist/shademap/leaflet-shademap/dist/types/shadow3DData.d.ts +20 -0
  28. package/package.json +1 -1
@@ -0,0 +1,121 @@
1
+ import { LatLngLiteral, Map as LeafletMap } from "leaflet";
2
+ import { Map, MapboxGeoJSONFeature } from "mapbox-gl";
3
+ import { BuildingRasterizer } from "./buildings/BuildingRasterizer";
4
+ import { EventEmitter } from "./lib/EventEmitter";
5
+ import { HeightMap } from "./lib/heightMap";
6
+ import { TileMerger } from "./lib/TileMerger";
7
+ import { LatLngBounds } from "./map/geometryLeaflet";
8
+ import { UMap } from "./map/umap";
9
+ import { CompiledKernel } from "./shader/kernel";
10
+ import { Color } from "./types/color";
11
+ import { DSMSource, SunExposureOptions, TerrainSource } from "./types/shadeMapOptions";
12
+ export declare class ShadeMap extends EventEmitter {
13
+ _canvas: HTMLCanvasElement;
14
+ _gl: WebGLRenderingContext;
15
+ _map?: Map | LeafletMap;
16
+ _compiledKernel?: CompiledKernel;
17
+ _color: Color;
18
+ _bounds?: LatLngBounds;
19
+ _buildingRasterizer: BuildingRasterizer;
20
+ _tileMerger: TileMerger;
21
+ _heightMap?: HeightMap;
22
+ options: {
23
+ date: Date;
24
+ color: string;
25
+ opacity: number;
26
+ sunExposure: {
27
+ enabled: boolean;
28
+ startDate: Date;
29
+ endDate: Date;
30
+ iterations: number;
31
+ };
32
+ apiKey: string;
33
+ terrainSource: {
34
+ maxZoom: number;
35
+ tileSize: number;
36
+ _overzoom: number;
37
+ getSourceUrl: (params: {
38
+ x: number;
39
+ y: number;
40
+ z: number;
41
+ }) => string;
42
+ getElevation: (params: {
43
+ r: number;
44
+ g: number;
45
+ b: number;
46
+ a: number;
47
+ }) => number;
48
+ };
49
+ dsmSource: {
50
+ bounds: {
51
+ lat: number;
52
+ lng: number;
53
+ }[];
54
+ data: Uint8ClampedArray;
55
+ width: number;
56
+ height: number;
57
+ maxHeight: number;
58
+ };
59
+ belowCanopy: boolean;
60
+ getFeatures: () => Promise<MapboxGeoJSONFeature[]>;
61
+ getSize: () => {
62
+ width: number;
63
+ height: number;
64
+ };
65
+ debug: (msg: string) => void;
66
+ };
67
+ constructor(...args: any[]);
68
+ onRemove(): this;
69
+ setDate(date: Date): this;
70
+ _setDateForTimezone(date: Date, tzId?: string): void;
71
+ setColor(color: string): this;
72
+ setOpacity(opacity: number): this;
73
+ setBelowCanopy(belowCanopy: boolean): this;
74
+ setTerrainSource(terrainSource: TerrainSource): this;
75
+ setDSMSource(dsmSource: DSMSource): this;
76
+ setSunExposure(enabled?: boolean, options?: SunExposureOptions): Promise<this>;
77
+ _lngLatToTextureCoords(lngLat: LatLngLiteral[]): number[][];
78
+ _getBounds(map: UMap, demZoom: number): any;
79
+ _getDEMZoom(map: UMap): number;
80
+ _reset(): Promise<this>;
81
+ _draw(heightMap: HeightMap): Promise<this>;
82
+ readPixel(x: number, y: number): Uint8Array;
83
+ toGeoTiff(): {
84
+ data: Uint8Array;
85
+ metadata: {
86
+ width: number;
87
+ height: number;
88
+ ModelTiepoint: any[];
89
+ ModelPixelScale: number[];
90
+ GeographicTypeGeoKey: number;
91
+ GeogCitationGeoKey: string;
92
+ };
93
+ } | null;
94
+ _generateShadeProfile(params: {
95
+ locations: LatLngLiteral[];
96
+ dates: Date[];
97
+ sunColor: number[];
98
+ shadeColor: number[];
99
+ }): Uint8Array;
100
+ _generateLocationShadeProfile(params: {
101
+ location: LatLngLiteral;
102
+ startDate: Date;
103
+ endDate: Date;
104
+ sunColor: number[];
105
+ shadeColor: number[];
106
+ tzId: string;
107
+ }): {
108
+ data: Uint8Array;
109
+ width: number;
110
+ height: number;
111
+ };
112
+ getHoursOfSun(x: number, y: number): number;
113
+ _repositionCanvas(bounds: LatLngBounds): void;
114
+ _flush(): void;
115
+ flushSync(): void;
116
+ _parseColor(color: string): {
117
+ r: number;
118
+ g: number;
119
+ b: number;
120
+ };
121
+ }
@@ -0,0 +1,14 @@
1
+ import { Map } from "leaflet";
2
+ import { CanvasOverlay } from "./components/CanvasOverlay";
3
+ import { LatLngBounds } from "./map/geometryLeaflet";
4
+ import { ShadeMap } from "./ShadeMap";
5
+ import { ShadeMapOptions } from "./types/shadeMapOptions";
6
+ declare class ShadeMapLeaflet extends ShadeMap {
7
+ _canvasOverlay?: CanvasOverlay;
8
+ constructor(options: ShadeMapOptions);
9
+ addTo(map: Map): this;
10
+ onAdd(map: Map): this;
11
+ _repositionCanvas(bounds: LatLngBounds): void;
12
+ _flush(): void;
13
+ }
14
+ export default ShadeMapLeaflet;
@@ -0,0 +1,26 @@
1
+ import { Map } from "mapbox-gl";
2
+ import { LatLngBounds } from "./map/geometryLeaflet";
3
+ import { ShadeMap } from "./ShadeMap";
4
+ import { ShadeMapOptions } from "./types/shadeMapOptions";
5
+ export default class extends ShadeMap {
6
+ id: string;
7
+ type: string;
8
+ canvasSourceId: string;
9
+ attributionSourceId: string;
10
+ canvasLayerId: string;
11
+ attributionLayerId: string;
12
+ _map?: Map;
13
+ _refreshing: number;
14
+ _raf: number;
15
+ _moveEndHandler: () => void;
16
+ constructor(options: ShadeMapOptions);
17
+ render(gl: WebGLRenderingContext, matrix: number[]): void;
18
+ addTo(map: Map): this;
19
+ onAdd(map: Map): this;
20
+ onRemove(): this;
21
+ _getHeightMapCoords(x: number, y: number): any;
22
+ getHoursOfSun(x: number, y: number): number;
23
+ remove(): void;
24
+ _flush(): void;
25
+ _repositionCanvas(bounds: LatLngBounds): this;
26
+ }
@@ -0,0 +1,37 @@
1
+ import { XYZ } from "../lib/helpers";
2
+ import { DSMSource } from "../types/shadeMapOptions";
3
+ interface BuildingRasterGLArgs {
4
+ upperLeftTile: XYZ;
5
+ features: {
6
+ aPosition: Float32Array;
7
+ cuts: Uint16Array | Uint8Array;
8
+ buildingHeight: number;
9
+ centroid: number[];
10
+ highlight: boolean;
11
+ }[];
12
+ mapZoom: number;
13
+ imageData: Uint8ClampedArray;
14
+ width: number;
15
+ height: number;
16
+ dsmSource: DSMSource;
17
+ dsmCoords: number[];
18
+ gl: WebGLRenderingContext;
19
+ }
20
+ export declare class BuildingRasterizer {
21
+ gl: WebGLRenderingContext;
22
+ program: WebGLProgram;
23
+ positionAttributeLocation: number;
24
+ dsmAttributeLocation: number;
25
+ useDSMUniformLocation: WebGLUniformLocation;
26
+ xyzUniformLocation: WebGLUniformLocation;
27
+ dimensionsUniformLocation: WebGLUniformLocation;
28
+ heightMapUniformLocation: WebGLUniformLocation;
29
+ colorUniformLocation: WebGLUniformLocation;
30
+ positionBuffer: WebGLBuffer;
31
+ dsmBuffer: WebGLBuffer;
32
+ indexBuffer: WebGLBuffer;
33
+ targetTexture: WebGLTexture;
34
+ constructor(gl: WebGLRenderingContext);
35
+ raster(args: BuildingRasterGLArgs): number;
36
+ }
37
+ export {};
@@ -0,0 +1,12 @@
1
+ import { MapboxGeoJSONFeature } from "mapbox-gl";
2
+ interface FetchBuildingsArgs {
3
+ getFeatures: () => Promise<MapboxGeoJSONFeature[]>;
4
+ }
5
+ export declare const fetchBuildings: (args: FetchBuildingsArgs) => Promise<{
6
+ aPosition: Float32Array;
7
+ cuts: Uint8Array | Uint16Array;
8
+ buildingHeight: number;
9
+ centroid: number[];
10
+ highlight: any;
11
+ }[]>;
12
+ export {};
@@ -0,0 +1,8 @@
1
+ import { MapboxGeoJSONFeature } from "mapbox-gl";
2
+ export declare function normalizeBuildings(features: MapboxGeoJSONFeature[]): {
3
+ aPosition: Float32Array;
4
+ cuts: Uint8Array | Uint16Array;
5
+ buildingHeight: number;
6
+ centroid: number[];
7
+ highlight: any;
8
+ }[];
@@ -0,0 +1,11 @@
1
+ import { ImageOverlay, ImageOverlayOptions, LatLngBounds, LatLngBoundsExpression } from "leaflet";
2
+ export declare class CanvasOverlay extends ImageOverlay {
3
+ _url: HTMLCanvasElement;
4
+ _image?: HTMLCanvasElement;
5
+ _zoomAnimated?: boolean;
6
+ _bounds?: LatLngBounds;
7
+ constructor(canvas: HTMLCanvasElement, bounds: LatLngBoundsExpression, options?: ImageOverlayOptions);
8
+ _initImage(): this;
9
+ setBounds(bounds: LatLngBounds): this;
10
+ }
11
+ export declare function canvasOverlay(...args: ConstructorParameters<typeof CanvasOverlay>): CanvasOverlay;
@@ -0,0 +1,7 @@
1
+ import "leaflet";
2
+ import ShadeMapLeaflet from "./ShadeMapLeaflet";
3
+ import { ShadeMapOptions } from "./types/shadeMapOptions";
4
+ declare module "leaflet" {
5
+ function shadeMap(options: ShadeMapOptions): ShadeMapLeaflet;
6
+ }
7
+ export { ShadeMapLeaflet as default, ShadeMapOptions };
@@ -0,0 +1,10 @@
1
+ declare type Listener = (...args: any[]) => void;
2
+ export declare class EventEmitter {
3
+ private readonly events;
4
+ on(event: string, listener: Listener): () => void;
5
+ removeListener(event: string, listener: Listener): void;
6
+ removeAllListeners(): void;
7
+ emit(event: string, ...args: any[]): void;
8
+ once(event: string, listener: Listener): () => void;
9
+ }
10
+ export {};
@@ -0,0 +1,40 @@
1
+ import { XYZRaster } from "./image";
2
+ /**
3
+ * Notes:
4
+ *
5
+ * The responsibility of this code is to download map tiles and stitch
6
+ * them together into a bitmap
7
+ *
8
+ * The code can be aborted if a new set of tiles is requested
9
+ * The code works with 256x256 and 512x512 tiles
10
+ * Zoom can exceed a tileset's maximum value by cropping and scaling to the appropriate size
11
+ * Some tiles are virtual, they do not correspond to a physical image but are a subset of a physical image
12
+ */
13
+ interface MergeImageOptions {
14
+ getSourceUrl: (params: {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ }) => string;
19
+ getElevation: (params: {
20
+ r: number;
21
+ g: number;
22
+ b: number;
23
+ a: number;
24
+ }) => number;
25
+ width: number;
26
+ height: number;
27
+ crossOrigin?: string;
28
+ tileSize: number;
29
+ maxZoom: number;
30
+ tileLoaded: (loadedTiles: number, totalTiles: number) => void;
31
+ }
32
+ export declare class TileMerger {
33
+ canvas: HTMLCanvasElement;
34
+ ctx: CanvasRenderingContext2D;
35
+ inProgress: HTMLImageElement[];
36
+ finished: number;
37
+ constructor();
38
+ merge(tiles: XYZRaster[], options: MergeImageOptions): Promise<Uint8ClampedArray | null>;
39
+ }
40
+ export {};
@@ -0,0 +1,33 @@
1
+ import { MapboxGeoJSONFeature } from "mapbox-gl";
2
+ import { BuildingRasterizer } from "../buildings/BuildingRasterizer";
3
+ import { XYZRaster } from "../lib/image";
4
+ import { TileMerger } from "./TileMerger";
5
+ import { LatLngBounds, ValidBounds } from "../map/geometryLeaflet";
6
+ import { DSMSource, TerrainSource } from "../types/shadeMapOptions";
7
+ interface HeightMapParams {
8
+ terrainSource: TerrainSource;
9
+ dsmSource: DSMSource;
10
+ getFeatures: () => Promise<MapboxGeoJSONFeature[]>;
11
+ tileLoaded: (loadedTiles: number, totalTiles: number) => void;
12
+ gl: WebGLRenderingContext;
13
+ bounds: LatLngBounds;
14
+ buildingRasterizer: BuildingRasterizer;
15
+ tileMerger: TileMerger;
16
+ demZoom: number;
17
+ forceUpdate: boolean;
18
+ }
19
+ export interface HeightMap {
20
+ width: number;
21
+ height: number;
22
+ imageData: Uint8ClampedArray;
23
+ maxHeight: number;
24
+ visibleDEMPixelBounds: ValidBounds;
25
+ DEMPixelBounds: ValidBounds;
26
+ raster: XYZRaster[];
27
+ demZoom: number;
28
+ dirty: boolean;
29
+ outputWidth: number;
30
+ outputHeight: number;
31
+ }
32
+ export declare const getHeightMap: (params: HeightMapParams) => Promise<HeightMap>;
33
+ export {};
@@ -0,0 +1,27 @@
1
+ import { Point, ValidBounds } from "../map/geometryLeaflet";
2
+ export declare const pad: (x: number) => string | number;
3
+ export interface XYZ {
4
+ x: number;
5
+ y: number;
6
+ z: number;
7
+ }
8
+ export interface XYZParams {
9
+ upperLeft: Point;
10
+ width: number;
11
+ height: number;
12
+ zoom: number;
13
+ }
14
+ export declare const xyz: (params: XYZParams) => XYZ[];
15
+ export interface TileBoundsArgs {
16
+ upperLeft: Point;
17
+ width: number;
18
+ height: number;
19
+ }
20
+ export declare const getTileBounds: (args: TileBoundsArgs) => ValidBounds;
21
+ export declare const getDeclination: (date: Date) => {
22
+ dec: number;
23
+ Hi: number;
24
+ };
25
+ export declare const randomId: () => number;
26
+ export declare const timeInTheSunMs: (exposureLayerColor: Uint8Array, exposureLayerOpacity: number, totalTimeIntervalInMs: number) => number;
27
+ export declare const UTCOffsetByTimeZone: (date?: Date, timeZone?: string | undefined) => number;
@@ -0,0 +1,13 @@
1
+ import { XYZ } from "../lib/helpers";
2
+ export interface XYZRaster {
3
+ xOffset: number;
4
+ yOffset: number;
5
+ x: number;
6
+ y: number;
7
+ z: number;
8
+ }
9
+ export declare const createTileRaster: (xyzTiles: XYZ[]) => XYZRaster[];
10
+ export declare const getDimensions: (data: XYZRaster[]) => {
11
+ width: number;
12
+ height: number;
13
+ };
@@ -0,0 +1,3 @@
1
+ import { LatLngLiteral } from "leaflet";
2
+ export declare const project: (center: LatLngLiteral, zoom: number) => any;
3
+ export declare const unproject: (point: any, zoom: number) => any;
@@ -0,0 +1,16 @@
1
+ import { UMap } from "../map/umap";
2
+ import { CompiledKernel } from "../shader/kernel";
3
+ import { Color } from "../types/color";
4
+ import { HeightMap } from "./heightMap";
5
+ interface DrawShadowParams {
6
+ kernel: CompiledKernel;
7
+ map: UMap;
8
+ heightMap: HeightMap;
9
+ now: Date;
10
+ color: Color;
11
+ opacity: number;
12
+ maxZoom: number;
13
+ belowCanopy: boolean;
14
+ }
15
+ export declare const drawShadow: (params: DrawShadowParams) => void;
16
+ export {};
@@ -0,0 +1,11 @@
1
+ import { LatLng } from "../../node_modules/leaflet/src/geo/LatLng";
2
+ import { LatLngBounds } from "../../node_modules/leaflet/src/geo/LatLngBounds";
3
+ import { Bounds } from "../../node_modules/leaflet/src/geometry/Bounds";
4
+ import { Point } from "../../node_modules/leaflet/src/geometry/Point";
5
+ export { Point, Bounds, LatLngBounds, LatLng };
6
+ export interface ValidBounds extends Bounds {
7
+ getTopLeft: () => Point;
8
+ getBottomRight: () => Point;
9
+ min: Point;
10
+ max: Point;
11
+ }
@@ -0,0 +1,26 @@
1
+ import { LatLngLiteral, Layer, Map as LeafletMap, PointExpression } from "leaflet";
2
+ import { Map as MapboxGLMap } from "mapbox-gl";
3
+ import { LatLng, LatLngBounds, Point } from "../map/geometryLeaflet";
4
+ export interface UMap {
5
+ project: (center: LatLngLiteral, zoom: number) => Point;
6
+ unproject: (point: Point, zoom: number) => LatLng;
7
+ screenUnproject: (point: PointExpression) => LatLng;
8
+ getZoom: () => number;
9
+ getCenter: () => LatLng;
10
+ getBounds: () => LatLngBounds;
11
+ eachLayer(fn: (layer: Layer) => void): void;
12
+ getBearing: () => number;
13
+ getPitch: () => number;
14
+ rawMap: () => LeafletMap | MapboxGLMap;
15
+ isLeaflet: () => boolean;
16
+ getPixelDimensions: () => {
17
+ width: number;
18
+ height: number;
19
+ };
20
+ createBounds: (args: {
21
+ nw: LatLngLiteral;
22
+ se: LatLngLiteral;
23
+ }) => LatLngBounds;
24
+ }
25
+ declare const uMap: (map: MapboxGLMap | LeafletMap) => UMap;
26
+ export default uMap;
@@ -0,0 +1,29 @@
1
+ import { Color } from "../types/color";
2
+ import { Shadow3DData } from "../types/shadow3DData";
3
+ import { CompiledKernel } from "./kernel";
4
+ export declare const updateHeightMapGPU: (compiledKernel: CompiledKernel, shadow3DData: Shadow3DData) => void;
5
+ export declare const updateDateGPU: (compiledKernel: CompiledKernel, params: {
6
+ date: Date;
7
+ }) => void;
8
+ export declare const generateShadeProfile: (compiledKernel: CompiledKernel, params: {
9
+ texCoords: number[][];
10
+ dates: Date[];
11
+ sunColor: number[];
12
+ shadeColor: number[];
13
+ }) => Uint8Array;
14
+ export declare const generateLocationShadeProfile: (compiledKernel: CompiledKernel, params: {
15
+ texCoord: number[];
16
+ dates: Date[][];
17
+ sunColor: number[];
18
+ shadeColor: number[];
19
+ }) => Uint8Array;
20
+ export declare const updateDateRangeGPU: (compiledKernel: CompiledKernel, params: {
21
+ startDate: Date;
22
+ endDate: Date;
23
+ iterations: number;
24
+ emit: (name: string, ...args: any[]) => void;
25
+ }) => Promise<boolean>;
26
+ export declare const updateColorGPU: (compiledKernel: CompiledKernel, params: {
27
+ color: Color;
28
+ opacity: number;
29
+ }) => void;
@@ -0,0 +1,68 @@
1
+ interface CompileProgramArgs {
2
+ gl: WebGLRenderingContext;
3
+ vSrc: string;
4
+ fSrc: string;
5
+ }
6
+ interface UpdateLocationArgs {
7
+ width: number;
8
+ height: number;
9
+ maxHeight: number;
10
+ heightMapZoom: number;
11
+ topYCoord: number;
12
+ ySize: number;
13
+ colorVec: number[];
14
+ step: number;
15
+ west: number;
16
+ dLng: number;
17
+ dec: number;
18
+ Hi: number;
19
+ cornerClipCoords: number[];
20
+ cornerTextureCoords: number[];
21
+ outputWidth: number;
22
+ outputHeight: number;
23
+ belowCanopy: boolean;
24
+ }
25
+ interface UpdateViewportArgs {
26
+ xStart: number;
27
+ yStart: number;
28
+ xEnd: number;
29
+ yEnd: number;
30
+ }
31
+ interface UpdateDateArgs {
32
+ dec: number;
33
+ Hi: number;
34
+ }
35
+ interface UpdateDateRangeArgs {
36
+ startDate: Date;
37
+ endDate: Date;
38
+ iterations: number;
39
+ emit: (name: string, ...args: any[]) => void;
40
+ }
41
+ interface UpdateColorArgs {
42
+ colorVec: number[];
43
+ }
44
+ export interface CompiledKernel {
45
+ updateLocation: (args: UpdateLocationArgs) => void;
46
+ updateViewport: (args: UpdateViewportArgs) => void;
47
+ updateDate: (args: UpdateDateArgs) => void;
48
+ updateDateRange: (args: UpdateDateRangeArgs) => Promise<boolean>;
49
+ updateColor: (args: UpdateColorArgs) => void;
50
+ generateShadeProfile: (args: {
51
+ texCoords: number[][];
52
+ dates: Date[];
53
+ sunColor: number[];
54
+ shadeColor: number[];
55
+ }) => Uint8Array;
56
+ generateLocationShadeProfile: (args: {
57
+ texCoord: number[];
58
+ dates: Date[][];
59
+ sunColor: number[];
60
+ shadeColor: number[];
61
+ }) => Uint8Array;
62
+ }
63
+ export declare function compileProgram(args: CompileProgramArgs): WebGLProgram;
64
+ interface Settings {
65
+ context: WebGLRenderingContext;
66
+ }
67
+ declare function kernel(settings: Settings): CompiledKernel;
68
+ export default kernel;
@@ -0,0 +1,5 @@
1
+ export interface Color {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ }
@@ -0,0 +1,3 @@
1
+ export declare const MAX_ELEVATION = 8848;
2
+ export declare const TILE_SIZE = 256;
3
+ export declare const EXPOSURE_LAYER_OPACITY = 0.5;
@@ -0,0 +1,5 @@
1
+ export declare enum Quality {
2
+ LOW = "low",
3
+ MED = "medium",
4
+ HIGH = "high"
5
+ }
@@ -0,0 +1,46 @@
1
+ import { MapboxGeoJSONFeature } from "mapbox-gl";
2
+ import { Quality } from "./quality";
3
+ import { LatLngLiteral } from "leaflet";
4
+ export interface TerrainSource {
5
+ maxZoom: number;
6
+ tileSize: number;
7
+ getSourceUrl: (params: {
8
+ x: number;
9
+ y: number;
10
+ z: number;
11
+ }) => string;
12
+ getElevation: (params: {
13
+ r: number;
14
+ g: number;
15
+ b: number;
16
+ a: number;
17
+ }) => number;
18
+ _overzoom: number;
19
+ }
20
+ export interface DSMSource {
21
+ data: Uint8ClampedArray;
22
+ bounds: LatLngLiteral[];
23
+ width: number;
24
+ height: number;
25
+ maxHeight: number;
26
+ }
27
+ export interface SunExposureOptions {
28
+ startDate: Date;
29
+ endDate: Date;
30
+ iterations?: number;
31
+ }
32
+ export interface SunExposure extends SunExposureOptions {
33
+ enabled: boolean;
34
+ }
35
+ export interface ShadeMapOptions {
36
+ date?: Date;
37
+ color?: string;
38
+ opacity?: number;
39
+ quality?: Quality;
40
+ sunExposure?: SunExposure;
41
+ terrainSource?: TerrainSource;
42
+ dsmSource?: DSMSource;
43
+ getFeatures?: () => Promise<MapboxGeoJSONFeature[]>;
44
+ apiKey: string;
45
+ debug?: (msg: string) => void;
46
+ }
@@ -0,0 +1,20 @@
1
+ import { Color } from "./color";
2
+ export interface Shadow3DData {
3
+ imageData: Uint8ClampedArray;
4
+ maxHeight: number;
5
+ width: number;
6
+ height: number;
7
+ date: Date;
8
+ heightMapZoom: number;
9
+ topYCoord: number;
10
+ ySize: number;
11
+ color: Color;
12
+ opacity: number;
13
+ west: number;
14
+ dLng: number;
15
+ cornerClipCoords: number[];
16
+ cornerTextureCoords: number[];
17
+ outputWidth: number;
18
+ outputHeight: number;
19
+ belowCanopy: boolean;
20
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leaflet-shadow-simulator",
3
- "version": "0.44.0",
3
+ "version": "0.48.0",
4
4
  "description": "Display terrain and structure shadows cast by the sun in a custom Leaflet layer",
5
5
  "main": "dist/leaflet-shadow-simulator.umd.min.js",
6
6
  "browser": "dist/leaflet-shadow-simulator.umd.min.js",