@mapwhit/tilerenderer 0.52.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/build/min/package.json +2 -1
- package/build/min/src/shaders/_prelude.fragment.glsl.js +2 -2
- package/build/min/src/shaders/_prelude.vertex.glsl.js +2 -2
- package/build/min/src/shaders/background.fragment.glsl.js +2 -2
- package/build/min/src/shaders/background.vertex.glsl.js +1 -1
- package/build/min/src/shaders/background_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/background_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/circle.fragment.glsl.js +2 -2
- package/build/min/src/shaders/circle.vertex.glsl.js +2 -2
- package/build/min/src/shaders/clipping_mask.fragment.glsl.js +1 -1
- package/build/min/src/shaders/clipping_mask.vertex.glsl.js +1 -1
- package/build/min/src/shaders/collision_box.fragment.glsl.js +1 -1
- package/build/min/src/shaders/collision_box.vertex.glsl.js +1 -1
- package/build/min/src/shaders/collision_circle.fragment.glsl.js +1 -1
- package/build/min/src/shaders/collision_circle.vertex.glsl.js +1 -1
- package/build/min/src/shaders/debug.fragment.glsl.js +1 -1
- package/build/min/src/shaders/debug.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/heatmap.fragment.glsl.js +2 -2
- package/build/min/src/shaders/heatmap.vertex.glsl.js +2 -2
- package/build/min/src/shaders/heatmap_texture.fragment.glsl.js +2 -2
- package/build/min/src/shaders/heatmap_texture.vertex.glsl.js +1 -1
- package/build/min/src/shaders/hillshade.fragment.glsl.js +2 -2
- package/build/min/src/shaders/hillshade.vertex.glsl.js +1 -1
- package/build/min/src/shaders/hillshade_prepare.fragment.glsl.js +2 -2
- package/build/min/src/shaders/hillshade_prepare.vertex.glsl.js +1 -1
- package/build/min/src/shaders/line.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line.vertex.glsl.js +2 -2
- package/build/min/src/shaders/line_gradient.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line_gradient.vertex.glsl.js +2 -2
- package/build/min/src/shaders/line_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/line_sdf.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line_sdf.vertex.glsl.js +2 -2
- package/build/min/src/shaders/raster.fragment.glsl.js +2 -2
- package/build/min/src/shaders/raster.vertex.glsl.js +1 -1
- package/build/min/src/shaders/symbol_icon.fragment.glsl.js +2 -2
- package/build/min/src/shaders/symbol_icon.vertex.glsl.js +2 -2
- package/build/min/src/shaders/symbol_sdf.fragment.glsl.js +2 -2
- package/build/min/src/shaders/symbol_sdf.vertex.glsl.js +2 -2
- package/package.json +5 -4
- package/src/data/array_types.js +55 -117
- package/src/data/bucket/circle_attributes.js +2 -4
- package/src/data/bucket/circle_bucket.js +19 -16
- package/src/data/bucket/fill_attributes.js +2 -4
- package/src/data/bucket/fill_bucket.js +38 -27
- package/src/data/bucket/fill_extrusion_attributes.js +2 -4
- package/src/data/bucket/fill_extrusion_bucket.js +56 -37
- package/src/data/bucket/heatmap_bucket.js +2 -11
- package/src/data/bucket/line_attributes.js +2 -4
- package/src/data/bucket/line_bucket.js +208 -163
- package/src/data/bucket/pattern_attributes.js +2 -4
- package/src/data/bucket/pattern_bucket_features.js +7 -9
- package/src/data/bucket/symbol_attributes.js +12 -26
- package/src/data/bucket/symbol_bucket.js +174 -323
- package/src/data/bucket/symbol_buffers.js +62 -0
- package/src/data/bucket/symbol_collision_buffers.js +33 -0
- package/src/data/bucket.js +26 -25
- package/src/data/dem_data.js +11 -10
- package/src/data/extent.js +1 -1
- package/src/data/feature_index.js +38 -28
- package/src/data/index_array_type.js +1 -6
- package/src/data/load_geometry.js +6 -9
- package/src/data/pos_attributes.js +2 -3
- package/src/data/program_configuration.js +47 -38
- package/src/data/raster_bounds_attributes.js +2 -2
- package/src/data/segment.js +4 -7
- package/src/geo/coordinate.js +1 -1
- package/src/geo/lng_lat.js +3 -3
- package/src/geo/lng_lat_bounds.js +8 -4
- package/src/geo/transform.js +69 -30
- package/src/gl/color_mode.js +2 -2
- package/src/gl/context.js +28 -29
- package/src/gl/cull_face_mode.js +1 -1
- package/src/gl/depth_mode.js +1 -1
- package/src/gl/framebuffer.js +8 -4
- package/src/gl/index_buffer.js +2 -2
- package/src/gl/stencil_mode.js +1 -1
- package/src/gl/value.js +33 -68
- package/src/gl/vertex_buffer.js +2 -2
- package/src/index.js +49 -25
- package/src/render/draw_background.js +17 -12
- package/src/render/draw_circle.js +15 -12
- package/src/render/draw_collision_debug.js +11 -8
- package/src/render/draw_debug.js +16 -14
- package/src/render/draw_fill.js +27 -20
- package/src/render/draw_fill_extrusion.js +20 -17
- package/src/render/draw_heatmap.js +21 -16
- package/src/render/draw_hillshade.js +12 -9
- package/src/render/draw_line.js +36 -22
- package/src/render/draw_raster.js +22 -18
- package/src/render/draw_symbol.js +38 -33
- package/src/render/glyph_atlas.js +9 -8
- package/src/render/glyph_manager.js +2 -3
- package/src/render/image_atlas.js +4 -11
- package/src/render/image_manager.js +39 -28
- package/src/render/line_atlas.js +2 -2
- package/src/render/painter.js +78 -61
- package/src/render/program/background_program.js +6 -13
- package/src/render/program/circle_program.js +8 -10
- package/src/render/program/clipping_mask_program.js +3 -5
- package/src/render/program/collision_program.js +4 -6
- package/src/render/program/debug_program.js +3 -5
- package/src/render/program/fill_extrusion_program.js +9 -15
- package/src/render/program/fill_program.js +10 -21
- package/src/render/program/heatmap_program.js +9 -15
- package/src/render/program/hillshade_program.js +16 -22
- package/src/render/program/line_program.js +14 -25
- package/src/render/program/pattern.js +5 -7
- package/src/render/program/program_uniforms.js +13 -20
- package/src/render/program/raster_program.js +9 -11
- package/src/render/program/symbol_program.js +5 -7
- package/src/render/program.js +5 -6
- package/src/render/texture.js +1 -1
- package/src/render/tile_mask.js +6 -4
- package/src/render/uniform_binding.js +9 -20
- package/src/render/vertex_array_object.js +5 -3
- package/src/shaders/encode_attribute.js +2 -6
- package/src/shaders/index.js +103 -51
- package/src/source/geojson_source.js +25 -30
- package/src/source/geojson_worker_source.js +46 -74
- package/src/source/geojson_wrapper.js +13 -5
- package/src/source/image_source.js +17 -28
- package/src/source/load_tilejson.js +3 -3
- package/src/source/pixels_to_tile_units.js +3 -3
- package/src/source/query_features.js +17 -15
- package/src/source/raster_dem_tile_source.js +54 -71
- package/src/source/raster_tile_source.js +14 -15
- package/src/source/resources/glyphs.js +4 -5
- package/src/source/resources/index.js +4 -12
- package/src/source/rtl_text_plugin.js +62 -35
- package/src/source/source.js +14 -22
- package/src/source/source_cache.js +221 -179
- package/src/source/source_state.js +125 -13
- package/src/source/tile.js +67 -66
- package/src/source/tile_bounds.js +36 -29
- package/src/source/tile_cache.js +2 -2
- package/src/source/tile_id.js +30 -26
- package/src/source/vector_tile_source.js +23 -21
- package/src/source/vector_tile_worker_source.js +22 -26
- package/src/source/worker_tile.js +139 -134
- package/src/style/create_style_layer.js +11 -11
- package/src/style/evaluation_parameters.js +4 -6
- package/src/style/light.js +5 -5
- package/src/style/load_sprite.js +6 -6
- package/src/style/parse_glyph_pbf.js +21 -17
- package/src/style/pauseable_placement.js +7 -9
- package/src/style/properties.js +21 -51
- package/src/style/query_utils.js +7 -13
- package/src/style/style.js +314 -221
- package/src/style/style_layer/background_style_layer.js +3 -4
- package/src/style/style_layer/background_style_layer_properties.js +2 -2
- package/src/style/style_layer/circle_style_layer.js +25 -20
- package/src/style/style_layer/circle_style_layer_properties.js +2 -2
- package/src/style/style_layer/fill_extrusion_style_layer.js +55 -37
- package/src/style/style_layer/fill_extrusion_style_layer_properties.js +2 -2
- package/src/style/style_layer/fill_style_layer.js +11 -12
- package/src/style/style_layer/fill_style_layer_properties.js +2 -2
- package/src/style/style_layer/heatmap_style_layer.js +6 -7
- package/src/style/style_layer/heatmap_style_layer_properties.js +2 -2
- package/src/style/style_layer/hillshade_style_layer.js +4 -5
- package/src/style/style_layer/hillshade_style_layer_properties.js +2 -2
- package/src/style/style_layer/line_style_layer.js +33 -30
- package/src/style/style_layer/line_style_layer_properties.js +5 -5
- package/src/style/style_layer/raster_style_layer.js +3 -4
- package/src/style/style_layer/raster_style_layer_properties.js +2 -2
- package/src/style/style_layer/symbol_style_layer.js +20 -21
- package/src/style/style_layer/symbol_style_layer_properties.js +2 -2
- package/src/style/style_layer.js +66 -47
- package/src/style/style_layer_index.js +17 -42
- package/src/style/zoom_history.js +1 -1
- package/src/style-spec/error/parsing_error.js +1 -1
- package/src/style-spec/error/validation_error.js +5 -3
- package/src/style-spec/feature_filter/convert.js +17 -9
- package/src/style-spec/feature_filter/index.js +13 -9
- package/src/style-spec/util/eval_support.js +2 -2
- package/src/style-spec/util/ref_properties.js +1 -1
- package/src/symbol/anchor.js +2 -6
- package/src/symbol/check_max_angle.js +13 -5
- package/src/symbol/clip_line.js +2 -3
- package/src/symbol/collision_feature.js +8 -4
- package/src/symbol/collision_index.js +5 -7
- package/src/symbol/cross_tile_symbol_index.js +7 -10
- package/src/symbol/get_anchors.js +15 -8
- package/src/symbol/grid_index.js +5 -3
- package/src/symbol/mergelines.js +2 -2
- package/src/symbol/opacity_state.js +1 -5
- package/src/symbol/placement.js +28 -23
- package/src/symbol/projection.js +29 -28
- package/src/symbol/quads.js +14 -16
- package/src/symbol/shaping.js +27 -19
- package/src/symbol/symbol_layout.js +24 -28
- package/src/symbol/symbol_size.js +13 -12
- package/src/symbol/transform_text.js +4 -4
- package/src/ui/camera.js +34 -18
- package/src/ui/map.js +102 -44
- package/src/util/async.js +11 -5
- package/src/util/browser.js +1 -1
- package/src/util/callback.js +3 -9
- package/src/util/classify_rings.js +13 -8
- package/src/util/color_ramp.js +3 -3
- package/src/util/config.js +4 -4
- package/src/util/dictionary_coder.js +2 -3
- package/src/util/dom.js +7 -3
- package/src/util/find_pole_of_inaccessibility.js +29 -14
- package/src/util/group_layers.js +41 -0
- package/src/util/image.js +3 -13
- package/src/util/interpolate.js +1 -1
- package/src/util/intersection_tests.js +80 -42
- package/src/util/is_char_in_unicode_block.js +1 -1
- package/src/util/key.js +25 -0
- package/src/util/loader/image.js +1 -1
- package/src/util/object.js +33 -76
- package/src/util/script_detection.js +212 -91
- package/src/util/struct_array.js +8 -40
- package/src/util/task_queue.js +11 -7
- package/src/util/throttle.js +2 -2
- package/src/util/tile_cover.js +8 -5
- package/src/util/token.js +1 -1
- package/src/util/unique_id.js +2 -2
- package/src/util/util.js +21 -29
- package/src/util/vectortile_to_geojson.js +4 -2
- package/src/util/verticalize_punctuation.js +3 -7
- package/src/util/warn.js +4 -4
- package/src/util/web_worker.js +3 -3
- package/src/worker.js +1 -4
- package/src/source/resources/images.js +0 -68
- package/src/source/worker.js +0 -110
- package/src/source/worker_source.js +0 -14
- package/src/style-spec/deref.js +0 -51
- package/src/style-spec/group_by_layout.js +0 -46
- package/src/util/actor.js +0 -108
- package/src/util/dispatcher.js +0 -65
- package/src/util/global_worker_pool.js +0 -15
- package/src/util/transfer_registry.js +0 -168
- package/src/util/web_worker_transfer.js +0 -43
- package/src/util/worker_pool.js +0 -41
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const properties = require('./symbol_style_layer_properties');
|
|
1
|
+
import { isExpression } from '@mapwhit/style-expressions';
|
|
2
|
+
import assert from 'assert';
|
|
3
|
+
import SymbolBucket from '../../data/bucket/symbol_bucket.js';
|
|
4
|
+
import resolveTokens from '../../util/token.js';
|
|
5
|
+
import StyleLayer from '../style_layer.js';
|
|
6
|
+
import properties from './symbol_style_layer_properties.js';
|
|
8
7
|
|
|
9
8
|
class SymbolStyleLayer extends StyleLayer {
|
|
10
9
|
constructor(layer) {
|
|
@@ -14,33 +13,33 @@ class SymbolStyleLayer extends StyleLayer {
|
|
|
14
13
|
recalculate(parameters) {
|
|
15
14
|
super.recalculate(parameters);
|
|
16
15
|
|
|
17
|
-
if (this.
|
|
18
|
-
if (this.
|
|
19
|
-
this.
|
|
16
|
+
if (this._layout.get('icon-rotation-alignment') === 'auto') {
|
|
17
|
+
if (this._layout.get('symbol-placement') !== 'point') {
|
|
18
|
+
this._layout._values['icon-rotation-alignment'] = 'map';
|
|
20
19
|
} else {
|
|
21
|
-
this.
|
|
20
|
+
this._layout._values['icon-rotation-alignment'] = 'viewport';
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
23
|
|
|
25
|
-
if (this.
|
|
26
|
-
if (this.
|
|
27
|
-
this.
|
|
24
|
+
if (this._layout.get('text-rotation-alignment') === 'auto') {
|
|
25
|
+
if (this._layout.get('symbol-placement') !== 'point') {
|
|
26
|
+
this._layout._values['text-rotation-alignment'] = 'map';
|
|
28
27
|
} else {
|
|
29
|
-
this.
|
|
28
|
+
this._layout._values['text-rotation-alignment'] = 'viewport';
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
// If unspecified, `*-pitch-alignment` inherits `*-rotation-alignment`
|
|
34
|
-
if (this.
|
|
35
|
-
this.
|
|
33
|
+
if (this._layout.get('text-pitch-alignment') === 'auto') {
|
|
34
|
+
this._layout._values['text-pitch-alignment'] = this._layout.get('text-rotation-alignment');
|
|
36
35
|
}
|
|
37
|
-
if (this.
|
|
38
|
-
this.
|
|
36
|
+
if (this._layout.get('icon-pitch-alignment') === 'auto') {
|
|
37
|
+
this._layout._values['icon-pitch-alignment'] = this._layout.get('icon-rotation-alignment');
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
getValueAndResolveTokens(name, feature) {
|
|
43
|
-
const value = this.
|
|
42
|
+
const value = this._layout.get(name).evaluate(feature, {});
|
|
44
43
|
const unevaluated = this._unevaluatedLayout._values[name];
|
|
45
44
|
if (!unevaluated.isDataDriven() && !isExpression(unevaluated.value)) {
|
|
46
45
|
return resolveTokens(feature.properties, value);
|
|
@@ -63,4 +62,4 @@ class SymbolStyleLayer extends StyleLayer {
|
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
export default SymbolStyleLayer;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { DataConstantProperty, DataDrivenProperty, Properties } from '../properties.js';
|
|
4
4
|
|
|
5
5
|
const layout = new Properties({
|
|
6
6
|
'symbol-placement': new DataConstantProperty({
|
|
@@ -291,4 +291,4 @@ const paint = new Properties({
|
|
|
291
291
|
})
|
|
292
292
|
});
|
|
293
293
|
|
|
294
|
-
|
|
294
|
+
export default { paint, layout };
|
package/src/style/style_layer.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const featureFilter = require('../style-spec/feature_filter');
|
|
1
|
+
import { Evented } from '@mapwhit/events';
|
|
2
|
+
import { supportsPropertyExpression } from '@mapwhit/style-expressions';
|
|
3
|
+
import featureFilter from '../style-spec/feature_filter/index.js';
|
|
4
|
+
import createKey from '../util/key.js';
|
|
5
|
+
import { Layout, PossiblyEvaluatedPropertyValue, Transitionable } from './properties.js';
|
|
7
6
|
|
|
7
|
+
const keyProperties = ['type', 'minzoom', 'maxzoom', 'filter', 'layout'];
|
|
8
8
|
const TRANSITION_SUFFIX = '-transition';
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Representing a style layer in the map.
|
|
12
|
+
* Properties:
|
|
13
|
+
* `this.paint` - paint properties of the layer as defined in the map style
|
|
14
|
+
* `this._paint` - internal representation of paint properties necessary to calculate expressions
|
|
15
|
+
*/
|
|
10
16
|
class StyleLayer extends Evented {
|
|
17
|
+
#key;
|
|
18
|
+
|
|
11
19
|
constructor(layer, properties) {
|
|
12
20
|
super();
|
|
13
21
|
|
|
@@ -22,7 +30,7 @@ class StyleLayer extends Evented {
|
|
|
22
30
|
|
|
23
31
|
if (layer.type !== 'background') {
|
|
24
32
|
this.source = layer.source;
|
|
25
|
-
this.sourceLayer = layer['source-layer'];
|
|
33
|
+
this['source-layer'] = this.sourceLayer = layer['source-layer'];
|
|
26
34
|
this.filter = layer.filter;
|
|
27
35
|
this._featureFilter = featureFilter(layer.filter);
|
|
28
36
|
}
|
|
@@ -46,10 +54,26 @@ class StyleLayer extends Evented {
|
|
|
46
54
|
}
|
|
47
55
|
|
|
48
56
|
setFilter(filter) {
|
|
57
|
+
this.#key = undefined;
|
|
49
58
|
this.filter = filter;
|
|
50
59
|
this._featureFilter = featureFilter(filter);
|
|
51
60
|
}
|
|
52
61
|
|
|
62
|
+
_setZoomRange(minzoom, maxzoom) {
|
|
63
|
+
if (this.minzoom === minzoom && this.maxzoom === maxzoom) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (minzoom != null) {
|
|
67
|
+
this.#key = undefined;
|
|
68
|
+
this.minzoom = minzoom;
|
|
69
|
+
}
|
|
70
|
+
if (maxzoom != null) {
|
|
71
|
+
this.#key = undefined;
|
|
72
|
+
this.maxzoom = maxzoom;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
53
77
|
getCrossfadeParameters() {
|
|
54
78
|
return this._crossfadeParameters;
|
|
55
79
|
}
|
|
@@ -111,6 +135,8 @@ class StyleLayer extends Evented {
|
|
|
111
135
|
}
|
|
112
136
|
|
|
113
137
|
setLayoutProperty(name, value) {
|
|
138
|
+
this.#key = undefined;
|
|
139
|
+
this.layout[name] = value;
|
|
114
140
|
if (name === 'visibility') {
|
|
115
141
|
this.visibility = value === 'none' ? value : 'visible';
|
|
116
142
|
return;
|
|
@@ -127,21 +153,31 @@ class StyleLayer extends Evented {
|
|
|
127
153
|
}
|
|
128
154
|
|
|
129
155
|
setPaintProperty(name, value) {
|
|
156
|
+
this.paint[name] = value;
|
|
130
157
|
if (name.endsWith(TRANSITION_SUFFIX)) {
|
|
131
158
|
this._transitionablePaint.setTransition(name.slice(0, -TRANSITION_SUFFIX.length), value || undefined);
|
|
132
159
|
return false;
|
|
133
160
|
}
|
|
161
|
+
const transitionable = this._transitionablePaint._values[name];
|
|
162
|
+
const isCrossFadedProperty = transitionable.property.specification['property-type'] === 'cross-faded-data-driven';
|
|
163
|
+
const wasDataDriven = transitionable.value.isDataDriven();
|
|
164
|
+
this._transitionablePaint.setValue(name, value);
|
|
165
|
+
this._handleSpecialPaintPropertyUpdate(name);
|
|
166
|
+
const isDataDriven = this._transitionablePaint._values[name].value.isDataDriven();
|
|
167
|
+
if (isDataDriven !== wasDataDriven || (wasDataDriven && isDataDriven) || isCrossFadedProperty) {
|
|
168
|
+
// reset transitioning in progress
|
|
169
|
+
this._untransitioned(name);
|
|
170
|
+
}
|
|
134
171
|
// if a cross-faded value is changed, we need to make sure the new icons get added to each tile's iconAtlas
|
|
135
172
|
// so a call to _updateLayer is necessary, and we return true from this function so it gets called in
|
|
136
173
|
// Style#setPaintProperty
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
this.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
return isDataDriven || wasDataDriven || newCrossFadedValue;
|
|
174
|
+
return isDataDriven || wasDataDriven || isCrossFadedProperty;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
_untransitioned(name) {
|
|
178
|
+
if (this._transitioningPaint) {
|
|
179
|
+
this._transitioningPaint._values[name] = this._transitionablePaint._values[name].untransitioned();
|
|
180
|
+
}
|
|
145
181
|
}
|
|
146
182
|
|
|
147
183
|
_handleSpecialPaintPropertyUpdate() {
|
|
@@ -149,8 +185,12 @@ class StyleLayer extends Evented {
|
|
|
149
185
|
}
|
|
150
186
|
|
|
151
187
|
isHidden(zoom) {
|
|
152
|
-
if (this.minzoom && zoom < this.minzoom)
|
|
153
|
-
|
|
188
|
+
if (this.minzoom && zoom < this.minzoom) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
if (this.maxzoom && zoom >= this.maxzoom) {
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
154
194
|
return this.visibility === 'none';
|
|
155
195
|
}
|
|
156
196
|
|
|
@@ -167,38 +207,17 @@ class StyleLayer extends Evented {
|
|
|
167
207
|
this._crossfadeParameters = parameters.getCrossfadeParameters();
|
|
168
208
|
}
|
|
169
209
|
if (this._unevaluatedLayout) {
|
|
170
|
-
this.
|
|
210
|
+
this._layout = this._unevaluatedLayout.possiblyEvaluate(parameters);
|
|
171
211
|
}
|
|
172
212
|
|
|
173
|
-
this.
|
|
213
|
+
this._paint = this._transitioningPaint.possiblyEvaluate(parameters);
|
|
174
214
|
}
|
|
175
215
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
type: this.type,
|
|
180
|
-
source: this.source,
|
|
181
|
-
'source-layer': this.sourceLayer,
|
|
182
|
-
metadata: this.metadata,
|
|
183
|
-
minzoom: this.minzoom,
|
|
184
|
-
maxzoom: this.maxzoom,
|
|
185
|
-
filter: this.filter,
|
|
186
|
-
layout: this._unevaluatedLayout?.serialize(),
|
|
187
|
-
paint: this._transitionablePaint?.serialize()
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
if (this.visibility === 'none') {
|
|
191
|
-
output.layout = output.layout || {};
|
|
192
|
-
output.layout.visibility = 'none';
|
|
216
|
+
get key() {
|
|
217
|
+
if (!this.#key) {
|
|
218
|
+
this.#key = createKey(keyProperties, this);
|
|
193
219
|
}
|
|
194
|
-
|
|
195
|
-
return filterObject(output, (value, key) => {
|
|
196
|
-
return (
|
|
197
|
-
value !== undefined &&
|
|
198
|
-
!(key === 'layout' && !Object.keys(value).length) &&
|
|
199
|
-
!(key === 'paint' && !Object.keys(value).length)
|
|
200
|
-
);
|
|
201
|
-
});
|
|
220
|
+
return this.#key;
|
|
202
221
|
}
|
|
203
222
|
|
|
204
223
|
is3D() {
|
|
@@ -218,8 +237,8 @@ class StyleLayer extends Evented {
|
|
|
218
237
|
}
|
|
219
238
|
|
|
220
239
|
isStateDependent() {
|
|
221
|
-
for (const property in this.
|
|
222
|
-
const value = this.
|
|
240
|
+
for (const property in this._paint._values) {
|
|
241
|
+
const value = this._paint.get(property);
|
|
223
242
|
if (
|
|
224
243
|
!(value instanceof PossiblyEvaluatedPropertyValue) ||
|
|
225
244
|
!supportsPropertyExpression(value.property.specification)
|
|
@@ -235,4 +254,4 @@ class StyleLayer extends Evented {
|
|
|
235
254
|
}
|
|
236
255
|
}
|
|
237
256
|
|
|
238
|
-
|
|
257
|
+
export default StyleLayer;
|
|
@@ -1,55 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { values } = require('../util/object');
|
|
4
|
-
const featureFilter = require('../style-spec/feature_filter');
|
|
5
|
-
const groupByLayout = require('../style-spec/group_by_layout');
|
|
1
|
+
import groupBySource from '../util/group_layers.js';
|
|
6
2
|
|
|
7
3
|
class StyleLayerIndex {
|
|
8
|
-
#
|
|
9
|
-
#
|
|
4
|
+
#layers = new Map();
|
|
5
|
+
#fbs = {};
|
|
10
6
|
|
|
11
|
-
constructor(
|
|
12
|
-
if (
|
|
13
|
-
this.
|
|
7
|
+
constructor(layers) {
|
|
8
|
+
if (layers) {
|
|
9
|
+
this.replace(layers);
|
|
14
10
|
}
|
|
15
11
|
}
|
|
16
12
|
|
|
17
|
-
replace(
|
|
18
|
-
this.#
|
|
19
|
-
this.#
|
|
20
|
-
this.update(layerConfigs);
|
|
13
|
+
replace(layers) {
|
|
14
|
+
this.#layers = layers;
|
|
15
|
+
this.#fbs = null;
|
|
21
16
|
}
|
|
22
17
|
|
|
23
|
-
update(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const layer = (this.#layers[layerConfig.id] = createStyleLayer(layerConfig));
|
|
28
|
-
layer._featureFilter = featureFilter(layer.filter);
|
|
29
|
-
}
|
|
30
|
-
for (const id of removedIds) {
|
|
31
|
-
delete this.#layerConfigs[id];
|
|
32
|
-
delete this.#layers[id];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
this.familiesBySource = {};
|
|
36
|
-
|
|
37
|
-
const groups = groupByLayout(values(this.#layerConfigs));
|
|
38
|
-
|
|
39
|
-
for (const layerConfigs of groups) {
|
|
40
|
-
const layers = layerConfigs.map(layerConfig => this.#layers[layerConfig.id]);
|
|
41
|
-
|
|
42
|
-
const layer = layers[0];
|
|
43
|
-
if (layer.visibility === 'none') {
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
18
|
+
update() {
|
|
19
|
+
this.#fbs = null;
|
|
20
|
+
}
|
|
46
21
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
sourceLayerFamilies.push(layers);
|
|
22
|
+
get familiesBySource() {
|
|
23
|
+
if (!this.#fbs) {
|
|
24
|
+
this.#fbs = groupBySource(this.#layers.values());
|
|
51
25
|
}
|
|
26
|
+
return this.#fbs;
|
|
52
27
|
}
|
|
53
28
|
}
|
|
54
29
|
|
|
55
|
-
|
|
30
|
+
export default StyleLayerIndex;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
export default class ValidationError {
|
|
2
2
|
constructor(key, value, message, identifier) {
|
|
3
3
|
this.message = (key ? `${key}: ` : '') + message;
|
|
4
|
-
if (identifier)
|
|
4
|
+
if (identifier) {
|
|
5
|
+
this.identifier = identifier;
|
|
6
|
+
}
|
|
5
7
|
|
|
6
8
|
if (value?.__line__) {
|
|
7
9
|
this.line = value.__line__;
|
|
8
10
|
}
|
|
9
11
|
}
|
|
10
|
-
}
|
|
12
|
+
}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
module.exports = convertFilter;
|
|
1
|
+
import { isExpressionFilter } from './index.js';
|
|
4
2
|
|
|
5
3
|
/**
|
|
6
4
|
* Convert the given legacy filter to (the JSON representation of) an
|
|
7
5
|
* equivalent expression
|
|
8
6
|
* @private
|
|
9
7
|
*/
|
|
10
|
-
function convertFilter(filter) {
|
|
8
|
+
export default function convertFilter(filter) {
|
|
11
9
|
return _convertFilter(filter, {});
|
|
12
10
|
}
|
|
13
11
|
|
|
@@ -64,9 +62,13 @@ function _convertFilter(filter, expectedTypes) {
|
|
|
64
62
|
return filter;
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
if (!filter)
|
|
65
|
+
if (!filter) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
68
|
const op = filter[0];
|
|
69
|
-
if (filter.length <= 1)
|
|
69
|
+
if (filter.length <= 1) {
|
|
70
|
+
return op !== 'any';
|
|
71
|
+
}
|
|
70
72
|
|
|
71
73
|
let converted;
|
|
72
74
|
|
|
@@ -115,8 +117,12 @@ function runtimeTypeChecks(expectedTypes) {
|
|
|
115
117
|
const get = property === '$id' ? ['id'] : ['get', property];
|
|
116
118
|
conditions.push(['==', ['typeof', get], expectedTypes[property]]);
|
|
117
119
|
}
|
|
118
|
-
if (conditions.length === 0)
|
|
119
|
-
|
|
120
|
+
if (conditions.length === 0) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
if (conditions.length === 1) {
|
|
124
|
+
return conditions[0];
|
|
125
|
+
}
|
|
120
126
|
return ['all'].concat(conditions);
|
|
121
127
|
}
|
|
122
128
|
|
|
@@ -155,7 +161,9 @@ function convertComparisonOp(property, value, op, expectedTypes) {
|
|
|
155
161
|
}
|
|
156
162
|
|
|
157
163
|
function convertInOp(property, values, negate = false) {
|
|
158
|
-
if (values.length === 0)
|
|
164
|
+
if (values.length === 0) {
|
|
165
|
+
return negate;
|
|
166
|
+
}
|
|
159
167
|
|
|
160
168
|
let get;
|
|
161
169
|
if (property === '$type') {
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
module.exports = createFilter;
|
|
1
|
+
import { createExpression, findGlobalStateRefs } from '@mapwhit/style-expressions';
|
|
4
2
|
|
|
5
3
|
createFilter.isExpressionFilter = isExpressionFilter;
|
|
6
4
|
createFilter.addGlobalStateRefs = addGlobalStateRefs;
|
|
7
5
|
|
|
8
|
-
function isExpressionFilter(filter) {
|
|
6
|
+
export function isExpressionFilter(filter) {
|
|
9
7
|
if (filter === true || filter === false) {
|
|
10
8
|
return true;
|
|
11
9
|
}
|
|
@@ -65,7 +63,7 @@ const filterSpec = {
|
|
|
65
63
|
* @param {Array} filter mapbox gl filter
|
|
66
64
|
* @returns {Function} filter-evaluating function
|
|
67
65
|
*/
|
|
68
|
-
function createFilter(filter) {
|
|
66
|
+
export default function createFilter(filter) {
|
|
69
67
|
if (filter === null || filter === undefined) {
|
|
70
68
|
return addGlobalStateRefs(() => true);
|
|
71
69
|
}
|
|
@@ -84,7 +82,7 @@ function createFilter(filter) {
|
|
|
84
82
|
);
|
|
85
83
|
}
|
|
86
84
|
|
|
87
|
-
function addGlobalStateRefs(filter, getGlobalStateRefs = () => new Set()) {
|
|
85
|
+
export function addGlobalStateRefs(filter, getGlobalStateRefs = () => new Set()) {
|
|
88
86
|
filter.getGlobalStateRefs = getGlobalStateRefs;
|
|
89
87
|
return filter;
|
|
90
88
|
}
|
|
@@ -95,9 +93,13 @@ function compare(a, b) {
|
|
|
95
93
|
}
|
|
96
94
|
|
|
97
95
|
function convertFilter(filter) {
|
|
98
|
-
if (!filter || filter.length === 0)
|
|
96
|
+
if (!filter || filter.length === 0) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
99
|
const [op, ...args] = filter;
|
|
100
|
-
if (filter.length <= 1)
|
|
100
|
+
if (filter.length <= 1) {
|
|
101
|
+
return op !== 'any';
|
|
102
|
+
}
|
|
101
103
|
switch (op) {
|
|
102
104
|
case '!=':
|
|
103
105
|
return convertNegation(convertComparisonOp('==', ...args));
|
|
@@ -158,7 +160,9 @@ function convertInOp([property, ...values]) {
|
|
|
158
160
|
}
|
|
159
161
|
|
|
160
162
|
function isUniformLarge(values) {
|
|
161
|
-
if (values.length < 200)
|
|
163
|
+
if (values.length < 200) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
162
166
|
const type = typeof values[0];
|
|
163
167
|
return values.every(v => typeof v === type);
|
|
164
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export default ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];
|
package/src/symbol/anchor.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { register } = require('../util/transfer_registry');
|
|
1
|
+
import Point from '@mapbox/point-geometry';
|
|
4
2
|
|
|
5
3
|
class Anchor extends Point {
|
|
6
4
|
constructor(x, y, angle, segment) {
|
|
@@ -16,6 +14,4 @@ class Anchor extends Point {
|
|
|
16
14
|
}
|
|
17
15
|
}
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
module.exports = Anchor;
|
|
17
|
+
export default Anchor;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
export default checkMaxAngle;
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Labels placed around really sharp angles aren't readable. Check if any
|
|
@@ -15,7 +15,9 @@ module.exports = checkMaxAngle;
|
|
|
15
15
|
*/
|
|
16
16
|
function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
|
|
17
17
|
// horizontal labels always pass
|
|
18
|
-
if (anchor.segment === undefined)
|
|
18
|
+
if (anchor.segment === undefined) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
19
21
|
|
|
20
22
|
let p = anchor;
|
|
21
23
|
let index = anchor.segment + 1;
|
|
@@ -26,7 +28,9 @@ function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
|
|
|
26
28
|
index--;
|
|
27
29
|
|
|
28
30
|
// there isn't enough room for the label after the beginning of the line
|
|
29
|
-
if (index < 0)
|
|
31
|
+
if (index < 0) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
30
34
|
|
|
31
35
|
anchorDistance -= line[index].dist(p);
|
|
32
36
|
p = line[index];
|
|
@@ -46,7 +50,9 @@ function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
|
|
|
46
50
|
const next = line[index + 1];
|
|
47
51
|
|
|
48
52
|
// there isn't enough room for the label before the end of the line
|
|
49
|
-
if (!next)
|
|
53
|
+
if (!next) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
50
56
|
|
|
51
57
|
let angleDelta = prev.angleTo(current) - current.angleTo(next);
|
|
52
58
|
// restrict angle to -pi..pi range
|
|
@@ -64,7 +70,9 @@ function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
|
|
|
64
70
|
}
|
|
65
71
|
|
|
66
72
|
// the sum of angles within the window area exceeds the maximum allowed value. check fails.
|
|
67
|
-
if (recentAngleDelta > maxAngle)
|
|
73
|
+
if (recentAngleDelta > maxAngle) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
68
76
|
|
|
69
77
|
index++;
|
|
70
78
|
anchorDistance += current.dist(next);
|
package/src/symbol/clip_line.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import Point from '@mapbox/point-geometry';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A CollisionFeature represents the area of the tile covered by a single label.
|
|
@@ -174,8 +174,12 @@ class CollisionFeature {
|
|
|
174
174
|
let boxDistanceToAnchor = labelStartDistance + boxOffset;
|
|
175
175
|
|
|
176
176
|
// make the distance between pitch padding boxes bigger
|
|
177
|
-
if (boxOffset < 0)
|
|
178
|
-
|
|
177
|
+
if (boxOffset < 0) {
|
|
178
|
+
boxDistanceToAnchor += boxOffset;
|
|
179
|
+
}
|
|
180
|
+
if (boxOffset > labelLength) {
|
|
181
|
+
boxDistanceToAnchor += boxOffset - labelLength;
|
|
182
|
+
}
|
|
179
183
|
|
|
180
184
|
if (boxDistanceToAnchor < anchorDistance) {
|
|
181
185
|
// The line doesn't extend far enough back for this box, skip it
|
|
@@ -227,4 +231,4 @@ class CollisionFeature {
|
|
|
227
231
|
}
|
|
228
232
|
}
|
|
229
233
|
|
|
230
|
-
|
|
234
|
+
export default CollisionFeature;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const projection = require('../symbol/projection');
|
|
1
|
+
import Point from '@mapbox/point-geometry';
|
|
2
|
+
import * as projection from '../symbol/projection.js';
|
|
3
|
+
import * as intersectionTests from '../util/intersection_tests.js';
|
|
4
|
+
import Grid from './grid_index.js';
|
|
7
5
|
|
|
8
6
|
// When a symbol crosses the edge that causes it to be included in
|
|
9
7
|
// collision detection, it will cause changes in the symbols around
|
|
@@ -382,4 +380,4 @@ function markCollisionCircleUsed(collisionCircles, index, used) {
|
|
|
382
380
|
collisionCircles[index + 4] = used ? 1 : 0;
|
|
383
381
|
}
|
|
384
382
|
|
|
385
|
-
|
|
383
|
+
export default CollisionIndex;
|