@mapwhit/tilerenderer 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/min/package.json +2 -1
- package/build/min/src/shaders/_prelude.fragment.glsl.js +1 -1
- package/build/min/src/shaders/_prelude.vertex.glsl.js +1 -1
- package/build/min/src/shaders/background.fragment.glsl.js +1 -1
- package/build/min/src/shaders/background.vertex.glsl.js +1 -1
- package/build/min/src/shaders/background_pattern.fragment.glsl.js +1 -1
- package/build/min/src/shaders/background_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/circle.fragment.glsl.js +1 -1
- package/build/min/src/shaders/circle.vertex.glsl.js +1 -1
- 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 +1 -1
- package/build/min/src/shaders/fill.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill_extrusion.fragment.glsl.js +1 -1
- package/build/min/src/shaders/fill_extrusion.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js +1 -1
- package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill_outline.fragment.glsl.js +1 -1
- package/build/min/src/shaders/fill_outline.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.js +1 -1
- package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill_pattern.fragment.glsl.js +1 -1
- package/build/min/src/shaders/fill_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/heatmap.fragment.glsl.js +1 -1
- package/build/min/src/shaders/heatmap.vertex.glsl.js +1 -1
- package/build/min/src/shaders/heatmap_texture.fragment.glsl.js +1 -1
- package/build/min/src/shaders/heatmap_texture.vertex.glsl.js +1 -1
- package/build/min/src/shaders/hillshade.fragment.glsl.js +1 -1
- package/build/min/src/shaders/hillshade.vertex.glsl.js +1 -1
- package/build/min/src/shaders/hillshade_prepare.fragment.glsl.js +1 -1
- package/build/min/src/shaders/hillshade_prepare.vertex.glsl.js +1 -1
- package/build/min/src/shaders/line.fragment.glsl.js +1 -1
- package/build/min/src/shaders/line.vertex.glsl.js +1 -1
- package/build/min/src/shaders/line_gradient.fragment.glsl.js +1 -1
- package/build/min/src/shaders/line_gradient.vertex.glsl.js +1 -1
- package/build/min/src/shaders/line_pattern.fragment.glsl.js +1 -1
- package/build/min/src/shaders/line_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/line_sdf.fragment.glsl.js +1 -1
- package/build/min/src/shaders/line_sdf.vertex.glsl.js +1 -1
- package/build/min/src/shaders/raster.fragment.glsl.js +1 -1
- package/build/min/src/shaders/raster.vertex.glsl.js +1 -1
- package/build/min/src/shaders/symbol_icon.fragment.glsl.js +1 -1
- package/build/min/src/shaders/symbol_icon.vertex.glsl.js +1 -1
- package/build/min/src/shaders/symbol_sdf.fragment.glsl.js +1 -1
- package/build/min/src/shaders/symbol_sdf.vertex.glsl.js +1 -1
- package/package.json +3 -2
- package/src/data/array_types.js +54 -81
- package/src/data/bucket/circle_attributes.js +2 -4
- package/src/data/bucket/circle_bucket.js +19 -13
- package/src/data/bucket/fill_attributes.js +2 -4
- package/src/data/bucket/fill_bucket.js +38 -24
- package/src/data/bucket/fill_extrusion_attributes.js +2 -4
- package/src/data/bucket/fill_extrusion_bucket.js +56 -34
- package/src/data/bucket/heatmap_bucket.js +2 -7
- package/src/data/bucket/line_attributes.js +2 -4
- package/src/data/bucket/line_bucket.js +207 -159
- package/src/data/bucket/pattern_attributes.js +2 -4
- package/src/data/bucket/pattern_bucket_features.js +5 -7
- package/src/data/bucket/symbol_attributes.js +12 -26
- package/src/data/bucket/symbol_bucket.js +111 -221
- package/src/data/bucket/symbol_buffers.js +62 -0
- package/src/data/bucket/symbol_collision_buffers.js +33 -0
- package/src/data/bucket.js +2 -6
- package/src/data/dem_data.js +11 -7
- package/src/data/extent.js +1 -1
- package/src/data/feature_index.js +35 -20
- 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 +44 -26
- package/src/data/raster_bounds_attributes.js +2 -2
- package/src/data/segment.js +4 -3
- 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 +14 -9
- package/src/render/draw_circle.js +11 -8
- package/src/render/draw_collision_debug.js +11 -8
- package/src/render/draw_debug.js +16 -14
- package/src/render/draw_fill.js +19 -12
- package/src/render/draw_fill_extrusion.js +12 -9
- package/src/render/draw_heatmap.js +17 -12
- package/src/render/draw_hillshade.js +12 -9
- package/src/render/draw_line.js +30 -16
- package/src/render/draw_raster.js +17 -13
- package/src/render/draw_symbol.js +22 -17
- package/src/render/glyph_atlas.js +9 -5
- package/src/render/glyph_manager.js +1 -1
- package/src/render/image_atlas.js +4 -7
- package/src/render/image_manager.js +6 -9
- package/src/render/line_atlas.js +2 -2
- package/src/render/painter.js +65 -47
- package/src/render/program/background_program.js +6 -13
- package/src/render/program/circle_program.js +4 -6
- 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 +8 -14
- package/src/render/program/fill_program.js +10 -21
- package/src/render/program/heatmap_program.js +8 -14
- package/src/render/program/hillshade_program.js +10 -16
- package/src/render/program/line_program.js +11 -22
- package/src/render/program/pattern.js +5 -7
- package/src/render/program/program_uniforms.js +13 -20
- package/src/render/program/raster_program.js +3 -5
- 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 +11 -7
- package/src/source/geojson_worker_source.js +7 -7
- package/src/source/geojson_wrapper.js +4 -4
- package/src/source/image_source.js +11 -12
- package/src/source/load_tilejson.js +3 -3
- package/src/source/pixels_to_tile_units.js +3 -3
- package/src/source/query_features.js +13 -10
- package/src/source/raster_dem_tile_source.js +12 -10
- package/src/source/raster_tile_source.js +13 -9
- package/src/source/resources/glyphs.js +2 -3
- package/src/source/resources/index.js +2 -4
- package/src/source/rtl_text_plugin.js +8 -8
- package/src/source/source.js +9 -15
- package/src/source/source_cache.js +114 -49
- package/src/source/source_state.js +37 -14
- package/src/source/tile.js +38 -23
- package/src/source/tile_bounds.js +15 -8
- package/src/source/tile_cache.js +2 -2
- package/src/source/tile_id.js +30 -23
- package/src/source/vector_tile_source.js +10 -8
- package/src/source/vector_tile_worker_source.js +4 -4
- package/src/source/worker_tile.js +24 -22
- 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 +3 -4
- package/src/style/properties.js +21 -44
- package/src/style/query_utils.js +4 -10
- package/src/style/style.js +64 -34
- 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 +12 -9
- package/src/style/style_layer/circle_style_layer_properties.js +2 -2
- package/src/style/style_layer/fill_extrusion_style_layer.js +16 -13
- package/src/style/style_layer/fill_extrusion_style_layer_properties.js +2 -2
- package/src/style/style_layer/fill_style_layer.js +6 -7
- package/src/style/style_layer/fill_style_layer_properties.js +2 -2
- package/src/style/style_layer/heatmap_style_layer.js +5 -6
- package/src/style/style_layer/heatmap_style_layer_properties.js +2 -2
- package/src/style/style_layer/hillshade_style_layer.js +3 -4
- package/src/style/style_layer/hillshade_style_layer_properties.js +2 -2
- package/src/style/style_layer/line_style_layer.js +10 -11
- 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 +7 -8
- package/src/style/style_layer/symbol_style_layer_properties.js +2 -2
- package/src/style/style_layer.js +21 -20
- package/src/style/style_layer_index.js +2 -2
- 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 -2
- 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 +5 -5
- 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 -1
- package/src/symbol/placement.js +25 -20
- package/src/symbol/projection.js +29 -28
- package/src/symbol/quads.js +10 -12
- package/src/symbol/shaping.js +27 -19
- package/src/symbol/symbol_layout.js +17 -21
- package/src/symbol/symbol_size.js +13 -12
- package/src/symbol/transform_text.js +3 -3
- package/src/ui/camera.js +34 -18
- package/src/ui/map.js +54 -34
- 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 +1 -1
- package/src/util/image.js +3 -8
- 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 +7 -3
- package/src/util/loader/image.js +1 -1
- package/src/util/object.js +25 -23
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import EXTENT from '../data/extent.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Converts a pixel value at a the given zoom level to tile units.
|
|
@@ -12,6 +12,6 @@ const EXTENT = require('../data/extent');
|
|
|
12
12
|
* @returns value in tile units
|
|
13
13
|
* @private
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
export default function (tile, pixelValue, z) {
|
|
16
16
|
return pixelValue * (EXTENT / (tile.tileSize * 2 ** (z - tile.tileID.overscaledZ)));
|
|
17
|
-
}
|
|
17
|
+
}
|
|
@@ -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.
|
|
@@ -35,7 +31,7 @@ function queryIncludes3DLayer(layers, styleLayers, sourceID) {
|
|
|
35
31
|
return false;
|
|
36
32
|
}
|
|
37
33
|
|
|
38
|
-
function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params, transform) {
|
|
34
|
+
export function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params, transform) {
|
|
39
35
|
const has3DLayer = queryIncludes3DLayer(params?.layers, styleLayers, sourceCache.id);
|
|
40
36
|
const maxPitchScaleFactor = transform.maxPitchScaleFactor();
|
|
41
37
|
const tilesIn = sourceCache.tilesIn(queryGeometry, maxPitchScaleFactor, has3DLayer);
|
|
@@ -77,7 +73,14 @@ function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params,
|
|
|
77
73
|
return result;
|
|
78
74
|
}
|
|
79
75
|
|
|
80
|
-
function queryRenderedSymbols(
|
|
76
|
+
export function queryRenderedSymbols(
|
|
77
|
+
styleLayers,
|
|
78
|
+
sourceCaches,
|
|
79
|
+
queryGeometry,
|
|
80
|
+
params,
|
|
81
|
+
collisionIndex,
|
|
82
|
+
retainedQueryData
|
|
83
|
+
) {
|
|
81
84
|
const result = {};
|
|
82
85
|
const renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry);
|
|
83
86
|
const bucketQueryData = [];
|
|
@@ -141,7 +144,7 @@ function queryRenderedSymbols(styleLayers, sourceCaches, queryGeometry, params,
|
|
|
141
144
|
return result;
|
|
142
145
|
}
|
|
143
146
|
|
|
144
|
-
function querySourceFeatures(sourceCache, params) {
|
|
147
|
+
export function querySourceFeatures(sourceCache, params) {
|
|
145
148
|
const tiles = sourceCache.getRenderableIds().map(id => {
|
|
146
149
|
return sourceCache.getTileByID(id);
|
|
147
150
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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';
|
|
6
6
|
|
|
7
|
-
class RasterDEMTileSource extends RasterTileSource {
|
|
7
|
+
export default class RasterDEMTileSource extends RasterTileSource {
|
|
8
8
|
constructor(id, options, eventedParent) {
|
|
9
9
|
super(id, options, eventedParent);
|
|
10
10
|
this.type = 'raster-dem';
|
|
@@ -54,12 +54,16 @@ class RasterDEMTileSource extends RasterTileSource {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
unloadTile(tile) {
|
|
57
|
-
if (tile.demTexture)
|
|
57
|
+
if (tile.demTexture) {
|
|
58
|
+
this.map.painter.saveTileTexture(tile.demTexture);
|
|
59
|
+
}
|
|
58
60
|
if (tile.fbo) {
|
|
59
61
|
tile.fbo.destroy();
|
|
60
62
|
delete tile.fbo;
|
|
61
63
|
}
|
|
62
|
-
if (tile.dem)
|
|
64
|
+
if (tile.dem) {
|
|
65
|
+
delete tile.dem;
|
|
66
|
+
}
|
|
63
67
|
delete tile.neighboringTiles;
|
|
64
68
|
|
|
65
69
|
tile.state = 'unloaded';
|
|
@@ -71,8 +75,6 @@ async function loadDEMTile({ uid, rawImageData, encoding }) {
|
|
|
71
75
|
return new DEMData(uid, rawImageData, encoding);
|
|
72
76
|
}
|
|
73
77
|
|
|
74
|
-
module.exports = RasterDEMTileSource;
|
|
75
|
-
|
|
76
78
|
function getNeighboringTiles(tileID) {
|
|
77
79
|
const {
|
|
78
80
|
canonical: { x, y, z },
|
|
@@ -1,9 +1,9 @@
|
|
|
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
9
|
constructor(id, options, eventedParent) {
|
|
@@ -28,7 +28,9 @@ class RasterTileSource extends Evented {
|
|
|
28
28
|
try {
|
|
29
29
|
const tileJSON = await loadTileJSON(this._options);
|
|
30
30
|
Object.assign(this, tileJSON);
|
|
31
|
-
if (tileJSON.bounds)
|
|
31
|
+
if (tileJSON.bounds) {
|
|
32
|
+
this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom);
|
|
33
|
+
}
|
|
32
34
|
|
|
33
35
|
// `content` is included here to prevent a race condition where `Style#_updateSources` is called
|
|
34
36
|
// before the TileJSON arrives. this makes sure the tiles needed are loaded once TileJSON arrives
|
|
@@ -101,7 +103,9 @@ class RasterTileSource extends Evented {
|
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
unloadTile(tile) {
|
|
104
|
-
if (tile.texture)
|
|
106
|
+
if (tile.texture) {
|
|
107
|
+
this.map.painter.saveTileTexture(tile.texture);
|
|
108
|
+
}
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
hasTransition() {
|
|
@@ -109,4 +113,4 @@ class RasterTileSource extends Evented {
|
|
|
109
113
|
}
|
|
110
114
|
}
|
|
111
115
|
|
|
112
|
-
|
|
116
|
+
export default RasterTileSource;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import dynload from 'dynload';
|
|
2
|
+
import browser from '../util/browser.js';
|
|
3
3
|
|
|
4
4
|
let pluginRequested = false;
|
|
5
5
|
let pluginURL;
|
|
@@ -15,7 +15,7 @@ const rtlPlugin = {
|
|
|
15
15
|
setRTLTextPlugin
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
function registerForPluginAvailability(callback) {
|
|
18
|
+
export function registerForPluginAvailability(callback) {
|
|
19
19
|
if (plugin.isLoaded()) {
|
|
20
20
|
callback();
|
|
21
21
|
return;
|
|
@@ -25,13 +25,13 @@ function registerForPluginAvailability(callback) {
|
|
|
25
25
|
return () => _loadedCallbacks.splice(_loadedCallbacks.indexOf(callback), 1);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function clearRTLTextPlugin() {
|
|
28
|
+
export function clearRTLTextPlugin() {
|
|
29
29
|
_loadedCallbacks.length = 0;
|
|
30
30
|
pluginRequested = false;
|
|
31
31
|
pluginURL = undefined;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
function setRTLTextPlugin(url, callback) {
|
|
34
|
+
export function setRTLTextPlugin(url, callback) {
|
|
35
35
|
if (pluginRequested) {
|
|
36
36
|
throw new Error('setRTLTextPlugin cannot be called multiple times.');
|
|
37
37
|
}
|
|
@@ -74,7 +74,7 @@ function registerRTLTextPlugin(loadedPlugin) {
|
|
|
74
74
|
|
|
75
75
|
globalThis.registerRTLTextPlugin ??= registerRTLTextPlugin;
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
function loadScript(url) {
|
|
78
78
|
const { promise, resolve, reject } = Promise.withResolvers();
|
|
79
79
|
const s = dynload(url);
|
|
80
80
|
s.onload = () => resolve();
|
|
@@ -82,11 +82,11 @@ async function loadScript(url) {
|
|
|
82
82
|
return promise;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
const plugin = (rtlPlugin.plugin = {
|
|
85
|
+
export const plugin = (rtlPlugin.plugin = {
|
|
86
86
|
applyArabicShaping: null,
|
|
87
87
|
processBidirectionalText: null,
|
|
88
88
|
processStyledBidirectionalText: null,
|
|
89
89
|
isLoaded: () => plugin.applyArabicShaping != null
|
|
90
90
|
});
|
|
91
91
|
|
|
92
|
-
|
|
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`,
|
|
@@ -24,11 +24,11 @@ const { bindAll } = require('../util/object');
|
|
|
24
24
|
* if they are floor-ed to the nearest integer.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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';
|
|
32
32
|
|
|
33
33
|
const sourceTypes = {
|
|
34
34
|
vector,
|
|
@@ -47,7 +47,7 @@ const sourceTypes = {
|
|
|
47
47
|
* with that type's requirements.
|
|
48
48
|
* @returns {Source}
|
|
49
49
|
*/
|
|
50
|
-
function create(id, specification, eventedParent, { resources, layerIndex, showTileBoundaries }) {
|
|
50
|
+
export function create(id, specification, eventedParent, { resources, layerIndex, showTileBoundaries }) {
|
|
51
51
|
const source = new sourceTypes[specification.type](id, specification, eventedParent, {
|
|
52
52
|
resources,
|
|
53
53
|
layerIndex,
|
|
@@ -58,16 +58,10 @@ function create(id, specification, eventedParent, { resources, layerIndex, showT
|
|
|
58
58
|
return source;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
function getType(name) {
|
|
61
|
+
export function getType(name) {
|
|
62
62
|
return sourceTypes[name];
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
function setType(name, type) {
|
|
65
|
+
export function setType(name, type) {
|
|
66
66
|
sourceTypes[name] = type;
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
module.exports = {
|
|
70
|
-
create,
|
|
71
|
-
getType,
|
|
72
|
-
setType
|
|
73
|
-
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import Point from '@mapbox/point-geometry';
|
|
2
|
+
import { ErrorEvent, Event, Evented } from '@mapwhit/events';
|
|
3
|
+
import EXTENT from '../data/extent.js';
|
|
4
|
+
import Coordinate from '../geo/coordinate.js';
|
|
5
|
+
import browser from '../util/browser.js';
|
|
6
|
+
import { create as createSource } from './source.js';
|
|
7
|
+
import SourceFeatureState from './source_state.js';
|
|
8
|
+
import Tile from './tile.js';
|
|
9
|
+
import TileCache from './tile_cache.js';
|
|
10
|
+
import { OverscaledTileID } from './tile_id.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* `SourceCache` is responsible for
|
|
@@ -34,14 +34,20 @@ class SourceCache extends Evented {
|
|
|
34
34
|
this.id = id;
|
|
35
35
|
|
|
36
36
|
this.on('data', e => {
|
|
37
|
-
if (e.dataType !== 'source')
|
|
38
|
-
|
|
37
|
+
if (e.dataType !== 'source') {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (e.sourceDataType === 'metadata') {
|
|
41
|
+
this.#sourceLoaded = true;
|
|
42
|
+
}
|
|
39
43
|
|
|
40
44
|
// for sources with mutable data, this event fires when the underlying data
|
|
41
45
|
// to a source is changed. (i.e. GeoJSONSource#setData and ImageSource#serCoordinates)
|
|
42
46
|
if (this.#sourceLoaded && !this.#paused && e.sourceDataType === 'content') {
|
|
43
47
|
this.reload();
|
|
44
|
-
if (this.transform)
|
|
48
|
+
if (this.transform) {
|
|
49
|
+
this.update(this.transform);
|
|
50
|
+
}
|
|
45
51
|
}
|
|
46
52
|
});
|
|
47
53
|
|
|
@@ -69,16 +75,29 @@ class SourceCache extends Evented {
|
|
|
69
75
|
}
|
|
70
76
|
|
|
71
77
|
/**
|
|
72
|
-
* Return true if no tile data is pending, tiles will not change unless
|
|
78
|
+
* Return `true` if no tile data is pending, tiles will not change unless
|
|
73
79
|
* an additional API call is received.
|
|
80
|
+
* If `ignoreTilesLoading` is set, return `true` even when tiles are pending,
|
|
81
|
+
* otherwise there is no way to check that source is ready after loading style.
|
|
82
|
+
* Without `ignoreTilesLoading` the state of style being loaded or not depends on
|
|
83
|
+
* the tiles being in the process of loading or not.
|
|
74
84
|
*/
|
|
75
|
-
loaded() {
|
|
76
|
-
if (this.#sourceErrored)
|
|
85
|
+
loaded(ignoreTilesLoading) {
|
|
86
|
+
if (this.#sourceErrored) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
77
89
|
|
|
78
|
-
if (!this.#sourceLoaded)
|
|
90
|
+
if (!this.#sourceLoaded) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
79
93
|
|
|
94
|
+
if (ignoreTilesLoading) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
80
97
|
for (const tile of this._tiles.values()) {
|
|
81
|
-
if (tile.state !== 'loaded' && tile.state !== 'errored')
|
|
98
|
+
if (tile.state !== 'loaded' && tile.state !== 'errored') {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
82
101
|
}
|
|
83
102
|
return true;
|
|
84
103
|
}
|
|
@@ -92,12 +111,18 @@ class SourceCache extends Evented {
|
|
|
92
111
|
}
|
|
93
112
|
|
|
94
113
|
resume() {
|
|
95
|
-
if (!this.#paused)
|
|
114
|
+
if (!this.#paused) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
96
117
|
const shouldReload = this.#shouldReloadOnResume;
|
|
97
118
|
this.#paused = false;
|
|
98
119
|
this.#shouldReloadOnResume = false;
|
|
99
|
-
if (shouldReload)
|
|
100
|
-
|
|
120
|
+
if (shouldReload) {
|
|
121
|
+
this.reload();
|
|
122
|
+
}
|
|
123
|
+
if (this.transform) {
|
|
124
|
+
this.update(this.transform);
|
|
125
|
+
}
|
|
101
126
|
}
|
|
102
127
|
|
|
103
128
|
_loadTile(tile) {
|
|
@@ -170,7 +195,9 @@ class SourceCache extends Evented {
|
|
|
170
195
|
this._cache.reset();
|
|
171
196
|
|
|
172
197
|
this._tiles.forEach(tile => {
|
|
173
|
-
if (tile.state !== 'errored')
|
|
198
|
+
if (tile.state !== 'errored') {
|
|
199
|
+
this._reloadTile(tile, 'reloading');
|
|
200
|
+
}
|
|
174
201
|
});
|
|
175
202
|
}
|
|
176
203
|
|
|
@@ -191,15 +218,23 @@ class SourceCache extends Evented {
|
|
|
191
218
|
_tileLoadError(tile, err) {
|
|
192
219
|
tile.state = 'errored';
|
|
193
220
|
// ignore do nothing strategy
|
|
194
|
-
if (err.doNothing)
|
|
195
|
-
|
|
221
|
+
if (err.doNothing) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (err.status !== 404) {
|
|
225
|
+
this._source.fire(new ErrorEvent(err, { tile }));
|
|
226
|
+
}
|
|
196
227
|
// continue to try loading parent/children tiles if a tile doesn't exist (404)
|
|
197
|
-
else
|
|
228
|
+
else {
|
|
229
|
+
this.update(this.transform);
|
|
230
|
+
}
|
|
198
231
|
}
|
|
199
232
|
|
|
200
233
|
_tileLoaded(tile, err) {
|
|
201
234
|
tile.timeAdded = browser.now();
|
|
202
|
-
if (this.getSource().type === 'raster-dem' && tile.dem)
|
|
235
|
+
if (this.getSource().type === 'raster-dem' && tile.dem) {
|
|
236
|
+
this._backfillDEM(tile);
|
|
237
|
+
}
|
|
203
238
|
this._state.initializeTileState(tile, this.map ? this.map.painter : null);
|
|
204
239
|
|
|
205
240
|
this._source.fire(new Event('data', { dataType: 'source', tile: tile, coord: tile.tileID }));
|
|
@@ -226,7 +261,9 @@ class SourceCache extends Evented {
|
|
|
226
261
|
const dy = borderTile.tileID.canonical.y - tile.tileID.canonical.y;
|
|
227
262
|
const dim = 2 ** tile.tileID.canonical.z;
|
|
228
263
|
const borderId = borderTile.tileID.key;
|
|
229
|
-
if (dx === 0 && dy === 0)
|
|
264
|
+
if (dx === 0 && dy === 0) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
230
267
|
|
|
231
268
|
if (Math.abs(dy) > 1) {
|
|
232
269
|
return;
|
|
@@ -239,9 +276,13 @@ class SourceCache extends Evented {
|
|
|
239
276
|
dx -= dim;
|
|
240
277
|
}
|
|
241
278
|
}
|
|
242
|
-
if (!borderTile.dem || !tile.dem)
|
|
279
|
+
if (!borderTile.dem || !tile.dem) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
243
282
|
tile.dem.backfillBorder(borderTile.dem, dx, dy);
|
|
244
|
-
if (tile.neighboringTiles?.[borderId])
|
|
283
|
+
if (tile.neighboringTiles?.[borderId]) {
|
|
284
|
+
tile.neighboringTiles[borderId].backfilled = true;
|
|
285
|
+
}
|
|
245
286
|
}
|
|
246
287
|
}
|
|
247
288
|
/**
|
|
@@ -277,8 +318,9 @@ class SourceCache extends Evented {
|
|
|
277
318
|
!tile.hasData() ||
|
|
278
319
|
tile.tileID.overscaledZ <= zoom ||
|
|
279
320
|
tile.tileID.overscaledZ > maxCoveringZoom
|
|
280
|
-
)
|
|
321
|
+
) {
|
|
281
322
|
continue;
|
|
323
|
+
}
|
|
282
324
|
|
|
283
325
|
// loop through parents and retain the topmost loaded one if found
|
|
284
326
|
let topmostLoadedID = tile.tileID;
|
|
@@ -311,7 +353,9 @@ class SourceCache extends Evented {
|
|
|
311
353
|
findLoadedParent(tileID, minCoveringZoom) {
|
|
312
354
|
for (let z = tileID.overscaledZ - 1; z >= minCoveringZoom; z--) {
|
|
313
355
|
const parent = tileID.scaledTo(z);
|
|
314
|
-
if (!parent)
|
|
356
|
+
if (!parent) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
315
359
|
const tile = this._tiles.get(parent.key);
|
|
316
360
|
if (tile?.hasData()) {
|
|
317
361
|
return tile;
|
|
@@ -434,7 +478,9 @@ class SourceCache extends Evented {
|
|
|
434
478
|
const fadingTiles = new Set();
|
|
435
479
|
for (const [id, tileID] of retain) {
|
|
436
480
|
const tile = this._tiles.get(id);
|
|
437
|
-
if (!tile || (tile.fadeEndTime && tile.fadeEndTime <= browser.now()))
|
|
481
|
+
if (!tile || (tile.fadeEndTime && tile.fadeEndTime <= browser.now())) {
|
|
482
|
+
continue;
|
|
483
|
+
}
|
|
438
484
|
|
|
439
485
|
// if the tile is loaded but still fading in, find parents to cross-fade with it
|
|
440
486
|
const parentTile = this.findLoadedParent(tileID, minCoveringZoom);
|
|
@@ -466,7 +512,9 @@ class SourceCache extends Evented {
|
|
|
466
512
|
|
|
467
513
|
// Remove the tiles we don't need anymore.
|
|
468
514
|
for (const [id, tile] of this._tiles) {
|
|
469
|
-
if (retain.has(id))
|
|
515
|
+
if (retain.has(id)) {
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
470
518
|
if (tile.hasSymbolBuckets && !tile.holdingForFade()) {
|
|
471
519
|
tile.setHoldDuration(this.map._fadeDuration);
|
|
472
520
|
} else if (!tile.hasSymbolBuckets || tile.symbolFadeFinished()) {
|
|
@@ -496,7 +544,9 @@ class SourceCache extends Evented {
|
|
|
496
544
|
// retain the tile even if it's not loaded because it's an ideal tile.
|
|
497
545
|
retain.set(tileID.key, tileID);
|
|
498
546
|
|
|
499
|
-
if (tile.hasData())
|
|
547
|
+
if (tile.hasData()) {
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
500
550
|
|
|
501
551
|
if (zoom < this._source.maxzoom) {
|
|
502
552
|
// save missing tiles that potentially have loaded children
|
|
@@ -510,7 +560,9 @@ class SourceCache extends Evented {
|
|
|
510
560
|
for (const tileID of idealTileIDs) {
|
|
511
561
|
let tile = this._tiles.get(tileID.key);
|
|
512
562
|
|
|
513
|
-
if (tile.hasData())
|
|
563
|
+
if (tile.hasData()) {
|
|
564
|
+
continue;
|
|
565
|
+
}
|
|
514
566
|
|
|
515
567
|
// The tile we require is not yet loaded or does not exist;
|
|
516
568
|
// Attempt to find children that fully cover it.
|
|
@@ -532,8 +584,9 @@ class SourceCache extends Evented {
|
|
|
532
584
|
retain.has(children[1].key) &&
|
|
533
585
|
retain.has(children[2].key) &&
|
|
534
586
|
retain.has(children[3].key)
|
|
535
|
-
)
|
|
587
|
+
) {
|
|
536
588
|
continue; // tile is covered by children
|
|
589
|
+
}
|
|
537
590
|
}
|
|
538
591
|
|
|
539
592
|
// We couldn't find child tiles that entirely cover the ideal tile; look for parents now.
|
|
@@ -547,7 +600,9 @@ class SourceCache extends Evented {
|
|
|
547
600
|
const parentId = tileID.scaledTo(overscaledZ);
|
|
548
601
|
|
|
549
602
|
// Break parent tile ascent if this route has been previously checked by another child.
|
|
550
|
-
if (checked.has(parentId.key))
|
|
603
|
+
if (checked.has(parentId.key)) {
|
|
604
|
+
break;
|
|
605
|
+
}
|
|
551
606
|
checked.add(parentId.key);
|
|
552
607
|
|
|
553
608
|
tile = this.getTile(parentId);
|
|
@@ -559,7 +614,9 @@ class SourceCache extends Evented {
|
|
|
559
614
|
// Save the current values, since they're the parent of the next iteration
|
|
560
615
|
// of the parent tile ascent loop.
|
|
561
616
|
parentWasRequested = tile.wasRequested();
|
|
562
|
-
if (tile.hasData())
|
|
617
|
+
if (tile.hasData()) {
|
|
618
|
+
break;
|
|
619
|
+
}
|
|
563
620
|
}
|
|
564
621
|
}
|
|
565
622
|
}
|
|
@@ -573,7 +630,9 @@ class SourceCache extends Evented {
|
|
|
573
630
|
*/
|
|
574
631
|
_addTile(tileID) {
|
|
575
632
|
let tile = this._tiles.get(tileID.key);
|
|
576
|
-
if (tile)
|
|
633
|
+
if (tile) {
|
|
634
|
+
return tile;
|
|
635
|
+
}
|
|
577
636
|
|
|
578
637
|
tile = this._cache.getAndRemove(tileID);
|
|
579
638
|
if (tile) {
|
|
@@ -590,13 +649,11 @@ class SourceCache extends Evented {
|
|
|
590
649
|
err => this._tileLoadError(tile, err)
|
|
591
650
|
);
|
|
592
651
|
}
|
|
593
|
-
|
|
594
|
-
// Impossible, but silence flow.
|
|
595
|
-
if (!tile) return null;
|
|
596
|
-
|
|
597
652
|
tile.uses++;
|
|
598
653
|
this._tiles.set(tileID.key, tile);
|
|
599
|
-
if (!cached)
|
|
654
|
+
if (!cached) {
|
|
655
|
+
this._source.fire(new Event('dataloading', { tile: tile, coord: tile.tileID, dataType: 'source' }));
|
|
656
|
+
}
|
|
600
657
|
|
|
601
658
|
return tile;
|
|
602
659
|
}
|
|
@@ -607,12 +664,16 @@ class SourceCache extends Evented {
|
|
|
607
664
|
*/
|
|
608
665
|
_removeTile(id) {
|
|
609
666
|
const tile = this._tiles.get(id);
|
|
610
|
-
if (!tile)
|
|
667
|
+
if (!tile) {
|
|
668
|
+
return;
|
|
669
|
+
}
|
|
611
670
|
|
|
612
671
|
tile.uses--;
|
|
613
672
|
this._tiles.delete(id);
|
|
614
673
|
|
|
615
|
-
if (tile.uses > 0)
|
|
674
|
+
if (tile.uses > 0) {
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
616
677
|
|
|
617
678
|
if (tile.hasData()) {
|
|
618
679
|
this._cache.add(tile);
|
|
@@ -630,7 +691,9 @@ class SourceCache extends Evented {
|
|
|
630
691
|
this.#shouldReloadOnResume = false;
|
|
631
692
|
this.#paused = false;
|
|
632
693
|
|
|
633
|
-
for (const id of this._tiles.keys())
|
|
694
|
+
for (const id of this._tiles.keys()) {
|
|
695
|
+
this._removeTile(id);
|
|
696
|
+
}
|
|
634
697
|
|
|
635
698
|
this._cache.reset();
|
|
636
699
|
}
|
|
@@ -645,7 +708,9 @@ class SourceCache extends Evented {
|
|
|
645
708
|
const tileResults = [];
|
|
646
709
|
|
|
647
710
|
const transform = this.transform;
|
|
648
|
-
if (!transform)
|
|
711
|
+
if (!transform) {
|
|
712
|
+
return tileResults;
|
|
713
|
+
}
|
|
649
714
|
|
|
650
715
|
const cameraPointQueryGeometry = has3DLayer
|
|
651
716
|
? transform.getCameraQueryGeometry(pointQueryGeometry)
|
|
@@ -777,4 +842,4 @@ function isRasterType(type) {
|
|
|
777
842
|
return type === 'raster' || type === 'image';
|
|
778
843
|
}
|
|
779
844
|
|
|
780
|
-
|
|
845
|
+
export default SourceCache;
|