@deck.gl/geo-layers 8.8.0-alpha.5 → 8.8.0-beta.2

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 (151) hide show
  1. package/dist/dist.dev.js +32562 -62596
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  3. package/dist/es5/great-circle-layer/great-circle-layer.js +12 -8
  4. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  5. package/dist/es5/h3-layers/h3-cluster-layer.js +5 -4
  6. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js +49 -34
  8. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  11. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  12. package/dist/es5/mesh-layer/mesh-layer.js +22 -26
  13. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  14. package/dist/es5/mvt-layer/mvt-layer.js +6 -3
  15. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  16. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  17. package/dist/es5/s2-layer/s2-geometry.js.map +1 -1
  18. package/dist/es5/s2-layer/s2-layer.js +4 -2
  19. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  20. package/dist/es5/s2-layer/s2-utils.js.map +1 -1
  21. package/dist/es5/tile-3d-layer/tile-3d-layer.js +31 -16
  22. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  23. package/dist/es5/tile-layer/tile-layer.js +4 -1
  24. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  25. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  26. package/dist/es5/trips-layer/trips-layer.js +9 -7
  27. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  28. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  29. package/dist/esm/great-circle-layer/great-circle-layer.js +7 -3
  30. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  31. package/dist/esm/h3-layers/h3-cluster-layer.js +6 -4
  32. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  33. package/dist/esm/h3-layers/h3-hexagon-layer.js +38 -24
  34. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  37. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +1 -1
  38. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  39. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
  40. package/dist/esm/mesh-layer/mesh-layer.js +15 -17
  41. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  42. package/dist/esm/mvt-layer/mvt-layer.js +6 -3
  43. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  44. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  45. package/dist/esm/s2-layer/s2-geometry.js.map +1 -1
  46. package/dist/esm/s2-layer/s2-layer.js +5 -2
  47. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  48. package/dist/esm/s2-layer/s2-utils.js.map +1 -1
  49. package/dist/esm/tile-3d-layer/tile-3d-layer.js +21 -10
  50. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  51. package/dist/esm/tile-layer/tile-layer.js +4 -1
  52. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  53. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  54. package/dist/esm/trips-layer/trips-layer.js +8 -5
  55. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  56. package/dist.min.js +2 -2
  57. package/package.json +17 -15
  58. package/src/geo-cell-layer/GeoCellLayer.ts +4 -3
  59. package/src/great-circle-layer/great-circle-layer.ts +40 -0
  60. package/src/h3-layers/h3-cluster-layer.ts +60 -0
  61. package/src/h3-layers/{h3-hexagon-layer.js → h3-hexagon-layer.ts} +110 -42
  62. package/src/index.ts +5 -0
  63. package/src/mesh-layer/{mesh-layer-fragment.glsl.js → mesh-layer-fragment.glsl.ts} +0 -0
  64. package/src/mesh-layer/mesh-layer-vertex.glsl.ts +80 -0
  65. package/src/mesh-layer/{mesh-layer.js → mesh-layer.ts} +46 -13
  66. package/src/mvt-layer/mvt-layer.ts +5 -3
  67. package/src/quadkey-layer/quadkey-layer.ts +10 -9
  68. package/src/s2-layer/{s2-geometry.js → s2-geometry.ts} +17 -9
  69. package/src/s2-layer/s2-layer.ts +59 -0
  70. package/src/s2-layer/{s2-utils.js → s2-utils.ts} +14 -7
  71. package/src/tile-3d-layer/{tile-3d-layer.js → tile-3d-layer.ts} +107 -36
  72. package/src/tile-layer/tile-layer.ts +8 -7
  73. package/src/tile-layer/tileset-2d.ts +2 -2
  74. package/src/trips-layer/{trips-layer.js → trips-layer.ts} +41 -10
  75. package/typed/geo-cell-layer/GeoCellLayer.d.ts +12 -0
  76. package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -0
  77. package/typed/geo-cell-layer/GeoCellLayer.js +49 -0
  78. package/typed/great-circle-layer/great-circle-layer.d.ts +9 -0
  79. package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -0
  80. package/{src → typed}/great-circle-layer/great-circle-layer.js +5 -7
  81. package/typed/h3-layers/h3-cluster-layer.d.ts +22 -0
  82. package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -0
  83. package/typed/h3-layers/h3-cluster-layer.js +33 -0
  84. package/typed/h3-layers/h3-hexagon-layer.d.ts +70 -0
  85. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -0
  86. package/typed/h3-layers/h3-hexagon-layer.js +251 -0
  87. package/typed/index.d.ts +23 -0
  88. package/typed/index.d.ts.map +1 -0
  89. package/typed/index.js +33 -0
  90. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts +3 -0
  91. package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +1 -0
  92. package/typed/mesh-layer/mesh-layer-fragment.glsl.js +55 -0
  93. package/typed/mesh-layer/mesh-layer-vertex.glsl.d.ts +3 -0
  94. package/typed/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +1 -0
  95. package/{src → typed}/mesh-layer/mesh-layer-vertex.glsl.js +0 -0
  96. package/typed/mesh-layer/mesh-layer.d.ts +37 -0
  97. package/typed/mesh-layer/mesh-layer.d.ts.map +1 -0
  98. package/typed/mesh-layer/mesh-layer.js +110 -0
  99. package/typed/mvt-layer/coordinate-transform.d.ts +4 -0
  100. package/typed/mvt-layer/coordinate-transform.d.ts.map +1 -0
  101. package/typed/mvt-layer/coordinate-transform.js +41 -0
  102. package/typed/mvt-layer/find-index-binary.d.ts +12 -0
  103. package/typed/mvt-layer/find-index-binary.d.ts.map +1 -0
  104. package/typed/mvt-layer/find-index-binary.js +96 -0
  105. package/typed/mvt-layer/mvt-layer.d.ts +70 -0
  106. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -0
  107. package/typed/mvt-layer/mvt-layer.js +297 -0
  108. package/typed/package.json +6 -0
  109. package/typed/quadkey-layer/quadkey-layer.d.ts +20 -0
  110. package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -0
  111. package/typed/quadkey-layer/quadkey-layer.js +18 -0
  112. package/typed/quadkey-layer/quadkey-utils.d.ts +3 -0
  113. package/typed/quadkey-layer/quadkey-utils.d.ts.map +1 -0
  114. package/typed/quadkey-layer/quadkey-utils.js +26 -0
  115. package/typed/s2-layer/s2-geometry.d.ts +11 -0
  116. package/typed/s2-layer/s2-geometry.d.ts.map +1 -0
  117. package/typed/s2-layer/s2-geometry.js +123 -0
  118. package/typed/s2-layer/s2-layer.d.ts +20 -0
  119. package/typed/s2-layer/s2-layer.d.ts.map +1 -0
  120. package/{src → typed}/s2-layer/s2-layer.js +11 -16
  121. package/typed/s2-layer/s2-utils.d.ts +9 -0
  122. package/typed/s2-layer/s2-utils.d.ts.map +1 -0
  123. package/typed/s2-layer/s2-utils.js +88 -0
  124. package/typed/terrain-layer/terrain-layer.d.ts +28 -0
  125. package/typed/terrain-layer/terrain-layer.d.ts.map +1 -0
  126. package/typed/terrain-layer/terrain-layer.js +226 -0
  127. package/typed/tile-3d-layer/tile-3d-layer.d.ts +60 -0
  128. package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +1 -0
  129. package/typed/tile-3d-layer/tile-3d-layer.js +294 -0
  130. package/typed/tile-layer/tile-2d-header.d.ts +40 -0
  131. package/typed/tile-layer/tile-2d-header.d.ts.map +1 -0
  132. package/typed/tile-layer/tile-2d-header.js +113 -0
  133. package/typed/tile-layer/tile-2d-traversal.d.ts +4 -0
  134. package/typed/tile-layer/tile-2d-traversal.d.ts.map +1 -0
  135. package/typed/tile-layer/tile-2d-traversal.js +181 -0
  136. package/typed/tile-layer/tile-layer.d.ts +118 -0
  137. package/typed/tile-layer/tile-layer.d.ts.map +1 -0
  138. package/typed/tile-layer/tile-layer.js +192 -0
  139. package/typed/tile-layer/tileset-2d.d.ts +88 -0
  140. package/typed/tile-layer/tileset-2d.d.ts.map +1 -0
  141. package/typed/tile-layer/tileset-2d.js +399 -0
  142. package/typed/tile-layer/types.d.ts +29 -0
  143. package/typed/tile-layer/types.d.ts.map +1 -0
  144. package/typed/tile-layer/types.js +1 -0
  145. package/typed/tile-layer/utils.d.ts +37 -0
  146. package/typed/tile-layer/utils.d.ts.map +1 -0
  147. package/typed/tile-layer/utils.js +197 -0
  148. package/typed/trips-layer/trips-layer.d.ts +36 -0
  149. package/typed/trips-layer/trips-layer.d.ts.map +1 -0
  150. package/typed/trips-layer/trips-layer.js +92 -0
  151. package/src/h3-layers/h3-cluster-layer.js +0 -43
