@mapgis/mapbox-gl 16.0.0 → 16.2.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 (441) hide show
  1. package/dist/mapbox-gl.js +4 -4
  2. package/dist/mapbox-gl.js.map +1 -1
  3. package/package.json +4 -5
  4. package/.flowconfig +0 -61
  5. package/LICENSE.txt +0 -84
  6. package/README.md +0 -34
  7. package/build/banner.js +0 -4
  8. package/build/check-bundle-size.js +0 -140
  9. package/build/generate-access-token-script.js +0 -11
  10. package/build/generate-flow-typed-style-spec.js +0 -188
  11. package/build/generate-release-list.js +0 -21
  12. package/build/generate-struct-arrays.js +0 -237
  13. package/build/generate-style-code.js +0 -159
  14. package/build/mapbox-gl.js.flow +0 -3
  15. package/build/print-release-url.js +0 -6
  16. package/build/rollup_plugin_minify_style_spec.js +0 -20
  17. package/build/rollup_plugins.js +0 -80
  18. package/build/run-node +0 -3
  19. package/build/run-tap +0 -8
  20. package/build/test/build-tape.js +0 -19
  21. package/dist/mapbox-gl-csp-worker.js +0 -2
  22. package/dist/mapbox-gl-csp-worker.js.map +0 -1
  23. package/dist/mapbox-gl-csp.js +0 -2
  24. package/dist/mapbox-gl-csp.js.map +0 -1
  25. package/dist/mapbox-gl-dev.js +0 -68798
  26. package/dist/mapbox-gl-unminified.js +0 -45076
  27. package/dist/mapbox-gl-unminified.js.map +0 -1
  28. package/flow-typed/gl.js +0 -5
  29. package/flow-typed/jsdom.js +0 -18
  30. package/flow-typed/mapbox-gl-supported.js +0 -9
  31. package/flow-typed/mapbox-unitbezier.js +0 -14
  32. package/flow-typed/offscreen-canvas.js +0 -9
  33. package/flow-typed/pbf.js +0 -25
  34. package/flow-typed/point-geometry.js +0 -44
  35. package/flow-typed/potpack.js +0 -12
  36. package/flow-typed/sinon.js +0 -28
  37. package/flow-typed/vector-tile.js +0 -41
  38. package/src/css/mapbox-gl.css +0 -798
  39. package/src/css/svg/mapboxgl-ctrl-attrib.svg +0 -3
  40. package/src/css/svg/mapboxgl-ctrl-compass.svg +0 -4
  41. package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +0 -3
  42. package/src/css/svg/mapboxgl-ctrl-geolocate.svg +0 -5
  43. package/src/css/svg/mapboxgl-ctrl-logo.svg +0 -20
  44. package/src/css/svg/mapboxgl-ctrl-shrink.svg +0 -3
  45. package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +0 -3
  46. package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +0 -3
  47. package/src/data/array_types.js +0 -1095
  48. package/src/data/bucket/circle_attributes.js +0 -9
  49. package/src/data/bucket/circle_bucket.js +0 -204
  50. package/src/data/bucket/fill_attributes.js +0 -9
  51. package/src/data/bucket/fill_bucket.js +0 -233
  52. package/src/data/bucket/fill_extrusion_attributes.js +0 -10
  53. package/src/data/bucket/fill_extrusion_bucket.js +0 -289
  54. package/src/data/bucket/heatmap_bucket.js +0 -17
  55. package/src/data/bucket/line_attributes.js +0 -10
  56. package/src/data/bucket/line_bucket.js +0 -556
  57. package/src/data/bucket/pattern_attributes.js +0 -10
  58. package/src/data/bucket/pattern_bucket_features.js +0 -60
  59. package/src/data/bucket/symbol_attributes.js +0 -117
  60. package/src/data/bucket/symbol_bucket.js +0 -972
  61. package/src/data/bucket.js +0 -123
  62. package/src/data/dem_data.js +0 -125
  63. package/src/data/extent.js +0 -18
  64. package/src/data/feature_index.js +0 -321
  65. package/src/data/feature_position_map.js +0 -125
  66. package/src/data/index_array_type.js +0 -16
  67. package/src/data/load_geometry.js +0 -48
  68. package/src/data/pos_attributes.js +0 -6
  69. package/src/data/program_configuration.js +0 -687
  70. package/src/data/raster_bounds_attributes.js +0 -7
  71. package/src/data/segment.js +0 -76
  72. package/src/geo/edge_insets.js +0 -102
  73. package/src/geo/lng_lat.js +0 -165
  74. package/src/geo/lng_lat_bounds.js +0 -267
  75. package/src/geo/mercator_coordinate.js +0 -153
  76. package/src/geo/transform.js +0 -864
  77. package/src/gl/color_mode.js +0 -34
  78. package/src/gl/context.js +0 -298
  79. package/src/gl/cull_face_mode.js +0 -26
  80. package/src/gl/depth_mode.js +0 -29
  81. package/src/gl/framebuffer.js +0 -44
  82. package/src/gl/index_buffer.js +0 -55
  83. package/src/gl/stencil_mode.js +0 -30
  84. package/src/gl/types.js +0 -84
  85. package/src/gl/value.js +0 -520
  86. package/src/gl/vertex_buffer.js +0 -119
  87. package/src/index.js +0 -201
  88. package/src/render/draw_background.js +0 -57
  89. package/src/render/draw_circle.js +0 -113
  90. package/src/render/draw_collision_debug.js +0 -49
  91. package/src/render/draw_custom.js +0 -49
  92. package/src/render/draw_debug.js +0 -127
  93. package/src/render/draw_fill.js +0 -126
  94. package/src/render/draw_fill_extrusion.js +0 -96
  95. package/src/render/draw_heatmap.js +0 -140
  96. package/src/render/draw_hillshade.js +0 -108
  97. package/src/render/draw_line.js +0 -98
  98. package/src/render/draw_raster.js +0 -125
  99. package/src/render/draw_symbol.js +0 -394
  100. package/src/render/glyph_atlas.js +0 -71
  101. package/src/render/glyph_manager.js +0 -182
  102. package/src/render/image_atlas.js +0 -149
  103. package/src/render/image_manager.js +0 -306
  104. package/src/render/line_atlas.js +0 -210
  105. package/src/render/painter.js +0 -653
  106. package/src/render/program/background_program.js +0 -103
  107. package/src/render/program/circle_program.js +0 -69
  108. package/src/render/program/clipping_mask_program.js +0 -20
  109. package/src/render/program/collision_program.js +0 -49
  110. package/src/render/program/debug_program.js +0 -35
  111. package/src/render/program/fill_extrusion_program.js +0 -122
  112. package/src/render/program/fill_program.js +0 -126
  113. package/src/render/program/heatmap_program.js +0 -83
  114. package/src/render/program/hillshade_program.js +0 -122
  115. package/src/render/program/line_program.js +0 -207
  116. package/src/render/program/pattern.js +0 -102
  117. package/src/render/program/program_uniforms.js +0 -42
  118. package/src/render/program/raster_program.js +0 -92
  119. package/src/render/program/symbol_program.js +0 -224
  120. package/src/render/program.js +0 -168
  121. package/src/render/texture.js +0 -122
  122. package/src/render/uniform_binding.js +0 -147
  123. package/src/render/vertex_array_object.js +0 -163
  124. package/src/shaders/README.md +0 -42
  125. package/src/shaders/_prelude.fragment.glsl +0 -17
  126. package/src/shaders/_prelude.vertex.glsl +0 -73
  127. package/src/shaders/background.fragment.glsl +0 -10
  128. package/src/shaders/background.vertex.glsl +0 -7
  129. package/src/shaders/background_pattern.fragment.glsl +0 -28
  130. package/src/shaders/background_pattern.vertex.glsl +0 -20
  131. package/src/shaders/circle.fragment.glsl +0 -39
  132. package/src/shaders/circle.vertex.glsl +0 -64
  133. package/src/shaders/clipping_mask.fragment.glsl +0 -3
  134. package/src/shaders/clipping_mask.vertex.glsl +0 -7
  135. package/src/shaders/collision_box.fragment.glsl +0 -21
  136. package/src/shaders/collision_box.vertex.glsl +0 -27
  137. package/src/shaders/collision_circle.fragment.glsl +0 -34
  138. package/src/shaders/collision_circle.vertex.glsl +0 -36
  139. package/src/shaders/debug.fragment.glsl +0 -9
  140. package/src/shaders/debug.vertex.glsl +0 -12
  141. package/src/shaders/encode_attribute.js +0 -17
  142. package/src/shaders/fill.fragment.glsl +0 -13
  143. package/src/shaders/fill.vertex.glsl +0 -13
  144. package/src/shaders/fill_extrusion.fragment.glsl +0 -9
  145. package/src/shaders/fill_extrusion.vertex.glsl +0 -66
  146. package/src/shaders/fill_extrusion_pattern.fragment.glsl +0 -45
  147. package/src/shaders/fill_extrusion_pattern.vertex.glsl +0 -79
  148. package/src/shaders/fill_outline.fragment.glsl +0 -17
  149. package/src/shaders/fill_outline.vertex.glsl +0 -17
  150. package/src/shaders/fill_outline_pattern.fragment.glsl +0 -43
  151. package/src/shaders/fill_outline_pattern.vertex.glsl +0 -44
  152. package/src/shaders/fill_pattern.fragment.glsl +0 -36
  153. package/src/shaders/fill_pattern.vertex.glsl +0 -39
  154. package/src/shaders/heatmap.fragment.glsl +0 -22
  155. package/src/shaders/heatmap.vertex.glsl +0 -54
  156. package/src/shaders/heatmap_texture.fragment.glsl +0 -14
  157. package/src/shaders/heatmap_texture.vertex.glsl +0 -11
  158. package/src/shaders/hillshade.fragment.glsl +0 -52
  159. package/src/shaders/hillshade.vertex.glsl +0 -11
  160. package/src/shaders/hillshade_prepare.fragment.glsl +0 -74
  161. package/src/shaders/hillshade_prepare.vertex.glsl +0 -15
  162. package/src/shaders/index.js +0 -20
  163. package/src/shaders/line.fragment.glsl +0 -30
  164. package/src/shaders/line.vertex.glsl +0 -85
  165. package/src/shaders/line_gradient.fragment.glsl +0 -34
  166. package/src/shaders/line_gradient.vertex.glsl +0 -87
  167. package/src/shaders/line_pattern.fragment.glsl +0 -74
  168. package/src/shaders/line_pattern.vertex.glsl +0 -99
  169. package/src/shaders/line_sdf.fragment.glsl +0 -45
  170. package/src/shaders/line_sdf.vertex.glsl +0 -98
  171. package/src/shaders/raster.fragment.glsl +0 -52
  172. package/src/shaders/raster.vertex.glsl +0 -21
  173. package/src/shaders/shaders.js +0 -180
  174. package/src/shaders/symbol_icon.fragment.glsl +0 -17
  175. package/src/shaders/symbol_icon.vertex.glsl +0 -94
  176. package/src/shaders/symbol_sdf.fragment.glsl +0 -52
  177. package/src/shaders/symbol_sdf.vertex.glsl +0 -115
  178. package/src/shaders/symbol_text_and_icon.fragment.glsl +0 -68
  179. package/src/shaders/symbol_text_and_icon.vertex.glsl +0 -116
  180. package/src/source/canvas_source.js +0 -238
  181. package/src/source/geojson_helper.js +0 -92
  182. package/src/source/geojson_source.js +0 -374
  183. package/src/source/geojson_worker_source.js +0 -357
  184. package/src/source/geojson_wrapper.js +0 -94
  185. package/src/source/image_source.js +0 -307
  186. package/src/source/load_tilejson.js +0 -39
  187. package/src/source/mbtiles_source.js +0 -115
  188. package/src/source/offline_database.js +0 -61
  189. package/src/source/offline_database_root.js +0 -62
  190. package/src/source/pixels_to_tile_units.js +0 -21
  191. package/src/source/query_features.js +0 -208
  192. package/src/source/raster_dem_tile_source.js +0 -138
  193. package/src/source/raster_dem_tile_worker_source.js +0 -62
  194. package/src/source/raster_tile_offline_source.js +0 -136
  195. package/src/source/raster_tile_source.js +0 -177
  196. package/src/source/rtl_text_plugin.js +0 -138
  197. package/src/source/source.js +0 -137
  198. package/src/source/source_cache.js +0 -957
  199. package/src/source/source_state.js +0 -159
  200. package/src/source/tile.js +0 -465
  201. package/src/source/tile_bounds.js +0 -38
  202. package/src/source/tile_cache.js +0 -212
  203. package/src/source/tile_id.js +0 -402
  204. package/src/source/vector_tile_source.js +0 -192
  205. package/src/source/vector_tile_worker_source.js +0 -216
  206. package/src/source/video_source.js +0 -203
  207. package/src/source/worker.js +0 -237
  208. package/src/source/worker_source.js +0 -106
  209. package/src/source/worker_tile.js +0 -224
  210. package/src/style/create_style_layer.js +0 -36
  211. package/src/style/evaluation_parameters.js +0 -62
  212. package/src/style/light.js +0 -130
  213. package/src/style/load_glyph_range.js +0 -38
  214. package/src/style/load_sprite.js +0 -67
  215. package/src/style/parse_glyph_pbf.js +0 -44
  216. package/src/style/pauseable_placement.js +0 -132
  217. package/src/style/properties.js +0 -753
  218. package/src/style/query_utils.js +0 -43
  219. package/src/style/style.js +0 -1361
  220. package/src/style/style_glyph.js +0 -17
  221. package/src/style/style_image.js +0 -137
  222. package/src/style/style_layer/background_style_layer.js +0 -21
  223. package/src/style/style_layer/background_style_layer_properties.js +0 -40
  224. package/src/style/style_layer/circle_style_layer.js +0 -98
  225. package/src/style/style_layer/circle_style_layer_properties.js +0 -63
  226. package/src/style/style_layer/custom_style_layer.js +0 -223
  227. package/src/style/style_layer/fill_extrusion_style_layer.js +0 -224
  228. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +0 -50
  229. package/src/style/style_layer/fill_style_layer.js +0 -67
  230. package/src/style/style_layer/fill_style_layer_properties.js +0 -55
  231. package/src/style/style_layer/heatmap_style_layer.js +0 -69
  232. package/src/style/style_layer/heatmap_style_layer_properties.js +0 -44
  233. package/src/style/style_layer/hillshade_style_layer.js +0 -25
  234. package/src/style/style_layer/hillshade_style_layer_properties.js +0 -46
  235. package/src/style/style_layer/layer_properties.js.ejs +0 -69
  236. package/src/style/style_layer/line_style_layer.js +0 -151
  237. package/src/style/style_layer/line_style_layer_properties.js +0 -71
  238. package/src/style/style_layer/raster_style_layer.js +0 -21
  239. package/src/style/style_layer/raster_style_layer_properties.js +0 -50
  240. package/src/style/style_layer/symbol_style_layer.js +0 -190
  241. package/src/style/style_layer/symbol_style_layer_properties.js +0 -153
  242. package/src/style/style_layer/typed_style_layer.js +0 -17
  243. package/src/style/style_layer.js +0 -281
  244. package/src/style/style_layer_index.js +0 -80
  245. package/src/style/validate_style.js +0 -42
  246. package/src/style/zoom_history.js +0 -44
  247. package/src/style-spec/.eslintrc +0 -5
  248. package/src/style-spec/CHANGELOG.md +0 -438
  249. package/src/style-spec/README.md +0 -59
  250. package/src/style-spec/bin/gl-style-composite +0 -9
  251. package/src/style-spec/bin/gl-style-format +0 -22
  252. package/src/style-spec/bin/gl-style-migrate +0 -9
  253. package/src/style-spec/bin/gl-style-validate +0 -50
  254. package/src/style-spec/composite.js +0 -50
  255. package/src/style-spec/declass.js +0 -42
  256. package/src/style-spec/deref.js +0 -52
  257. package/src/style-spec/diff.js +0 -393
  258. package/src/style-spec/dist/.gitkeep +0 -0
  259. package/src/style-spec/empty.js +0 -29
  260. package/src/style-spec/error/parsing_error.js +0 -16
  261. package/src/style-spec/error/validation_error.js +0 -18
  262. package/src/style-spec/expression/compound_expression.js +0 -162
  263. package/src/style-spec/expression/definitions/assertion.js +0 -130
  264. package/src/style-spec/expression/definitions/at.js +0 -70
  265. package/src/style-spec/expression/definitions/case.js +0 -85
  266. package/src/style-spec/expression/definitions/coalesce.js +0 -93
  267. package/src/style-spec/expression/definitions/coercion.js +0 -133
  268. package/src/style-spec/expression/definitions/collator.js +0 -78
  269. package/src/style-spec/expression/definitions/comparison.js +0 -184
  270. package/src/style-spec/expression/definitions/format.js +0 -144
  271. package/src/style-spec/expression/definitions/format_section_override.js +0 -54
  272. package/src/style-spec/expression/definitions/image.js +0 -52
  273. package/src/style-spec/expression/definitions/in.js +0 -92
  274. package/src/style-spec/expression/definitions/index.js +0 -561
  275. package/src/style-spec/expression/definitions/interpolate.js +0 -267
  276. package/src/style-spec/expression/definitions/length.js +0 -61
  277. package/src/style-spec/expression/definitions/let.js +0 -72
  278. package/src/style-spec/expression/definitions/literal.js +0 -77
  279. package/src/style-spec/expression/definitions/match.js +0 -158
  280. package/src/style-spec/expression/definitions/number_format.js +0 -142
  281. package/src/style-spec/expression/definitions/step.js +0 -120
  282. package/src/style-spec/expression/definitions/var.js +0 -46
  283. package/src/style-spec/expression/definitions/within.js +0 -333
  284. package/src/style-spec/expression/evaluation_context.js +0 -59
  285. package/src/style-spec/expression/expression.js +0 -27
  286. package/src/style-spec/expression/index.js +0 -392
  287. package/src/style-spec/expression/is_constant.js +0 -59
  288. package/src/style-spec/expression/parsing_context.js +0 -233
  289. package/src/style-spec/expression/parsing_error.js +0 -13
  290. package/src/style-spec/expression/runtime_error.js +0 -17
  291. package/src/style-spec/expression/scope.js +0 -36
  292. package/src/style-spec/expression/stops.js +0 -39
  293. package/src/style-spec/expression/types/collator.js +0 -61
  294. package/src/style-spec/expression/types/formatted.js +0 -73
  295. package/src/style-spec/expression/types/resolved_image.js +0 -29
  296. package/src/style-spec/expression/types.js +0 -106
  297. package/src/style-spec/expression/values.js +0 -123
  298. package/src/style-spec/feature_filter/README.md +0 -55
  299. package/src/style-spec/feature_filter/convert.js +0 -208
  300. package/src/style-spec/feature_filter/index.js +0 -165
  301. package/src/style-spec/format.js +0 -51
  302. package/src/style-spec/function/convert.js +0 -254
  303. package/src/style-spec/function/index.js +0 -262
  304. package/src/style-spec/group_by_layout.js +0 -75
  305. package/src/style-spec/migrate/expressions.js +0 -39
  306. package/src/style-spec/migrate/v8.js +0 -203
  307. package/src/style-spec/migrate/v9.js +0 -26
  308. package/src/style-spec/migrate.js +0 -36
  309. package/src/style-spec/package.json +0 -41
  310. package/src/style-spec/read_style.js +0 -14
  311. package/src/style-spec/reference/latest.js +0 -3
  312. package/src/style-spec/reference/v8.json +0 -5808
  313. package/src/style-spec/rollup.config.js +0 -45
  314. package/src/style-spec/style-spec.js +0 -122
  315. package/src/style-spec/types.js +0 -438
  316. package/src/style-spec/util/color.js +0 -95
  317. package/src/style-spec/util/color_spaces.js +0 -139
  318. package/src/style-spec/util/deep_equal.js +0 -28
  319. package/src/style-spec/util/extend.js +0 -10
  320. package/src/style-spec/util/get_type.js +0 -17
  321. package/src/style-spec/util/interpolate.js +0 -22
  322. package/src/style-spec/util/properties.js +0 -15
  323. package/src/style-spec/util/ref_properties.js +0 -2
  324. package/src/style-spec/util/result.js +0 -19
  325. package/src/style-spec/util/unbundle_jsonlint.js +0 -24
  326. package/src/style-spec/validate/latest.js +0 -11
  327. package/src/style-spec/validate/validate.js +0 -75
  328. package/src/style-spec/validate/validate_array.js +0 -52
  329. package/src/style-spec/validate/validate_boolean.js +0 -15
  330. package/src/style-spec/validate/validate_color.js +0 -20
  331. package/src/style-spec/validate/validate_constants.js +0 -13
  332. package/src/style-spec/validate/validate_enum.js +0 -21
  333. package/src/style-spec/validate/validate_expression.js +0 -43
  334. package/src/style-spec/validate/validate_filter.js +0 -111
  335. package/src/style-spec/validate/validate_formatted.js +0 -11
  336. package/src/style-spec/validate/validate_function.js +0 -207
  337. package/src/style-spec/validate/validate_glyphs_url.js +0 -21
  338. package/src/style-spec/validate/validate_image.js +0 -11
  339. package/src/style-spec/validate/validate_layer.js +0 -134
  340. package/src/style-spec/validate/validate_layout_property.js +0 -6
  341. package/src/style-spec/validate/validate_light.js +0 -47
  342. package/src/style-spec/validate/validate_number.js +0 -29
  343. package/src/style-spec/validate/validate_object.js +0 -61
  344. package/src/style-spec/validate/validate_paint_property.js +0 -6
  345. package/src/style-spec/validate/validate_property.js +0 -64
  346. package/src/style-spec/validate/validate_source.js +0 -111
  347. package/src/style-spec/validate/validate_string.js +0 -15
  348. package/src/style-spec/validate_mapbox_api_supported.js +0 -171
  349. package/src/style-spec/validate_style.js +0 -39
  350. package/src/style-spec/validate_style.min.js +0 -78
  351. package/src/style-spec/visit.js +0 -77
  352. package/src/symbol/anchor.js +0 -26
  353. package/src/symbol/check_max_angle.js +0 -81
  354. package/src/symbol/clip_line.js +0 -71
  355. package/src/symbol/collision_feature.js +0 -217
  356. package/src/symbol/collision_index.js +0 -372
  357. package/src/symbol/cross_tile_symbol_index.js +0 -301
  358. package/src/symbol/get_anchors.js +0 -167
  359. package/src/symbol/grid_index.js +0 -335
  360. package/src/symbol/mergelines.js +0 -82
  361. package/src/symbol/one_em.js +0 -4
  362. package/src/symbol/opacity_state.js +0 -27
  363. package/src/symbol/placement.js +0 -1062
  364. package/src/symbol/projection.js +0 -450
  365. package/src/symbol/quads.js +0 -334
  366. package/src/symbol/shaping.js +0 -816
  367. package/src/symbol/symbol_layout.js +0 -772
  368. package/src/symbol/symbol_size.js +0 -113
  369. package/src/symbol/transform_text.js +0 -29
  370. package/src/types/callback.js +0 -17
  371. package/src/types/cancelable.js +0 -3
  372. package/src/types/tilejson.js +0 -17
  373. package/src/types/transferable.js +0 -3
  374. package/src/types/window.js +0 -172
  375. package/src/ui/anchor.js +0 -32
  376. package/src/ui/bind_handlers.js +0 -202
  377. package/src/ui/camera.js +0 -1152
  378. package/src/ui/control/attribution_control.js +0 -189
  379. package/src/ui/control/fps_control.js +0 -185
  380. package/src/ui/control/fullscreen_control.js +0 -147
  381. package/src/ui/control/geolocate_control.js +0 -594
  382. package/src/ui/control/logo_control.js +0 -92
  383. package/src/ui/control/navigation_control.js +0 -148
  384. package/src/ui/control/scale_control.js +0 -142
  385. package/src/ui/crs.js +0 -64
  386. package/src/ui/default_locale.js +0 -20
  387. package/src/ui/events.js +0 -806
  388. package/src/ui/handler/box_zoom.js +0 -175
  389. package/src/ui/handler/dblclick_zoom.js +0 -139
  390. package/src/ui/handler/drag_pan.js +0 -416
  391. package/src/ui/handler/drag_rotate.js +0 -378
  392. package/src/ui/handler/keyboard.js +0 -161
  393. package/src/ui/handler/scroll_zoom.js +0 -333
  394. package/src/ui/handler/touch_zoom_rotate.js +0 -293
  395. package/src/ui/hash.js +0 -147
  396. package/src/ui/map.js +0 -2883
  397. package/src/ui/marker.js +0 -607
  398. package/src/ui/offline_map.js +0 -91
  399. package/src/ui/popup.js +0 -530
  400. package/src/util/actor.js +0 -212
  401. package/src/util/ajax.js +0 -371
  402. package/src/util/browser/web_worker.js +0 -10
  403. package/src/util/browser/window.js +0 -5
  404. package/src/util/browser.js +0 -70
  405. package/src/util/classify_rings.js +0 -52
  406. package/src/util/color_ramp.js +0 -28
  407. package/src/util/config.js +0 -30
  408. package/src/util/debug.js +0 -12
  409. package/src/util/dictionary_coder.js +0 -30
  410. package/src/util/dispatcher.js +0 -70
  411. package/src/util/dom.js +0 -144
  412. package/src/util/evented.js +0 -174
  413. package/src/util/find_pole_of_inaccessibility.js +0 -129
  414. package/src/util/global_worker_pool.js +0 -17
  415. package/src/util/image.js +0 -142
  416. package/src/util/intersection_tests.js +0 -208
  417. package/src/util/is_char_in_unicode_block.js +0 -311
  418. package/src/util/mapbox.js +0 -486
  419. package/src/util/offscreen_canvas_supported.js +0 -14
  420. package/src/util/performance.js +0 -112
  421. package/src/util/primitives.js +0 -145
  422. package/src/util/resolve_tokens.js +0 -16
  423. package/src/util/script_detection.js +0 -328
  424. package/src/util/sku_token.js +0 -42
  425. package/src/util/smart_wrap.js +0 -55
  426. package/src/util/struct_array.js +0 -243
  427. package/src/util/struct_array.js.ejs +0 -112
  428. package/src/util/struct_array_layout.js.ejs +0 -98
  429. package/src/util/task_queue.js +0 -68
  430. package/src/util/throttle.js +0 -28
  431. package/src/util/throttled_invoker.js +0 -46
  432. package/src/util/tile_cover.js +0 -101
  433. package/src/util/tile_request_cache.js +0 -172
  434. package/src/util/util.js +0 -504
  435. package/src/util/vectortile_to_geojson.js +0 -54
  436. package/src/util/verticalize_punctuation.js +0 -114
  437. package/src/util/web_worker.js +0 -91
  438. package/src/util/web_worker_transfer.js +0 -266
  439. package/src/util/webp_supported.js +0 -69
  440. package/src/util/window.js +0 -102
  441. package/src/util/worker_pool.js +0 -47
