@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.
@@ -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
- }, options: GeoImageOptions): Promise<string>;
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<string>;
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,3 @@
1
+ import type { LoaderContext } from '@loaders.gl/loader-utils';
2
+ export declare const CogTerrainLoader: LoaderWithParser<any, never, any>;
3
+ export declare function parseTerrain(arrayBuffer: ArrayBuffer, options?: {}, context?: LoaderContext): Promise<void>;
@@ -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.0",
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
  }
@@ -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("getting tile: " + [x - ox, y - oy]);
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)