@@ -0,0 +1,55 @@
1
+ export default `#version 300 es
2
+ #define SHADER_NAME simple-mesh-layer-fs
3
+
4
+ precision highp float;
5
+
6
+ uniform bool hasTexture;
7
+ uniform sampler2D sampler;
8
+ uniform bool flatShading;
9
+ uniform float opacity;
10
+
11
+ in vec2 vTexCoord;
12
+ in vec3 cameraPosition;
13
+ in vec3 normals_commonspace;
14
+ in vec4 position_commonspace;
15
+ in vec4 vColor;
16
+
17
+ out vec4 fragColor;
18
+
19
+ void main(void) {
20
+
21
+ #ifdef MODULE_PBR
22
+
23
+ fragColor = vColor * pbr_filterColor(vec4(0));
24
+ geometry.uv = pbr_vUV;
25
+ fragColor.a *= opacity;
26
+
27
+ #else
28
+
29
+ geometry.uv = vTexCoord;
30
+
31
+ vec3 normal;
32
+ if (flatShading) {
33
+
34
+ // NOTE(Tarek): This is necessary because
35
+ // headless.gl reports the extension as
36
+ // available but does not support it in
37
+ // the shader.
38
+ #ifdef DERIVATIVES_AVAILABLE
39
+ normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));
40
+ #else
41
+ normal = vec3(0.0, 0.0, 1.0);
42
+ #endif
43
+ } else {
44
+ normal = normals_commonspace;
45
+ }
46
+
47
+ vec4 color = hasTexture ? texture(sampler, vTexCoord) : vColor;
48
+ vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal);
49
+ fragColor = vec4(lightColor, color.a * opacity);
50
+
51
+ #endif
52
+
53
+ DECKGL_FILTER_COLOR(fragColor, geometry);
54
+ }
55
+ `;
@@ -0,0 +1,3 @@
1
+ declare const _default: "#version 300 es\n#define SHADER_NAME simple-mesh-layer-vs\n\n// Scale the model\nuniform float sizeScale;\nuniform bool composeModelMatrix;\nuniform bool pickFeatureIds;\n\n// Primitive attributes\nin vec3 positions;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\nin vec4 uvRegions;\nin vec3 featureIdsPickingColors;\n\n// Instance attributes\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nin mat3 instanceModelMatrix;\n\n// Outputs to fragment shader\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nvec2 applyUVRegion(vec2 uv) {\n #ifdef HAS_UV_REGIONS\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md\n return fract(uv) * (uvRegions.zw - uvRegions.xy) + uvRegions.xy;\n #else\n return uv;\n #endif\n}\n\nvoid main(void) {\n vec2 uv = applyUVRegion(texCoords);\n geometry.uv = uv;\n\n if (pickFeatureIds) {\n geometry.pickingColor = featureIdsPickingColors;\n } else {\n geometry.pickingColor = instancePickingColors;\n }\n\n vTexCoord = uv;\n cameraPosition = project_uCameraPosition;\n vColor = vec4(colors * instanceColors.rgb, instanceColors.a);\n\n vec3 pos = (instanceModelMatrix * positions) * sizeScale;\n vec3 projectedPosition = project_position(positions);\n position_commonspace = vec4(projectedPosition, 1.0);\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n\n geometry.position = position_commonspace;\n normals_commonspace = project_normal(instanceModelMatrix * normals);\n geometry.normal = normals_commonspace;\n\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n #ifdef MODULE_PBR\n // set PBR data\n pbr_vPosition = geometry.position.xyz;\n #ifdef HAS_NORMALS\n pbr_vNormal = geometry.normal;\n #endif\n\n #ifdef HAS_UV\n pbr_vUV = uv;\n #else\n pbr_vUV = vec2(0., 0.);\n #endif\n geometry.uv = pbr_vUV;\n #endif\n\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
2
+ export default _default;
3
+ //# sourceMappingURL=mesh-layer-vertex.glsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-layer-vertex.glsl.d.ts","sourceRoot":"","sources":["../../src/mesh-layer/mesh-layer-vertex.glsl.ts"],"names":[],"mappings":";AAAA,wBA+EE"}
@@ -0,0 +1,37 @@
1
+ import type { NumericArray } from '@math.gl/core';
2
+ import { GLTFMaterialParser } from '@luma.gl/experimental';
3
+ import { Model } from '@luma.gl/core';
4
+ import type { MeshAttribute, MeshAttributes } from '@loaders.gl/schema';
5
+ import type { UpdateParameters, DefaultProps } from '@deck.gl/core/typed';
6
+ import { SimpleMeshLayer, SimpleMeshLayerProps } from '@deck.gl/mesh-layers/typed';
7
+ export declare type Mesh = {
8
+ attributes: MeshAttributes;
9
+ indices?: MeshAttribute;
10
+ };
11
+ /** All properties supported by MeshLayer. */
12
+ export declare type MeshLayerProps<DataT = any> = _MeshLayerProps<DataT> & SimpleMeshLayerProps<DataT>;
13
+ /** Properties added by MeshLayer. */
14
+ declare type _MeshLayerProps<DataT> = {
15
+ /**
16
+ * PBR material object. _lighting must be pbr for this to work
17
+ */
18
+ pbrMaterial?: any;
19
+ /**
20
+ * List of feature ids.
21
+ */
22
+ featureIds?: NumericArray | null;
23
+ };
24
+ export default class MeshLayer<DataT = any, ExtraProps = {}> extends SimpleMeshLayer<DataT, Required<_MeshLayerProps<DataT>> & ExtraProps> {
25
+ static layerName: string;
26
+ static defaultProps: DefaultProps<MeshLayerProps<any>>;
27
+ getShaders(): any;
28
+ initializeState(): void;
29
+ updateState(params: UpdateParameters<this>): void;
30
+ draw(opts: any): void;
31
+ protected getModel(mesh: Mesh): Model;
32
+ updatePbrMaterialUniforms(pbrMaterial: any): void;
33
+ parseMaterial(pbrMaterial: any, mesh: any): GLTFMaterialParser;
34
+ calculateFeatureIdsPickingColors(attribute: any): void;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=mesh-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-layer.d.ts","sourceRoot":"","sources":["../../src/mesh-layer/mesh-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,KAAK,EAAM,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAC,gBAAgB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAClE,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAK3E,oBAAY,IAAI,GAAG;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAcF,6CAA6C;AAC7C,oBAAY,cAAc,CAAC,KAAK,GAAG,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAE/F,qCAAqC;AACrC,aAAK,eAAe,CAAC,KAAK,IAAI;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,GAAG,EAAE,CAAE,SAAQ,eAAe,CAClF,KAAK,EACL,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAC9C;IACC,MAAM,CAAC,SAAS,SAAe;IAC/B,MAAM,CAAC,YAAY,oCAAgB;IAEnC,UAAU;IAOV,eAAe;IAmBf,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAS1C,IAAI,CAAC,IAAI,KAAA;IAeT,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK;IAqBrC,yBAAyB,CAAC,WAAW,KAAA;IASrC,aAAa,CAAC,WAAW,KAAA,EAAE,IAAI,KAAA;IAe/B,gCAAgC,CAAC,SAAS,KAAA;CAgB3C"}
@@ -0,0 +1,110 @@
1
+ import { GLTFMaterialParser } from '@luma.gl/experimental';
2
+ import { Model, pbr } from '@luma.gl/core';
3
+ import GL from '@luma.gl/constants';
4
+ import { SimpleMeshLayer } from '@deck.gl/mesh-layers';
5
+ import vs from './mesh-layer-vertex.glsl';
6
+ import fs from './mesh-layer-fragment.glsl';
7
+ function validateGeometryAttributes(attributes) {
8
+ const hasColorAttribute = attributes.COLOR_0 || attributes.colors;
9
+ if (!hasColorAttribute) {
10
+ attributes.colors = { constant: true, value: new Float32Array([1, 1, 1]) };
11
+ }
12
+ }
13
+ const defaultProps = {
14
+ // PBR material object. _lighting must be pbr for this to work
15
+ pbrMaterial: { type: 'object', value: null },
16
+ featureIds: { type: 'array', value: null, optional: true }
17
+ };
18
+ export default class _MeshLayer extends SimpleMeshLayer {
19
+ getShaders() {
20
+ const shaders = super.getShaders();
21
+ const modules = shaders.modules;
22
+ modules.push(pbr);
23
+ return { ...shaders, vs, fs };
24
+ }
25
+ initializeState() {
26
+ const { featureIds } = this.props;
27
+ super.initializeState();
28
+ if (featureIds) {
29
+ this.state.attributeManager.add({
30
+ featureIdsPickingColors: {
31
+ type: GL.UNSIGNED_BYTE,
32
+ size: 3,
33
+ noAlloc: true,
34
+ update: this.calculateFeatureIdsPickingColors
35
+ }
36
+ });
37
+ }
38
+ }
39
+ updateState({ props, oldProps, changeFlags }) {
40
+ super.updateState({ props, oldProps, changeFlags });
41
+ if (props.pbrMaterial !== oldProps.pbrMaterial) {
42
+ this.updatePbrMaterialUniforms(props.pbrMaterial);
43
+ }
44
+ }
45
+ draw(opts) {
46
+ const { featureIds } = this.props;
47
+ if (!this.state.model) {
48
+ return;
49
+ }
50
+ this.state.model.setUniforms({
51
+ // Needed for PBR (TODO: find better way to get it)
52
+ u_Camera: this.state.model.getUniforms().project_uCameraPosition,
53
+ u_pickFeatureIds: Boolean(featureIds)
54
+ });
55
+ super.draw(opts);
56
+ }
57
+ getModel(mesh) {
58
+ const { id, pbrMaterial } = this.props;
59
+ const materialParser = this.parseMaterial(pbrMaterial, mesh);
60
+ const shaders = this.getShaders();
61
+ validateGeometryAttributes(mesh.attributes);
62
+ const model = new Model(this.context.gl, {
63
+ ...this.getShaders(),
64
+ id,
65
+ geometry: mesh,
66
+ defines: {
67
+ ...shaders.defines,
68
+ ...materialParser?.defines,
69
+ HAS_UV_REGIONS: mesh.attributes.uvRegions
70
+ },
71
+ parameters: materialParser?.parameters,
72
+ isInstanced: true
73
+ });
74
+ return model;
75
+ }
76
+ updatePbrMaterialUniforms(pbrMaterial) {
77
+ const { model } = this.state;
78
+ if (model) {
79
+ const { mesh } = this.props;
80
+ const materialParser = this.parseMaterial(pbrMaterial, mesh);
81
+ model.setUniforms(materialParser.uniforms);
82
+ }
83
+ }
84
+ parseMaterial(pbrMaterial, mesh) {
85
+ const unlit = Boolean(pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture);
86
+ const materialParser = new GLTFMaterialParser(this.context.gl, {
87
+ attributes: { NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords },
88
+ material: { unlit, ...pbrMaterial },
89
+ pbrDebug: false,
90
+ imageBasedLightingEnvironment: null,
91
+ lights: true,
92
+ useTangents: false
93
+ });
94
+ return materialParser;
95
+ }
96
+ calculateFeatureIdsPickingColors(attribute) {
97
+ const { featureIds } = this.props;
98
+ const value = new Uint8ClampedArray(featureIds.length * attribute.size);
99
+ const pickingColor = [];
100
+ for (let index = 0; index < featureIds.length; index++) {
101
+ this.encodePickingColor(featureIds[index], pickingColor);
102
+ value[index * 3] = pickingColor[0];
103
+ value[index * 3 + 1] = pickingColor[1];
104
+ value[index * 3 + 2] = pickingColor[2];
105
+ }
106
+ attribute.value = value;
107
+ }
108
+ }
109
+ _MeshLayer.layerName = '_MeshLayer';
110
+ _MeshLayer.defaultProps = defaultProps;
@@ -0,0 +1,4 @@
1
+ import { Viewport } from '@deck.gl/core/typed';
2
+ import { GeoBoundingBox } from '../tile-layer/types';
3
+ export declare function transform(geometry: any, bbox: GeoBoundingBox, viewport: Viewport): any;
4
+ //# sourceMappingURL=coordinate-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinate-transform.d.ts","sourceRoot":"","sources":["../../src/mvt-layer/coordinate-transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AA0CnD,wBAAgB,SAAS,CAAC,QAAQ,KAAA,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,OAa3E"}
@@ -0,0 +1,41 @@
1
+ import { lerp } from '@math.gl/core';
2
+ const availableTransformations = {
3
+ Point,
4
+ MultiPoint,
5
+ LineString,
6
+ MultiLineString,
7
+ Polygon,
8
+ MultiPolygon
9
+ };
10
+ function Point([pointX, pointY], [nw, se], viewport) {
11
+ const x = lerp(nw[0], se[0], pointX);
12
+ const y = lerp(nw[1], se[1], pointY);
13
+ return viewport.unprojectFlat([x, y]);
14
+ }
15
+ function getPoints(geometry, bbox, viewport) {
16
+ return geometry.map(g => Point(g, bbox, viewport));
17
+ }
18
+ function MultiPoint(multiPoint, bbox, viewport) {
19
+ return getPoints(multiPoint, bbox, viewport);
20
+ }
21
+ function LineString(line, bbox, viewport) {
22
+ return getPoints(line, bbox, viewport);
23
+ }
24
+ function MultiLineString(multiLineString, bbox, viewport) {
25
+ return multiLineString.map(lineString => LineString(lineString, bbox, viewport));
26
+ }
27
+ function Polygon(polygon, bbox, viewport) {
28
+ return polygon.map(polygonRing => getPoints(polygonRing, bbox, viewport));
29
+ }
30
+ function MultiPolygon(multiPolygon, bbox, viewport) {
31
+ return multiPolygon.map(polygon => Polygon(polygon, bbox, viewport));
32
+ }
33
+ export function transform(geometry, bbox, viewport) {
34
+ const nw = viewport.projectFlat([bbox.west, bbox.north]);
35
+ const se = viewport.projectFlat([bbox.east, bbox.south]);
36
+ const projectedBbox = [nw, se];
37
+ return {
38
+ ...geometry,
39
+ coordinates: availableTransformations[geometry.type](geometry.coordinates, projectedBbox, viewport)
40
+ };
41
+ }
@@ -0,0 +1,12 @@
1
+ import type { BinaryFeatures } from '@loaders.gl/schema';
2
+ /**
3
+ * Return the index of feature (numericProps or featureIds) for given feature id
4
+ * Example: findIndexBinary(data, 'id', 33) will return the index in the array of numericProps
5
+ * of the feature 33.
6
+ * @param {Object} data - The data in binary format
7
+ * @param {String} uniqueIdProperty - Name of the unique id property
8
+ * @param {Number|String} featureId - feature id to find
9
+ * @param {String} layerName - the layer to search in
10
+ */
11
+ export default function findIndexBinary(data: BinaryFeatures, uniqueIdProperty: string, featureId: string | number, layerName: string): number;
12
+ //# sourceMappingURL=find-index-binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-index-binary.d.ts","sourceRoot":"","sources":["../../src/mvt-layer/find-index-binary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,oBAAoB,CAAC;AAK5B;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,IAAI,EAAE,cAAc,EACpB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,SAAS,EAAE,MAAM,GAChB,MAAM,CASR"}
@@ -0,0 +1,96 @@
1
+ const GEOM_TYPES = ['points', 'lines', 'polygons'];
2
+ /**
3
+ * Return the index of feature (numericProps or featureIds) for given feature id
4
+ * Example: findIndexBinary(data, 'id', 33) will return the index in the array of numericProps
5
+ * of the feature 33.
6
+ * @param {Object} data - The data in binary format
7
+ * @param {String} uniqueIdProperty - Name of the unique id property
8
+ * @param {Number|String} featureId - feature id to find
9
+ * @param {String} layerName - the layer to search in
10
+ */
11
+ export default function findIndexBinary(data, uniqueIdProperty, featureId, layerName) {
12
+ for (const gt of GEOM_TYPES) {
13
+ const index = data[gt] && findIndexByType(data[gt], uniqueIdProperty, featureId, layerName);
14
+ if (index >= 0) {
15
+ return index;
16
+ }
17
+ }
18
+ return -1;
19
+ }
20
+ function findIndexByType(geomData, uniqueIdProperty, featureId, layerName) {
21
+ const featureIds = geomData.featureIds.value;
22
+ if (!featureIds.length) {
23
+ return -1;
24
+ }
25
+ let startFeatureIndex = 0;
26
+ let endFeatureIndex = featureIds[featureIds.length - 1] + 1;
27
+ if (layerName) {
28
+ const layerRange = getLayerRange(geomData, layerName);
29
+ if (layerRange) {
30
+ startFeatureIndex = layerRange[0];
31
+ endFeatureIndex = layerRange[1] + 1;
32
+ }
33
+ else {
34
+ return -1;
35
+ }
36
+ }
37
+ // Look for the uniqueIdProperty
38
+ let featureIndex = -1;
39
+ if (uniqueIdProperty in geomData.numericProps) {
40
+ const vertexIndex = geomData.numericProps[uniqueIdProperty].value.findIndex((x, i) => x === featureId && featureIds[i] >= startFeatureIndex && featureIds[i] < endFeatureIndex);
41
+ return vertexIndex >= 0 ? geomData.globalFeatureIds.value[vertexIndex] : -1;
42
+ }
43
+ else if (uniqueIdProperty) {
44
+ featureIndex = findIndex(geomData.properties, elem => elem[uniqueIdProperty] === featureId, startFeatureIndex, endFeatureIndex);
45
+ }
46
+ else if (geomData.fields) {
47
+ featureIndex = findIndex(geomData.fields, (elem) => elem.id === featureId, startFeatureIndex, endFeatureIndex);
48
+ }
49
+ return featureIndex >= 0 ? getGlobalFeatureId(geomData, featureIndex) : -1;
50
+ }
51
+ // Returns [firstFeatureIndex, lastFeatureIndex]
52
+ // MVTLoader parses tiles layer-by-layer, so each layer is a continuous range
53
+ function getLayerRange(geomData, layerName) {
54
+ if (!geomData.__layers) {
55
+ // Cache a map from properties.layerName to index ranges
56
+ const layerNames = {};
57
+ const { properties } = geomData;
58
+ for (let i = 0; i < properties.length; i++) {
59
+ const { layerName: key } = properties[i];
60
+ if (!key) {
61
+ // ignore
62
+ }
63
+ else if (layerNames[key]) {
64
+ layerNames[key][1] = i;
65
+ }
66
+ else {
67
+ layerNames[key] = [i, i];
68
+ }
69
+ }
70
+ geomData.__layers = layerNames;
71
+ }
72
+ return geomData.__layers[layerName];
73
+ }
74
+ // Returns global feature id
75
+ function getGlobalFeatureId(geomData, featureIndex) {
76
+ if (!geomData.__ids) {
77
+ // Cache a map from featureId to globalFeatureId
78
+ const result = [];
79
+ const featureIds = geomData.featureIds.value;
80
+ const globalFeatureIds = geomData.globalFeatureIds.value;
81
+ for (let i = 0; i < featureIds.length; i++) {
82
+ result[featureIds[i]] = globalFeatureIds[i];
83
+ }
84
+ geomData.__ids = result;
85
+ }
86
+ return geomData.__ids[featureIndex];
87
+ }
88
+ // Like array.findIndex, but only search within a range
89
+ function findIndex(array, predicate, startIndex, endIndex) {
90
+ for (let i = startIndex; i < endIndex; i++) {
91
+ if (predicate(array[i], i)) {
92
+ return i;
93
+ }
94
+ }
95
+ return -1;
96
+ }
@@ -0,0 +1,70 @@
1
+ import { Layer, LayersList, PickingInfo, UpdateParameters, GetPickingInfoParams, DefaultProps } from '@deck.gl/core/typed';
2
+ import { GeoJsonLayerProps } from '@deck.gl/layers/typed';
3
+ import type { Loader } from '@loaders.gl/loader-utils';
4
+ import type { BinaryFeatures } from '@loaders.gl/schema';
5
+ import type { Feature } from 'geojson';
6
+ import TileLayer, { TiledPickingInfo, TileLayerProps } from '../tile-layer/tile-layer';
7
+ import { Tileset2DProps } from '../tile-layer/tileset-2d';
8
+ import { TileLoadProps } from '../tile-layer/types';
9
+ import Tile2DHeader from '../tile-layer/tile-2d-header';
10
+ export declare type TileJson = {
11
+ tilejson: string;
12
+ tiles: string[];
13
+ vector_layers: any[];
14
+ attribution?: string;
15
+ scheme?: string;
16
+ maxzoom?: number;
17
+ minzoom?: number;
18
+ version?: string;
19
+ };
20
+ declare type ParsedMvtTile = Feature[] | BinaryFeatures;
21
+ /** All props supported by the MVTLayer */
22
+ export declare type MVTLayerProps<DataT extends Feature = Feature> = _MVTLayerProps & GeoJsonLayerProps<DataT> & TileLayerProps<ParsedMvtTile>;
23
+ /** Props added by the MVTLayer */
24
+ export declare type _MVTLayerProps = {
25
+ /** Called if `data` is a TileJSON URL when it is successfully fetched. */
26
+ onDataLoad?: ((tilejson: TileJson | null) => void) | null;
27
+ /** Needed for highlighting a feature split across two or more tiles. */
28
+ uniqueIdProperty?: string;
29
+ /** A feature with ID corresponding to the supplied value will be highlighted. */
30
+ highlightedFeatureId?: string | null;
31
+ /**
32
+ * Use tile data in binary format.
33
+ *
34
+ * @default true
35
+ */
36
+ binary?: boolean;
37
+ /**
38
+ * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.
39
+ *
40
+ * @default [MVTWorkerLoader] from `@loaders.gl/mvt`
41
+ */
42
+ loaders?: Loader[];
43
+ };
44
+ export default class MVTLayer<DataT extends Feature = Feature, ExtraProps = {}> extends TileLayer<ParsedMvtTile, Required<_MVTLayerProps> & ExtraProps> {
45
+ static layerName: string;
46
+ static defaultProps: DefaultProps<MVTLayerProps<Feature<import("geojson").Geometry, import("geojson").GeoJsonProperties>>>;
47
+ initializeState(): void;
48
+ get isLoaded(): boolean;
49
+ updateState({ props, oldProps, context, changeFlags }: UpdateParameters<this>): void;
50
+ private _updateTileData;
51
+ _getTilesetOptions(): Tileset2DProps;
52
+ renderLayers(): Layer | null | LayersList;
53
+ getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile>;
54
+ renderSubLayers(props: TileLayer['props'] & {
55
+ id: string;
56
+ data: ParsedMvtTile;
57
+ _offset: number;
58
+ tile: Tile2DHeader<ParsedMvtTile>;
59
+ }): Layer | null | LayersList;
60
+ protected _updateAutoHighlight(info: PickingInfo): void;
61
+ getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo;
62
+ getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any>;
63
+ private getHighlightedObjectIndex;
64
+ private _pickObjects;
65
+ /** Get the rendered features in the current viewport. */
66
+ getRenderedFeatures(maxFeatures?: number | null): DataT[];
67
+ private _setWGS84PropertyForTiles;
68
+ }
69
+ export {};
70
+ //# sourceMappingURL=mvt-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mvt-layer.d.ts","sourceRoot":"","sources":["../../src/mvt-layer/mvt-layer.ts"],"names":[],"mappings":"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"}