@mapwhit/tilerenderer 0.47.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.
Files changed (356) hide show
  1. package/LICENSE.txt +87 -0
  2. package/README.md +25 -0
  3. package/build/min/.dir +0 -0
  4. package/build/min/package.json +3 -0
  5. package/build/min/src/shaders/_prelude.fragment.glsl.txt +13 -0
  6. package/build/min/src/shaders/_prelude.vertex.glsl.txt +14 -0
  7. package/build/min/src/shaders/background.fragment.glsl.txt +5 -0
  8. package/build/min/src/shaders/background.vertex.glsl.txt +1 -0
  9. package/build/min/src/shaders/background_pattern.fragment.glsl.txt +5 -0
  10. package/build/min/src/shaders/background_pattern.vertex.glsl.txt +1 -0
  11. package/build/min/src/shaders/circle.fragment.glsl.txt +20 -0
  12. package/build/min/src/shaders/circle.vertex.glsl.txt +17 -0
  13. package/build/min/src/shaders/clipping_mask.fragment.glsl.txt +1 -0
  14. package/build/min/src/shaders/clipping_mask.vertex.glsl.txt +1 -0
  15. package/build/min/src/shaders/collision_box.fragment.glsl.txt +1 -0
  16. package/build/min/src/shaders/collision_box.vertex.glsl.txt +1 -0
  17. package/build/min/src/shaders/collision_circle.fragment.glsl.txt +1 -0
  18. package/build/min/src/shaders/collision_circle.vertex.glsl.txt +1 -0
  19. package/build/min/src/shaders/debug.fragment.glsl.txt +1 -0
  20. package/build/min/src/shaders/debug.vertex.glsl.txt +1 -0
  21. package/build/min/src/shaders/fill.fragment.glsl.txt +10 -0
  22. package/build/min/src/shaders/fill.vertex.glsl.txt +7 -0
  23. package/build/min/src/shaders/fill_extrusion.fragment.glsl.txt +13 -0
  24. package/build/min/src/shaders/fill_extrusion.vertex.glsl.txt +9 -0
  25. package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.txt +15 -0
  26. package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.txt +11 -0
  27. package/build/min/src/shaders/fill_outline.fragment.glsl.txt +10 -0
  28. package/build/min/src/shaders/fill_outline.vertex.glsl.txt +7 -0
  29. package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.txt +13 -0
  30. package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.txt +9 -0
  31. package/build/min/src/shaders/fill_pattern.fragment.glsl.txt +13 -0
  32. package/build/min/src/shaders/fill_pattern.vertex.glsl.txt +9 -0
  33. package/build/min/src/shaders/heatmap.fragment.glsl.txt +10 -0
  34. package/build/min/src/shaders/heatmap.vertex.glsl.txt +8 -0
  35. package/build/min/src/shaders/heatmap_texture.fragment.glsl.txt +5 -0
  36. package/build/min/src/shaders/heatmap_texture.vertex.glsl.txt +1 -0
  37. package/build/min/src/shaders/hillshade.fragment.glsl.txt +7 -0
  38. package/build/min/src/shaders/hillshade.vertex.glsl.txt +1 -0
  39. package/build/min/src/shaders/hillshade_prepare.fragment.glsl.txt +8 -0
  40. package/build/min/src/shaders/hillshade_prepare.vertex.glsl.txt +1 -0
  41. package/build/min/src/shaders/line.fragment.glsl.txt +12 -0
  42. package/build/min/src/shaders/line.vertex.glsl.txt +17 -0
  43. package/build/min/src/shaders/line_gradient.fragment.glsl.txt +10 -0
  44. package/build/min/src/shaders/line_gradient.vertex.glsl.txt +16 -0
  45. package/build/min/src/shaders/line_pattern.fragment.glsl.txt +15 -0
  46. package/build/min/src/shaders/line_pattern.vertex.glsl.txt +20 -0
  47. package/build/min/src/shaders/line_sdf.fragment.glsl.txt +17 -0
  48. package/build/min/src/shaders/line_sdf.vertex.glsl.txt +20 -0
  49. package/build/min/src/shaders/raster.fragment.glsl.txt +5 -0
  50. package/build/min/src/shaders/raster.vertex.glsl.txt +1 -0
  51. package/build/min/src/shaders/symbol_icon.fragment.glsl.txt +9 -0
  52. package/build/min/src/shaders/symbol_icon.vertex.glsl.txt +5 -0
  53. package/build/min/src/shaders/symbol_sdf.fragment.glsl.txt +19 -0
  54. package/build/min/src/shaders/symbol_sdf.vertex.glsl.txt +13 -0
  55. package/package.json +44 -0
  56. package/src/css/mapbox-gl.css +506 -0
  57. package/src/css/svg/mapboxgl-ctrl-attrib.svg +3 -0
  58. package/src/css/svg/mapboxgl-ctrl-compass.svg +4 -0
  59. package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +3 -0
  60. package/src/css/svg/mapboxgl-ctrl-geolocate-background.svg +3 -0
  61. package/src/css/svg/mapboxgl-ctrl-geolocate.svg +3 -0
  62. package/src/css/svg/mapboxgl-ctrl-logo-compact.svg +2 -0
  63. package/src/css/svg/mapboxgl-ctrl-logo.svg +1 -0
  64. package/src/css/svg/mapboxgl-ctrl-shrink.svg +3 -0
  65. package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +3 -0
  66. package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +3 -0
  67. package/src/data/array_types.js +1138 -0
  68. package/src/data/bucket/circle_attributes.js +5 -0
  69. package/src/data/bucket/circle_bucket.js +118 -0
  70. package/src/data/bucket/fill_attributes.js +5 -0
  71. package/src/data/bucket/fill_bucket.js +166 -0
  72. package/src/data/bucket/fill_extrusion_attributes.js +11 -0
  73. package/src/data/bucket/fill_extrusion_bucket.js +247 -0
  74. package/src/data/bucket/heatmap_bucket.js +12 -0
  75. package/src/data/bucket/line_attributes.js +11 -0
  76. package/src/data/bucket/line_bucket.js +625 -0
  77. package/src/data/bucket/pattern_attributes.js +9 -0
  78. package/src/data/bucket/pattern_bucket_features.js +44 -0
  79. package/src/data/bucket/symbol_attributes.js +95 -0
  80. package/src/data/bucket/symbol_bucket.js +697 -0
  81. package/src/data/bucket.js +53 -0
  82. package/src/data/dem_data.js +126 -0
  83. package/src/data/extent.js +17 -0
  84. package/src/data/feature_index.js +254 -0
  85. package/src/data/index_array_type.js +14 -0
  86. package/src/data/load_geometry.js +42 -0
  87. package/src/data/pos_attributes.js +3 -0
  88. package/src/data/program_configuration.js +782 -0
  89. package/src/data/raster_bounds_attributes.js +6 -0
  90. package/src/data/segment.js +63 -0
  91. package/src/geo/coordinate.js +78 -0
  92. package/src/geo/lng_lat.js +129 -0
  93. package/src/geo/lng_lat_bounds.js +253 -0
  94. package/src/geo/transform.js +605 -0
  95. package/src/gl/color_mode.js +21 -0
  96. package/src/gl/context.js +193 -0
  97. package/src/gl/cull_face_mode.js +22 -0
  98. package/src/gl/depth_mode.js +18 -0
  99. package/src/gl/framebuffer.js +28 -0
  100. package/src/gl/index_buffer.js +52 -0
  101. package/src/gl/stencil_mode.js +17 -0
  102. package/src/gl/types.js +0 -0
  103. package/src/gl/value.js +676 -0
  104. package/src/gl/vertex_buffer.js +101 -0
  105. package/src/index.js +50 -0
  106. package/src/render/draw_background.js +60 -0
  107. package/src/render/draw_circle.js +55 -0
  108. package/src/render/draw_collision_debug.js +45 -0
  109. package/src/render/draw_debug.js +429 -0
  110. package/src/render/draw_fill.js +143 -0
  111. package/src/render/draw_fill_extrusion.js +101 -0
  112. package/src/render/draw_heatmap.js +159 -0
  113. package/src/render/draw_hillshade.js +144 -0
  114. package/src/render/draw_line.js +99 -0
  115. package/src/render/draw_raster.js +151 -0
  116. package/src/render/draw_symbol.js +231 -0
  117. package/src/render/glyph_atlas.js +55 -0
  118. package/src/render/glyph_manager.js +145 -0
  119. package/src/render/image_atlas.js +97 -0
  120. package/src/render/image_manager.js +183 -0
  121. package/src/render/line_atlas.js +139 -0
  122. package/src/render/painter.js +483 -0
  123. package/src/render/program/background_program.js +46 -0
  124. package/src/render/program/circle_program.js +40 -0
  125. package/src/render/program/clipping_mask_program.js +11 -0
  126. package/src/render/program/collision_program.js +28 -0
  127. package/src/render/program/debug_program.js +13 -0
  128. package/src/render/program/fill_extrusion_program.js +76 -0
  129. package/src/render/program/fill_program.js +60 -0
  130. package/src/render/program/heatmap_program.js +46 -0
  131. package/src/render/program/hillshade_program.js +77 -0
  132. package/src/render/program/line_program.js +119 -0
  133. package/src/render/program/pattern.js +57 -0
  134. package/src/render/program/program_uniforms.js +46 -0
  135. package/src/render/program/raster_program.js +50 -0
  136. package/src/render/program/symbol_program.js +112 -0
  137. package/src/render/program.js +133 -0
  138. package/src/render/texture.js +88 -0
  139. package/src/render/tile_mask.js +108 -0
  140. package/src/render/uniform_binding.js +129 -0
  141. package/src/render/vertex_array_object.js +155 -0
  142. package/src/shaders/README.md +42 -0
  143. package/src/shaders/_prelude.fragment.glsl +17 -0
  144. package/src/shaders/_prelude.vertex.glsl +73 -0
  145. package/src/shaders/background.fragment.glsl +10 -0
  146. package/src/shaders/background.vertex.glsl +7 -0
  147. package/src/shaders/background_pattern.fragment.glsl +28 -0
  148. package/src/shaders/background_pattern.vertex.glsl +20 -0
  149. package/src/shaders/circle.fragment.glsl +39 -0
  150. package/src/shaders/circle.vertex.glsl +63 -0
  151. package/src/shaders/clipping_mask.fragment.glsl +3 -0
  152. package/src/shaders/clipping_mask.vertex.glsl +7 -0
  153. package/src/shaders/collision_box.fragment.glsl +21 -0
  154. package/src/shaders/collision_box.vertex.glsl +26 -0
  155. package/src/shaders/collision_circle.fragment.glsl +34 -0
  156. package/src/shaders/collision_circle.vertex.glsl +36 -0
  157. package/src/shaders/debug.fragment.glsl +5 -0
  158. package/src/shaders/debug.vertex.glsl +7 -0
  159. package/src/shaders/encode_attribute.js +19 -0
  160. package/src/shaders/fill.fragment.glsl +13 -0
  161. package/src/shaders/fill.vertex.glsl +13 -0
  162. package/src/shaders/fill_extrusion.fragment.glsl +16 -0
  163. package/src/shaders/fill_extrusion.vertex.glsl +66 -0
  164. package/src/shaders/fill_extrusion_pattern.fragment.glsl +41 -0
  165. package/src/shaders/fill_extrusion_pattern.vertex.glsl +76 -0
  166. package/src/shaders/fill_outline.fragment.glsl +17 -0
  167. package/src/shaders/fill_outline.vertex.glsl +17 -0
  168. package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
  169. package/src/shaders/fill_outline_pattern.vertex.glsl +41 -0
  170. package/src/shaders/fill_pattern.fragment.glsl +36 -0
  171. package/src/shaders/fill_pattern.vertex.glsl +36 -0
  172. package/src/shaders/heatmap.fragment.glsl +21 -0
  173. package/src/shaders/heatmap.vertex.glsl +53 -0
  174. package/src/shaders/heatmap_texture.fragment.glsl +14 -0
  175. package/src/shaders/heatmap_texture.vertex.glsl +11 -0
  176. package/src/shaders/hillshade.fragment.glsl +52 -0
  177. package/src/shaders/hillshade.vertex.glsl +11 -0
  178. package/src/shaders/hillshade_prepare.fragment.glsl +72 -0
  179. package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
  180. package/src/shaders/index.js +194 -0
  181. package/src/shaders/line.fragment.glsl +28 -0
  182. package/src/shaders/line.vertex.glsl +84 -0
  183. package/src/shaders/line_gradient.fragment.glsl +34 -0
  184. package/src/shaders/line_gradient.vertex.glsl +84 -0
  185. package/src/shaders/line_pattern.fragment.glsl +69 -0
  186. package/src/shaders/line_pattern.vertex.glsl +88 -0
  187. package/src/shaders/line_sdf.fragment.glsl +44 -0
  188. package/src/shaders/line_sdf.vertex.glsl +95 -0
  189. package/src/shaders/raster.fragment.glsl +52 -0
  190. package/src/shaders/raster.vertex.glsl +21 -0
  191. package/src/shaders/symbol_icon.fragment.glsl +17 -0
  192. package/src/shaders/symbol_icon.vertex.glsl +91 -0
  193. package/src/shaders/symbol_sdf.fragment.glsl +50 -0
  194. package/src/shaders/symbol_sdf.vertex.glsl +117 -0
  195. package/src/source/geojson_source.js +267 -0
  196. package/src/source/geojson_worker_source.js +210 -0
  197. package/src/source/geojson_wrapper.js +67 -0
  198. package/src/source/image_source.js +213 -0
  199. package/src/source/load_tilejson.js +40 -0
  200. package/src/source/pixels_to_tile_units.js +17 -0
  201. package/src/source/query_features.js +198 -0
  202. package/src/source/raster_dem_tile_source.js +140 -0
  203. package/src/source/raster_dem_tile_worker_source.js +26 -0
  204. package/src/source/raster_tile_source.js +126 -0
  205. package/src/source/rtl_text_plugin.js +63 -0
  206. package/src/source/source.js +75 -0
  207. package/src/source/source_cache.js +794 -0
  208. package/src/source/source_state.js +55 -0
  209. package/src/source/tile.js +332 -0
  210. package/src/source/tile_bounds.js +40 -0
  211. package/src/source/tile_cache.js +122 -0
  212. package/src/source/tile_id.js +150 -0
  213. package/src/source/vector_tile_source.js +144 -0
  214. package/src/source/vector_tile_worker_source.js +126 -0
  215. package/src/source/worker.js +175 -0
  216. package/src/source/worker_source.js +14 -0
  217. package/src/source/worker_tile.js +199 -0
  218. package/src/style/create_style_layer.js +25 -0
  219. package/src/style/evaluation_parameters.js +45 -0
  220. package/src/style/light.js +112 -0
  221. package/src/style/load_glyph_range.js +17 -0
  222. package/src/style/load_sprite.js +26 -0
  223. package/src/style/parse_glyph_pbf.js +45 -0
  224. package/src/style/pauseable_placement.js +88 -0
  225. package/src/style/properties.js +691 -0
  226. package/src/style/query_utils.js +39 -0
  227. package/src/style/style.js +955 -0
  228. package/src/style/style_layer/background_style_layer.js +11 -0
  229. package/src/style/style_layer/background_style_layer_properties.js +25 -0
  230. package/src/style/style_layer/circle_style_layer.js +93 -0
  231. package/src/style/style_layer/circle_style_layer_properties.js +76 -0
  232. package/src/style/style_layer/fill_extrusion_style_layer.js +194 -0
  233. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +56 -0
  234. package/src/style/style_layer/fill_style_layer.js +46 -0
  235. package/src/style/style_layer/fill_style_layer_properties.js +45 -0
  236. package/src/style/style_layer/heatmap_style_layer.js +51 -0
  237. package/src/style/style_layer/heatmap_style_layer_properties.js +52 -0
  238. package/src/style/style_layer/hillshade_style_layer.js +15 -0
  239. package/src/style/style_layer/hillshade_style_layer_properties.js +43 -0
  240. package/src/style/style_layer/line_style_layer.js +129 -0
  241. package/src/style/style_layer/line_style_layer_properties.js +104 -0
  242. package/src/style/style_layer/raster_style_layer.js +11 -0
  243. package/src/style/style_layer/raster_style_layer_properties.js +55 -0
  244. package/src/style/style_layer/symbol_style_layer.js +66 -0
  245. package/src/style/style_layer/symbol_style_layer_properties.js +288 -0
  246. package/src/style/style_layer.js +183 -0
  247. package/src/style/style_layer_index.js +61 -0
  248. package/src/style/zoom_history.js +36 -0
  249. package/src/style-spec/deref.js +51 -0
  250. package/src/style-spec/error/parsing_error.js +8 -0
  251. package/src/style-spec/error/validation_error.js +10 -0
  252. package/src/style-spec/expression/compound_expression.js +118 -0
  253. package/src/style-spec/expression/definitions/array.js +82 -0
  254. package/src/style-spec/expression/definitions/assertion.js +69 -0
  255. package/src/style-spec/expression/definitions/at.js +57 -0
  256. package/src/style-spec/expression/definitions/case.js +73 -0
  257. package/src/style-spec/expression/definitions/coalesce.js +68 -0
  258. package/src/style-spec/expression/definitions/coercion.js +96 -0
  259. package/src/style-spec/expression/definitions/collator.js +102 -0
  260. package/src/style-spec/expression/definitions/equals.js +93 -0
  261. package/src/style-spec/expression/definitions/index.js +407 -0
  262. package/src/style-spec/expression/definitions/interpolate.js +235 -0
  263. package/src/style-spec/expression/definitions/length.js +54 -0
  264. package/src/style-spec/expression/definitions/let.js +60 -0
  265. package/src/style-spec/expression/definitions/literal.js +64 -0
  266. package/src/style-spec/expression/definitions/match.js +142 -0
  267. package/src/style-spec/expression/definitions/step.js +116 -0
  268. package/src/style-spec/expression/definitions/var.js +38 -0
  269. package/src/style-spec/expression/evaluation_context.js +35 -0
  270. package/src/style-spec/expression/index.js +329 -0
  271. package/src/style-spec/expression/is_constant.js +63 -0
  272. package/src/style-spec/expression/parsing_context.js +213 -0
  273. package/src/style-spec/expression/parsing_error.js +9 -0
  274. package/src/style-spec/expression/runtime_error.js +12 -0
  275. package/src/style-spec/expression/scope.js +34 -0
  276. package/src/style-spec/expression/stops.js +37 -0
  277. package/src/style-spec/expression/types.js +77 -0
  278. package/src/style-spec/expression/values.js +126 -0
  279. package/src/style-spec/feature_filter/README.md +55 -0
  280. package/src/style-spec/feature_filter/index.js +158 -0
  281. package/src/style-spec/function/convert.js +256 -0
  282. package/src/style-spec/function/index.js +299 -0
  283. package/src/style-spec/group_by_layout.js +68 -0
  284. package/src/style-spec/reference/v8.json +5356 -0
  285. package/src/style-spec/util/color.js +73 -0
  286. package/src/style-spec/util/color_spaces.js +128 -0
  287. package/src/style-spec/util/eval_support.js +8 -0
  288. package/src/style-spec/util/get_type.js +18 -0
  289. package/src/style-spec/util/interpolate.js +21 -0
  290. package/src/style-spec/util/properties.js +17 -0
  291. package/src/style-spec/util/ref_properties.js +1 -0
  292. package/src/style-spec/util/result.js +19 -0
  293. package/src/symbol/anchor.js +21 -0
  294. package/src/symbol/check_max_angle.js +75 -0
  295. package/src/symbol/clip_line.js +73 -0
  296. package/src/symbol/collision_feature.js +230 -0
  297. package/src/symbol/collision_index.js +379 -0
  298. package/src/symbol/cross_tile_symbol_index.js +270 -0
  299. package/src/symbol/get_anchors.js +177 -0
  300. package/src/symbol/grid_index.js +318 -0
  301. package/src/symbol/mergelines.js +75 -0
  302. package/src/symbol/opacity_state.js +21 -0
  303. package/src/symbol/placement.js +563 -0
  304. package/src/symbol/projection.js +601 -0
  305. package/src/symbol/quads.js +173 -0
  306. package/src/symbol/shaping.js +347 -0
  307. package/src/symbol/symbol_layout.js +519 -0
  308. package/src/symbol/symbol_size.js +110 -0
  309. package/src/symbol/transform_text.js +16 -0
  310. package/src/ui/anchor.js +24 -0
  311. package/src/ui/bind_handlers.js +199 -0
  312. package/src/ui/camera.js +954 -0
  313. package/src/ui/events.js +210 -0
  314. package/src/ui/handler/box_zoom.js +151 -0
  315. package/src/ui/handler/dblclick_zoom.js +91 -0
  316. package/src/ui/handler/drag_pan.js +285 -0
  317. package/src/ui/handler/drag_rotate.js +290 -0
  318. package/src/ui/handler/frame.js +28 -0
  319. package/src/ui/handler/inertia.js +45 -0
  320. package/src/ui/handler/keyboard.js +148 -0
  321. package/src/ui/handler/scroll_zoom.js +284 -0
  322. package/src/ui/handler/touch_zoom_rotate.js +263 -0
  323. package/src/ui/map.js +1645 -0
  324. package/src/util/actor.js +104 -0
  325. package/src/util/async.js +23 -0
  326. package/src/util/browser.js +61 -0
  327. package/src/util/callback.js +26 -0
  328. package/src/util/classify_rings.js +43 -0
  329. package/src/util/color_ramp.js +24 -0
  330. package/src/util/config.js +24 -0
  331. package/src/util/dictionary_coder.js +25 -0
  332. package/src/util/dispatcher.js +68 -0
  333. package/src/util/dom.js +102 -0
  334. package/src/util/evented.js +182 -0
  335. package/src/util/find_pole_of_inaccessibility.js +129 -0
  336. package/src/util/global_worker_pool.js +15 -0
  337. package/src/util/image.js +124 -0
  338. package/src/util/interpolate.js +5 -0
  339. package/src/util/intersection_tests.js +207 -0
  340. package/src/util/is_char_in_unicode_block.js +287 -0
  341. package/src/util/loader/image.js +32 -0
  342. package/src/util/object.js +178 -0
  343. package/src/util/script_detection.js +337 -0
  344. package/src/util/struct_array.js +197 -0
  345. package/src/util/task_queue.js +57 -0
  346. package/src/util/throttle.js +26 -0
  347. package/src/util/tile_cover.js +114 -0
  348. package/src/util/token.js +13 -0
  349. package/src/util/unique_id.js +12 -0
  350. package/src/util/util.js +192 -0
  351. package/src/util/vectortile_to_geojson.js +44 -0
  352. package/src/util/verticalize_punctuation.js +112 -0
  353. package/src/util/warn.js +21 -0
  354. package/src/util/web_worker.js +5 -0
  355. package/src/util/web_worker_transfer.js +228 -0
  356. package/src/util/worker_pool.js +41 -0
