@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,11 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import glMatrix from '@mapbox/gl-matrix';
|
|
2
|
+
import assert from 'assert';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
queryRenderedFeatures,
|
|
6
|
-
queryRenderedSymbols,
|
|
7
|
-
querySourceFeatures
|
|
8
|
-
};
|
|
4
|
+
const { mat4 } = glMatrix;
|
|
9
5
|
|
|
10
6
|
/*
|
|
11
7
|
* Returns a matrix that can be used to convert from tile coordinates to viewport pixel coordinates.
|
|
@@ -20,14 +16,13 @@ function getPixelPosMatrix(transform, tileID) {
|
|
|
20
16
|
function queryIncludes3DLayer(layers, styleLayers, sourceID) {
|
|
21
17
|
if (layers) {
|
|
22
18
|
for (const layerID of layers) {
|
|
23
|
-
const layer = styleLayers
|
|
19
|
+
const layer = styleLayers.get(layerID);
|
|
24
20
|
if (layer && layer.source === sourceID && layer.type === 'fill-extrusion') {
|
|
25
21
|
return true;
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
} else {
|
|
29
|
-
for (const
|
|
30
|
-
const layer = styleLayers[key];
|
|
24
|
+
} else if (styleLayers) {
|
|
25
|
+
for (const layer of styleLayers.values()) {
|
|
31
26
|
if (layer.source === sourceID && layer.type === 'fill-extrusion') {
|
|
32
27
|
return true;
|
|
33
28
|
}
|
|
@@ -36,7 +31,7 @@ function queryIncludes3DLayer(layers, styleLayers, sourceID) {
|
|
|
36
31
|
return false;
|
|
37
32
|
}
|
|
38
33
|
|
|
39
|
-
function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params, transform) {
|
|
34
|
+
export function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params, transform) {
|
|
40
35
|
const has3DLayer = queryIncludes3DLayer(params?.layers, styleLayers, sourceCache.id);
|
|
41
36
|
const maxPitchScaleFactor = transform.maxPitchScaleFactor();
|
|
42
37
|
const tilesIn = sourceCache.tilesIn(queryGeometry, maxPitchScaleFactor, has3DLayer);
|
|
@@ -78,7 +73,14 @@ function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params,
|
|
|
78
73
|
return result;
|
|
79
74
|
}
|
|
80
75
|
|
|
81
|
-
function queryRenderedSymbols(
|
|
76
|
+
export function queryRenderedSymbols(
|
|
77
|
+
styleLayers,
|
|
78
|
+
sourceCaches,
|
|
79
|
+
queryGeometry,
|
|
80
|
+
params,
|
|
81
|
+
collisionIndex,
|
|
82
|
+
retainedQueryData
|
|
83
|
+
) {
|
|
82
84
|
const result = {};
|
|
83
85
|
const renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry);
|
|
84
86
|
const bucketQueryData = [];
|
|
@@ -129,7 +131,7 @@ function queryRenderedSymbols(styleLayers, sourceCaches, queryGeometry, params,
|
|
|
129
131
|
for (const layerName in result) {
|
|
130
132
|
result[layerName].forEach(featureWrapper => {
|
|
131
133
|
const feature = featureWrapper.feature;
|
|
132
|
-
const layer = styleLayers
|
|
134
|
+
const layer = styleLayers.get(layerName);
|
|
133
135
|
const sourceCache = sourceCaches[layer.source];
|
|
134
136
|
const state = sourceCache.getFeatureState(feature.layer['source-layer'], feature.id);
|
|
135
137
|
feature.source = feature.layer.source;
|
|
@@ -142,7 +144,7 @@ function queryRenderedSymbols(styleLayers, sourceCaches, queryGeometry, params,
|
|
|
142
144
|
return result;
|
|
143
145
|
}
|
|
144
146
|
|
|
145
|
-
function querySourceFeatures(sourceCache, params) {
|
|
147
|
+
export function querySourceFeatures(sourceCache, params) {
|
|
146
148
|
const tiles = sourceCache.getRenderableIds().map(id => {
|
|
147
149
|
return sourceCache.getTileByID(id);
|
|
148
150
|
});
|
|
@@ -1,35 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
require('../data/dem_data');
|
|
1
|
+
import DEMData from '../data/dem_data.js';
|
|
2
|
+
import browser from '../util/browser.js';
|
|
3
|
+
import loadImage from '../util/loader/image.js';
|
|
4
|
+
import RasterTileSource from './raster_tile_source.js';
|
|
5
|
+
import { calculateKey } from './tile_id.js';
|
|
7
6
|
|
|
8
|
-
class RasterDEMTileSource extends RasterTileSource {
|
|
9
|
-
constructor(id, options,
|
|
10
|
-
super(id, options,
|
|
7
|
+
export default class RasterDEMTileSource extends RasterTileSource {
|
|
8
|
+
constructor(id, options, eventedParent) {
|
|
9
|
+
super(id, options, eventedParent);
|
|
11
10
|
this.type = 'raster-dem';
|
|
12
11
|
this.maxzoom = 22;
|
|
13
12
|
this._options = Object.assign({}, options);
|
|
14
13
|
this.encoding = options.encoding || 'mapbox';
|
|
15
14
|
}
|
|
16
15
|
|
|
17
|
-
serialize() {
|
|
18
|
-
return {
|
|
19
|
-
type: 'raster-dem',
|
|
20
|
-
url: this.url,
|
|
21
|
-
tileSize: this.tileSize,
|
|
22
|
-
tiles: this.tiles,
|
|
23
|
-
bounds: this.bounds,
|
|
24
|
-
encoding: this.encoding
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
16
|
async loadTile(tile) {
|
|
29
17
|
try {
|
|
30
18
|
tile.abortController = new window.AbortController();
|
|
31
19
|
const data = await this.tiles(tile.tileID.canonical, tile.abortController).catch(() => {});
|
|
32
|
-
tile.neighboringTiles =
|
|
20
|
+
tile.neighboringTiles = getNeighboringTiles(tile.tileID);
|
|
33
21
|
if (!data) {
|
|
34
22
|
const err = new Error('Tile could not be loaded');
|
|
35
23
|
err.status = 404; // will try to use the parent/child tile
|
|
@@ -48,7 +36,7 @@ class RasterDEMTileSource extends RasterTileSource {
|
|
|
48
36
|
rawImageData,
|
|
49
37
|
encoding: this.encoding
|
|
50
38
|
};
|
|
51
|
-
const dem = await
|
|
39
|
+
const dem = await loadDEMTile(params);
|
|
52
40
|
if (dem) {
|
|
53
41
|
tile.dem = dem;
|
|
54
42
|
tile.needsHillshadePrepare = true;
|
|
@@ -65,63 +53,58 @@ class RasterDEMTileSource extends RasterTileSource {
|
|
|
65
53
|
}
|
|
66
54
|
}
|
|
67
55
|
|
|
68
|
-
_getNeighboringTiles(tileID) {
|
|
69
|
-
const canonical = tileID.canonical;
|
|
70
|
-
const dim = 2 ** canonical.z;
|
|
71
|
-
|
|
72
|
-
const px = (canonical.x - 1 + dim) % dim;
|
|
73
|
-
const pxw = canonical.x === 0 ? tileID.wrap - 1 : tileID.wrap;
|
|
74
|
-
const nx = (canonical.x + 1 + dim) % dim;
|
|
75
|
-
const nxw = canonical.x + 1 === dim ? tileID.wrap + 1 : tileID.wrap;
|
|
76
|
-
|
|
77
|
-
const neighboringTiles = {};
|
|
78
|
-
// add adjacent tiles
|
|
79
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y).key] = {
|
|
80
|
-
backfilled: false
|
|
81
|
-
};
|
|
82
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y).key] = {
|
|
83
|
-
backfilled: false
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
// Add upper neighboringTiles
|
|
87
|
-
if (canonical.y > 0) {
|
|
88
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y - 1).key] = {
|
|
89
|
-
backfilled: false
|
|
90
|
-
};
|
|
91
|
-
neighboringTiles[
|
|
92
|
-
new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y - 1).key
|
|
93
|
-
] = { backfilled: false };
|
|
94
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y - 1).key] = {
|
|
95
|
-
backfilled: false
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
// Add lower neighboringTiles
|
|
99
|
-
if (canonical.y + 1 < dim) {
|
|
100
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y + 1).key] = {
|
|
101
|
-
backfilled: false
|
|
102
|
-
};
|
|
103
|
-
neighboringTiles[
|
|
104
|
-
new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y + 1).key
|
|
105
|
-
] = { backfilled: false };
|
|
106
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y + 1).key] = {
|
|
107
|
-
backfilled: false
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return neighboringTiles;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
56
|
unloadTile(tile) {
|
|
115
|
-
if (tile.demTexture)
|
|
57
|
+
if (tile.demTexture) {
|
|
58
|
+
this.map.painter.saveTileTexture(tile.demTexture);
|
|
59
|
+
}
|
|
116
60
|
if (tile.fbo) {
|
|
117
61
|
tile.fbo.destroy();
|
|
118
62
|
delete tile.fbo;
|
|
119
63
|
}
|
|
120
|
-
if (tile.dem)
|
|
64
|
+
if (tile.dem) {
|
|
65
|
+
delete tile.dem;
|
|
66
|
+
}
|
|
121
67
|
delete tile.neighboringTiles;
|
|
122
68
|
|
|
123
69
|
tile.state = 'unloaded';
|
|
124
70
|
}
|
|
125
71
|
}
|
|
126
72
|
|
|
127
|
-
|
|
73
|
+
// biome-ignore lint/suspicious/useAwait: thread
|
|
74
|
+
async function loadDEMTile({ uid, rawImageData, encoding }) {
|
|
75
|
+
return new DEMData(uid, rawImageData, encoding);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function getNeighboringTiles(tileID) {
|
|
79
|
+
const {
|
|
80
|
+
canonical: { x, y, z },
|
|
81
|
+
wrap,
|
|
82
|
+
overscaledZ
|
|
83
|
+
} = tileID;
|
|
84
|
+
const dim = 2 ** z;
|
|
85
|
+
const px = (x - 1 + dim) % dim;
|
|
86
|
+
const pxw = x === 0 ? wrap - 1 : wrap;
|
|
87
|
+
const nx = (x + 1 + dim) % dim;
|
|
88
|
+
const nxw = x + 1 === dim ? wrap + 1 : wrap;
|
|
89
|
+
|
|
90
|
+
const neighboringTiles = {
|
|
91
|
+
// add adjacent tiles
|
|
92
|
+
[calculateKey(pxw, overscaledZ, px, y)]: { backfilled: false },
|
|
93
|
+
[calculateKey(nxw, overscaledZ, nx, y)]: { backfilled: false }
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// Add upper neighboringTiles
|
|
97
|
+
if (y > 0) {
|
|
98
|
+
neighboringTiles[calculateKey(pxw, overscaledZ, px, y - 1)] = { backfilled: false };
|
|
99
|
+
neighboringTiles[calculateKey(wrap, overscaledZ, x, y - 1)] = { backfilled: false };
|
|
100
|
+
neighboringTiles[calculateKey(nxw, overscaledZ, nx, y - 1)] = { backfilled: false };
|
|
101
|
+
}
|
|
102
|
+
// Add lower neighboringTiles
|
|
103
|
+
if (y + 1 < dim) {
|
|
104
|
+
neighboringTiles[calculateKey(pxw, overscaledZ, px, y + 1)] = { backfilled: false };
|
|
105
|
+
neighboringTiles[calculateKey(wrap, overscaledZ, x, y + 1)] = { backfilled: false };
|
|
106
|
+
neighboringTiles[calculateKey(nxw, overscaledZ, nx, y + 1)] = { backfilled: false };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return neighboringTiles;
|
|
110
|
+
}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { ErrorEvent, Event, Evented } from '@mapwhit/events';
|
|
2
|
+
import Texture from '../render/texture.js';
|
|
3
|
+
import loadImage from '../util/loader/image.js';
|
|
4
|
+
import { pick } from '../util/object.js';
|
|
5
|
+
import loadTileJSON from './load_tilejson.js';
|
|
6
|
+
import TileBounds from './tile_bounds.js';
|
|
7
7
|
|
|
8
8
|
class RasterTileSource extends Evented {
|
|
9
|
-
constructor(id, options,
|
|
9
|
+
constructor(id, options, eventedParent) {
|
|
10
10
|
super();
|
|
11
11
|
this.id = id;
|
|
12
|
-
this.dispatcher = dispatcher;
|
|
13
12
|
this.setEventedParent(eventedParent);
|
|
14
13
|
|
|
15
14
|
this.type = 'raster';
|
|
@@ -29,7 +28,9 @@ class RasterTileSource extends Evented {
|
|
|
29
28
|
try {
|
|
30
29
|
const tileJSON = await loadTileJSON(this._options);
|
|
31
30
|
Object.assign(this, tileJSON);
|
|
32
|
-
if (tileJSON.bounds)
|
|
31
|
+
if (tileJSON.bounds) {
|
|
32
|
+
this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom);
|
|
33
|
+
}
|
|
33
34
|
|
|
34
35
|
// `content` is included here to prevent a race condition where `Style#_updateSources` is called
|
|
35
36
|
// before the TileJSON arrives. this makes sure the tiles needed are loaded once TileJSON arrives
|
|
@@ -46,10 +47,6 @@ class RasterTileSource extends Evented {
|
|
|
46
47
|
this.load();
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
serialize() {
|
|
50
|
-
return Object.assign({}, this._options);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
50
|
hasTile(tileID) {
|
|
54
51
|
return !this.tileBounds || this.tileBounds.contains(tileID.canonical);
|
|
55
52
|
}
|
|
@@ -106,7 +103,9 @@ class RasterTileSource extends Evented {
|
|
|
106
103
|
}
|
|
107
104
|
|
|
108
105
|
unloadTile(tile) {
|
|
109
|
-
if (tile.texture)
|
|
106
|
+
if (tile.texture) {
|
|
107
|
+
this.map.painter.saveTileTexture(tile.texture);
|
|
108
|
+
}
|
|
110
109
|
}
|
|
111
110
|
|
|
112
111
|
hasTransition() {
|
|
@@ -114,4 +113,4 @@ class RasterTileSource extends Evented {
|
|
|
114
113
|
}
|
|
115
114
|
}
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
export default RasterTileSource;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
module.exports = glyphCache;
|
|
1
|
+
import parseGlyphPBF from '../../style/parse_glyph_pbf.js';
|
|
2
|
+
export default glyphCache;
|
|
4
3
|
|
|
5
4
|
const MAX_GLYPH_ID = 65535;
|
|
6
5
|
|
|
7
|
-
function glyphCache({
|
|
6
|
+
function glyphCache({ loadGlyphRange: loadGlyphRangeFromStyle, parseGlyphs = parseGlyphPBF }) {
|
|
8
7
|
const entries = {};
|
|
9
8
|
|
|
10
9
|
return {
|
|
@@ -56,7 +55,7 @@ function glyphCache({ actor, mapId, parseGlyphs = parseGlyphPBF }) {
|
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
async function loadGlyphRange(entry, stack, range) {
|
|
59
|
-
const promise = (entry.requests[range] ??=
|
|
58
|
+
const promise = (entry.requests[range] ??= loadGlyphRangeFromStyle({ stack, range }));
|
|
60
59
|
const data = await promise;
|
|
61
60
|
delete entry.requests[range];
|
|
62
61
|
entry.ranges[range] = true;
|
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
const makeImages = require('./images');
|
|
1
|
+
import makeGlyphs from './glyphs.js';
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function resources(actor, mapId) {
|
|
7
|
-
const glyphs = makeGlyphs({ actor, mapId });
|
|
8
|
-
const images = makeImages({ actor, mapId });
|
|
3
|
+
export function resources(opts) {
|
|
4
|
+
const glyphs = makeGlyphs(opts);
|
|
9
5
|
|
|
10
6
|
return {
|
|
11
7
|
getGlyphs,
|
|
12
|
-
getImages
|
|
8
|
+
getImages: opts.getImages
|
|
13
9
|
};
|
|
14
10
|
|
|
15
11
|
function getGlyphs(params) {
|
|
16
12
|
return glyphs.getGlyphs(params);
|
|
17
13
|
}
|
|
18
|
-
|
|
19
|
-
function getImages(params) {
|
|
20
|
-
return images.getImages(params);
|
|
21
|
-
}
|
|
22
14
|
}
|
|
@@ -1,29 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import dynload from 'dynload';
|
|
2
|
+
import browser from '../util/browser.js';
|
|
3
3
|
|
|
4
4
|
let pluginRequested = false;
|
|
5
|
-
let pluginURL
|
|
6
|
-
let
|
|
7
|
-
|
|
8
|
-
const evented = new Evented();
|
|
5
|
+
let pluginURL;
|
|
6
|
+
let loading = false;
|
|
9
7
|
|
|
10
8
|
let _completionCallback;
|
|
9
|
+
const _loadedCallbacks = [];
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const rtlPlugin = {
|
|
12
|
+
clearRTLTextPlugin, // exported for testing
|
|
13
|
+
loadScript, // exported for testing
|
|
14
|
+
registerForPluginAvailability,
|
|
15
|
+
setRTLTextPlugin
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export function registerForPluginAvailability(callback) {
|
|
19
|
+
if (plugin.isLoaded()) {
|
|
20
|
+
callback();
|
|
21
|
+
return;
|
|
17
22
|
}
|
|
18
|
-
|
|
23
|
+
_loadedCallbacks.push(callback);
|
|
24
|
+
loadRTLTextPlugin();
|
|
25
|
+
return () => _loadedCallbacks.splice(_loadedCallbacks.indexOf(callback), 1);
|
|
19
26
|
}
|
|
20
27
|
|
|
21
|
-
function clearRTLTextPlugin() {
|
|
28
|
+
export function clearRTLTextPlugin() {
|
|
29
|
+
_loadedCallbacks.length = 0;
|
|
22
30
|
pluginRequested = false;
|
|
23
|
-
pluginURL =
|
|
31
|
+
pluginURL = undefined;
|
|
24
32
|
}
|
|
25
33
|
|
|
26
|
-
function setRTLTextPlugin(url, callback) {
|
|
34
|
+
export function setRTLTextPlugin(url, callback) {
|
|
27
35
|
if (pluginRequested) {
|
|
28
36
|
throw new Error('setRTLTextPlugin cannot be called multiple times.');
|
|
29
37
|
}
|
|
@@ -31,35 +39,54 @@ function setRTLTextPlugin(url, callback) {
|
|
|
31
39
|
pluginURL = browser.resolveURL(url);
|
|
32
40
|
_completionCallback = error => {
|
|
33
41
|
if (error) {
|
|
42
|
+
const msg = `RTL Text Plugin failed to load scripts from ${pluginURL}`;
|
|
34
43
|
// Clear loaded state to allow retries
|
|
35
44
|
clearRTLTextPlugin();
|
|
36
45
|
if (callback) {
|
|
37
|
-
callback(
|
|
46
|
+
callback(new Error(msg));
|
|
38
47
|
}
|
|
39
|
-
} else {
|
|
40
|
-
// Called once for each worker
|
|
41
|
-
foregroundLoadComplete = true;
|
|
42
48
|
}
|
|
49
|
+
loading = false;
|
|
50
|
+
_completionCallback = undefined;
|
|
43
51
|
};
|
|
44
|
-
|
|
52
|
+
loadRTLTextPlugin();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function loadRTLTextPlugin() {
|
|
56
|
+
if (pluginURL && !plugin.isLoaded() && _loadedCallbacks.length > 0 && !loading) {
|
|
57
|
+
// needs to be called as exported method for mock testing
|
|
58
|
+
loading = rtlPlugin.loadScript(pluginURL).catch(_completionCallback);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function registerRTLTextPlugin(loadedPlugin) {
|
|
63
|
+
if (plugin.isLoaded()) {
|
|
64
|
+
throw new Error('RTL text plugin already registered.');
|
|
65
|
+
}
|
|
66
|
+
plugin['applyArabicShaping'] = loadedPlugin.applyArabicShaping;
|
|
67
|
+
plugin['processBidirectionalText'] = loadedPlugin.processBidirectionalText;
|
|
68
|
+
plugin['processStyledBidirectionalText'] = loadedPlugin.processStyledBidirectionalText;
|
|
69
|
+
|
|
70
|
+
_completionCallback();
|
|
71
|
+
_loadedCallbacks.forEach(callback => callback());
|
|
72
|
+
_loadedCallbacks.length = 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
globalThis.registerRTLTextPlugin ??= registerRTLTextPlugin;
|
|
76
|
+
|
|
77
|
+
function loadScript(url) {
|
|
78
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
79
|
+
const s = dynload(url);
|
|
80
|
+
s.onload = () => resolve();
|
|
81
|
+
s.onerror = () => reject(true);
|
|
82
|
+
return promise;
|
|
45
83
|
}
|
|
46
84
|
|
|
47
|
-
const plugin = {
|
|
85
|
+
export const plugin = (rtlPlugin.plugin = {
|
|
48
86
|
applyArabicShaping: null,
|
|
49
87
|
processBidirectionalText: null,
|
|
50
88
|
processStyledBidirectionalText: null,
|
|
51
|
-
isLoaded:
|
|
52
|
-
|
|
53
|
-
foregroundLoadComplete || // Foreground: loaded if the completion callback returned successfully
|
|
54
|
-
plugin.applyArabicShaping != null
|
|
55
|
-
); // Background: loaded if the plugin functions have been compiled
|
|
56
|
-
}
|
|
57
|
-
};
|
|
89
|
+
isLoaded: () => plugin.applyArabicShaping != null
|
|
90
|
+
});
|
|
58
91
|
|
|
59
|
-
|
|
60
|
-
registerForPluginAvailability,
|
|
61
|
-
clearRTLTextPlugin,
|
|
62
|
-
setRTLTextPlugin,
|
|
63
|
-
plugin,
|
|
64
|
-
evented
|
|
65
|
-
};
|
|
92
|
+
export default rtlPlugin;
|
package/src/source/source.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { bindAll } from '../util/object.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* The `Source` interface must be implemented by each source type, including "core" types (`vector`, `raster`,
|
|
@@ -10,7 +10,6 @@ const { bindAll } = require('../util/object');
|
|
|
10
10
|
* @param {Object} options Source options, specific to the source type (except for `options.type`, which is always
|
|
11
11
|
* required).
|
|
12
12
|
* @param {string} options.type The source type, matching the value of `name` used in {@link Style#addSourceType}.
|
|
13
|
-
* @param {Dispatcher} dispatcher A {@link Dispatcher} instance, which can be used to send messages to the workers.
|
|
14
13
|
*
|
|
15
14
|
* @fires data with `{dataType: 'source', sourceDataType: 'metadata'}` to indicate that any necessary metadata
|
|
16
15
|
* has been loaded so that it's okay to call `loadTile`; and with `{dataType: 'source', sourceDataType: 'content'}`
|
|
@@ -25,11 +24,11 @@ const { bindAll } = require('../util/object');
|
|
|
25
24
|
* if they are floor-ed to the nearest integer.
|
|
26
25
|
*/
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
import geojson from './geojson_source.js';
|
|
28
|
+
import image from './image_source.js';
|
|
29
|
+
import rasterDem from './raster_dem_tile_source.js';
|
|
30
|
+
import raster from './raster_tile_source.js';
|
|
31
|
+
import vector from './vector_tile_source.js';
|
|
33
32
|
|
|
34
33
|
const sourceTypes = {
|
|
35
34
|
vector,
|
|
@@ -46,30 +45,23 @@ const sourceTypes = {
|
|
|
46
45
|
* @param {Object} source A source definition object compliant with
|
|
47
46
|
* [`mapbox-gl-style-spec`](https://www.mapbox.com/mapbox-gl-style-spec/#sources) or, for a third-party source type,
|
|
48
47
|
* with that type's requirements.
|
|
49
|
-
* @param {Dispatcher} dispatcher
|
|
50
48
|
* @returns {Source}
|
|
51
49
|
*/
|
|
52
|
-
function create(id, specification,
|
|
53
|
-
const source = new sourceTypes[specification.type](id, specification,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
50
|
+
export function create(id, specification, eventedParent, { resources, layerIndex, showTileBoundaries }) {
|
|
51
|
+
const source = new sourceTypes[specification.type](id, specification, eventedParent, {
|
|
52
|
+
resources,
|
|
53
|
+
layerIndex,
|
|
54
|
+
showTileBoundaries
|
|
55
|
+
});
|
|
58
56
|
|
|
59
57
|
bindAll(['load', 'abort', 'unload', 'serialize', 'prepare'], source);
|
|
60
58
|
return source;
|
|
61
59
|
}
|
|
62
60
|
|
|
63
|
-
function getType(name) {
|
|
61
|
+
export function getType(name) {
|
|
64
62
|
return sourceTypes[name];
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
function setType(name, type) {
|
|
65
|
+
export function setType(name, type) {
|
|
68
66
|
sourceTypes[name] = type;
|
|
69
67
|
}
|
|
70
|
-
|
|
71
|
-
module.exports = {
|
|
72
|
-
create,
|
|
73
|
-
getType,
|
|
74
|
-
setType
|
|
75
|
-
};
|