@mapwhit/tilerenderer 0.52.1 → 1.1.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 (249) hide show
  1. package/README.md +7 -0
  2. package/build/min/package.json +2 -1
  3. package/build/min/src/shaders/_prelude.fragment.glsl.js +2 -2
  4. package/build/min/src/shaders/_prelude.vertex.glsl.js +2 -2
  5. package/build/min/src/shaders/background.fragment.glsl.js +2 -2
  6. package/build/min/src/shaders/background.vertex.glsl.js +1 -1
  7. package/build/min/src/shaders/background_pattern.fragment.glsl.js +2 -2
  8. package/build/min/src/shaders/background_pattern.vertex.glsl.js +1 -1
  9. package/build/min/src/shaders/circle.fragment.glsl.js +2 -2
  10. package/build/min/src/shaders/circle.vertex.glsl.js +2 -2
  11. package/build/min/src/shaders/clipping_mask.fragment.glsl.js +1 -1
  12. package/build/min/src/shaders/clipping_mask.vertex.glsl.js +1 -1
  13. package/build/min/src/shaders/collision_box.fragment.glsl.js +1 -1
  14. package/build/min/src/shaders/collision_box.vertex.glsl.js +1 -1
  15. package/build/min/src/shaders/collision_circle.fragment.glsl.js +1 -1
  16. package/build/min/src/shaders/collision_circle.vertex.glsl.js +1 -1
  17. package/build/min/src/shaders/debug.fragment.glsl.js +1 -1
  18. package/build/min/src/shaders/debug.vertex.glsl.js +1 -1
  19. package/build/min/src/shaders/fill.fragment.glsl.js +2 -2
  20. package/build/min/src/shaders/fill.vertex.glsl.js +2 -2
  21. package/build/min/src/shaders/fill_extrusion.fragment.glsl.js +2 -2
  22. package/build/min/src/shaders/fill_extrusion.vertex.glsl.js +2 -2
  23. package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js +2 -2
  24. package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js +2 -2
  25. package/build/min/src/shaders/fill_outline.fragment.glsl.js +2 -2
  26. package/build/min/src/shaders/fill_outline.vertex.glsl.js +2 -2
  27. package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.js +2 -2
  28. package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.js +2 -2
  29. package/build/min/src/shaders/fill_pattern.fragment.glsl.js +2 -2
  30. package/build/min/src/shaders/fill_pattern.vertex.glsl.js +2 -2
  31. package/build/min/src/shaders/heatmap.fragment.glsl.js +2 -2
  32. package/build/min/src/shaders/heatmap.vertex.glsl.js +2 -2
  33. package/build/min/src/shaders/heatmap_texture.fragment.glsl.js +2 -2
  34. package/build/min/src/shaders/heatmap_texture.vertex.glsl.js +1 -1
  35. package/build/min/src/shaders/hillshade.fragment.glsl.js +2 -2
  36. package/build/min/src/shaders/hillshade.vertex.glsl.js +1 -1
  37. package/build/min/src/shaders/hillshade_prepare.fragment.glsl.js +2 -2
  38. package/build/min/src/shaders/hillshade_prepare.vertex.glsl.js +1 -1
  39. package/build/min/src/shaders/line.fragment.glsl.js +2 -2
  40. package/build/min/src/shaders/line.vertex.glsl.js +2 -2
  41. package/build/min/src/shaders/line_gradient.fragment.glsl.js +2 -2
  42. package/build/min/src/shaders/line_gradient.vertex.glsl.js +2 -2
  43. package/build/min/src/shaders/line_pattern.fragment.glsl.js +2 -2
  44. package/build/min/src/shaders/line_pattern.vertex.glsl.js +2 -2
  45. package/build/min/src/shaders/line_sdf.fragment.glsl.js +2 -2
  46. package/build/min/src/shaders/line_sdf.vertex.glsl.js +2 -2
  47. package/build/min/src/shaders/raster.fragment.glsl.js +2 -2
  48. package/build/min/src/shaders/raster.vertex.glsl.js +1 -1
  49. package/build/min/src/shaders/symbol_icon.fragment.glsl.js +2 -2
  50. package/build/min/src/shaders/symbol_icon.vertex.glsl.js +2 -2
  51. package/build/min/src/shaders/symbol_sdf.fragment.glsl.js +2 -2
  52. package/build/min/src/shaders/symbol_sdf.vertex.glsl.js +2 -2
  53. package/package.json +5 -4
  54. package/src/data/array_types.js +55 -117
  55. package/src/data/bucket/circle_attributes.js +2 -4
  56. package/src/data/bucket/circle_bucket.js +19 -16
  57. package/src/data/bucket/fill_attributes.js +2 -4
  58. package/src/data/bucket/fill_bucket.js +38 -27
  59. package/src/data/bucket/fill_extrusion_attributes.js +2 -4
  60. package/src/data/bucket/fill_extrusion_bucket.js +56 -37
  61. package/src/data/bucket/heatmap_bucket.js +2 -11
  62. package/src/data/bucket/line_attributes.js +2 -4
  63. package/src/data/bucket/line_bucket.js +208 -163
  64. package/src/data/bucket/pattern_attributes.js +2 -4
  65. package/src/data/bucket/pattern_bucket_features.js +7 -9
  66. package/src/data/bucket/symbol_attributes.js +12 -26
  67. package/src/data/bucket/symbol_bucket.js +174 -323
  68. package/src/data/bucket/symbol_buffers.js +62 -0
  69. package/src/data/bucket/symbol_collision_buffers.js +33 -0
  70. package/src/data/bucket.js +26 -25
  71. package/src/data/dem_data.js +11 -10
  72. package/src/data/extent.js +1 -1
  73. package/src/data/feature_index.js +38 -28
  74. package/src/data/index_array_type.js +1 -6
  75. package/src/data/load_geometry.js +6 -9
  76. package/src/data/pos_attributes.js +2 -3
  77. package/src/data/program_configuration.js +47 -38
  78. package/src/data/raster_bounds_attributes.js +2 -2
  79. package/src/data/segment.js +4 -7
  80. package/src/geo/coordinate.js +1 -1
  81. package/src/geo/lng_lat.js +3 -3
  82. package/src/geo/lng_lat_bounds.js +8 -4
  83. package/src/geo/transform.js +69 -30
  84. package/src/gl/color_mode.js +2 -2
  85. package/src/gl/context.js +28 -29
  86. package/src/gl/cull_face_mode.js +1 -1
  87. package/src/gl/depth_mode.js +1 -1
  88. package/src/gl/framebuffer.js +8 -4
  89. package/src/gl/index_buffer.js +2 -2
  90. package/src/gl/stencil_mode.js +1 -1
  91. package/src/gl/value.js +33 -68
  92. package/src/gl/vertex_buffer.js +2 -2
  93. package/src/index.js +49 -25
  94. package/src/render/draw_background.js +17 -12
  95. package/src/render/draw_circle.js +15 -12
  96. package/src/render/draw_collision_debug.js +11 -8
  97. package/src/render/draw_debug.js +16 -14
  98. package/src/render/draw_fill.js +27 -20
  99. package/src/render/draw_fill_extrusion.js +20 -17
  100. package/src/render/draw_heatmap.js +21 -16
  101. package/src/render/draw_hillshade.js +12 -9
  102. package/src/render/draw_line.js +36 -22
  103. package/src/render/draw_raster.js +22 -18
  104. package/src/render/draw_symbol.js +38 -33
  105. package/src/render/glyph_atlas.js +9 -8
  106. package/src/render/glyph_manager.js +2 -3
  107. package/src/render/image_atlas.js +4 -11
  108. package/src/render/image_manager.js +39 -28
  109. package/src/render/line_atlas.js +2 -2
  110. package/src/render/painter.js +78 -61
  111. package/src/render/program/background_program.js +6 -13
  112. package/src/render/program/circle_program.js +8 -10
  113. package/src/render/program/clipping_mask_program.js +3 -5
  114. package/src/render/program/collision_program.js +4 -6
  115. package/src/render/program/debug_program.js +3 -5
  116. package/src/render/program/fill_extrusion_program.js +9 -15
  117. package/src/render/program/fill_program.js +10 -21
  118. package/src/render/program/heatmap_program.js +9 -15
  119. package/src/render/program/hillshade_program.js +16 -22
  120. package/src/render/program/line_program.js +14 -25
  121. package/src/render/program/pattern.js +5 -7
  122. package/src/render/program/program_uniforms.js +13 -20
  123. package/src/render/program/raster_program.js +9 -11
  124. package/src/render/program/symbol_program.js +5 -7
  125. package/src/render/program.js +5 -6
  126. package/src/render/texture.js +1 -1
  127. package/src/render/tile_mask.js +6 -4
  128. package/src/render/uniform_binding.js +9 -20
  129. package/src/render/vertex_array_object.js +5 -3
  130. package/src/shaders/encode_attribute.js +2 -6
  131. package/src/shaders/index.js +103 -51
  132. package/src/source/geojson_source.js +25 -30
  133. package/src/source/geojson_worker_source.js +46 -74
  134. package/src/source/geojson_wrapper.js +13 -5
  135. package/src/source/image_source.js +17 -28
  136. package/src/source/load_tilejson.js +3 -3
  137. package/src/source/pixels_to_tile_units.js +3 -3
  138. package/src/source/query_features.js +17 -15
  139. package/src/source/raster_dem_tile_source.js +54 -71
  140. package/src/source/raster_tile_source.js +14 -15
  141. package/src/source/resources/glyphs.js +4 -5
  142. package/src/source/resources/index.js +4 -12
  143. package/src/source/rtl_text_plugin.js +62 -35
  144. package/src/source/source.js +14 -22
  145. package/src/source/source_cache.js +221 -179
  146. package/src/source/source_state.js +125 -13
  147. package/src/source/tile.js +67 -66
  148. package/src/source/tile_bounds.js +36 -29
  149. package/src/source/tile_cache.js +2 -2
  150. package/src/source/tile_id.js +30 -26
  151. package/src/source/vector_tile_source.js +23 -21
  152. package/src/source/vector_tile_worker_source.js +22 -26
  153. package/src/source/worker_tile.js +139 -134
  154. package/src/style/create_style_layer.js +11 -11
  155. package/src/style/evaluation_parameters.js +4 -6
  156. package/src/style/light.js +5 -5
  157. package/src/style/load_sprite.js +6 -6
  158. package/src/style/parse_glyph_pbf.js +21 -17
  159. package/src/style/pauseable_placement.js +7 -9
  160. package/src/style/properties.js +21 -51
  161. package/src/style/query_utils.js +7 -13
  162. package/src/style/style.js +314 -221
  163. package/src/style/style_layer/background_style_layer.js +3 -4
  164. package/src/style/style_layer/background_style_layer_properties.js +2 -2
  165. package/src/style/style_layer/circle_style_layer.js +25 -20
  166. package/src/style/style_layer/circle_style_layer_properties.js +2 -2
  167. package/src/style/style_layer/fill_extrusion_style_layer.js +55 -37
  168. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +2 -2
  169. package/src/style/style_layer/fill_style_layer.js +11 -12
  170. package/src/style/style_layer/fill_style_layer_properties.js +2 -2
  171. package/src/style/style_layer/heatmap_style_layer.js +6 -7
  172. package/src/style/style_layer/heatmap_style_layer_properties.js +2 -2
  173. package/src/style/style_layer/hillshade_style_layer.js +4 -5
  174. package/src/style/style_layer/hillshade_style_layer_properties.js +2 -2
  175. package/src/style/style_layer/line_style_layer.js +33 -30
  176. package/src/style/style_layer/line_style_layer_properties.js +5 -5
  177. package/src/style/style_layer/raster_style_layer.js +3 -4
  178. package/src/style/style_layer/raster_style_layer_properties.js +2 -2
  179. package/src/style/style_layer/symbol_style_layer.js +20 -21
  180. package/src/style/style_layer/symbol_style_layer_properties.js +2 -2
  181. package/src/style/style_layer.js +66 -47
  182. package/src/style/style_layer_index.js +17 -42
  183. package/src/style/zoom_history.js +1 -1
  184. package/src/style-spec/error/parsing_error.js +1 -1
  185. package/src/style-spec/error/validation_error.js +5 -3
  186. package/src/style-spec/feature_filter/convert.js +17 -9
  187. package/src/style-spec/feature_filter/index.js +13 -9
  188. package/src/style-spec/util/eval_support.js +2 -2
  189. package/src/style-spec/util/ref_properties.js +1 -1
  190. package/src/symbol/anchor.js +2 -6
  191. package/src/symbol/check_max_angle.js +13 -5
  192. package/src/symbol/clip_line.js +2 -3
  193. package/src/symbol/collision_feature.js +8 -4
  194. package/src/symbol/collision_index.js +5 -7
  195. package/src/symbol/cross_tile_symbol_index.js +7 -10
  196. package/src/symbol/get_anchors.js +15 -8
  197. package/src/symbol/grid_index.js +5 -3
  198. package/src/symbol/mergelines.js +2 -2
  199. package/src/symbol/opacity_state.js +1 -5
  200. package/src/symbol/placement.js +28 -23
  201. package/src/symbol/projection.js +29 -28
  202. package/src/symbol/quads.js +14 -16
  203. package/src/symbol/shaping.js +27 -19
  204. package/src/symbol/symbol_layout.js +24 -28
  205. package/src/symbol/symbol_size.js +13 -12
  206. package/src/symbol/transform_text.js +4 -4
  207. package/src/ui/camera.js +34 -18
  208. package/src/ui/map.js +102 -44
  209. package/src/util/async.js +11 -5
  210. package/src/util/browser.js +1 -1
  211. package/src/util/callback.js +3 -9
  212. package/src/util/classify_rings.js +13 -8
  213. package/src/util/color_ramp.js +3 -3
  214. package/src/util/config.js +4 -4
  215. package/src/util/dictionary_coder.js +2 -3
  216. package/src/util/dom.js +7 -3
  217. package/src/util/find_pole_of_inaccessibility.js +29 -14
  218. package/src/util/group_layers.js +41 -0
  219. package/src/util/image.js +3 -13
  220. package/src/util/interpolate.js +1 -1
  221. package/src/util/intersection_tests.js +80 -42
  222. package/src/util/is_char_in_unicode_block.js +1 -1
  223. package/src/util/key.js +25 -0
  224. package/src/util/loader/image.js +1 -1
  225. package/src/util/object.js +33 -76
  226. package/src/util/script_detection.js +212 -91
  227. package/src/util/struct_array.js +8 -40
  228. package/src/util/task_queue.js +11 -7
  229. package/src/util/throttle.js +2 -2
  230. package/src/util/tile_cover.js +8 -5
  231. package/src/util/token.js +1 -1
  232. package/src/util/unique_id.js +2 -2
  233. package/src/util/util.js +21 -29
  234. package/src/util/vectortile_to_geojson.js +4 -2
  235. package/src/util/verticalize_punctuation.js +3 -7
  236. package/src/util/warn.js +4 -4
  237. package/src/util/web_worker.js +3 -3
  238. package/src/worker.js +1 -4
  239. package/src/source/resources/images.js +0 -68
  240. package/src/source/worker.js +0 -110
  241. package/src/source/worker_source.js +0 -14
  242. package/src/style-spec/deref.js +0 -51
  243. package/src/style-spec/group_by_layout.js +0 -46
  244. package/src/util/actor.js +0 -108
  245. package/src/util/dispatcher.js +0 -65
  246. package/src/util/global_worker_pool.js +0 -15
  247. package/src/util/transfer_registry.js +0 -168
  248. package/src/util/web_worker_transfer.js +0 -43
  249. package/src/util/worker_pool.js +0 -41