@@ -1,71 +0,0 @@
1
- // @flow
2
-
3
- import Point from '@mapbox/point-geometry';
4
-
5
- export default clipLine;
6
-
7
- /**
8
- * Returns the part of a multiline that intersects with the provided rectangular box.
9
- *
10
- * @param lines
11
- * @param x1 the left edge of the box
12
- * @param y1 the top edge of the box
13
- * @param x2 the right edge of the box
14
- * @param y2 the bottom edge of the box
15
- * @returns lines
16
- * @private
17
- */
18
- function clipLine(lines: Array<Array<Point>>, x1: number, y1: number, x2: number, y2: number): Array<Array<Point>> {
19
- const clippedLines = [];
20
-
21
- for (let l = 0; l < lines.length; l++) {
22
- const line = lines[l];
23
- let clippedLine;
24
-
25
- for (let i = 0; i < line.length - 1; i++) {
26
- let p0 = line[i];
27
- let p1 = line[i + 1];
28
-
29
- if (p0.x < x1 && p1.x < x1) {
30
- continue;
31
- } else if (p0.x < x1) {
32
- p0 = new Point(x1, p0.y + (p1.y - p0.y) * ((x1 - p0.x) / (p1.x - p0.x)))._round();
33
- } else if (p1.x < x1) {
34
- p1 = new Point(x1, p0.y + (p1.y - p0.y) * ((x1 - p0.x) / (p1.x - p0.x)))._round();
35
- }
36
-
37
- if (p0.y < y1 && p1.y < y1) {
38
- continue;
39
- } else if (p0.y < y1) {
40
- p0 = new Point(p0.x + (p1.x - p0.x) * ((y1 - p0.y) / (p1.y - p0.y)), y1)._round();
41
- } else if (p1.y < y1) {
42
- p1 = new Point(p0.x + (p1.x - p0.x) * ((y1 - p0.y) / (p1.y - p0.y)), y1)._round();
43
- }
44
-
45
- if (p0.x >= x2 && p1.x >= x2) {
46
- continue;
47
- } else if (p0.x >= x2) {
48
- p0 = new Point(x2, p0.y + (p1.y - p0.y) * ((x2 - p0.x) / (p1.x - p0.x)))._round();
49
- } else if (p1.x >= x2) {
50
- p1 = new Point(x2, p0.y + (p1.y - p0.y) * ((x2 - p0.x) / (p1.x - p0.x)))._round();
51
- }
52
-
53
- if (p0.y >= y2 && p1.y >= y2) {
54
- continue;
55
- } else if (p0.y >= y2) {
56
- p0 = new Point(p0.x + (p1.x - p0.x) * ((y2 - p0.y) / (p1.y - p0.y)), y2)._round();
57
- } else if (p1.y >= y2) {
58
- p1 = new Point(p0.x + (p1.x - p0.x) * ((y2 - p0.y) / (p1.y - p0.y)), y2)._round();
59
- }
60
-
61
- if (!clippedLine || !p0.equals(clippedLine[clippedLine.length - 1])) {
62
- clippedLine = [p0];
63
- clippedLines.push(clippedLine);
64
- }
65
-
66
- clippedLine.push(p1);
67
- }
68
- }
69
-
70
- return clippedLines;
71
- }
@@ -1,217 +0,0 @@
1
- // @flow
2
-
3
- import type {CollisionBoxArray} from '../data/array_types';
4
- import Point from '@mapbox/point-geometry';
5
- import type Anchor from './anchor';
6
-
7
- /**
8
- * A CollisionFeature represents the area of the tile covered by a single label.
9
- * It is used with CollisionIndex to check if the label overlaps with any
10
- * previous labels. A CollisionFeature is mostly just a set of CollisionBox
11
- * objects.
12
- *
13
- * @private
14
- */
15
- class CollisionFeature {
16
- boxStartIndex: number;
17
- boxEndIndex: number;
18
-
19
- /**
20
- * Create a CollisionFeature, adding its collision box data to the given collisionBoxArray in the process.
21
- *
22
- * @param line The geometry the label is placed on.
23
- * @param anchor The point along the line around which the label is anchored.
24
- * @param shaped The text or icon shaping results.
25
- * @param boxScale A magic number used to convert from glyph metrics units to geometry units.
26
- * @param padding The amount of padding to add around the label edges.
27
- * @param alignLine Whether the label is aligned with the line or the viewport.
28
- * @private
29
- */
30
- constructor(collisionBoxArray: CollisionBoxArray,
31
- line: Array<Point>,
32
- anchor: Anchor,
33
- featureIndex: number,
34
- sourceLayerIndex: number,
35
- bucketIndex: number,
36
- shaped: Object,
37
- boxScale: number,
38
- padding: number,
39
- alignLine: boolean,
40
- overscaling: number,
41
- rotate: number) {
42
- let y1 = shaped.top * boxScale - padding;
43
- let y2 = shaped.bottom * boxScale + padding;
44
- let x1 = shaped.left * boxScale - padding;
45
- let x2 = shaped.right * boxScale + padding;
46
-
47
- const collisionPadding = shaped.collisionPadding;
48
- if (collisionPadding) {
49
- x1 -= collisionPadding[0] * boxScale;
50
- y1 -= collisionPadding[1] * boxScale;
51
- x2 += collisionPadding[2] * boxScale;
52
- y2 += collisionPadding[3] * boxScale;
53
- }
54
-
55
- this.boxStartIndex = collisionBoxArray.length;
56
-
57
- if (alignLine) {
58
-
59
- let height = y2 - y1;
60
- const length = x2 - x1;
61
-
62
- if (height > 0) {
63
- // set minimum box height to avoid very many small labels
64
- height = Math.max(10 * boxScale, height);
65
-
66
- this._addLineCollisionCircles(collisionBoxArray, line, anchor, (anchor.segment: any), length, height, featureIndex, sourceLayerIndex, bucketIndex, overscaling);
67
- }
68
-
69
- } else {
70
- if (rotate) {
71
- // Account for *-rotate in point collision boxes
72
- // See https://github.com/mapbox/mapbox-gl-js/issues/6075
73
- // Doesn't account for icon-text-fit
74
-
75
- const tl = new Point(x1, y1);
76
- const tr = new Point(x2, y1);
77
- const bl = new Point(x1, y2);
78
- const br = new Point(x2, y2);
79
-
80
- const rotateRadians = rotate * Math.PI / 180;
81
-
82
- tl._rotate(rotateRadians);
83
- tr._rotate(rotateRadians);
84
- bl._rotate(rotateRadians);
85
- br._rotate(rotateRadians);
86
-
87
- // Collision features require an "on-axis" geometry,
88
- // so take the envelope of the rotated geometry
89
- // (may be quite large for wide labels rotated 45 degrees)
90
- x1 = Math.min(tl.x, tr.x, bl.x, br.x);
91
- x2 = Math.max(tl.x, tr.x, bl.x, br.x);
92
- y1 = Math.min(tl.y, tr.y, bl.y, br.y);
93
- y2 = Math.max(tl.y, tr.y, bl.y, br.y);
94
- }
95
- collisionBoxArray.emplaceBack(anchor.x, anchor.y, x1, y1, x2, y2, featureIndex, sourceLayerIndex, bucketIndex,
96
- 0, 0);
97
- }
98
-
99
- this.boxEndIndex = collisionBoxArray.length;
100
- }
101
-
102
- /**
103
- * Create a set of CollisionBox objects for a line.
104
- *
105
- * @param labelLength The length of the label in geometry units.
106
- * @param anchor The point along the line around which the label is anchored.
107
- * @param boxSize The size of the collision boxes that will be created.
108
- * @private
109
- */
110
- _addLineCollisionCircles(collisionBoxArray: CollisionBoxArray,
111
- line: Array<Point>,
112
- anchor: Anchor,
113
- segment: number,
114
- labelLength: number,
115
- boxSize: number,
116
- featureIndex: number,
117
- sourceLayerIndex: number,
118
- bucketIndex: number,
119
- overscaling: number) {
120
- const step = boxSize / 2;
121
- const nBoxes = Math.floor(labelLength / step) || 1;
122
- // We calculate line collision circles out to 300% of what would normally be our
123
- // max size, to allow collision detection to work on labels that expand as
124
- // they move into the distance
125
- // Vertically oriented labels in the distant field can extend past this padding
126
- // This is a noticeable problem in overscaled tiles where the pitch 0-based
127
- // symbol spacing will put labels very close together in a pitched map.
128
- // To reduce the cost of adding extra collision circles, we slowly increase
129
- // them for overscaled tiles.
130
- const overscalingPaddingFactor = 1 + .4 * Math.log(overscaling) / Math.LN2;
131
- const nPitchPaddingBoxes = Math.floor(nBoxes * overscalingPaddingFactor / 2);
132
-
133
- // offset the center of the first box by half a box so that the edge of the
134
- // box is at the edge of the label.
135
- const firstBoxOffset = -boxSize / 2;
136
-
137
- let p = anchor;
138
- let index = segment + 1;
139
- let anchorDistance = firstBoxOffset;
140
- const labelStartDistance = -labelLength / 2;
141
- const paddingStartDistance = labelStartDistance - labelLength / 4;
142
- // move backwards along the line to the first segment the label appears on
143
- do {
144
- index--;
145
-
146
- if (index < 0) {
147
- if (anchorDistance > labelStartDistance) {
148
- // there isn't enough room for the label after the beginning of the line
149
- // checkMaxAngle should have already caught this
150
- return;
151
- } else {
152
- // The line doesn't extend far enough back for all of our padding,
153
- // but we got far enough to show the label under most conditions.
154
- index = 0;
155
- break;
156
- }
157
- } else {
158
- anchorDistance -= line[index].dist(p);
159
- p = line[index];
160
- }
161
- } while (anchorDistance > paddingStartDistance);
162
-
163
- let segmentLength = line[index].dist(line[index + 1]);
164
-
165
- for (let i = -nPitchPaddingBoxes; i < nBoxes + nPitchPaddingBoxes; i++) {
166
-
167
- // the distance the box will be from the anchor
168
- const boxOffset = i * step;
169
- let boxDistanceToAnchor = labelStartDistance + boxOffset;
170
-
171
- // make the distance between pitch padding boxes bigger
172
- if (boxOffset < 0) boxDistanceToAnchor += boxOffset;
173
- if (boxOffset > labelLength) boxDistanceToAnchor += boxOffset - labelLength;
174
-
175
- if (boxDistanceToAnchor < anchorDistance) {
176
- // The line doesn't extend far enough back for this box, skip it
177
- // (This could allow for line collisions on distant tiles)
178
- continue;
179
- }
180
-
181
- // the box is not on the current segment. Move to the next segment.
182
- while (anchorDistance + segmentLength < boxDistanceToAnchor) {
183
- anchorDistance += segmentLength;
184
- index++;
185
-
186
- // There isn't enough room before the end of the line.
187
- if (index + 1 >= line.length) {
188
- return;
189
- }
190
-
191
- segmentLength = line[index].dist(line[index + 1]);
192
- }
193
-
194
- // the distance the box will be from the beginning of the segment
195
- const segmentBoxDistance = boxDistanceToAnchor - anchorDistance;
196
-
197
- const p0 = line[index];
198
- const p1 = line[index + 1];
199
- const boxAnchorPoint = p1.sub(p0)._unit()._mult(segmentBoxDistance)._add(p0)._round();
200
-
201
- // If the box is within boxSize of the anchor, force the box to be used
202
- // (so even 0-width labels use at least one box)
203
- // Otherwise, the .8 multiplication gives us a little bit of conservative
204
- // padding in choosing which boxes to use (see CollisionIndex#placedCollisionCircles)
205
- const paddedAnchorDistance = Math.abs(boxDistanceToAnchor - firstBoxOffset) < step ?
206
- 0 :
207
- (boxDistanceToAnchor - firstBoxOffset) * 0.8;
208
-
209
- collisionBoxArray.emplaceBack(boxAnchorPoint.x, boxAnchorPoint.y,
210
- -boxSize / 2, -boxSize / 2, boxSize / 2, boxSize / 2,
211
- featureIndex, sourceLayerIndex, bucketIndex,
212
- boxSize / 2, paddedAnchorDistance);
213
- }
214
- }
215
- }
216
-
217
- export default CollisionFeature;
@@ -1,372 +0,0 @@
1
- // @flow
2
-
3
- import Point from '@mapbox/point-geometry';
4
-
5
- import * as intersectionTests from '../util/intersection_tests';
6
- import Grid from './grid_index';
7
- import {mat4} from 'gl-matrix';
8
-
9
- import * as projection from '../symbol/projection';
10
-
11
- import type Transform from '../geo/transform';
12
- import type {SingleCollisionBox} from '../data/bucket/symbol_bucket';
13
- import type {
14
- GlyphOffsetArray,
15
- SymbolLineVertexArray
16
- } from '../data/array_types';
17
-
18
- // When a symbol crosses the edge that causes it to be included in
19
- // collision detection, it will cause changes in the symbols around
20
- // it. This constant specifies how many pixels to pad the edge of
21
- // the viewport for collision detection so that the bulk of the changes
22
- // occur offscreen. Making this constant greater increases label
23
- // stability, but it's expensive.
24
- const viewportPadding = 100;
25
-
26
- /**
27
- * A collision index used to prevent symbols from overlapping. It keep tracks of
28
- * where previous symbols have been placed and is used to check if a new
29
- * symbol overlaps with any previously added symbols.
30
- *
31
- * There are two steps to insertion: first placeCollisionBox/Circles checks if
32
- * there's room for a symbol, then insertCollisionBox/Circles actually puts the
33
- * symbol in the index. The two step process allows paired symbols to be inserted
34
- * together even if they overlap.
35
- *
36
- * @private
37
- */
38
- class CollisionIndex {
39
- grid: Grid;
40
- ignoredGrid: Grid;
41
- transform: Transform;
42
- pitchfactor: number;
43
- screenRightBoundary: number;
44
- screenBottomBoundary: number;
45
- gridRightBoundary: number;
46
- gridBottomBoundary: number;
47
-
48
- constructor(
49
- transform: Transform,
50
- grid: Grid = new Grid(transform.width + 2 * viewportPadding, transform.height + 2 * viewportPadding, 25),
51
- ignoredGrid: Grid = new Grid(transform.width + 2 * viewportPadding, transform.height + 2 * viewportPadding, 25)
52
- ) {
53
- this.transform = transform;
54
-
55
- this.grid = grid;
56
- this.ignoredGrid = ignoredGrid;
57
- this.pitchfactor = Math.cos(transform._pitch) * transform.cameraToCenterDistance;
58
-
59
- this.screenRightBoundary = transform.width + viewportPadding;
60
- this.screenBottomBoundary = transform.height + viewportPadding;
61
- this.gridRightBoundary = transform.width + 2 * viewportPadding;
62
- this.gridBottomBoundary = transform.height + 2 * viewportPadding;
63
- }
64
-
65
- placeCollisionBox(collisionBox: SingleCollisionBox, allowOverlap: boolean, textPixelRatio: number, posMatrix: mat4, collisionGroupPredicate?: any): { box: Array<number>, offscreen: boolean } {
66
- const projectedPoint = this.projectAndGetPerspectiveRatio(posMatrix, collisionBox.anchorPointX, collisionBox.anchorPointY);
67
- const tileToViewport = textPixelRatio * projectedPoint.perspectiveRatio;
68
- const tlX = collisionBox.x1 * tileToViewport + projectedPoint.point.x;
69
- const tlY = collisionBox.y1 * tileToViewport + projectedPoint.point.y;
70
- const brX = collisionBox.x2 * tileToViewport + projectedPoint.point.x;
71
- const brY = collisionBox.y2 * tileToViewport + projectedPoint.point.y;
72
-
73
- if (!this.isInsideGrid(tlX, tlY, brX, brY) ||
74
- (!allowOverlap && this.grid.hitTest(tlX, tlY, brX, brY, collisionGroupPredicate))) {
75
- return {
76
- box: [],
77
- offscreen: false
78
- };
79
- }
80
-
81
- return {
82
- box: [tlX, tlY, brX, brY],
83
- offscreen: this.isOffscreen(tlX, tlY, brX, brY)
84
- };
85
- }
86
-
87
- approximateTileDistance(tileDistance: any, lastSegmentAngle: number, pixelsToTileUnits: number, cameraToAnchorDistance: number, pitchWithMap: boolean): number {
88
- // This is a quick and dirty solution for chosing which collision circles to use (since collision circles are
89
- // laid out in tile units). Ideally, I think we should generate collision circles on the fly in viewport coordinates
90
- // at the time we do collision detection.
91
- // See https://github.com/mapbox/mapbox-gl-js/issues/5474
92
-
93
- // incidenceStretch is the ratio of how much y space a label takes up on a tile while drawn perpendicular to the viewport vs
94
- // how much space it would take up if it were drawn flat on the tile
95
- // Using law of sines, camera_to_anchor/sin(ground_angle) = camera_to_center/sin(incidence_angle)
96
- // Incidence angle 90 -> head on, sin(incidence_angle) = 1, no stretch
97
- // Incidence angle 1 -> very oblique, sin(incidence_angle) =~ 0, lots of stretch
98
- // ground_angle = u_pitch + PI/2 -> sin(ground_angle) = cos(u_pitch)
99
- // incidenceStretch = 1 / sin(incidenceAngle)
100
-
101
- const incidenceStretch = pitchWithMap ? 1 : cameraToAnchorDistance / this.pitchfactor;
102
- const lastSegmentTile = tileDistance.lastSegmentViewportDistance * pixelsToTileUnits;
103
- return tileDistance.prevTileDistance +
104
- lastSegmentTile +
105
- (incidenceStretch - 1) * lastSegmentTile * Math.abs(Math.sin(lastSegmentAngle));
106
- }
107
-
108
- placeCollisionCircles(collisionCircles: Array<number>,
109
- allowOverlap: boolean,
110
- scale: number,
111
- textPixelRatio: number,
112
- symbol: any,
113
- lineVertexArray: SymbolLineVertexArray,
114
- glyphOffsetArray: GlyphOffsetArray,
115
- fontSize: number,
116
- posMatrix: mat4,
117
- labelPlaneMatrix: mat4,
118
- showCollisionCircles: boolean,
119
- pitchWithMap: boolean,
120
- collisionGroupPredicate?: any): { circles: Array<number>, offscreen: boolean } {
121
- const placedCollisionCircles = [];
122
-
123
- const projectedAnchor = this.projectAnchor(posMatrix, symbol.anchorX, symbol.anchorY);
124
-
125
- const projectionCache = {};
126
- const fontScale = fontSize / 24;
127
- const lineOffsetX = symbol.lineOffsetX * fontSize;
128
- const lineOffsetY = symbol.lineOffsetY * fontSize;
129
-
130
- const tileUnitAnchorPoint = new Point(symbol.anchorX, symbol.anchorY);
131
- // projection.project generates NDC coordinates, as opposed to the
132
- // pixel-based grid coordinates generated by this.projectPoint
133
- const labelPlaneAnchorPoint =
134
- projection.project(tileUnitAnchorPoint, labelPlaneMatrix).point;
135
- const firstAndLastGlyph = projection.placeFirstAndLastGlyph(
136
- fontScale,
137
- glyphOffsetArray,
138
- lineOffsetX,
139
- lineOffsetY,
140
- /*flip*/ false,
141
- labelPlaneAnchorPoint,
142
- tileUnitAnchorPoint,
143
- symbol,
144
- lineVertexArray,
145
- labelPlaneMatrix,
146
- projectionCache,
147
- /*return tile distance*/ true);
148
-
149
- let collisionDetected = false;
150
- let inGrid = false;
151
- let entirelyOffscreen = true;
152
-
153
- const tileToViewport = projectedAnchor.perspectiveRatio * textPixelRatio;
154
- // pixelsToTileUnits is used for translating line geometry to tile units
155
- // ... so we care about 'scale' but not 'perspectiveRatio'
156
- // equivalent to pixel_to_tile_units
157
- const pixelsToTileUnits = 1 / (textPixelRatio * scale);
158
-
159
- let firstTileDistance = 0, lastTileDistance = 0;
160
- if (firstAndLastGlyph) {
161
- firstTileDistance = this.approximateTileDistance(firstAndLastGlyph.first.tileDistance, firstAndLastGlyph.first.angle, pixelsToTileUnits, projectedAnchor.cameraDistance, pitchWithMap);
162
- lastTileDistance = this.approximateTileDistance(firstAndLastGlyph.last.tileDistance, firstAndLastGlyph.last.angle, pixelsToTileUnits, projectedAnchor.cameraDistance, pitchWithMap);
163
- }
164
-
165
- for (let k = 0; k < collisionCircles.length; k += 5) {
166
- const anchorPointX = collisionCircles[k];
167
- const anchorPointY = collisionCircles[k + 1];
168
- const tileUnitRadius = collisionCircles[k + 2];
169
- const boxSignedDistanceFromAnchor = collisionCircles[k + 3];
170
- if (!firstAndLastGlyph ||
171
- (boxSignedDistanceFromAnchor < -firstTileDistance) ||
172
- (boxSignedDistanceFromAnchor > lastTileDistance)) {
173
- // The label either doesn't fit on its line or we
174
- // don't need to use this circle because the label
175
- // doesn't extend this far. Either way, mark the circle unused.
176
- markCollisionCircleUsed(collisionCircles, k, false);
177
- continue;
178
- }
179
-
180
- const projectedPoint = this.projectPoint(posMatrix, anchorPointX, anchorPointY);
181
- const radius = tileUnitRadius * tileToViewport;
182
-
183
- const atLeastOneCirclePlaced = placedCollisionCircles.length > 0;
184
- if (atLeastOneCirclePlaced) {
185
- const dx = projectedPoint.x - placedCollisionCircles[placedCollisionCircles.length - 4];
186
- const dy = projectedPoint.y - placedCollisionCircles[placedCollisionCircles.length - 3];
187
- // The circle edges touch when the distance between their centers is 2x the radius
188
- // When the distance is 1x the radius, they're doubled up, and we could remove
189
- // every other circle while keeping them all in touch.
190
- // We actually start removing circles when the distance is √2x the radius:
191
- // thinning the number of circles as much as possible is a major performance win,
192
- // and the small gaps introduced don't make a very noticeable difference.
193
- const placedTooDensely = radius * radius * 2 > dx * dx + dy * dy;
194
- if (placedTooDensely) {
195
- const atLeastOneMoreCircle = (k + 8) < collisionCircles.length;
196
- if (atLeastOneMoreCircle) {
197
- const nextBoxDistanceToAnchor = collisionCircles[k + 8];
198
- if ((nextBoxDistanceToAnchor > -firstTileDistance) &&
199
- (nextBoxDistanceToAnchor < lastTileDistance)) {
200
- // Hide significantly overlapping circles, unless this is the last one we can
201
- // use, in which case we want to keep it in place even if it's tightly packed
202
- // with the one before it.
203
- markCollisionCircleUsed(collisionCircles, k, false);
204
- continue;
205
- }
206
- }
207
- }
208
- }
209
- const collisionBoxArrayIndex = k / 5;
210
- placedCollisionCircles.push(projectedPoint.x, projectedPoint.y, radius, collisionBoxArrayIndex);
211
- markCollisionCircleUsed(collisionCircles, k, true);
212
-
213
- const x1 = projectedPoint.x - radius;
214
- const y1 = projectedPoint.y - radius;
215
- const x2 = projectedPoint.x + radius;
216
- const y2 = projectedPoint.y + radius;
217
- entirelyOffscreen = entirelyOffscreen && this.isOffscreen(x1, y1, x2, y2);
218
- inGrid = inGrid || this.isInsideGrid(x1, y1, x2, y2);
219
-
220
- if (!allowOverlap) {
221
- if (this.grid.hitTestCircle(projectedPoint.x, projectedPoint.y, radius, collisionGroupPredicate)) {
222
- if (!showCollisionCircles) {
223
- return {
224
- circles: [],
225
- offscreen: false
226
- };
227
- } else {
228
- // Don't early exit if we're showing the debug circles because we still want to calculate
229
- // which circles are in use
230
- collisionDetected = true;
231
- }
232
- }
233
- }
234
- }
235
-
236
- return {
237
- circles: (collisionDetected || !inGrid) ? [] : placedCollisionCircles,
238
- offscreen: entirelyOffscreen
239
- };
240
- }
241
-
242
- /**
243
- * Because the geometries in the CollisionIndex are an approximation of the shape of
244
- * symbols on the map, we use the CollisionIndex to look up the symbol part of
245
- * `queryRenderedFeatures`.
246
- *
247
- * @private
248
- */
249
- queryRenderedSymbols(viewportQueryGeometry: Array<Point>) {
250
- if (viewportQueryGeometry.length === 0 || (this.grid.keysLength() === 0 && this.ignoredGrid.keysLength() === 0)) {
251
- return {};
252
- }
253
-
254
- const query = [];
255
- let minX = Infinity;
256
- let minY = Infinity;
257
- let maxX = -Infinity;
258
- let maxY = -Infinity;
259
- for (const point of viewportQueryGeometry) {
260
- const gridPoint = new Point(point.x + viewportPadding, point.y + viewportPadding);
261
- minX = Math.min(minX, gridPoint.x);
262
- minY = Math.min(minY, gridPoint.y);
263
- maxX = Math.max(maxX, gridPoint.x);
264
- maxY = Math.max(maxY, gridPoint.y);
265
- query.push(gridPoint);
266
- }
267
-
268
- const features = this.grid.query(minX, minY, maxX, maxY)
269
- .concat(this.ignoredGrid.query(minX, minY, maxX, maxY));
270
-
271
- const seenFeatures = {};
272
- const result = {};
273
-
274
- for (const feature of features) {
275
- const featureKey = feature.key;
276
- // Skip already seen features.
277
- if (seenFeatures[featureKey.bucketInstanceId] === undefined) {
278
- seenFeatures[featureKey.bucketInstanceId] = {};
279
- }
280
- if (seenFeatures[featureKey.bucketInstanceId][featureKey.featureIndex]) {
281
- continue;
282
- }
283
-
284
- // Check if query intersects with the feature box
285
- // "Collision Circles" for line labels are treated as boxes here
286
- // Since there's no actual collision taking place, the circle vs. square
287
- // distinction doesn't matter as much, and box geometry is easier
288
- // to work with.
289
- const bbox = [
290
- new Point(feature.x1, feature.y1),
291
- new Point(feature.x2, feature.y1),
292
- new Point(feature.x2, feature.y2),
293
- new Point(feature.x1, feature.y2)
294
- ];
295
- if (!intersectionTests.polygonIntersectsPolygon(query, bbox)) {
296
- continue;
297
- }
298
-
299
- seenFeatures[featureKey.bucketInstanceId][featureKey.featureIndex] = true;
300
- if (result[featureKey.bucketInstanceId] === undefined) {
301
- result[featureKey.bucketInstanceId] = [];
302
- }
303
- result[featureKey.bucketInstanceId].push(featureKey.featureIndex);
304
- }
305
-
306
- return result;
307
- }
308
-
309
- insertCollisionBox(collisionBox: Array<number>, ignorePlacement: boolean, bucketInstanceId: number, featureIndex: number, collisionGroupID: number) {
310
- const grid = ignorePlacement ? this.ignoredGrid : this.grid;
311
-
312
- const key = {bucketInstanceId, featureIndex, collisionGroupID};
313
- grid.insert(key, collisionBox[0], collisionBox[1], collisionBox[2], collisionBox[3]);
314
- }
315
-
316
- insertCollisionCircles(collisionCircles: Array<number>, ignorePlacement: boolean, bucketInstanceId: number, featureIndex: number, collisionGroupID: number) {
317
- const grid = ignorePlacement ? this.ignoredGrid : this.grid;
318
-
319
- const key = {bucketInstanceId, featureIndex, collisionGroupID};
320
- for (let k = 0; k < collisionCircles.length; k += 4) {
321
- grid.insertCircle(key, collisionCircles[k], collisionCircles[k + 1], collisionCircles[k + 2]);
322
- }
323
- }
324
-
325
- projectAnchor(posMatrix: mat4, x: number, y: number) {
326
- const p = [x, y, 0, 1];
327
- projection.xyTransformMat4(p, p, posMatrix);
328
- return {
329
- perspectiveRatio: 0.5 + 0.5 * (this.transform.cameraToCenterDistance / p[3]),
330
- cameraDistance: p[3]
331
- };
332
- }
333
-
334
- projectPoint(posMatrix: mat4, x: number, y: number) {
335
- const p = [x, y, 0, 1];
336
- projection.xyTransformMat4(p, p, posMatrix);
337
- return new Point(
338
- (((p[0] / p[3] + 1) / 2) * this.transform.width) + viewportPadding,
339
- (((-p[1] / p[3] + 1) / 2) * this.transform.height) + viewportPadding
340
- );
341
- }
342
-
343
- projectAndGetPerspectiveRatio(posMatrix: mat4, x: number, y: number) {
344
- const p = [x, y, 0, 1];
345
- projection.xyTransformMat4(p, p, posMatrix);
346
- const a = new Point(
347
- (((p[0] / p[3] + 1) / 2) * this.transform.width) + viewportPadding,
348
- (((-p[1] / p[3] + 1) / 2) * this.transform.height) + viewportPadding
349
- );
350
- return {
351
- point: a,
352
- // See perspective ratio comment in symbol_sdf.vertex
353
- // We're doing collision detection in viewport space so we need
354
- // to scale down boxes in the distance
355
- perspectiveRatio: 0.5 + 0.5 * (this.transform.cameraToCenterDistance / p[3])
356
- };
357
- }
358
-
359
- isOffscreen(x1: number, y1: number, x2: number, y2: number) {
360
- return x2 < viewportPadding || x1 >= this.screenRightBoundary || y2 < viewportPadding || y1 > this.screenBottomBoundary;
361
- }
362
-
363
- isInsideGrid(x1: number, y1: number, x2: number, y2: number) {
364
- return x2 >= 0 && x1 < this.gridRightBoundary && y2 >= 0 && y1 < this.gridBottomBoundary;
365
- }
366
- }
367
-
368
- function markCollisionCircleUsed(collisionCircles: Array<number>, index: number, used: boolean) {
369
- collisionCircles[index + 4] = used ? 1 : 0;
370
- }
371
-
372
- export default CollisionIndex;