@@ -0,0 +1,11 @@
1
+ const StyleLayer = require('../style_layer');
2
+
3
+ const properties = require('./background_style_layer_properties');
4
+
5
+ class BackgroundStyleLayer extends StyleLayer {
6
+ constructor(layer) {
7
+ super(layer, properties);
8
+ }
9
+ }
10
+
11
+ module.exports = BackgroundStyleLayer;
@@ -0,0 +1,25 @@
1
+ // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
+
3
+ const { Properties, CrossFadedProperty, DataConstantProperty } = require('../properties');
4
+
5
+ const paint = new Properties({
6
+ 'background-color': new DataConstantProperty({
7
+ type: 'color',
8
+ default: '#000000',
9
+ transition: true,
10
+ expression: { interpolated: true, parameters: ['zoom'] }
11
+ }),
12
+ 'background-pattern': new CrossFadedProperty({
13
+ type: 'string',
14
+ transition: true,
15
+ expression: { parameters: ['zoom'] }
16
+ }),
17
+ 'background-opacity': new DataConstantProperty({
18
+ type: 'number',
19
+ default: 1,
20
+ transition: true,
21
+ expression: { interpolated: true, parameters: ['zoom'] }
22
+ })
23
+ });
24
+
25
+ module.exports = { paint };
@@ -0,0 +1,93 @@
1
+ const StyleLayer = require('../style_layer');
2
+
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 Point = require('@mapbox/point-geometry');
9
+
10
+ class CircleStyleLayer extends StyleLayer {
11
+ constructor(layer) {
12
+ super(layer, properties);
13
+ }
14
+
15
+ createBucket(parameters) {
16
+ return new CircleBucket(parameters);
17
+ }
18
+
19
+ queryRadius(bucket) {
20
+ const circleBucket = bucket;
21
+ return (
22
+ getMaximumPaintValue('circle-radius', this, circleBucket) +
23
+ getMaximumPaintValue('circle-stroke-width', this, circleBucket) +
24
+ translateDistance(this.paint.get('circle-translate'))
25
+ );
26
+ }
27
+
28
+ queryIntersectsFeature(
29
+ queryGeometry,
30
+ feature,
31
+ featureState,
32
+ geometry,
33
+ zoom,
34
+ transform,
35
+ pixelsToTileUnits,
36
+ pixelPosMatrix
37
+ ) {
38
+ const translatedPolygon = translate(
39
+ queryGeometry,
40
+ this.paint.get('circle-translate'),
41
+ this.paint.get('circle-translate-anchor'),
42
+ transform.angle,
43
+ pixelsToTileUnits
44
+ );
45
+ const radius = this.paint.get('circle-radius').evaluate(feature, featureState);
46
+ const stroke = this.paint.get('circle-stroke-width').evaluate(feature, featureState);
47
+ const size = radius + stroke;
48
+
49
+ // For pitch-alignment: map, compare feature geometry to query geometry in the plane of the tile
50
+ // // Otherwise, compare geometry in the plane of the viewport
51
+ // // A circle with fixed scaling relative to the viewport gets larger in tile space as it moves into the distance
52
+ // // 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 transformedPolygon = alignWithMap
55
+ ? translatedPolygon
56
+ : projectQueryGeometry(translatedPolygon, pixelPosMatrix);
57
+ const transformedSize = alignWithMap ? size * pixelsToTileUnits : size;
58
+
59
+ for (const ring of geometry) {
60
+ for (const point of ring) {
61
+ const transformedPoint = alignWithMap ? point : projectPoint(point, pixelPosMatrix);
62
+
63
+ let adjustedSize = transformedSize;
64
+ 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') {
66
+ 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
+ ) {
71
+ adjustedSize *= transform.cameraToCenterDistance / projectedCenter[3];
72
+ }
73
+
74
+ if (polygonIntersectsBufferedPoint(transformedPolygon, transformedPoint, adjustedSize)) return true;
75
+ }
76
+ }
77
+
78
+ return false;
79
+ }
80
+ }
81
+
82
+ function projectPoint(p, pixelPosMatrix) {
83
+ const point = vec4.transformMat4([], [p.x, p.y, 0, 1], pixelPosMatrix);
84
+ return new Point(point[0] / point[3], point[1] / point[3]);
85
+ }
86
+
87
+ function projectQueryGeometry(queryGeometry, pixelPosMatrix) {
88
+ return queryGeometry.map(p => {
89
+ return projectPoint(p, pixelPosMatrix);
90
+ });
91
+ }
92
+
93
+ module.exports = CircleStyleLayer;
@@ -0,0 +1,76 @@
1
+ // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
+
3
+ const { Properties, DataConstantProperty, DataDrivenProperty } = require('../properties');
4
+
5
+ const paint = new Properties({
6
+ 'circle-radius': new DataDrivenProperty({
7
+ type: 'number',
8
+ default: 5,
9
+ transition: true,
10
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
11
+ }),
12
+ 'circle-color': new DataDrivenProperty({
13
+ type: 'color',
14
+ default: '#000000',
15
+ transition: true,
16
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
17
+ }),
18
+ 'circle-blur': new DataDrivenProperty({
19
+ type: 'number',
20
+ default: 0,
21
+ transition: true,
22
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
23
+ }),
24
+ 'circle-opacity': new DataDrivenProperty({
25
+ type: 'number',
26
+ default: 1,
27
+ transition: true,
28
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
29
+ }),
30
+ 'circle-translate': new DataConstantProperty({
31
+ type: 'array',
32
+ value: 'number',
33
+ length: 2,
34
+ default: [0, 0],
35
+ transition: true,
36
+ expression: { interpolated: true, parameters: ['zoom'] }
37
+ }),
38
+ 'circle-translate-anchor': new DataConstantProperty({
39
+ type: 'enum',
40
+ values: ['map', 'viewport'],
41
+ default: 'map',
42
+ expression: { parameters: ['zoom'] }
43
+ }),
44
+ 'circle-pitch-scale': new DataConstantProperty({
45
+ type: 'enum',
46
+ values: ['map', 'viewport'],
47
+ default: 'map',
48
+ expression: { parameters: ['zoom'] }
49
+ }),
50
+ 'circle-pitch-alignment': new DataConstantProperty({
51
+ type: 'enum',
52
+ values: ['map', 'viewport'],
53
+ default: 'viewport',
54
+ expression: { parameters: ['zoom'] }
55
+ }),
56
+ 'circle-stroke-width': new DataDrivenProperty({
57
+ type: 'number',
58
+ default: 0,
59
+ transition: true,
60
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
61
+ }),
62
+ 'circle-stroke-color': new DataDrivenProperty({
63
+ type: 'color',
64
+ default: '#000000',
65
+ transition: true,
66
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
67
+ }),
68
+ 'circle-stroke-opacity': new DataDrivenProperty({
69
+ type: 'number',
70
+ default: 1,
71
+ transition: true,
72
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
73
+ })
74
+ });
75
+
76
+ module.exports = { paint };
@@ -0,0 +1,194 @@
1
+ const StyleLayer = require('../style_layer');
2
+
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 Point = require('@mapbox/point-geometry');
9
+
10
+ class FillExtrusionStyleLayer extends StyleLayer {
11
+ constructor(layer) {
12
+ super(layer, properties);
13
+ }
14
+
15
+ createBucket(parameters) {
16
+ return new FillExtrusionBucket(parameters);
17
+ }
18
+
19
+ queryRadius() {
20
+ return translateDistance(this.paint.get('fill-extrusion-translate'));
21
+ }
22
+
23
+ is3D() {
24
+ return true;
25
+ }
26
+
27
+ queryIntersectsFeature(
28
+ queryGeometry,
29
+ feature,
30
+ featureState,
31
+ geometry,
32
+ zoom,
33
+ transform,
34
+ pixelsToTileUnits,
35
+ pixelPosMatrix
36
+ ) {
37
+ const translatedPolygon = translate(
38
+ queryGeometry,
39
+ this.paint.get('fill-extrusion-translate'),
40
+ this.paint.get('fill-extrusion-translate-anchor'),
41
+ transform.angle,
42
+ pixelsToTileUnits
43
+ );
44
+ const height = this.paint.get('fill-extrusion-height').evaluate(feature, featureState);
45
+ const base = this.paint.get('fill-extrusion-base').evaluate(feature, featureState);
46
+
47
+ const projectedQueryGeometry = projectQueryGeometry(translatedPolygon, pixelPosMatrix, transform, 0);
48
+
49
+ const projected = projectExtrusion(geometry, base, height, pixelPosMatrix);
50
+ const projectedBase = projected[0];
51
+ const projectedTop = projected[1];
52
+ return checkIntersection(projectedBase, projectedTop, projectedQueryGeometry);
53
+ }
54
+ }
55
+
56
+ function dot(a, b) {
57
+ return a.x * b.x + a.y * b.y;
58
+ }
59
+
60
+ function getIntersectionDistance(projectedQueryGeometry, projectedFace) {
61
+ if (projectedQueryGeometry.length === 1) {
62
+ // For point queries calculate the z at which the point intersects the face
63
+ // using barycentric coordinates.
64
+
65
+ // Find the barycentric coordinates of the projected point within the first
66
+ // triangle of the face, using only the xy plane. It doesn't matter if the
67
+ // point is outside the first triangle because all the triangles in the face
68
+ // 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;
90
+ }
91
+ // The counts as closest is less clear when the query is a box. This
92
+ // returns the distance to the nearest point on the face, whether it is
93
+ // within the query or not. It could be more correct to return the
94
+ // distance to the closest point within the query box but this would be
95
+ // more complicated and expensive to calculate with little benefit.
96
+ let closestDistance = Number.POSITIVE_INFINITY;
97
+ for (const p of projectedFace) {
98
+ closestDistance = Math.min(closestDistance, p.z);
99
+ }
100
+ return closestDistance;
101
+ }
102
+
103
+ function checkIntersection(projectedBase, projectedTop, projectedQueryGeometry) {
104
+ let closestDistance = Number.POSITIVE_INFINITY;
105
+
106
+ if (polygonIntersectsMultiPolygon(projectedQueryGeometry, projectedTop)) {
107
+ closestDistance = getIntersectionDistance(projectedQueryGeometry, projectedTop[0]);
108
+ }
109
+
110
+ for (let r = 0; r < projectedTop.length; r++) {
111
+ const ringTop = projectedTop[r];
112
+ const ringBase = projectedBase[r];
113
+ for (let p = 0; p < ringTop.length - 1; p++) {
114
+ const topA = ringTop[p];
115
+ const topB = ringTop[p + 1];
116
+ const baseA = ringBase[p];
117
+ const baseB = ringBase[p + 1];
118
+ const face = [topA, topB, baseB, baseA, topA];
119
+ if (polygonIntersectsPolygon(projectedQueryGeometry, face)) {
120
+ closestDistance = Math.min(closestDistance, getIntersectionDistance(projectedQueryGeometry, face));
121
+ }
122
+ }
123
+ }
124
+
125
+ return closestDistance === Number.POSITIVE_INFINITY ? false : closestDistance;
126
+ }
127
+
128
+ /*
129
+ * Project the geometry using matrix `m`. This is essentially doing
130
+ * `vec4.transformMat4([], [p.x, p.y, z, 1], m)` but the multiplication
131
+ * is inlined so that parts of the projection that are the same across
132
+ * different points can only be done once. This produced a measurable
133
+ * performance improvement.
134
+ */
135
+ function projectExtrusion(geometry, zBase, zTop, m) {
136
+ const projectedBase = [];
137
+ const projectedTop = [];
138
+
139
+ const baseXZ = m[8] * zBase;
140
+ const baseYZ = m[9] * zBase;
141
+ const baseZZ = m[10] * zBase;
142
+ const baseWZ = m[11] * zBase;
143
+ const topXZ = m[8] * zTop;
144
+ const topYZ = m[9] * zTop;
145
+ const topZZ = m[10] * zTop;
146
+ const topWZ = m[11] * zTop;
147
+
148
+ for (const r of geometry) {
149
+ const ringBase = [];
150
+ const ringTop = [];
151
+ for (const p of r) {
152
+ const x = p.x;
153
+ const y = p.y;
154
+
155
+ const sX = m[0] * x + m[4] * y + m[12];
156
+ const sY = m[1] * x + m[5] * y + m[13];
157
+ const sZ = m[2] * x + m[6] * y + m[14];
158
+ const sW = m[3] * x + m[7] * y + m[15];
159
+
160
+ const baseX = sX + baseXZ;
161
+ const baseY = sY + baseYZ;
162
+ const baseZ = sZ + baseZZ;
163
+ const baseW = sW + baseWZ;
164
+
165
+ const topX = sX + topXZ;
166
+ const topY = sY + topYZ;
167
+ const topZ = sZ + topZZ;
168
+ const topW = sW + topWZ;
169
+
170
+ const b = new Point(baseX / baseW, baseY / baseW);
171
+ b.z = baseZ / baseW;
172
+ ringBase.push(b);
173
+
174
+ const t = new Point(topX / topW, topY / topW);
175
+ t.z = topZ / topW;
176
+ ringTop.push(t);
177
+ }
178
+ projectedBase.push(ringBase);
179
+ projectedTop.push(ringTop);
180
+ }
181
+ return [projectedBase, projectedTop];
182
+ }
183
+
184
+ function projectQueryGeometry(queryGeometry, pixelPosMatrix, transform, z) {
185
+ const projectedQueryGeometry = [];
186
+ for (const p of queryGeometry) {
187
+ const v = [p.x, p.y, z, 1];
188
+ vec4.transformMat4(v, v, pixelPosMatrix);
189
+ projectedQueryGeometry.push(new Point(v[0] / v[3], v[1] / v[3]));
190
+ }
191
+ return projectedQueryGeometry;
192
+ }
193
+
194
+ module.exports = FillExtrusionStyleLayer;
@@ -0,0 +1,56 @@
1
+ // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
+
3
+ const { Properties, CrossFadedDataDrivenProperty, DataConstantProperty, DataDrivenProperty } = require('../properties');
4
+
5
+ const paint = new Properties({
6
+ 'fill-extrusion-opacity': new DataConstantProperty({
7
+ type: 'number',
8
+ default: 1,
9
+ transition: true,
10
+ expression: { interpolated: true, parameters: ['zoom'] }
11
+ }),
12
+ 'fill-extrusion-color': new DataDrivenProperty({
13
+ type: 'color',
14
+ default: '#000000',
15
+ transition: true,
16
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
17
+ }),
18
+ 'fill-extrusion-translate': new DataConstantProperty({
19
+ type: 'array',
20
+ value: 'number',
21
+ length: 2,
22
+ default: [0, 0],
23
+ transition: true,
24
+ expression: { interpolated: true, parameters: ['zoom'] }
25
+ }),
26
+ 'fill-extrusion-translate-anchor': new DataConstantProperty({
27
+ type: 'enum',
28
+ values: ['map', 'viewport'],
29
+ default: 'map',
30
+ expression: { parameters: ['zoom'] }
31
+ }),
32
+ 'fill-extrusion-pattern': new CrossFadedDataDrivenProperty({
33
+ type: 'string',
34
+ transition: true,
35
+ expression: { parameters: ['zoom', 'feature'] }
36
+ }),
37
+ 'fill-extrusion-height': new DataDrivenProperty({
38
+ type: 'number',
39
+ default: 0,
40
+ transition: true,
41
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
42
+ }),
43
+ 'fill-extrusion-base': new DataDrivenProperty({
44
+ type: 'number',
45
+ default: 0,
46
+ transition: true,
47
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
48
+ }),
49
+ 'fill-extrusion-vertical-gradient': new DataConstantProperty({
50
+ type: 'boolean',
51
+ default: true,
52
+ expression: { parameters: ['zoom'] }
53
+ })
54
+ });
55
+
56
+ module.exports = { paint };
@@ -0,0 +1,46 @@
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');
7
+
8
+ class FillStyleLayer extends StyleLayer {
9
+ constructor(layer) {
10
+ super(layer, properties);
11
+ }
12
+
13
+ recalculate(parameters) {
14
+ super.recalculate(parameters);
15
+
16
+ const outlineColor = this.paint._values['fill-outline-color'];
17
+ if (outlineColor.value.kind === 'constant' && outlineColor.value.value === undefined) {
18
+ this.paint._values['fill-outline-color'] = this.paint._values['fill-color'];
19
+ }
20
+ }
21
+
22
+ createBucket(parameters) {
23
+ return new FillBucket(parameters);
24
+ }
25
+
26
+ queryRadius() {
27
+ return translateDistance(this.paint.get('fill-translate'));
28
+ }
29
+
30
+ queryIntersectsFeature(queryGeometry, feature, featureState, geometry, zoom, transform, pixelsToTileUnits) {
31
+ const translatedPolygon = translate(
32
+ queryGeometry,
33
+ this.paint.get('fill-translate'),
34
+ this.paint.get('fill-translate-anchor'),
35
+ transform.angle,
36
+ pixelsToTileUnits
37
+ );
38
+ return polygonIntersectsMultiPolygon(translatedPolygon, geometry);
39
+ }
40
+
41
+ isTileClipped() {
42
+ return true;
43
+ }
44
+ }
45
+
46
+ module.exports = FillStyleLayer;
@@ -0,0 +1,45 @@
1
+ // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
+
3
+ const { Properties, CrossFadedDataDrivenProperty, DataConstantProperty, DataDrivenProperty } = require('../properties');
4
+
5
+ const paint = new Properties({
6
+ 'fill-antialias': new DataConstantProperty({ type: 'boolean', default: true, expression: { parameters: ['zoom'] } }),
7
+ 'fill-opacity': new DataDrivenProperty({
8
+ type: 'number',
9
+ default: 1,
10
+ transition: true,
11
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
12
+ }),
13
+ 'fill-color': new DataDrivenProperty({
14
+ type: 'color',
15
+ default: '#000000',
16
+ transition: true,
17
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
18
+ }),
19
+ 'fill-outline-color': new DataDrivenProperty({
20
+ type: 'color',
21
+ transition: true,
22
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
23
+ }),
24
+ 'fill-translate': new DataConstantProperty({
25
+ type: 'array',
26
+ value: 'number',
27
+ length: 2,
28
+ default: [0, 0],
29
+ transition: true,
30
+ expression: { interpolated: true, parameters: ['zoom'] }
31
+ }),
32
+ 'fill-translate-anchor': new DataConstantProperty({
33
+ type: 'enum',
34
+ values: ['map', 'viewport'],
35
+ default: 'map',
36
+ expression: { parameters: ['zoom'] }
37
+ }),
38
+ 'fill-pattern': new CrossFadedDataDrivenProperty({
39
+ type: 'string',
40
+ transition: true,
41
+ expression: { parameters: ['zoom', 'feature'] }
42
+ })
43
+ });
44
+
45
+ module.exports = { paint };
@@ -0,0 +1,51 @@
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');
6
+
7
+ class HeatmapStyleLayer extends StyleLayer {
8
+ createBucket(options) {
9
+ return new HeatmapBucket(options);
10
+ }
11
+
12
+ constructor(layer) {
13
+ super(layer, properties);
14
+
15
+ // make sure color ramp texture is generated for default heatmap color too
16
+ this._updateColorRamp();
17
+ }
18
+
19
+ _handleSpecialPaintPropertyUpdate(name) {
20
+ if (name === 'heatmap-color') {
21
+ this._updateColorRamp();
22
+ }
23
+ }
24
+
25
+ _updateColorRamp() {
26
+ const expression = this._transitionablePaint._values['heatmap-color'].value.expression;
27
+ this.colorRamp = renderColorRamp(expression, 'heatmapDensity');
28
+ this.colorRampTexture = null;
29
+ }
30
+
31
+ resize() {
32
+ if (this.heatmapFbo) {
33
+ this.heatmapFbo.destroy();
34
+ this.heatmapFbo = null;
35
+ }
36
+ }
37
+
38
+ queryRadius() {
39
+ return 0;
40
+ }
41
+
42
+ queryIntersectsFeature() {
43
+ return false;
44
+ }
45
+
46
+ hasOffscreenPass() {
47
+ return this.paint.get('heatmap-opacity') !== 0 && this.visibility !== 'none';
48
+ }
49
+ }
50
+
51
+ module.exports = HeatmapStyleLayer;
@@ -0,0 +1,52 @@
1
+ // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
+
3
+ const { Properties, ColorRampProperty, DataConstantProperty, DataDrivenProperty } = require('../properties');
4
+
5
+ const paint = new Properties({
6
+ 'heatmap-radius': new DataDrivenProperty({
7
+ type: 'number',
8
+ default: 30,
9
+ transition: true,
10
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
11
+ }),
12
+ 'heatmap-weight': new DataDrivenProperty({
13
+ type: 'number',
14
+ default: 1,
15
+ expression: { interpolated: true, parameters: ['zoom', 'feature'] }
16
+ }),
17
+ 'heatmap-intensity': new DataConstantProperty({
18
+ type: 'number',
19
+ default: 1,
20
+ transition: true,
21
+ expression: { interpolated: true, parameters: ['zoom'] }
22
+ }),
23
+ 'heatmap-color': new ColorRampProperty({
24
+ type: 'color',
25
+ default: [
26
+ 'interpolate',
27
+ ['linear'],
28
+ ['heatmap-density'],
29
+ 0,
30
+ 'rgba(0, 0, 255, 0)',
31
+ 0.1,
32
+ 'royalblue',
33
+ 0.3,
34
+ 'cyan',
35
+ 0.5,
36
+ 'lime',
37
+ 0.7,
38
+ 'yellow',
39
+ 1,
40
+ 'red'
41
+ ],
42
+ expression: { interpolated: true, parameters: ['heatmap-density'] }
43
+ }),
44
+ 'heatmap-opacity': new DataConstantProperty({
45
+ type: 'number',
46
+ default: 1,
47
+ transition: true,
48
+ expression: { interpolated: true, parameters: ['zoom'] }
49
+ })
50
+ });
51
+
52
+ module.exports = { paint };
@@ -0,0 +1,15 @@
1
+ const StyleLayer = require('../style_layer');
2
+
3
+ const properties = require('./hillshade_style_layer_properties');
4
+
5
+ class HillshadeStyleLayer extends StyleLayer {
6
+ constructor(layer) {
7
+ super(layer, properties);
8
+ }
9
+
10
+ hasOffscreenPass() {
11
+ return this.paint.get('hillshade-exaggeration') !== 0 && this.visibility !== 'none';
12
+ }
13
+ }
14
+
15
+ module.exports = HillshadeStyleLayer;