@@ -1,6 +1,5 @@
1
- const StyleLayer = require('../style_layer');
2
-
3
- const properties = require('./background_style_layer_properties');
1
+ import StyleLayer from '../style_layer.js';
2
+ import properties from './background_style_layer_properties.js';
4
3
 
5
4
  class BackgroundStyleLayer extends StyleLayer {
6
5
  constructor(layer) {
@@ -8,4 +7,4 @@ class BackgroundStyleLayer extends StyleLayer {
8
7
  }
9
8
  }
10
9
 
11
- module.exports = BackgroundStyleLayer;
10
+ export default BackgroundStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, CrossFadedProperty, DataConstantProperty } = require('../properties');
3
+ import { CrossFadedProperty, DataConstantProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'background-color': new DataConstantProperty({
@@ -22,4 +22,4 @@ const paint = new Properties({
22
22
  })
23
23
  });
24
24
 
25
- module.exports = { paint };
25
+ export default { paint };
@@ -1,11 +1,12 @@
1
- const StyleLayer = require('../style_layer');
1
+ import glMatrix from '@mapbox/gl-matrix';
2
+ import Point from '@mapbox/point-geometry';
3
+ import CircleBucket from '../../data/bucket/circle_bucket.js';
4
+ import { polygonIntersectsBufferedPoint } from '../../util/intersection_tests.js';
5
+ import { getMaximumPaintValue, translate, translateDistance } from '../query_utils.js';
6
+ import StyleLayer from '../style_layer.js';
7
+ import properties from './circle_style_layer_properties.js';
2
8
 
3
- const CircleBucket = require('../../data/bucket/circle_bucket');
4
- const { polygonIntersectsBufferedPoint } = require('../../util/intersection_tests');
5
- const { getMaximumPaintValue, translateDistance, translate } = require('../query_utils');
6
- const properties = require('./circle_style_layer_properties');
7
- const { vec4 } = require('@mapbox/gl-matrix');
8
- const { default: Point } = require('@mapbox/point-geometry');
9
+ const { vec4 } = glMatrix;
9
10
 
10
11
  class CircleStyleLayer extends StyleLayer {
11
12
  constructor(layer) {
@@ -21,7 +22,7 @@ class CircleStyleLayer extends StyleLayer {
21
22
  return (
22
23
  getMaximumPaintValue('circle-radius', this, circleBucket) +
23
24
  getMaximumPaintValue('circle-stroke-width', this, circleBucket) +
24
- translateDistance(this.paint.get('circle-translate'))
25
+ translateDistance(this._paint.get('circle-translate'))
25
26
  );
26
27
  }
27
28
 
@@ -37,24 +38,29 @@ class CircleStyleLayer extends StyleLayer {
37
38
  ) {
38
39
  const translatedPolygon = translate(
39
40
  queryGeometry,
40
- this.paint.get('circle-translate'),
41
- this.paint.get('circle-translate-anchor'),
41
+ this._paint.get('circle-translate'),
42
+ this._paint.get('circle-translate-anchor'),
42
43
  transform.angle,
43
44
  pixelsToTileUnits
44
45
  );
45
- const radius = this.paint.get('circle-radius').evaluate(feature, featureState);
46
- const stroke = this.paint.get('circle-stroke-width').evaluate(feature, featureState);
46
+ const radius = this._paint.get('circle-radius').evaluate(feature, featureState);
47
+ const stroke = this._paint.get('circle-stroke-width').evaluate(feature, featureState);
47
48
  const size = radius + stroke;
48
49
 
49
50
  // For pitch-alignment: map, compare feature geometry to query geometry in the plane of the tile
50
51
  // // Otherwise, compare geometry in the plane of the viewport
51
52
  // // A circle with fixed scaling relative to the viewport gets larger in tile space as it moves into the distance
52
53
  // // A circle with fixed scaling relative to the map gets smaller in viewport space as it moves into the distance
53
- const alignWithMap = this.paint.get('circle-pitch-alignment') === 'map';
54
+ const pitchScale = this._paint.get('circle-pitch-scale');
55
+ const pitchAlignment = this._paint.get('circle-pitch-alignment');
56
+ const alignWithMap = pitchAlignment === 'map';
57
+ const alignWithViewport = pitchAlignment === 'viewport';
54
58
  const transformedPolygon = alignWithMap
55
59
  ? translatedPolygon
56
60
  : projectQueryGeometry(translatedPolygon, pixelPosMatrix);
57
61
  const transformedSize = alignWithMap ? size * pixelsToTileUnits : size;
62
+ const adjustViewportToMap = pitchScale === 'viewport' && alignWithMap;
63
+ const adjustMapToViewport = pitchScale === 'map' && alignWithViewport;
58
64
 
59
65
  for (const ring of geometry) {
60
66
  for (const point of ring) {
@@ -62,16 +68,15 @@ class CircleStyleLayer extends StyleLayer {
62
68
 
63
69
  let adjustedSize = transformedSize;
64
70
  const projectedCenter = vec4.transformMat4([], [point.x, point.y, 0, 1], pixelPosMatrix);
65
- if (this.paint.get('circle-pitch-scale') === 'viewport' && this.paint.get('circle-pitch-alignment') === 'map') {
71
+ if (adjustViewportToMap) {
66
72
  adjustedSize *= projectedCenter[3] / transform.cameraToCenterDistance;
67
- } else if (
68
- this.paint.get('circle-pitch-scale') === 'map' &&
69
- this.paint.get('circle-pitch-alignment') === 'viewport'
70
- ) {
73
+ } else if (adjustMapToViewport) {
71
74
  adjustedSize *= transform.cameraToCenterDistance / projectedCenter[3];
72
75
  }
73
76
 
74
- if (polygonIntersectsBufferedPoint(transformedPolygon, transformedPoint, adjustedSize)) return true;
77
+ if (polygonIntersectsBufferedPoint(transformedPolygon, transformedPoint, adjustedSize)) {
78
+ return true;
79
+ }
75
80
  }
76
81
  }
77
82
 
@@ -90,4 +95,4 @@ function projectQueryGeometry(queryGeometry, pixelPosMatrix) {
90
95
  });
91
96
  }
92
97
 
93
- module.exports = CircleStyleLayer;
98
+ export default CircleStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, DataConstantProperty, DataDrivenProperty } = require('../properties');
3
+ import { DataConstantProperty, DataDrivenProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'circle-radius': new DataDrivenProperty({
@@ -73,4 +73,4 @@ const paint = new Properties({
73
73
  })
74
74
  });
75
75
 
76
- module.exports = { paint };
76
+ export default { paint };
@@ -1,13 +1,14 @@
1
- const StyleLayer = require('../style_layer');
1
+ import glMatrix from '@mapbox/gl-matrix';
2
+ import Point from '@mapbox/point-geometry';
3
+ import FillExtrusionBucket from '../../data/bucket/fill_extrusion_bucket.js';
4
+ import { polygonIntersectsMultiPolygon, polygonIntersectsPolygon } from '../../util/intersection_tests.js';
5
+ import { translate, translateDistance } from '../query_utils.js';
6
+ import StyleLayer from '../style_layer.js';
7
+ import properties from './fill_extrusion_style_layer_properties.js';
2
8
 
3
- const FillExtrusionBucket = require('../../data/bucket/fill_extrusion_bucket');
4
- const { polygonIntersectsPolygon, polygonIntersectsMultiPolygon } = require('../../util/intersection_tests');
5
- const { translateDistance, translate } = require('../query_utils');
6
- const properties = require('./fill_extrusion_style_layer_properties');
7
- const { vec4 } = require('@mapbox/gl-matrix');
8
- const { default: Point } = require('@mapbox/point-geometry');
9
+ const { vec4 } = glMatrix;
9
10
 
10
- class FillExtrusionStyleLayer extends StyleLayer {
11
+ export class FillExtrusionStyleLayer extends StyleLayer {
11
12
  constructor(layer) {
12
13
  super(layer, properties);
13
14
  }
@@ -17,7 +18,7 @@ class FillExtrusionStyleLayer extends StyleLayer {
17
18
  }
18
19
 
19
20
  queryRadius() {
20
- return translateDistance(this.paint.get('fill-extrusion-translate'));
21
+ return translateDistance(this._paint.get('fill-extrusion-translate'));
21
22
  }
22
23
 
23
24
  is3D() {
@@ -36,13 +37,13 @@ class FillExtrusionStyleLayer extends StyleLayer {
36
37
  ) {
37
38
  const translatedPolygon = translate(
38
39
  queryGeometry,
39
- this.paint.get('fill-extrusion-translate'),
40
- this.paint.get('fill-extrusion-translate-anchor'),
40
+ this._paint.get('fill-extrusion-translate'),
41
+ this._paint.get('fill-extrusion-translate-anchor'),
41
42
  transform.angle,
42
43
  pixelsToTileUnits
43
44
  );
44
- const height = this.paint.get('fill-extrusion-height').evaluate(feature, featureState);
45
- const base = this.paint.get('fill-extrusion-base').evaluate(feature, featureState);
45
+ const height = this._paint.get('fill-extrusion-height').evaluate(feature, featureState);
46
+ const base = this._paint.get('fill-extrusion-base').evaluate(feature, featureState);
46
47
 
47
48
  const projectedQueryGeometry = projectQueryGeometry(translatedPolygon, pixelPosMatrix, transform, 0);
48
49
 
@@ -57,7 +58,7 @@ function dot(a, b) {
57
58
  return a.x * b.x + a.y * b.y;
58
59
  }
59
60
 
60
- function getIntersectionDistance(projectedQueryGeometry, projectedFace) {
61
+ export function getIntersectionDistance(projectedQueryGeometry, projectedFace) {
61
62
  if (projectedQueryGeometry.length === 1) {
62
63
  // For point queries calculate the z at which the point intersects the face
63
64
  // using barycentric coordinates.
@@ -66,27 +67,46 @@ function getIntersectionDistance(projectedQueryGeometry, projectedFace) {
66
67
  // triangle of the face, using only the xy plane. It doesn't matter if the
67
68
  // point is outside the first triangle because all the triangles in the face
68
69
  // are in the same plane.
69
- const a = projectedFace[0];
70
- const b = projectedFace[1];
71
- const c = projectedFace[3];
72
- const p = projectedQueryGeometry[0];
73
-
74
- const ab = b.sub(a);
75
- const ac = c.sub(a);
76
- const ap = p.sub(a);
77
-
78
- const dotABAB = dot(ab, ab);
79
- const dotABAC = dot(ab, ac);
80
- const dotACAC = dot(ac, ac);
81
- const dotAPAB = dot(ap, ab);
82
- const dotAPAC = dot(ap, ac);
83
- const denom = dotABAB * dotACAC - dotABAC * dotABAC;
84
- const v = (dotACAC * dotAPAB - dotABAC * dotAPAC) / denom;
85
- const w = (dotABAB * dotAPAC - dotABAC * dotAPAB) / denom;
86
- const u = 1 - v - w;
87
-
88
- // Use the barycentric weighting along with the original triangle z coordinates to get the point of intersection.
89
- return a.z * u + b.z * v + c.z * w;
70
+ //
71
+ // Check whether points are coincident and use other points if they are.
72
+ let i = 0;
73
+ const a = projectedFace[i++];
74
+ let b;
75
+ while (!b || a.equals(b)) {
76
+ b = projectedFace[i++];
77
+ if (!b) {
78
+ return Number.POSITIVE_INFINITY;
79
+ }
80
+ }
81
+
82
+ // Loop until point `c` is not colinear with points `a` and `b`.
83
+ for (; i < projectedFace.length; i++) {
84
+ const c = projectedFace[i];
85
+ const p = projectedQueryGeometry[0];
86
+
87
+ const ab = b.sub(a);
88
+ const ac = c.sub(a);
89
+ const ap = p.sub(a);
90
+
91
+ const dotABAB = dot(ab, ab);
92
+ const dotABAC = dot(ab, ac);
93
+ const dotACAC = dot(ac, ac);
94
+ const dotAPAB = dot(ap, ab);
95
+ const dotAPAC = dot(ap, ac);
96
+ const denom = dotABAB * dotACAC - dotABAC * dotABAC;
97
+
98
+ const v = (dotACAC * dotAPAB - dotABAC * dotAPAC) / denom;
99
+ const w = (dotABAB * dotAPAC - dotABAC * dotAPAB) / denom;
100
+ const u = 1 - v - w;
101
+
102
+ // Use the barycentric weighting along with the original triangle z coordinates to get the point of intersection.
103
+ const distance = a.z * u + b.z * v + c.z * w;
104
+
105
+ if (Number.isFinite(distance)) {
106
+ return distance;
107
+ }
108
+ }
109
+ return Number.POSITIVE_INFINITY;
90
110
  }
91
111
  // The counts as closest is less clear when the query is a box. This
92
112
  // returns the distance to the nearest point on the face, whether it is
@@ -190,5 +210,3 @@ function projectQueryGeometry(queryGeometry, pixelPosMatrix, transform, z) {
190
210
  }
191
211
  return projectedQueryGeometry;
192
212
  }
193
-
194
- module.exports = FillExtrusionStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, CrossFadedDataDrivenProperty, DataConstantProperty, DataDrivenProperty } = require('../properties');
3
+ import { CrossFadedDataDrivenProperty, DataConstantProperty, DataDrivenProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'fill-extrusion-opacity': new DataConstantProperty({
@@ -53,4 +53,4 @@ const paint = new Properties({
53
53
  })
54
54
  });
55
55
 
56
- module.exports = { paint };
56
+ export default { paint };
@@ -1,9 +1,8 @@
1
- const StyleLayer = require('../style_layer');
2
-
3
- const FillBucket = require('../../data/bucket/fill_bucket');
4
- const { polygonIntersectsMultiPolygon } = require('../../util/intersection_tests');
5
- const { translateDistance, translate } = require('../query_utils');
6
- const properties = require('./fill_style_layer_properties');
1
+ import FillBucket from '../../data/bucket/fill_bucket.js';
2
+ import { polygonIntersectsMultiPolygon } from '../../util/intersection_tests.js';
3
+ import { translate, translateDistance } from '../query_utils.js';
4
+ import StyleLayer from '../style_layer.js';
5
+ import properties from './fill_style_layer_properties.js';
7
6
 
8
7
  class FillStyleLayer extends StyleLayer {
9
8
  constructor(layer) {
@@ -13,9 +12,9 @@ class FillStyleLayer extends StyleLayer {
13
12
  recalculate(parameters) {
14
13
  super.recalculate(parameters);
15
14
 
16
- const outlineColor = this.paint._values['fill-outline-color'];
15
+ const outlineColor = this._paint._values['fill-outline-color'];
17
16
  if (outlineColor.value.kind === 'constant' && outlineColor.value.value === undefined) {
18
- this.paint._values['fill-outline-color'] = this.paint._values['fill-color'];
17
+ this._paint._values['fill-outline-color'] = this._paint._values['fill-color'];
19
18
  }
20
19
  }
21
20
 
@@ -24,14 +23,14 @@ class FillStyleLayer extends StyleLayer {
24
23
  }
25
24
 
26
25
  queryRadius() {
27
- return translateDistance(this.paint.get('fill-translate'));
26
+ return translateDistance(this._paint.get('fill-translate'));
28
27
  }
29
28
 
30
29
  queryIntersectsFeature(queryGeometry, feature, featureState, geometry, zoom, transform, pixelsToTileUnits) {
31
30
  const translatedPolygon = translate(
32
31
  queryGeometry,
33
- this.paint.get('fill-translate'),
34
- this.paint.get('fill-translate-anchor'),
32
+ this._paint.get('fill-translate'),
33
+ this._paint.get('fill-translate-anchor'),
35
34
  transform.angle,
36
35
  pixelsToTileUnits
37
36
  );
@@ -43,4 +42,4 @@ class FillStyleLayer extends StyleLayer {
43
42
  }
44
43
  }
45
44
 
46
- module.exports = FillStyleLayer;
45
+ export default FillStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, CrossFadedDataDrivenProperty, DataConstantProperty, DataDrivenProperty } = require('../properties');
3
+ import { CrossFadedDataDrivenProperty, DataConstantProperty, DataDrivenProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'fill-antialias': new DataConstantProperty({ type: 'boolean', default: true, expression: { parameters: ['zoom'] } }),
@@ -42,4 +42,4 @@ const paint = new Properties({
42
42
  })
43
43
  });
44
44
 
45
- module.exports = { paint };
45
+ export default { paint };
@@ -1,8 +1,7 @@
1
- const StyleLayer = require('../style_layer');
2
-
3
- const HeatmapBucket = require('../../data/bucket/heatmap_bucket');
4
- const properties = require('./heatmap_style_layer_properties');
5
- const renderColorRamp = require('../../util/color_ramp');
1
+ import HeatmapBucket from '../../data/bucket/heatmap_bucket.js';
2
+ import renderColorRamp from '../../util/color_ramp.js';
3
+ import StyleLayer from '../style_layer.js';
4
+ import properties from './heatmap_style_layer_properties.js';
6
5
 
7
6
  class HeatmapStyleLayer extends StyleLayer {
8
7
  createBucket(options) {
@@ -44,8 +43,8 @@ class HeatmapStyleLayer extends StyleLayer {
44
43
  }
45
44
 
46
45
  hasOffscreenPass() {
47
- return this.paint.get('heatmap-opacity') !== 0 && this.visibility !== 'none';
46
+ return this._paint.get('heatmap-opacity') !== 0 && this.visibility !== 'none';
48
47
  }
49
48
  }
50
49
 
51
- module.exports = HeatmapStyleLayer;
50
+ export default HeatmapStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, ColorRampProperty, DataConstantProperty, DataDrivenProperty } = require('../properties');
3
+ import { ColorRampProperty, DataConstantProperty, DataDrivenProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'heatmap-radius': new DataDrivenProperty({
@@ -49,4 +49,4 @@ const paint = new Properties({
49
49
  })
50
50
  });
51
51
 
52
- module.exports = { paint };
52
+ export default { paint };
@@ -1,6 +1,5 @@
1
- const StyleLayer = require('../style_layer');
2
-
3
- const properties = require('./hillshade_style_layer_properties');
1
+ import StyleLayer from '../style_layer.js';
2
+ import properties from './hillshade_style_layer_properties.js';
4
3
 
5
4
  class HillshadeStyleLayer extends StyleLayer {
6
5
  constructor(layer) {
@@ -8,8 +7,8 @@ class HillshadeStyleLayer extends StyleLayer {
8
7
  }
9
8
 
10
9
  hasOffscreenPass() {
11
- return this.paint.get('hillshade-exaggeration') !== 0 && this.visibility !== 'none';
10
+ return this._paint.get('hillshade-exaggeration') !== 0 && this.visibility !== 'none';
12
11
  }
13
12
  }
14
13
 
15
- module.exports = HillshadeStyleLayer;
14
+ export default HillshadeStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, DataConstantProperty } = require('../properties');
3
+ import { DataConstantProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'hillshade-illumination-direction': new DataConstantProperty({
@@ -40,4 +40,4 @@ const paint = new Properties({
40
40
  })
41
41
  });
42
42
 
43
- module.exports = { paint };
43
+ export default { paint };
@@ -1,13 +1,12 @@
1
- const { default: Point } = require('@mapbox/point-geometry');
2
-
3
- const StyleLayer = require('../style_layer');
4
- const LineBucket = require('../../data/bucket/line_bucket');
5
- const { polygonIntersectsBufferedMultiLine } = require('../../util/intersection_tests');
6
- const { getMaximumPaintValue, translateDistance, translate } = require('../query_utils');
7
- const properties = require('./line_style_layer_properties');
8
- const EvaluationParameters = require('../evaluation_parameters');
9
- const renderColorRamp = require('../../util/color_ramp');
10
- const { DataDrivenProperty } = require('../properties');
1
+ import Point from '@mapbox/point-geometry';
2
+ import LineBucket from '../../data/bucket/line_bucket.js';
3
+ import renderColorRamp from '../../util/color_ramp.js';
4
+ import { polygonIntersectsBufferedMultiLine } from '../../util/intersection_tests.js';
5
+ import EvaluationParameters from '../evaluation_parameters.js';
6
+ import { DataDrivenProperty } from '../properties.js';
7
+ import { getMaximumPaintValue, translate, translateDistance } from '../query_utils.js';
8
+ import StyleLayer from '../style_layer.js';
9
+ import properties from './line_style_layer_properties.js';
11
10
 
12
11
  class LineFloorwidthProperty extends DataDrivenProperty {
13
12
  possiblyEvaluate(value, parameters) {
@@ -49,7 +48,7 @@ class LineStyleLayer extends StyleLayer {
49
48
  recalculate(parameters) {
50
49
  super.recalculate(parameters);
51
50
 
52
- this.paint._values['line-floorwidth'] = lineFloorwidthProperty.possiblyEvaluate(
51
+ this._paint._values['line-floorwidth'] = lineFloorwidthProperty.possiblyEvaluate(
53
52
  this._transitioningPaint._values['line-width'].value,
54
53
  parameters
55
54
  );
@@ -66,24 +65,24 @@ class LineStyleLayer extends StyleLayer {
66
65
  getMaximumPaintValue('line-gap-width', this, lineBucket)
67
66
  );
68
67
  const offset = getMaximumPaintValue('line-offset', this, lineBucket);
69
- return width / 2 + Math.abs(offset) + translateDistance(this.paint.get('line-translate'));
68
+ return width / 2 + Math.abs(offset) + translateDistance(this._paint.get('line-translate'));
70
69
  }
71
70
 
72
71
  queryIntersectsFeature(queryGeometry, feature, featureState, geometry, zoom, transform, pixelsToTileUnits) {
73
72
  const translatedPolygon = translate(
74
73
  queryGeometry,
75
- this.paint.get('line-translate'),
76
- this.paint.get('line-translate-anchor'),
74
+ this._paint.get('line-translate'),
75
+ this._paint.get('line-translate-anchor'),
77
76
  transform.angle,
78
77
  pixelsToTileUnits
79
78
  );
80
79
  const halfWidth =
81
80
  (pixelsToTileUnits / 2) *
82
81
  getLineWidth(
83
- this.paint.get('line-width').evaluate(feature, featureState),
84
- this.paint.get('line-gap-width').evaluate(feature, featureState)
82
+ this._paint.get('line-width').evaluate(feature, featureState),
83
+ this._paint.get('line-gap-width').evaluate(feature, featureState)
85
84
  );
86
- const lineOffset = this.paint.get('line-offset').evaluate(feature, featureState);
85
+ const lineOffset = this._paint.get('line-offset').evaluate(feature, featureState);
87
86
  if (lineOffset) {
88
87
  geometry = offsetLine(geometry, lineOffset * pixelsToTileUnits);
89
88
  }
@@ -95,7 +94,7 @@ class LineStyleLayer extends StyleLayer {
95
94
  }
96
95
  }
97
96
 
98
- module.exports = LineStyleLayer;
97
+ export default LineStyleLayer;
99
98
 
100
99
  function getLineWidth(lineWidth, lineGapWidth) {
101
100
  if (lineGapWidth > 0) {
@@ -105,25 +104,29 @@ function getLineWidth(lineWidth, lineGapWidth) {
105
104
  }
106
105
 
107
106
  function offsetLine(rings, offset) {
108
- const newRings = [];
109
- const zero = new Point(0, 0);
107
+ const newRings = new Array(rings.length);
110
108
  for (let k = 0; k < rings.length; k++) {
111
109
  const ring = rings[k];
112
- const newRing = [];
113
- for (let i = 0; i < ring.length; i++) {
114
- const a = ring[i - 1];
115
- const b = ring[i];
110
+ const newRing = new Array(ring.length);
111
+ newRings[k] = newRing;
112
+
113
+ let b = ring[0];
114
+ let aToB = new Point(0, 0);
115
+ for (let i = 0; i < ring.length - 1; i++) {
116
116
  const c = ring[i + 1];
117
- const aToB = i === 0 ? zero : b.sub(a)._unit()._perp();
118
- const bToC = i === ring.length - 1 ? zero : c.sub(b)._unit()._perp();
117
+ const bToC = c.sub(b)._unit()._perp();
119
118
  const extrude = aToB._add(bToC)._unit();
120
-
121
119
  const cosHalfAngle = extrude.x * bToC.x + extrude.y * bToC.y;
122
- extrude._mult(1 / cosHalfAngle);
120
+ if (cosHalfAngle !== 0) {
121
+ extrude._div(cosHalfAngle);
122
+ }
123
+ newRing[i] = extrude._mult(offset)._add(b);
123
124
 
124
- newRing.push(extrude._mult(offset)._add(b));
125
+ b = c;
126
+ aToB = bToC;
125
127
  }
126
- newRings.push(newRing);
128
+
129
+ newRing[ring.length - 1] = aToB._unit()._mult(offset)._add(b);
127
130
  }
128
131
  return newRings;
129
132
  }
@@ -1,13 +1,13 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const {
4
- Properties,
3
+ import {
5
4
  ColorRampProperty,
6
5
  CrossFadedDataDrivenProperty,
7
6
  CrossFadedProperty,
8
7
  DataConstantProperty,
9
- DataDrivenProperty
10
- } = require('../properties');
8
+ DataDrivenProperty,
9
+ Properties
10
+ } from '../properties.js';
11
11
 
12
12
  const layout = new Properties({
13
13
  'line-cap': new DataConstantProperty({
@@ -101,4 +101,4 @@ const paint = new Properties({
101
101
  })
102
102
  });
103
103
 
104
- module.exports = { paint, layout };
104
+ export default { paint, layout };
@@ -1,6 +1,5 @@
1
- const StyleLayer = require('../style_layer');
2
-
3
- const properties = require('./raster_style_layer_properties');
1
+ import StyleLayer from '../style_layer.js';
2
+ import properties from './raster_style_layer_properties.js';
4
3
 
5
4
  class RasterStyleLayer extends StyleLayer {
6
5
  constructor(layer) {
@@ -8,4 +7,4 @@ class RasterStyleLayer extends StyleLayer {
8
7
  }
9
8
  }
10
9
 
11
- module.exports = RasterStyleLayer;
10
+ export default RasterStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, DataConstantProperty } = require('../properties');
3
+ import { DataConstantProperty, Properties } from '../properties.js';
4
4
 
5
5
  const paint = new Properties({
6
6
  'raster-opacity': new DataConstantProperty({
@@ -52,4 +52,4 @@ const paint = new Properties({
52
52
  })
53
53
  });
54
54
 
55
- module.exports = { paint };
55
+ export default { paint };