@gisatcz/deckgl-geolib 1.10.1-dev.0 → 1.10.1-dev.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.
- package/dist/cjs/index.js +911 -23
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js +4 -4
- package/dist/cjs/index.min.js.map +1 -1
- package/dist/cjs/types/cogtiles/cogtiles.d.ts +2 -1
- package/dist/cjs/types/geoimage/delatin/index.d.ts +23 -0
- package/dist/cjs/types/geoimage/geoimage.d.ts +51 -2
- package/dist/cjs/types/geoimage/helpers/skirt.d.ts +18 -0
- package/dist/cjs/types/loaders/CogTerrainLoader.d.ts +3 -0
- package/dist/cjs/types/terrain-layer.d.ts +83 -0
- package/dist/esm/index.js +911 -23
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +4 -4
- package/dist/esm/index.min.js.map +1 -1
- package/dist/esm/types/cogtiles/cogtiles.d.ts +2 -1
- package/dist/esm/types/geoimage/delatin/index.d.ts +23 -0
- package/dist/esm/types/geoimage/geoimage.d.ts +51 -2
- package/dist/esm/types/geoimage/helpers/skirt.d.ts +18 -0
- package/dist/esm/types/loaders/CogTerrainLoader.d.ts +3 -0
- package/dist/esm/types/terrain-layer.d.ts +83 -0
- package/package.json +2 -1
- package/src/cogterrainlayer/CogTerrainLayer.ts +1 -1
- package/src/cogtiles/cogtiles.ts +7 -2
- package/src/geoimage/delatin/index.ts +495 -0
- package/src/geoimage/geoimage.ts +211 -22
- package/src/geoimage/helpers/skirt.ts +171 -0
- package/src/loaders/CogTerrainLoader.ts +55 -0
- package/src/terrain-layer.ts +504 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Tiff, TiffImage } from '@cogeotiff/core';
|
|
2
2
|
import LZWDecoder from './lzw';
|
|
3
3
|
import GeoImage, { GeoImageOptions } from '../geoimage/geoimage.ts';
|
|
4
|
+
export type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
|
|
4
5
|
declare class CogTiles {
|
|
5
6
|
cog: Tiff;
|
|
6
7
|
zoomRange: number[];
|
|
@@ -21,7 +22,7 @@ declare class CogTiles {
|
|
|
21
22
|
getResolutionFromZoomLevel(tileSize: number, z: number): number;
|
|
22
23
|
getZoomLevelFromResolution(tileSize: number, resolution: number): number;
|
|
23
24
|
getLatLon(input: number[]): number[];
|
|
24
|
-
getTile(x: number, y: number, z: number): Promise<string>;
|
|
25
|
+
getTile(x: number, y: number, z: number, bounds: Bounds): Promise<string>;
|
|
25
26
|
getFormat(sampleFormat: number[] | number, bitsPerSample: number[] | number): any;
|
|
26
27
|
getNoDataValue(tags: any): number;
|
|
27
28
|
testCog(): Promise<void>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export default class Delatin {
|
|
2
|
+
constructor(data: any, width: any, height?: any);
|
|
3
|
+
run(maxError?: number): void;
|
|
4
|
+
refine(): void;
|
|
5
|
+
getMaxError(): any;
|
|
6
|
+
getRMSD(): number;
|
|
7
|
+
heightAt(x: any, y: any): any;
|
|
8
|
+
_flush(): void;
|
|
9
|
+
_findCandidate(p0x: any, p0y: any, p1x: any, p1y: any, p2x: any, p2y: any, t: any): void;
|
|
10
|
+
_step(): void;
|
|
11
|
+
_addPoint(x: any, y: any): number;
|
|
12
|
+
_addTriangle(a: any, b: any, c: any, ab: any, bc: any, ca: any, e?: any): any;
|
|
13
|
+
_legalize(a: any): void;
|
|
14
|
+
_handleCollinear(pn: any, a: any): void;
|
|
15
|
+
_queuePush(t: any, error: any, rms: any): void;
|
|
16
|
+
_queuePop(): any;
|
|
17
|
+
_queuePopBack(): any;
|
|
18
|
+
_queueRemove(t: any): void;
|
|
19
|
+
_queueLess(i: any, j: any): boolean;
|
|
20
|
+
_queueSwap(i: any, j: any): void;
|
|
21
|
+
_queueUp(j0: any): void;
|
|
22
|
+
_queueDown(i0: any, n: any): boolean;
|
|
23
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { GeoTIFFImage } from 'geotiff';
|
|
2
2
|
import chroma from 'chroma-js';
|
|
3
|
+
export type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
|
|
3
4
|
export type ClampToTerrainOptions = {
|
|
4
5
|
terrainDrawMode?: string;
|
|
5
6
|
};
|
|
@@ -42,12 +43,60 @@ export default class GeoImage {
|
|
|
42
43
|
width: number;
|
|
43
44
|
height: number;
|
|
44
45
|
rasters: any[];
|
|
45
|
-
|
|
46
|
+
bounds: Bounds;
|
|
47
|
+
}, options: GeoImageOptions): Promise<string | {
|
|
48
|
+
loaderData: {
|
|
49
|
+
header: {};
|
|
50
|
+
};
|
|
51
|
+
header: {
|
|
52
|
+
vertexCount: any;
|
|
53
|
+
boundingBox: any;
|
|
54
|
+
};
|
|
55
|
+
mode: number;
|
|
56
|
+
indices: {
|
|
57
|
+
value: Uint32Array;
|
|
58
|
+
size: number;
|
|
59
|
+
};
|
|
60
|
+
attributes: {
|
|
61
|
+
POSITION: {
|
|
62
|
+
value: Float32Array;
|
|
63
|
+
size: number;
|
|
64
|
+
};
|
|
65
|
+
TEXCOORD_0: {
|
|
66
|
+
value: Float32Array;
|
|
67
|
+
size: number;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
}>;
|
|
46
71
|
getHeightmap(input: string | {
|
|
72
|
+
bounds: Bounds;
|
|
47
73
|
width: number;
|
|
48
74
|
height: number;
|
|
49
75
|
rasters: any[];
|
|
50
|
-
}, options: GeoImageOptions): Promise<
|
|
76
|
+
}, options: GeoImageOptions): Promise<{
|
|
77
|
+
loaderData: {
|
|
78
|
+
header: {};
|
|
79
|
+
};
|
|
80
|
+
header: {
|
|
81
|
+
vertexCount: any;
|
|
82
|
+
boundingBox: any;
|
|
83
|
+
};
|
|
84
|
+
mode: number;
|
|
85
|
+
indices: {
|
|
86
|
+
value: Uint32Array;
|
|
87
|
+
size: number;
|
|
88
|
+
};
|
|
89
|
+
attributes: {
|
|
90
|
+
POSITION: {
|
|
91
|
+
value: Float32Array;
|
|
92
|
+
size: number;
|
|
93
|
+
};
|
|
94
|
+
TEXCOORD_0: {
|
|
95
|
+
value: Float32Array;
|
|
96
|
+
size: number;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
}>;
|
|
51
100
|
getBitmap(input: string | {
|
|
52
101
|
width: number;
|
|
53
102
|
height: number;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type EdgeIndices = {
|
|
2
|
+
westIndices: number[];
|
|
3
|
+
northIndices: number[];
|
|
4
|
+
eastIndices: number[];
|
|
5
|
+
southIndices: number[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Add skirt to existing mesh
|
|
9
|
+
* @param {object} attributes - POSITION and TEXCOOD_0 attributes data
|
|
10
|
+
* @param {any} triangles - indices array of the mesh geometry
|
|
11
|
+
* @param skirtHeight - height of the skirt geometry
|
|
12
|
+
* @param outsideIndices - edge indices from quantized mesh data
|
|
13
|
+
* @returns - geometry data with added skirt
|
|
14
|
+
*/
|
|
15
|
+
export declare function addSkirt(attributes: any, triangles: any, skirtHeight: number, outsideIndices?: EdgeIndices): {
|
|
16
|
+
attributes: any;
|
|
17
|
+
triangles: any;
|
|
18
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Color, CompositeLayer, CompositeLayerProps, DefaultProps, Layer, LayersList, Material, TextureSource, UpdateParameters } from '@deck.gl/core';
|
|
2
|
+
import { SimpleMeshLayer } from '@deck.gl/mesh-layers';
|
|
3
|
+
import type { MeshAttributes } from '@loaders.gl/schema';
|
|
4
|
+
import { TileLayerProps, GeoBoundingBox, _TileLoadProps as TileLoadProps, _Tile2DHeader as Tile2DHeader, NonGeoBoundingBox } from '@deck.gl/geo-layers';
|
|
5
|
+
import { GeoImageOptions } from './geoimage/geoimage.ts';
|
|
6
|
+
import CogTiles from './cogtiles/cogtiles.ts';
|
|
7
|
+
export type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
|
|
8
|
+
export type TileBoundingBox = NonGeoBoundingBox | GeoBoundingBox;
|
|
9
|
+
export type ZRange = [minZ: number, maxZ: number];
|
|
10
|
+
export type URLTemplate = string | string[] | null;
|
|
11
|
+
export declare const urlType: {
|
|
12
|
+
type: "object";
|
|
13
|
+
value: URLTemplate;
|
|
14
|
+
validate: (value: any, propType: any) => boolean;
|
|
15
|
+
equal: (value1: any, value2: any) => boolean;
|
|
16
|
+
};
|
|
17
|
+
type ElevationDecoder = {
|
|
18
|
+
rScaler: number;
|
|
19
|
+
gScaler: number;
|
|
20
|
+
bScaler: number;
|
|
21
|
+
offset: number;
|
|
22
|
+
};
|
|
23
|
+
type TerrainLoadProps = {
|
|
24
|
+
bounds: Bounds;
|
|
25
|
+
elevationData: string | null;
|
|
26
|
+
elevationDecoder: ElevationDecoder;
|
|
27
|
+
meshMaxError: number;
|
|
28
|
+
signal?: AbortSignal;
|
|
29
|
+
};
|
|
30
|
+
type MeshAndTexture = [MeshAttributes | null, TextureSource | null];
|
|
31
|
+
/** All properties supported by TerrainLayer */
|
|
32
|
+
export type TerrainLayerProps = _TerrainLayerProps & TileLayerProps<MeshAndTexture> & CompositeLayerProps;
|
|
33
|
+
/** Props added by the TerrainLayer */
|
|
34
|
+
type _TerrainLayerProps = {
|
|
35
|
+
/** Image url that encodes height data. * */
|
|
36
|
+
elevationData: URLTemplate;
|
|
37
|
+
/** Image url to use as texture. * */
|
|
38
|
+
texture?: URLTemplate;
|
|
39
|
+
/** Martini error tolerance in meters, smaller number -> more detailed mesh. * */
|
|
40
|
+
meshMaxError?: number;
|
|
41
|
+
/** Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates. * */
|
|
42
|
+
bounds?: Bounds | null;
|
|
43
|
+
/** Color to use if texture is unavailable. * */
|
|
44
|
+
color?: Color;
|
|
45
|
+
/** Object to decode height data, from (r, g, b) to height in meters. * */
|
|
46
|
+
elevationDecoder?: ElevationDecoder;
|
|
47
|
+
/** Whether to render the mesh in wireframe mode. * */
|
|
48
|
+
wireframe?: boolean;
|
|
49
|
+
/** Material props for lighting effect. * */
|
|
50
|
+
material?: Material;
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Use `loadOptions.terrain.workerUrl` instead
|
|
53
|
+
*/
|
|
54
|
+
workerUrl?: string;
|
|
55
|
+
};
|
|
56
|
+
/** Render mesh surfaces from height map images. */
|
|
57
|
+
export default class TerrainLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<ExtraPropsT & Required<_TerrainLayerProps & Required<TileLayerProps<MeshAndTexture>>>> {
|
|
58
|
+
static defaultProps: DefaultProps<TerrainLayerProps>;
|
|
59
|
+
static layerName: string;
|
|
60
|
+
terrainCogTiles: CogTiles;
|
|
61
|
+
terrainUrl: string;
|
|
62
|
+
minZoom: number;
|
|
63
|
+
maxZoom: number;
|
|
64
|
+
state: {
|
|
65
|
+
isTiled?: boolean;
|
|
66
|
+
terrain?: MeshAttributes;
|
|
67
|
+
zRange?: ZRange | null;
|
|
68
|
+
};
|
|
69
|
+
constructor(props: TerrainLayerProps & ExtraPropsT, terrainOptions: GeoImageOptions);
|
|
70
|
+
initializeState(context: any): Promise<void>;
|
|
71
|
+
init(terrainUrl: string): Promise<void>;
|
|
72
|
+
updateState({ props, oldProps }: UpdateParameters<this>): void;
|
|
73
|
+
loadTerrain({ elevationData, bounds, elevationDecoder, meshMaxError, signal, }: TerrainLoadProps): Promise<MeshAttributes> | null;
|
|
74
|
+
getTiledTerrainData(tile: TileLoadProps): Promise<MeshAndTexture>;
|
|
75
|
+
renderSubLayers(props: TileLayerProps<MeshAndTexture> & {
|
|
76
|
+
id: string;
|
|
77
|
+
data: MeshAndTexture;
|
|
78
|
+
tile: Tile2DHeader<MeshAndTexture>;
|
|
79
|
+
}): SimpleMeshLayer<any, {}>;
|
|
80
|
+
onViewportLoad(tiles?: Tile2DHeader<MeshAndTexture>[]): void;
|
|
81
|
+
renderLayers(): Layer | null | LayersList;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gisatcz/deckgl-geolib",
|
|
3
|
-
"version": "1.10.1-dev.
|
|
3
|
+
"version": "1.10.1-dev.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"@deck.gl/react": "^9.0.4",
|
|
39
39
|
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
|
40
40
|
"@luma.gl/constants": "^9.0.9",
|
|
41
|
+
"@mapbox/martini": "^0.2.0",
|
|
41
42
|
"@math.gl/web-mercator": "^4.0.1",
|
|
42
43
|
"chroma-js": "^2.4.2",
|
|
43
44
|
"geotiff": "^2.1.3",
|
|
@@ -95,7 +95,7 @@ class CogTerrainLayer extends CompositeLayer<any> {
|
|
|
95
95
|
this.tileSize = this.terrainCogTiles.getTileSize(cog);
|
|
96
96
|
|
|
97
97
|
const zoomRange = this.terrainCogTiles.getZoomRange(cog);
|
|
98
|
-
[this.minZoom, this.maxZoom] = zoomRange;
|
|
98
|
+
[this.props.minZoom, this.props.maxZoom] = zoomRange;
|
|
99
99
|
|
|
100
100
|
this.setState({ initialized: true });
|
|
101
101
|
}
|
package/src/cogtiles/cogtiles.ts
CHANGED
|
@@ -12,6 +12,8 @@ import LZWDecoder from './lzw';
|
|
|
12
12
|
// Bitmap styling
|
|
13
13
|
import GeoImage, { GeoImageOptions } from '../geoimage/geoimage.ts'; // TODO: remove absolute path
|
|
14
14
|
|
|
15
|
+
export type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
|
|
16
|
+
|
|
15
17
|
const EARTH_CIRCUMFERENCE = 40075000.0;
|
|
16
18
|
const EARTH_HALF_CIRCUMFERENCE = 20037500.0;
|
|
17
19
|
|
|
@@ -156,7 +158,7 @@ class CogTiles {
|
|
|
156
158
|
return cartographicPositionAdjusted;
|
|
157
159
|
}
|
|
158
160
|
|
|
159
|
-
async getTile(x: number, y: number, z: number) {
|
|
161
|
+
async getTile(x: number, y: number, z: number, bounds:Bounds) {
|
|
160
162
|
const wantedMpp = this.getResolutionFromZoomLevel(this.tileSize, z);
|
|
161
163
|
const img = this.cog.getImageByResolution(wantedMpp);
|
|
162
164
|
// await img.loadGeoTiffTags(1)
|
|
@@ -211,7 +213,7 @@ img.tags.get(339).value as Array<number>,
|
|
|
211
213
|
// console.log("Single channel pixel format: " + bitsPerSample/)
|
|
212
214
|
|
|
213
215
|
if (x - ox >= 0 && y - oy >= 0 && x - ox < tilesX && y - oy < tilesY) {
|
|
214
|
-
// console.log(
|
|
216
|
+
// console.log(`getting tile: ${[x - ox, y - oy]}`);
|
|
215
217
|
const tile = await img.getTile((x - ox), (y - oy));
|
|
216
218
|
// console.time("Request to data time: ")
|
|
217
219
|
|
|
@@ -254,10 +256,13 @@ img.tags.get(339).value as Array<number>,
|
|
|
254
256
|
|
|
255
257
|
// console.log(decompressedFormatted)
|
|
256
258
|
|
|
259
|
+
// const { meshMaxError, bounds, elevationDecoder } = this.options;
|
|
260
|
+
|
|
257
261
|
decompressed = await this.geo.getMap({
|
|
258
262
|
rasters: [decompressedFormatted],
|
|
259
263
|
width: this.tileSize,
|
|
260
264
|
height: this.tileSize,
|
|
265
|
+
bounds,
|
|
261
266
|
}, this.options);
|
|
262
267
|
|
|
263
268
|
// console.log(decompressed.length)
|