maplibre-gl 2.0.4 → 2.1.2
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/{banner.js → banner.ts} +1 -1
- package/build/generate-query-test-fixtures.ts +123 -0
- package/build/generate-shaders.ts +35 -0
- package/build/generate-struct-arrays.ts +7 -7
- package/build/generate-style-code.ts +8 -8
- package/build/generate-style-spec.ts +5 -4
- package/build/generate-typings.ts +16 -0
- package/build/readme.md +8 -18
- package/build/release-notes.js +9 -13
- package/build/{rollup_plugin_minify_style_spec.js → rollup_plugin_minify_style_spec.ts} +4 -3
- package/build/{rollup_plugins.js → rollup_plugins.ts} +12 -26
- package/dist/maplibre-gl-dev.js +54885 -0
- package/dist/maplibre-gl.css +1 -1
- package/dist/maplibre-gl.d.ts +1583 -1023
- package/dist/maplibre-gl.js +3 -3
- package/dist/maplibre-gl.js.map +1 -1
- package/package.json +99 -141
- package/src/css/maplibre-gl.css +36 -36
- package/src/data/{array_types.ts → array_types.g.ts} +0 -0
- package/src/data/bucket/circle_bucket.ts +1 -1
- package/src/data/bucket/fill_bucket.test.ts +1 -1
- package/src/data/bucket/fill_bucket.ts +4 -4
- package/src/data/bucket/fill_extrusion_bucket.ts +1 -1
- package/src/data/bucket/line_bucket.test.ts +1 -1
- package/src/data/bucket/line_bucket.ts +6 -6
- package/src/data/bucket/symbol_bucket.test.ts +16 -16
- package/src/data/bucket/symbol_bucket.ts +56 -56
- package/src/data/bucket.ts +43 -43
- package/src/data/dem_data.ts +12 -12
- package/src/data/evaluation_feature.ts +10 -10
- package/src/data/feature_index.ts +37 -37
- package/src/data/feature_position_map.ts +5 -5
- package/src/data/index_array_type.ts +1 -1
- package/src/data/load_geometry.test.ts +1 -1
- package/src/data/program_configuration.ts +47 -47
- package/src/data/segment.ts +14 -14
- package/src/geo/edge_insets.ts +2 -2
- package/src/geo/lng_lat.ts +4 -4
- package/src/geo/lng_lat_bounds.ts +35 -35
- package/src/geo/mercator_coordinate.ts +5 -5
- package/src/geo/transform.test.ts +1 -1
- package/src/geo/transform.ts +14 -14
- package/src/gl/context.ts +3 -3
- package/src/gl/types.ts +19 -19
- package/src/gl/value.ts +6 -6
- package/src/gl/vertex_buffer.test.ts +1 -1
- package/src/index.ts +24 -9
- package/src/render/draw_circle.ts +8 -8
- package/src/render/draw_collision_debug.ts +5 -5
- package/src/render/draw_debug.ts +1 -1
- package/src/render/draw_line.ts +4 -4
- package/src/render/draw_symbol.ts +21 -21
- package/src/render/glyph_atlas.ts +12 -12
- package/src/render/glyph_manager.test.ts +10 -21
- package/src/render/glyph_manager.ts +34 -33
- package/src/render/image_manager.ts +4 -4
- package/src/render/painter.ts +16 -14
- package/src/render/program/background_program.ts +29 -29
- package/src/render/program/circle_program.ts +11 -11
- package/src/render/program/clipping_mask_program.ts +1 -1
- package/src/render/program/collision_program.ts +9 -9
- package/src/render/program/debug_program.ts +4 -4
- package/src/render/program/fill_extrusion_program.ts +31 -31
- package/src/render/program/fill_program.ts +29 -29
- package/src/render/program/heatmap_program.ts +12 -12
- package/src/render/program/hillshade_program.ts +12 -12
- package/src/render/program/line_program.ts +41 -41
- package/src/render/program/pattern.ts +28 -28
- package/src/render/program/raster_program.ts +21 -21
- package/src/render/program/symbol_program.ts +97 -97
- package/src/render/program.ts +25 -25
- package/src/render/texture.ts +9 -9
- package/src/render/uniform_binding.ts +1 -1
- package/src/render/vertex_array_object.ts +13 -13
- package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
- package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
- package/src/shaders/background.fragment.glsl.g.ts +2 -0
- package/src/shaders/background.vertex.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/debug.fragment.glsl.g.ts +2 -0
- package/src/shaders/debug.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
- package/src/shaders/line.fragment.glsl.g.ts +2 -0
- package/src/shaders/line.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/raster.fragment.glsl.g.ts +2 -0
- package/src/shaders/raster.vertex.glsl.g.ts +2 -0
- package/src/shaders/shaders.ts +52 -55
- package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
- package/src/source/canvas_source.test.ts +11 -12
- package/src/source/canvas_source.ts +4 -4
- package/src/source/geojson_source.test.ts +2 -1
- package/src/source/geojson_source.ts +1 -1
- package/src/source/geojson_worker_source.ts +23 -23
- package/src/source/geojson_wrapper.ts +8 -8
- package/src/source/image_source.test.ts +153 -0
- package/src/source/image_source.ts +6 -6
- package/src/source/pixels_to_tile_units.ts +6 -6
- package/src/source/query_features.ts +20 -20
- package/src/source/raster_dem_tile_source.test.ts +4 -3
- package/src/source/raster_dem_tile_source.ts +1 -1
- package/src/source/raster_tile_source.test.ts +4 -3
- package/src/source/raster_tile_source.ts +1 -1
- package/src/source/rtl_text_plugin.ts +10 -10
- package/src/source/source.ts +29 -29
- package/src/source/source_cache.test.ts +33 -1
- package/src/source/source_cache.ts +7 -5
- package/src/source/source_state.ts +1 -1
- package/src/source/tile.test.ts +3 -3
- package/src/source/tile.ts +15 -15
- package/src/source/tile_cache.test.ts +6 -4
- package/src/source/tile_cache.ts +6 -6
- package/src/source/tile_id.test.ts +10 -13
- package/src/source/tile_id.ts +2 -2
- package/src/source/vector_tile_source.test.ts +17 -5
- package/src/source/vector_tile_source.ts +4 -5
- package/src/source/vector_tile_worker_source.test.ts +4 -4
- package/src/source/vector_tile_worker_source.ts +5 -5
- package/src/source/worker.test.ts +1 -1
- package/src/source/worker.ts +22 -22
- package/src/source/worker_source.ts +56 -56
- package/src/source/worker_tile.ts +4 -4
- package/src/style/evaluation_parameters.ts +3 -3
- package/src/style/format_section_override.test.ts +1 -1
- package/src/style/light.ts +10 -10
- package/src/style/load_glyph_range.test.ts +3 -5
- package/src/style/load_glyph_range.ts +6 -6
- package/src/style/load_sprite.ts +5 -4
- package/src/style/pauseable_placement.ts +1 -1
- package/src/style/properties.ts +70 -70
- package/src/style/query_utils.ts +7 -7
- package/src/style/style.test.ts +26 -15
- package/src/style/style.ts +30 -30
- package/src/style/style_glyph.ts +8 -8
- package/src/style/style_image.ts +58 -58
- package/src/style/style_layer/background_style_layer.ts +2 -2
- package/src/style/style_layer/{background_style_layer_properties.ts → background_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/circle_style_layer.ts +10 -10
- package/src/style/style_layer/{circle_style_layer_properties.ts → circle_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/custom_style_layer.ts +19 -19
- package/src/style/style_layer/fill_extrusion_style_layer.ts +11 -11
- package/src/style/style_layer/{fill_extrusion_style_layer_properties.ts → fill_extrusion_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/fill_style_layer.ts +9 -9
- package/src/style/style_layer/{fill_style_layer_properties.ts → fill_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/heatmap_style_layer.ts +2 -2
- package/src/style/style_layer/{heatmap_style_layer_properties.ts → heatmap_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/hillshade_style_layer.ts +2 -2
- package/src/style/style_layer/{hillshade_style_layer_properties.ts → hillshade_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/line_style_layer.ts +9 -9
- package/src/style/style_layer/{line_style_layer_properties.ts → line_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/raster_style_layer.ts +2 -2
- package/src/style/style_layer/{raster_style_layer_properties.ts → raster_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/symbol_style_layer.ts +26 -7
- package/src/style/style_layer/{symbol_style_layer_properties.ts → symbol_style_layer_properties.g.ts} +6 -0
- package/src/style/style_layer.ts +10 -10
- package/src/style/style_layer_index.ts +3 -3
- package/src/style/validate_style.ts +15 -15
- package/src/style-spec/CHANGELOG.md +6 -0
- package/src/style-spec/error/validation_error.ts +1 -1
- package/src/style-spec/expression/compound_expression.ts +3 -3
- package/src/style-spec/expression/definitions/format.ts +11 -11
- package/src/style-spec/expression/definitions/interpolate.ts +5 -5
- package/src/style-spec/expression/definitions/match.ts +2 -2
- package/src/style-spec/expression/definitions/number_format.ts +11 -11
- package/src/style-spec/expression/expression.ts +8 -8
- package/src/style-spec/expression/index.ts +97 -97
- package/src/style-spec/expression/parsing_context.ts +11 -11
- package/src/style-spec/expression/types/collator.ts +9 -9
- package/src/style-spec/expression/types/resolved_image.ts +2 -2
- package/src/style-spec/expression/types.ts +14 -14
- package/src/style-spec/expression/values.ts +1 -1
- package/src/style-spec/feature_filter/index.ts +66 -66
- package/src/style-spec/function/convert.ts +3 -3
- package/src/style-spec/package.json +1 -1
- package/src/style-spec/reference/v8.json +68 -2
- package/src/style-spec/style-spec.ts +44 -44
- package/src/style-spec/types.ts +2 -0
- package/src/style-spec/util/color_spaces.ts +8 -8
- package/src/style-spec/util/result.ts +4 -4
- package/src/style-spec/validate/validate_filter.ts +58 -58
- package/src/style-spec/validate/validate_source.ts +63 -63
- package/src/style-spec/visit.ts +11 -11
- package/src/symbol/collision_feature.test.ts +1 -1
- package/src/symbol/collision_feature.ts +10 -10
- package/src/symbol/collision_index.ts +43 -43
- package/src/symbol/cross_tile_symbol_index.ts +17 -17
- package/src/symbol/get_anchors.ts +16 -16
- package/src/symbol/grid_index.test.ts +42 -19
- package/src/symbol/grid_index.ts +69 -40
- package/src/symbol/placement.ts +124 -95
- package/src/symbol/projection.ts +30 -30
- package/src/symbol/quads.ts +30 -30
- package/src/symbol/shaping.ts +160 -160
- package/src/symbol/symbol_layout.ts +119 -119
- package/src/symbol/symbol_size.ts +29 -29
- package/src/symbol/symbol_style_layer.test.ts +49 -2
- package/src/types/cancelable.ts +1 -1
- package/src/types/tilejson.ts +13 -13
- package/src/ui/anchor.ts +1 -1
- package/src/ui/camera.test.ts +9 -9
- package/src/ui/camera.ts +26 -18
- package/src/ui/control/attribution_control.test.ts +51 -16
- package/src/ui/control/attribution_control.ts +35 -16
- package/src/ui/control/control.ts +40 -40
- package/src/ui/control/fullscreen_control.ts +1 -1
- package/src/ui/control/geolocate_control.test.ts +1 -1
- package/src/ui/control/geolocate_control.ts +102 -102
- package/src/ui/control/logo_control.test.ts +5 -4
- package/src/ui/control/navigation_control.ts +3 -3
- package/src/ui/control/scale_control.test.ts +2 -2
- package/src/ui/control/scale_control.ts +5 -5
- package/src/ui/events.ts +289 -200
- package/src/ui/handler/box_zoom.test.ts +1 -1
- package/src/ui/handler/box_zoom.ts +1 -1
- package/src/ui/handler/dblclick_zoom.test.ts +1 -1
- package/src/ui/handler/drag_pan.test.ts +1 -1
- package/src/ui/handler/drag_rotate.test.ts +1 -1
- package/src/ui/handler/keyboard.test.ts +1 -1
- package/src/ui/handler/keyboard.ts +51 -51
- package/src/ui/handler/map_event.test.ts +1 -1
- package/src/ui/handler/map_event.ts +1 -1
- package/src/ui/handler/mouse.ts +1 -1
- package/src/ui/handler/mouse_rotate.test.ts +1 -1
- package/src/ui/handler/scroll_zoom.test.ts +3 -2
- package/src/ui/handler/scroll_zoom.ts +9 -9
- package/src/ui/handler/shim/drag_pan.ts +4 -4
- package/src/ui/handler/shim/drag_rotate.ts +1 -1
- package/src/ui/handler/shim/touch_zoom_rotate.ts +1 -1
- package/src/ui/handler/tap_recognizer.ts +4 -4
- package/src/ui/handler/touch_pan.ts +2 -2
- package/src/ui/handler/touch_zoom_rotate.test.ts +1 -1
- package/src/ui/handler/touch_zoom_rotate.ts +1 -1
- package/src/ui/handler_inertia.ts +6 -6
- package/src/ui/handler_manager.ts +44 -44
- package/src/ui/map/isMoving.test.ts +1 -1
- package/src/ui/map/isRotating.test.ts +1 -1
- package/src/ui/map/isZooming.test.ts +1 -1
- package/src/ui/map.test.ts +87 -14
- package/src/ui/map.ts +138 -108
- package/src/ui/map_events.test.ts +1 -1
- package/src/ui/marker.test.ts +12 -12
- package/src/ui/marker.ts +37 -37
- package/src/ui/popup.test.ts +7 -7
- package/src/ui/popup.ts +9 -9
- package/src/util/actor.test.ts +41 -10
- package/src/util/actor.ts +8 -8
- package/src/util/ajax.test.ts +214 -0
- package/src/util/ajax.ts +51 -30
- package/src/util/browser.ts +1 -1
- package/src/util/classify_rings.test.ts +1 -1
- package/src/util/color_ramp.ts +5 -5
- package/src/util/config.ts +2 -2
- package/src/util/dispatcher.ts +1 -1
- package/src/util/dom.ts +2 -2
- package/src/util/evented.ts +1 -1
- package/src/util/find_pole_of_inaccessibility.ts +3 -3
- package/src/util/image.ts +5 -5
- package/src/util/performance.ts +7 -7
- package/src/util/request_manager.ts +4 -4
- package/src/util/resolve_tokens.ts +4 -4
- package/src/util/struct_array.test.ts +1 -1
- package/src/util/struct_array.ts +15 -15
- package/src/util/task_queue.ts +3 -3
- package/src/util/test/util.ts +14 -0
- package/src/util/tile_request_cache.ts +3 -3
- package/src/util/transferable_grid_index.ts +4 -4
- package/src/util/util.ts +8 -8
- package/src/util/web_worker.ts +4 -68
- package/src/util/web_worker_transfer.test.ts +3 -0
- package/src/util/web_worker_transfer.ts +21 -17
- package/src/util/worker_pool.ts +1 -1
- package/build/.eslintrc +0 -21
- package/build/glsl_to_js.js +0 -12
- package/build/post-ts-build.js +0 -43
- package/build/release-notes.md.ejs +0 -8
- package/build/test/build-tape.js +0 -17
- package/build/web_worker_replacement.js +0 -5
- package/dist/package.json +0 -1
- package/src/style-spec/validate_spec.test.ts +0 -29
- package/src/symbol/shaping.test.ts +0 -392
- package/src/types/glsl.d.ts +0 -4
|
@@ -91,18 +91,18 @@ export function queryRenderedFeatures(
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
export function queryRenderedSymbols(styleLayers: {[_: string]: StyleLayer},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
94
|
+
serializedLayers: {[_: string]: StyleLayer},
|
|
95
|
+
sourceCaches: {[_: string]: SourceCache},
|
|
96
|
+
queryGeometry: Array<Point>,
|
|
97
|
+
params: {
|
|
98
|
+
filter: FilterSpecification;
|
|
99
|
+
layers: Array<string>;
|
|
100
|
+
availableImages: Array<string>;
|
|
101
|
+
},
|
|
102
|
+
collisionIndex: CollisionIndex,
|
|
103
|
+
retainedQueryData: {
|
|
104
|
+
[_: number]: RetainedQueryData;
|
|
105
|
+
}) {
|
|
106
106
|
const result = {};
|
|
107
107
|
const renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry);
|
|
108
108
|
const bucketQueryData = [];
|
|
@@ -113,14 +113,14 @@ export function queryRenderedSymbols(styleLayers: {[_: string]: StyleLayer},
|
|
|
113
113
|
|
|
114
114
|
for (const queryData of bucketQueryData) {
|
|
115
115
|
const bucketSymbols = queryData.featureIndex.lookupSymbolFeatures(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
116
|
+
renderedSymbols[queryData.bucketInstanceId],
|
|
117
|
+
serializedLayers,
|
|
118
|
+
queryData.bucketIndex,
|
|
119
|
+
queryData.sourceLayerIndex,
|
|
120
|
+
params.filter,
|
|
121
|
+
params.layers,
|
|
122
|
+
params.availableImages,
|
|
123
|
+
styleLayers);
|
|
124
124
|
|
|
125
125
|
for (const layerID in bucketSymbols) {
|
|
126
126
|
const resultFeatures = result[layerID] = result[layerID] || [];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {fakeServer,
|
|
1
|
+
import {fakeServer, FakeServer} from 'nise';
|
|
2
2
|
import RasterDEMTileSource from './raster_dem_tile_source';
|
|
3
3
|
import {OverscaledTileID} from './tile_id';
|
|
4
4
|
import {RequestManager} from '../util/request_manager';
|
|
@@ -10,7 +10,8 @@ function createSource(options, transformCallback?) {
|
|
|
10
10
|
source.onAdd({
|
|
11
11
|
transform: {angle: 0, pitch: 0, showCollisionBoxes: false},
|
|
12
12
|
_getMapId: () => 1,
|
|
13
|
-
_requestManager: new RequestManager(transformCallback)
|
|
13
|
+
_requestManager: new RequestManager(transformCallback),
|
|
14
|
+
getPixelRatio() { return 1; }
|
|
14
15
|
} as any);
|
|
15
16
|
|
|
16
17
|
source.on('error', (e) => {
|
|
@@ -21,7 +22,7 @@ function createSource(options, transformCallback?) {
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
describe('RasterTileSource', () => {
|
|
24
|
-
let server:
|
|
25
|
+
let server: FakeServer;
|
|
25
26
|
beforeEach(() => {
|
|
26
27
|
global.fetch = null;
|
|
27
28
|
server = fakeServer.create();
|
|
@@ -37,7 +37,7 @@ class RasterDEMTileSource extends RasterTileSource implements Source {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
loadTile(tile: Tile, callback: Callback<void>) {
|
|
40
|
-
const url = tile.tileID.canonical.url(this.tiles, this.scheme);
|
|
40
|
+
const url = tile.tileID.canonical.url(this.tiles, this.map.getPixelRatio(), this.scheme);
|
|
41
41
|
tile.request = getImage(this.map._requestManager.transformRequest(url, ResourceType.Tile), imageLoaded.bind(this));
|
|
42
42
|
|
|
43
43
|
tile.neighboringTiles = this._getNeighboringTiles(tile.tileID);
|
|
@@ -2,7 +2,7 @@ import RasterTileSource from './raster_tile_source';
|
|
|
2
2
|
import {OverscaledTileID} from './tile_id';
|
|
3
3
|
import {RequestManager} from '../util/request_manager';
|
|
4
4
|
import Dispatcher from '../util/dispatcher';
|
|
5
|
-
import {fakeServer,
|
|
5
|
+
import {fakeServer, FakeServer} from 'nise';
|
|
6
6
|
import Tile from './tile';
|
|
7
7
|
|
|
8
8
|
function createSource(options, transformCallback?) {
|
|
@@ -10,7 +10,8 @@ function createSource(options, transformCallback?) {
|
|
|
10
10
|
source.onAdd({
|
|
11
11
|
transform: {angle: 0, pitch: 0, showCollisionBoxes: false},
|
|
12
12
|
_getMapId: () => 1,
|
|
13
|
-
_requestManager: new RequestManager(transformCallback)
|
|
13
|
+
_requestManager: new RequestManager(transformCallback),
|
|
14
|
+
getPixelRatio() { return 1; }
|
|
14
15
|
} as any);
|
|
15
16
|
|
|
16
17
|
source.on('error', (e) => {
|
|
@@ -21,7 +22,7 @@ function createSource(options, transformCallback?) {
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
describe('RasterTileSource', () => {
|
|
24
|
-
let server:
|
|
25
|
+
let server: FakeServer;
|
|
25
26
|
beforeEach(() => {
|
|
26
27
|
global.fetch = null;
|
|
27
28
|
server = fakeServer.create();
|
|
@@ -104,7 +104,7 @@ class RasterTileSource extends Evented implements Source {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
loadTile(tile: Tile, callback: Callback<void>) {
|
|
107
|
-
const url = tile.tileID.canonical.url(this.tiles, this.scheme);
|
|
107
|
+
const url = tile.tileID.canonical.url(this.tiles, this.map.getPixelRatio(), this.scheme);
|
|
108
108
|
tile.request = getImage(this.map._requestManager.transformRequest(url, ResourceType.Tile), (err, img) => {
|
|
109
109
|
delete tile.request;
|
|
110
110
|
|
|
@@ -13,8 +13,8 @@ const status = {
|
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
export type PluginState = {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
pluginStatus: typeof status[keyof typeof status];
|
|
17
|
+
pluginURL: string;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
type ErrorCallback = (error?: Error | null) => void;
|
|
@@ -93,14 +93,14 @@ export const downloadRTLTextPlugin = function() {
|
|
|
93
93
|
};
|
|
94
94
|
|
|
95
95
|
export const plugin: {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
applyArabicShaping: Function;
|
|
97
|
+
processBidirectionalText: ((b: string, a: Array<number>) => Array<string>);
|
|
98
|
+
processStyledBidirectionalText: ((c: string, b: Array<number>, a: Array<number>) => Array<[string, Array<number>]>);
|
|
99
|
+
isLoaded: () => boolean;
|
|
100
|
+
isLoading: () => boolean;
|
|
101
|
+
setState: (state: PluginState) => void;
|
|
102
|
+
isParsed: () => boolean;
|
|
103
|
+
getPluginURL: () => string;
|
|
104
104
|
} = {
|
|
105
105
|
applyArabicShaping: null,
|
|
106
106
|
processBidirectionalText: null,
|
package/src/source/source.ts
CHANGED
|
@@ -33,47 +33,47 @@ import {CanonicalTileID} from './tile_id';
|
|
|
33
33
|
* if they are floor-ed to the nearest integer.
|
|
34
34
|
*/
|
|
35
35
|
export interface Source {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
36
|
+
readonly type: string;
|
|
37
|
+
id: string;
|
|
38
|
+
minzoom: number;
|
|
39
|
+
maxzoom: number;
|
|
40
|
+
tileSize: number;
|
|
41
|
+
attribution?: string;
|
|
42
|
+
roundZoom?: boolean;
|
|
43
|
+
isTileClipped?: boolean;
|
|
44
|
+
maplibreLogo?: boolean;
|
|
45
|
+
tileID?: CanonicalTileID;
|
|
46
|
+
reparseOverscaled?: boolean;
|
|
47
|
+
vectorLayerIds?: Array<string>;
|
|
48
|
+
hasTransition(): boolean;
|
|
49
|
+
loaded(): boolean;
|
|
50
|
+
fire(event: Event): unknown;
|
|
51
|
+
readonly onAdd?: (map: Map) => void;
|
|
52
|
+
readonly onRemove?: (map: Map) => void;
|
|
53
|
+
loadTile(tile: Tile, callback: Callback<void>): void;
|
|
54
|
+
readonly hasTile?: (tileID: OverscaledTileID) => boolean;
|
|
55
|
+
readonly abortTile?: (tile: Tile, callback: Callback<void>) => void;
|
|
56
|
+
readonly unloadTile?: (tile: Tile, callback: Callback<void>) => void;
|
|
57
|
+
/**
|
|
58
58
|
* @returns A plain (stringifiable) JS object representing the current state of the source.
|
|
59
59
|
* Creating a source using the returned object as the `options` should result in a Source that is
|
|
60
60
|
* equivalent to this one.
|
|
61
61
|
* @private
|
|
62
62
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
serialize(): any;
|
|
64
|
+
readonly prepare?: () => void;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
type SourceStatics = {
|
|
68
|
-
|
|
68
|
+
/*
|
|
69
69
|
* An optional URL to a script which, when run by a Worker, registers a {@link WorkerSource}
|
|
70
70
|
* implementation for this Source type by calling `self.registerWorkerSource(workerSource: WorkerSource)`.
|
|
71
71
|
*/
|
|
72
|
-
|
|
72
|
+
workerSourceURL?: URL;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
export type SourceClass = {
|
|
76
|
-
|
|
76
|
+
new (...args: any): Source;
|
|
77
77
|
} & SourceStatics;
|
|
78
78
|
|
|
79
79
|
import vector from '../source/vector_tile_source';
|
|
@@ -122,11 +122,11 @@ export const getSourceType = function (name: string) {
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export const setSourceType = function (name: string, type: {
|
|
125
|
-
|
|
125
|
+
new (...args: any): Source;
|
|
126
126
|
}) {
|
|
127
127
|
sourceTypes[name] = type;
|
|
128
128
|
};
|
|
129
129
|
|
|
130
130
|
export interface Actor {
|
|
131
|
-
|
|
131
|
+
send(type: string, data: any, callback: Callback<any>): void;
|
|
132
132
|
}
|
|
@@ -15,7 +15,7 @@ class SourceMock extends Evented {
|
|
|
15
15
|
id: string;
|
|
16
16
|
minzoom: number;
|
|
17
17
|
maxzoom: number;
|
|
18
|
-
hasTile: (tileID: OverscaledTileID) => boolean
|
|
18
|
+
hasTile: (tileID: OverscaledTileID) => boolean;
|
|
19
19
|
sourceOptions: any;
|
|
20
20
|
|
|
21
21
|
constructor(id: string, sourceOptions: any, _dispatcher, eventedParent: Evented) {
|
|
@@ -336,6 +336,38 @@ describe('SourceCache#removeTile', () => {
|
|
|
336
336
|
sourceCache._addTile(tileID);
|
|
337
337
|
});
|
|
338
338
|
|
|
339
|
+
test('fires dataabort event', done => {
|
|
340
|
+
const sourceCache = createSourceCache({
|
|
341
|
+
loadTile() {
|
|
342
|
+
// Do not call back in order to make sure the tile is removed before it is loaded.
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
const tileID = new OverscaledTileID(0, 0, 0, 0, 0);
|
|
346
|
+
const tile = sourceCache._addTile(tileID);
|
|
347
|
+
sourceCache.once('dataabort', event => {
|
|
348
|
+
expect(event.dataType).toBe('source');
|
|
349
|
+
expect(event.tile).toBe(tile);
|
|
350
|
+
expect(event.coord).toBe(tileID);
|
|
351
|
+
done();
|
|
352
|
+
});
|
|
353
|
+
sourceCache._removeTile(tileID.key);
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('does not fire dataabort event when the tile has already been loaded', () => {
|
|
357
|
+
const sourceCache = createSourceCache({
|
|
358
|
+
loadTile(tile, callback) {
|
|
359
|
+
tile.state = 'loaded';
|
|
360
|
+
callback();
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
const tileID = new OverscaledTileID(0, 0, 0, 0, 0);
|
|
364
|
+
sourceCache._addTile(tileID);
|
|
365
|
+
const onAbort = jest.fn();
|
|
366
|
+
sourceCache.once('dataabort', onAbort);
|
|
367
|
+
sourceCache._removeTile(tileID.key);
|
|
368
|
+
expect(onAbort).toHaveBeenCalledTimes(0);
|
|
369
|
+
});
|
|
370
|
+
|
|
339
371
|
});
|
|
340
372
|
|
|
341
373
|
describe('SourceCache / Source lifecycle', () => {
|
|
@@ -46,10 +46,10 @@ class SourceCache extends Evented {
|
|
|
46
46
|
_prevLng: number;
|
|
47
47
|
_cache: TileCache;
|
|
48
48
|
_timers: {
|
|
49
|
-
|
|
49
|
+
[_ in any]: ReturnType<typeof setTimeout>;
|
|
50
50
|
};
|
|
51
51
|
_cacheTimers: {
|
|
52
|
-
|
|
52
|
+
[_ in any]: ReturnType<typeof setTimeout>;
|
|
53
53
|
};
|
|
54
54
|
_maxTileCacheSize: number;
|
|
55
55
|
_paused: boolean;
|
|
@@ -160,7 +160,9 @@ class SourceCache extends Evented {
|
|
|
160
160
|
|
|
161
161
|
_abortTile(tile: Tile) {
|
|
162
162
|
if (this._source.abortTile)
|
|
163
|
-
|
|
163
|
+
this._source.abortTile(tile, () => {});
|
|
164
|
+
|
|
165
|
+
this._source.fire(new Event('dataabort', {tile, coord: tile.tileID, dataType: 'source'}));
|
|
164
166
|
}
|
|
165
167
|
|
|
166
168
|
serialize() {
|
|
@@ -331,12 +333,12 @@ class SourceCache extends Evented {
|
|
|
331
333
|
*/
|
|
332
334
|
_retainLoadedChildren(
|
|
333
335
|
idealTiles: {
|
|
334
|
-
|
|
336
|
+
[_ in any]: OverscaledTileID;
|
|
335
337
|
},
|
|
336
338
|
zoom: number,
|
|
337
339
|
maxCoveringZoom: number,
|
|
338
340
|
retain: {
|
|
339
|
-
|
|
341
|
+
[_ in any]: OverscaledTileID;
|
|
340
342
|
}
|
|
341
343
|
) {
|
|
342
344
|
for (const id in this._tiles) {
|
|
@@ -102,7 +102,7 @@ class SourceFeatureState {
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
coalesceChanges(tiles: {
|
|
105
|
-
|
|
105
|
+
[_ in any]: Tile;
|
|
106
106
|
}, painter: any) {
|
|
107
107
|
//track changes with full state objects, but only for features that got modified
|
|
108
108
|
const featuresChanged: LayerFeatureStates = {};
|
package/src/source/tile.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {createSymbolBucket} from '../../test/
|
|
1
|
+
import {createSymbolBucket} from '../../test/unit/lib/create_symbol_layer';
|
|
2
2
|
import Tile from '../source/tile';
|
|
3
3
|
import GeoJSONWrapper, {Feature} from '../source/geojson_wrapper';
|
|
4
4
|
import {OverscaledTileID} from '../source/tile_id';
|
|
@@ -6,7 +6,7 @@ import fs from 'fs';
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import vtpbf from 'vt-pbf';
|
|
8
8
|
import FeatureIndex from '../data/feature_index';
|
|
9
|
-
import {CollisionBoxArray} from '../data/array_types';
|
|
9
|
+
import {CollisionBoxArray} from '../data/array_types.g';
|
|
10
10
|
import {extend} from '../util/util';
|
|
11
11
|
import {serialize, deserialize} from '../util/web_worker_transfer';
|
|
12
12
|
|
|
@@ -273,7 +273,7 @@ describe('rtl text detection', () => {
|
|
|
273
273
|
});
|
|
274
274
|
|
|
275
275
|
function createRawTileData() {
|
|
276
|
-
return fs.readFileSync(path.join(__dirname, '../../test/
|
|
276
|
+
return fs.readFileSync(path.join(__dirname, '../../test/unit/assets/mbsv5-6-18-23.vector.pbf'));
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
function createVectorData(options?) {
|
package/src/source/tile.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type FeatureIndex from '../data/feature_index';
|
|
|
5
5
|
import GeoJSONFeature from '../util/vectortile_to_geojson';
|
|
6
6
|
import featureFilter from '../style-spec/feature_filter';
|
|
7
7
|
import SymbolBucket from '../data/bucket/symbol_bucket';
|
|
8
|
-
import {CollisionBoxArray} from '../data/array_types';
|
|
8
|
+
import {CollisionBoxArray} from '../data/array_types.g';
|
|
9
9
|
import Texture from '../render/texture';
|
|
10
10
|
import browser from '../util/browser';
|
|
11
11
|
import toEvaluationFeature from '../data/evaluation_feature';
|
|
@@ -268,20 +268,20 @@ class Tile {
|
|
|
268
268
|
// Queries non-symbol features rendered for this tile.
|
|
269
269
|
// Symbol features are queried globally
|
|
270
270
|
queryRenderedFeatures(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
271
|
+
layers: {[_: string]: StyleLayer},
|
|
272
|
+
serializedLayers: {[_: string]: any},
|
|
273
|
+
sourceFeatureState: SourceFeatureState,
|
|
274
|
+
queryGeometry: Array<Point>,
|
|
275
|
+
cameraQueryGeometry: Array<Point>,
|
|
276
|
+
scale: number,
|
|
277
|
+
params: {
|
|
278
|
+
filter: FilterSpecification;
|
|
279
|
+
layers: Array<string>;
|
|
280
|
+
availableImages: Array<string>;
|
|
281
|
+
},
|
|
282
|
+
transform: Transform,
|
|
283
|
+
maxPitchScaleFactor: number,
|
|
284
|
+
pixelPosMatrix: mat4
|
|
285
285
|
): {[_: string]: Array<{featureIndex: number; feature: GeoJSONFeature}>} {
|
|
286
286
|
if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData)
|
|
287
287
|
return {};
|
|
@@ -30,19 +30,20 @@ describe('TileCache', () => {
|
|
|
30
30
|
keysExpected(cache, []);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
test('get without removing',
|
|
33
|
+
test('get without removing', done => {
|
|
34
34
|
const cache = new TileCache(10, () => {
|
|
35
|
-
|
|
35
|
+
done('test "get without removing" failed');
|
|
36
36
|
});
|
|
37
37
|
expect(cache.add(idA, tileA)).toBe(cache);
|
|
38
38
|
expect(cache.get(idA)).toBe(tileA);
|
|
39
39
|
keysExpected(cache, [idA]);
|
|
40
40
|
expect(cache.get(idA)).toBe(tileA);
|
|
41
|
+
done();
|
|
41
42
|
});
|
|
42
43
|
|
|
43
|
-
test('duplicate add',
|
|
44
|
+
test('duplicate add', done => {
|
|
44
45
|
const cache = new TileCache(10, () => {
|
|
45
|
-
|
|
46
|
+
done('test "duplicate add" failed');
|
|
46
47
|
});
|
|
47
48
|
|
|
48
49
|
cache.add(idA, tileA);
|
|
@@ -53,6 +54,7 @@ describe('TileCache', () => {
|
|
|
53
54
|
expect(cache.getAndRemove(idA)).toBe(tileA);
|
|
54
55
|
expect(cache.has(idA)).toBeTruthy();
|
|
55
56
|
expect(cache.getAndRemove(idA)).toBe(tileA2);
|
|
57
|
+
done();
|
|
56
58
|
});
|
|
57
59
|
|
|
58
60
|
test('expiry', () => {
|
package/src/source/tile_cache.ts
CHANGED
|
@@ -11,10 +11,10 @@ import type Tile from './tile';
|
|
|
11
11
|
class TileCache {
|
|
12
12
|
max: number;
|
|
13
13
|
data: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
[key: string]: Array<{
|
|
15
|
+
value: Tile;
|
|
16
|
+
timeout: ReturnType<typeof setTimeout>;
|
|
17
|
+
}>;
|
|
18
18
|
};
|
|
19
19
|
order: Array<string>;
|
|
20
20
|
onRemove: (element: Tile) => void;
|
|
@@ -157,8 +157,8 @@ class TileCache {
|
|
|
157
157
|
* @private
|
|
158
158
|
*/
|
|
159
159
|
remove(tileID: OverscaledTileID, value?: {
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
value: Tile;
|
|
161
|
+
timeout: ReturnType<typeof setTimeout>;
|
|
162
162
|
}) {
|
|
163
163
|
if (!this.has(tileID)) { return this; }
|
|
164
164
|
const key = tileID.wrapped().key;
|
|
@@ -33,35 +33,32 @@ describe('CanonicalTileID', () => {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
test('.url replaces {z}/{x}/{y}', () => {
|
|
36
|
-
expect(new CanonicalTileID(2, 1, 0).url(['{z}/{x}/{y}.json'])).toBe('2/1/0.json');
|
|
36
|
+
expect(new CanonicalTileID(2, 1, 0).url(['{z}/{x}/{y}.json'], 1)).toBe('2/1/0.json');
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
test('.url replaces {quadkey}', () => {
|
|
40
|
-
expect(new CanonicalTileID(1, 0, 0).url(['quadkey={quadkey}'])).toBe('quadkey=0');
|
|
41
|
-
expect(new CanonicalTileID(2, 0, 0).url(['quadkey={quadkey}'])).toBe('quadkey=00');
|
|
42
|
-
expect(new CanonicalTileID(2, 1, 1).url(['quadkey={quadkey}'])).toBe('quadkey=03');
|
|
43
|
-
expect(new CanonicalTileID(17, 22914, 52870).url(['quadkey={quadkey}'])).toBe('quadkey=02301322130000230');
|
|
40
|
+
expect(new CanonicalTileID(1, 0, 0).url(['quadkey={quadkey}'], 1)).toBe('quadkey=0');
|
|
41
|
+
expect(new CanonicalTileID(2, 0, 0).url(['quadkey={quadkey}'], 1)).toBe('quadkey=00');
|
|
42
|
+
expect(new CanonicalTileID(2, 1, 1).url(['quadkey={quadkey}'], 1)).toBe('quadkey=03');
|
|
43
|
+
expect(new CanonicalTileID(17, 22914, 52870).url(['quadkey={quadkey}'], 1)).toBe('quadkey=02301322130000230');
|
|
44
44
|
|
|
45
45
|
// Test case confirmed by quadkeytools package
|
|
46
|
-
|
|
47
|
-
expect(new CanonicalTileID(6, 29, 3).url(['quadkey={quadkey}'])).toBe('quadkey=011123');
|
|
46
|
+
expect(new CanonicalTileID(6, 29, 3).url(['quadkey={quadkey}'], 1)).toBe('quadkey=011123');
|
|
48
47
|
|
|
49
48
|
});
|
|
50
49
|
|
|
51
50
|
test('.url replaces {bbox-epsg-3857}', () => {
|
|
52
|
-
expect(new CanonicalTileID(1, 0, 0).url(['bbox={bbox-epsg-3857}'])).toBe('bbox=-20037508.342789244,0,0,20037508.342789244');
|
|
51
|
+
expect(new CanonicalTileID(1, 0, 0).url(['bbox={bbox-epsg-3857}'], 1)).toBe('bbox=-20037508.342789244,0,0,20037508.342789244');
|
|
53
52
|
});
|
|
54
53
|
|
|
55
54
|
test('.url replaces {ratio}', () => {
|
|
56
|
-
|
|
57
|
-
expect(new CanonicalTileID(1, 0, 0).url(['r={ratio}'])).toBe('r
|
|
58
|
-
devicePixelRatio = 1;
|
|
59
|
-
expect(new CanonicalTileID(1, 0, 0).url(['r={ratio}'])).toBe('r=');
|
|
55
|
+
expect(new CanonicalTileID(1, 0, 0).url(['r={ratio}'], 2)).toBe('r=@2x');
|
|
56
|
+
expect(new CanonicalTileID(1, 0, 0).url(['r={ratio}'], 1)).toBe('r=');
|
|
60
57
|
});
|
|
61
58
|
|
|
62
59
|
//Tests that multiple values of the same placeholder are replaced.
|
|
63
60
|
test('.url replaces {z}/{x}/{y}/{z}/{x}/{y}', () => {
|
|
64
|
-
expect(new CanonicalTileID(2, 1, 0).url(['{z}/{x}/{y}/{z}/{x}/{y}.json'])).toBe('2/1/0/2/1/0.json');
|
|
61
|
+
expect(new CanonicalTileID(2, 1, 0).url(['{z}/{x}/{y}/{z}/{x}/{y}.json'], 1)).toBe('2/1/0/2/1/0.json');
|
|
65
62
|
});
|
|
66
63
|
|
|
67
64
|
});
|
package/src/source/tile_id.ts
CHANGED
|
@@ -28,7 +28,7 @@ export class CanonicalTileID {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
// given a list of urls, choose a url template and return a tile URL
|
|
31
|
-
url(urls: Array<string>, scheme?: string | null) {
|
|
31
|
+
url(urls: Array<string>, pixelRatio: number, scheme?: string | null) {
|
|
32
32
|
const bbox = getTileBBox(this.x, this.y, this.z);
|
|
33
33
|
const quadkey = getQuadkey(this.z, this.x, this.y);
|
|
34
34
|
|
|
@@ -37,7 +37,7 @@ export class CanonicalTileID {
|
|
|
37
37
|
.replace(/{z}/g, String(this.z))
|
|
38
38
|
.replace(/{x}/g, String(this.x))
|
|
39
39
|
.replace(/{y}/g, String(scheme === 'tms' ? (Math.pow(2, this.z) - this.y - 1) : this.y))
|
|
40
|
-
.replace(/{ratio}/g,
|
|
40
|
+
.replace(/{ratio}/g, pixelRatio > 1 ? '@2x' : '')
|
|
41
41
|
.replace(/{quadkey}/g, quadkey)
|
|
42
42
|
.replace(/{bbox-epsg-3857}/g, bbox);
|
|
43
43
|
}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import {fakeServer,
|
|
1
|
+
import {fakeServer, FakeServer} from 'nise';
|
|
2
2
|
import {Source} from './source';
|
|
3
3
|
import VectorTileSource from './vector_tile_source';
|
|
4
4
|
import Tile from './tile';
|
|
5
5
|
import {OverscaledTileID} from './tile_id';
|
|
6
6
|
import {Evented} from '../util/evented';
|
|
7
7
|
import {RequestManager} from '../util/request_manager';
|
|
8
|
-
import fixturesSource from '../../test/
|
|
8
|
+
import fixturesSource from '../../test/unit/assets/source.json';
|
|
9
9
|
import {getMockDispatcher, getWrapDispatcher} from '../util/test/util';
|
|
10
10
|
import Map from '../ui/map';
|
|
11
11
|
|
|
12
|
-
function createSource(options, transformCallback
|
|
12
|
+
function createSource(options, transformCallback?, clearTiles = () => {}) {
|
|
13
13
|
const source = new VectorTileSource('id', options, getMockDispatcher(), options.eventedParent);
|
|
14
14
|
source.onAdd({
|
|
15
15
|
transform: {showCollisionBoxes: false},
|
|
16
16
|
_getMapId: () => 1,
|
|
17
17
|
_requestManager: new RequestManager(transformCallback),
|
|
18
|
-
style: {sourceCaches: {id: {clearTiles
|
|
18
|
+
style: {sourceCaches: {id: {clearTiles}}},
|
|
19
|
+
getPixelRatio() { return 1; }
|
|
19
20
|
} as any as Map);
|
|
20
21
|
|
|
21
22
|
source.on('error', (e) => {
|
|
@@ -26,7 +27,7 @@ function createSource(options, transformCallback?) {
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
describe('VectorTileSource', () => {
|
|
29
|
-
let server:
|
|
30
|
+
let server: FakeServer;
|
|
30
31
|
beforeEach(() => {
|
|
31
32
|
global.fetch = null;
|
|
32
33
|
server = fakeServer.create();
|
|
@@ -342,4 +343,15 @@ describe('VectorTileSource', () => {
|
|
|
342
343
|
tiles: ['http://example2.com/{z}/{x}/{y}.png']
|
|
343
344
|
});
|
|
344
345
|
});
|
|
346
|
+
|
|
347
|
+
test('setTiles only clears the cache once the TileJSON has reloaded', done => {
|
|
348
|
+
const clearTiles = jest.fn();
|
|
349
|
+
const source = createSource({tiles: ['http://example.com/{z}/{x}/{y}.pbf']}, undefined, clearTiles);
|
|
350
|
+
source.setTiles(['http://example2.com/{z}/{x}/{y}.pbf']);
|
|
351
|
+
expect(clearTiles.mock.calls).toHaveLength(0);
|
|
352
|
+
source.once('data', () => {
|
|
353
|
+
expect(clearTiles.mock.calls).toHaveLength(1);
|
|
354
|
+
done();
|
|
355
|
+
});
|
|
356
|
+
});
|
|
345
357
|
});
|
|
@@ -64,7 +64,7 @@ class VectorTileSource extends Evented implements Source {
|
|
|
64
64
|
_loaded: boolean;
|
|
65
65
|
|
|
66
66
|
constructor(id: string, options: VectorSourceSpecification & {
|
|
67
|
-
|
|
67
|
+
collectResourceTiming: boolean;
|
|
68
68
|
}, dispatcher: Dispatcher, eventedParent: Evented) {
|
|
69
69
|
super();
|
|
70
70
|
this.id = id;
|
|
@@ -97,6 +97,7 @@ class VectorTileSource extends Evented implements Source {
|
|
|
97
97
|
this._tileJSONRequest = loadTileJSON(this._options, this.map._requestManager, (err, tileJSON) => {
|
|
98
98
|
this._tileJSONRequest = null;
|
|
99
99
|
this._loaded = true;
|
|
100
|
+
this.map.style.sourceCaches[this.id].clearTiles();
|
|
100
101
|
if (err) {
|
|
101
102
|
this.fire(new ErrorEvent(err));
|
|
102
103
|
} else if (tileJSON) {
|
|
@@ -132,8 +133,6 @@ class VectorTileSource extends Evented implements Source {
|
|
|
132
133
|
|
|
133
134
|
callback();
|
|
134
135
|
|
|
135
|
-
const sourceCache = this.map.style.sourceCaches[this.id];
|
|
136
|
-
sourceCache.clearTiles();
|
|
137
136
|
this.load();
|
|
138
137
|
}
|
|
139
138
|
|
|
@@ -178,7 +177,7 @@ class VectorTileSource extends Evented implements Source {
|
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
loadTile(tile: Tile, callback: Callback<void>) {
|
|
181
|
-
const url = tile.tileID.canonical.url(this.tiles, this.scheme);
|
|
180
|
+
const url = tile.tileID.canonical.url(this.tiles, this.map.getPixelRatio(), this.scheme);
|
|
182
181
|
const params = {
|
|
183
182
|
request: this.map._requestManager.transformRequest(url, ResourceType.Tile),
|
|
184
183
|
uid: tile.uid,
|
|
@@ -187,7 +186,7 @@ class VectorTileSource extends Evented implements Source {
|
|
|
187
186
|
tileSize: this.tileSize * tile.tileID.overscaleFactor(),
|
|
188
187
|
type: this.type,
|
|
189
188
|
source: this.id,
|
|
190
|
-
pixelRatio:
|
|
189
|
+
pixelRatio: this.map.getPixelRatio(),
|
|
191
190
|
showCollisionBoxes: this.map.showCollisionBoxes,
|
|
192
191
|
promoteId: this.promoteId
|
|
193
192
|
};
|