@mapgis/mapbox-gl 16.0.1 → 16.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mapbox-gl.js +3 -3
- package/dist/mapbox-gl.js.map +1 -1
- package/package.json +1 -1
- package/.flowconfig +0 -61
- package/LICENSE.txt +0 -84
- package/README.md +0 -34
- package/build/banner.js +0 -4
- package/build/check-bundle-size.js +0 -140
- package/build/generate-access-token-script.js +0 -11
- package/build/generate-flow-typed-style-spec.js +0 -188
- package/build/generate-release-list.js +0 -21
- package/build/generate-struct-arrays.js +0 -237
- package/build/generate-style-code.js +0 -159
- package/build/mapbox-gl.js.flow +0 -3
- package/build/print-release-url.js +0 -6
- package/build/rollup_plugin_minify_style_spec.js +0 -20
- package/build/rollup_plugins.js +0 -80
- package/build/run-node +0 -3
- package/build/run-tap +0 -8
- package/build/test/build-tape.js +0 -19
- package/flow-typed/gl.js +0 -5
- package/flow-typed/jsdom.js +0 -18
- package/flow-typed/mapbox-gl-supported.js +0 -9
- package/flow-typed/mapbox-unitbezier.js +0 -14
- package/flow-typed/offscreen-canvas.js +0 -9
- package/flow-typed/pbf.js +0 -25
- package/flow-typed/point-geometry.js +0 -44
- package/flow-typed/potpack.js +0 -12
- package/flow-typed/sinon.js +0 -28
- package/flow-typed/vector-tile.js +0 -41
- package/src/css/mapbox-gl.css +0 -798
- package/src/css/svg/mapboxgl-ctrl-attrib.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-compass.svg +0 -4
- package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-geolocate.svg +0 -5
- package/src/css/svg/mapboxgl-ctrl-logo.svg +0 -20
- package/src/css/svg/mapboxgl-ctrl-shrink.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +0 -3
- package/src/data/array_types.js +0 -1095
- package/src/data/bucket/circle_attributes.js +0 -9
- package/src/data/bucket/circle_bucket.js +0 -204
- package/src/data/bucket/fill_attributes.js +0 -9
- package/src/data/bucket/fill_bucket.js +0 -233
- package/src/data/bucket/fill_extrusion_attributes.js +0 -10
- package/src/data/bucket/fill_extrusion_bucket.js +0 -289
- package/src/data/bucket/heatmap_bucket.js +0 -17
- package/src/data/bucket/line_attributes.js +0 -10
- package/src/data/bucket/line_bucket.js +0 -556
- package/src/data/bucket/pattern_attributes.js +0 -10
- package/src/data/bucket/pattern_bucket_features.js +0 -60
- package/src/data/bucket/symbol_attributes.js +0 -117
- package/src/data/bucket/symbol_bucket.js +0 -972
- package/src/data/bucket.js +0 -123
- package/src/data/dem_data.js +0 -125
- package/src/data/extent.js +0 -18
- package/src/data/feature_index.js +0 -321
- package/src/data/feature_position_map.js +0 -125
- package/src/data/index_array_type.js +0 -16
- package/src/data/load_geometry.js +0 -48
- package/src/data/pos_attributes.js +0 -6
- package/src/data/program_configuration.js +0 -687
- package/src/data/raster_bounds_attributes.js +0 -7
- package/src/data/segment.js +0 -76
- package/src/geo/edge_insets.js +0 -102
- package/src/geo/lng_lat.js +0 -165
- package/src/geo/lng_lat_bounds.js +0 -267
- package/src/geo/mercator_coordinate.js +0 -153
- package/src/geo/transform.js +0 -864
- package/src/gl/color_mode.js +0 -34
- package/src/gl/context.js +0 -298
- package/src/gl/cull_face_mode.js +0 -26
- package/src/gl/depth_mode.js +0 -29
- package/src/gl/framebuffer.js +0 -44
- package/src/gl/index_buffer.js +0 -55
- package/src/gl/stencil_mode.js +0 -30
- package/src/gl/types.js +0 -84
- package/src/gl/value.js +0 -520
- package/src/gl/vertex_buffer.js +0 -119
- package/src/index.js +0 -201
- package/src/render/draw_background.js +0 -57
- package/src/render/draw_circle.js +0 -113
- package/src/render/draw_collision_debug.js +0 -49
- package/src/render/draw_custom.js +0 -49
- package/src/render/draw_debug.js +0 -127
- package/src/render/draw_fill.js +0 -126
- package/src/render/draw_fill_extrusion.js +0 -96
- package/src/render/draw_heatmap.js +0 -140
- package/src/render/draw_hillshade.js +0 -108
- package/src/render/draw_line.js +0 -98
- package/src/render/draw_raster.js +0 -125
- package/src/render/draw_symbol.js +0 -394
- package/src/render/glyph_atlas.js +0 -71
- package/src/render/glyph_manager.js +0 -182
- package/src/render/image_atlas.js +0 -149
- package/src/render/image_manager.js +0 -306
- package/src/render/line_atlas.js +0 -210
- package/src/render/painter.js +0 -653
- package/src/render/program/background_program.js +0 -103
- package/src/render/program/circle_program.js +0 -69
- package/src/render/program/clipping_mask_program.js +0 -20
- package/src/render/program/collision_program.js +0 -49
- package/src/render/program/debug_program.js +0 -35
- package/src/render/program/fill_extrusion_program.js +0 -122
- package/src/render/program/fill_program.js +0 -126
- package/src/render/program/heatmap_program.js +0 -83
- package/src/render/program/hillshade_program.js +0 -122
- package/src/render/program/line_program.js +0 -207
- package/src/render/program/pattern.js +0 -102
- package/src/render/program/program_uniforms.js +0 -42
- package/src/render/program/raster_program.js +0 -92
- package/src/render/program/symbol_program.js +0 -224
- package/src/render/program.js +0 -168
- package/src/render/texture.js +0 -122
- package/src/render/uniform_binding.js +0 -147
- package/src/render/vertex_array_object.js +0 -163
- package/src/shaders/README.md +0 -42
- package/src/shaders/_prelude.fragment.glsl +0 -17
- package/src/shaders/_prelude.vertex.glsl +0 -73
- package/src/shaders/background.fragment.glsl +0 -10
- package/src/shaders/background.vertex.glsl +0 -7
- package/src/shaders/background_pattern.fragment.glsl +0 -28
- package/src/shaders/background_pattern.vertex.glsl +0 -20
- package/src/shaders/circle.fragment.glsl +0 -39
- package/src/shaders/circle.vertex.glsl +0 -64
- package/src/shaders/clipping_mask.fragment.glsl +0 -3
- package/src/shaders/clipping_mask.vertex.glsl +0 -7
- package/src/shaders/collision_box.fragment.glsl +0 -21
- package/src/shaders/collision_box.vertex.glsl +0 -27
- package/src/shaders/collision_circle.fragment.glsl +0 -34
- package/src/shaders/collision_circle.vertex.glsl +0 -36
- package/src/shaders/debug.fragment.glsl +0 -9
- package/src/shaders/debug.vertex.glsl +0 -12
- package/src/shaders/encode_attribute.js +0 -17
- package/src/shaders/fill.fragment.glsl +0 -13
- package/src/shaders/fill.vertex.glsl +0 -13
- package/src/shaders/fill_extrusion.fragment.glsl +0 -9
- package/src/shaders/fill_extrusion.vertex.glsl +0 -66
- package/src/shaders/fill_extrusion_pattern.fragment.glsl +0 -45
- package/src/shaders/fill_extrusion_pattern.vertex.glsl +0 -79
- package/src/shaders/fill_outline.fragment.glsl +0 -17
- package/src/shaders/fill_outline.vertex.glsl +0 -17
- package/src/shaders/fill_outline_pattern.fragment.glsl +0 -43
- package/src/shaders/fill_outline_pattern.vertex.glsl +0 -44
- package/src/shaders/fill_pattern.fragment.glsl +0 -36
- package/src/shaders/fill_pattern.vertex.glsl +0 -39
- package/src/shaders/heatmap.fragment.glsl +0 -22
- package/src/shaders/heatmap.vertex.glsl +0 -54
- package/src/shaders/heatmap_texture.fragment.glsl +0 -14
- package/src/shaders/heatmap_texture.vertex.glsl +0 -11
- package/src/shaders/hillshade.fragment.glsl +0 -52
- package/src/shaders/hillshade.vertex.glsl +0 -11
- package/src/shaders/hillshade_prepare.fragment.glsl +0 -74
- package/src/shaders/hillshade_prepare.vertex.glsl +0 -15
- package/src/shaders/index.js +0 -20
- package/src/shaders/line.fragment.glsl +0 -30
- package/src/shaders/line.vertex.glsl +0 -85
- package/src/shaders/line_gradient.fragment.glsl +0 -34
- package/src/shaders/line_gradient.vertex.glsl +0 -87
- package/src/shaders/line_pattern.fragment.glsl +0 -74
- package/src/shaders/line_pattern.vertex.glsl +0 -99
- package/src/shaders/line_sdf.fragment.glsl +0 -45
- package/src/shaders/line_sdf.vertex.glsl +0 -98
- package/src/shaders/raster.fragment.glsl +0 -52
- package/src/shaders/raster.vertex.glsl +0 -21
- package/src/shaders/shaders.js +0 -180
- package/src/shaders/symbol_icon.fragment.glsl +0 -17
- package/src/shaders/symbol_icon.vertex.glsl +0 -94
- package/src/shaders/symbol_sdf.fragment.glsl +0 -52
- package/src/shaders/symbol_sdf.vertex.glsl +0 -115
- package/src/shaders/symbol_text_and_icon.fragment.glsl +0 -68
- package/src/shaders/symbol_text_and_icon.vertex.glsl +0 -116
- package/src/source/canvas_source.js +0 -238
- package/src/source/geojson_helper.js +0 -92
- package/src/source/geojson_source.js +0 -374
- package/src/source/geojson_worker_source.js +0 -357
- package/src/source/geojson_wrapper.js +0 -94
- package/src/source/image_source.js +0 -307
- package/src/source/load_tilejson.js +0 -39
- package/src/source/mbtiles_source.js +0 -115
- package/src/source/offline_database.js +0 -61
- package/src/source/offline_database_root.js +0 -62
- package/src/source/pixels_to_tile_units.js +0 -21
- package/src/source/query_features.js +0 -208
- package/src/source/raster_dem_tile_source.js +0 -138
- package/src/source/raster_dem_tile_worker_source.js +0 -62
- package/src/source/raster_tile_offline_source.js +0 -136
- package/src/source/raster_tile_source.js +0 -177
- package/src/source/rtl_text_plugin.js +0 -138
- package/src/source/source.js +0 -137
- package/src/source/source_cache.js +0 -957
- package/src/source/source_state.js +0 -159
- package/src/source/tile.js +0 -465
- package/src/source/tile_bounds.js +0 -38
- package/src/source/tile_cache.js +0 -212
- package/src/source/tile_id.js +0 -402
- package/src/source/vector_tile_source.js +0 -192
- package/src/source/vector_tile_worker_source.js +0 -216
- package/src/source/video_source.js +0 -203
- package/src/source/worker.js +0 -237
- package/src/source/worker_source.js +0 -106
- package/src/source/worker_tile.js +0 -224
- package/src/style/create_style_layer.js +0 -36
- package/src/style/evaluation_parameters.js +0 -62
- package/src/style/light.js +0 -130
- package/src/style/load_glyph_range.js +0 -38
- package/src/style/load_sprite.js +0 -67
- package/src/style/parse_glyph_pbf.js +0 -44
- package/src/style/pauseable_placement.js +0 -132
- package/src/style/properties.js +0 -753
- package/src/style/query_utils.js +0 -43
- package/src/style/style.js +0 -1361
- package/src/style/style_glyph.js +0 -17
- package/src/style/style_image.js +0 -137
- package/src/style/style_layer/background_style_layer.js +0 -21
- package/src/style/style_layer/background_style_layer_properties.js +0 -40
- package/src/style/style_layer/circle_style_layer.js +0 -98
- package/src/style/style_layer/circle_style_layer_properties.js +0 -63
- package/src/style/style_layer/custom_style_layer.js +0 -223
- package/src/style/style_layer/fill_extrusion_style_layer.js +0 -224
- package/src/style/style_layer/fill_extrusion_style_layer_properties.js +0 -50
- package/src/style/style_layer/fill_style_layer.js +0 -67
- package/src/style/style_layer/fill_style_layer_properties.js +0 -55
- package/src/style/style_layer/heatmap_style_layer.js +0 -69
- package/src/style/style_layer/heatmap_style_layer_properties.js +0 -44
- package/src/style/style_layer/hillshade_style_layer.js +0 -25
- package/src/style/style_layer/hillshade_style_layer_properties.js +0 -46
- package/src/style/style_layer/layer_properties.js.ejs +0 -69
- package/src/style/style_layer/line_style_layer.js +0 -151
- package/src/style/style_layer/line_style_layer_properties.js +0 -71
- package/src/style/style_layer/raster_style_layer.js +0 -21
- package/src/style/style_layer/raster_style_layer_properties.js +0 -50
- package/src/style/style_layer/symbol_style_layer.js +0 -190
- package/src/style/style_layer/symbol_style_layer_properties.js +0 -153
- package/src/style/style_layer/typed_style_layer.js +0 -17
- package/src/style/style_layer.js +0 -281
- package/src/style/style_layer_index.js +0 -80
- package/src/style/validate_style.js +0 -42
- package/src/style/zoom_history.js +0 -44
- package/src/style-spec/.eslintrc +0 -5
- package/src/style-spec/CHANGELOG.md +0 -438
- package/src/style-spec/README.md +0 -59
- package/src/style-spec/bin/gl-style-composite +0 -9
- package/src/style-spec/bin/gl-style-format +0 -22
- package/src/style-spec/bin/gl-style-migrate +0 -9
- package/src/style-spec/bin/gl-style-validate +0 -50
- package/src/style-spec/composite.js +0 -50
- package/src/style-spec/declass.js +0 -42
- package/src/style-spec/deref.js +0 -52
- package/src/style-spec/diff.js +0 -393
- package/src/style-spec/dist/.gitkeep +0 -0
- package/src/style-spec/empty.js +0 -29
- package/src/style-spec/error/parsing_error.js +0 -16
- package/src/style-spec/error/validation_error.js +0 -18
- package/src/style-spec/expression/compound_expression.js +0 -162
- package/src/style-spec/expression/definitions/assertion.js +0 -130
- package/src/style-spec/expression/definitions/at.js +0 -70
- package/src/style-spec/expression/definitions/case.js +0 -85
- package/src/style-spec/expression/definitions/coalesce.js +0 -93
- package/src/style-spec/expression/definitions/coercion.js +0 -133
- package/src/style-spec/expression/definitions/collator.js +0 -78
- package/src/style-spec/expression/definitions/comparison.js +0 -184
- package/src/style-spec/expression/definitions/format.js +0 -144
- package/src/style-spec/expression/definitions/format_section_override.js +0 -54
- package/src/style-spec/expression/definitions/image.js +0 -52
- package/src/style-spec/expression/definitions/in.js +0 -92
- package/src/style-spec/expression/definitions/index.js +0 -561
- package/src/style-spec/expression/definitions/interpolate.js +0 -267
- package/src/style-spec/expression/definitions/length.js +0 -61
- package/src/style-spec/expression/definitions/let.js +0 -72
- package/src/style-spec/expression/definitions/literal.js +0 -77
- package/src/style-spec/expression/definitions/match.js +0 -158
- package/src/style-spec/expression/definitions/number_format.js +0 -142
- package/src/style-spec/expression/definitions/step.js +0 -120
- package/src/style-spec/expression/definitions/var.js +0 -46
- package/src/style-spec/expression/definitions/within.js +0 -333
- package/src/style-spec/expression/evaluation_context.js +0 -59
- package/src/style-spec/expression/expression.js +0 -27
- package/src/style-spec/expression/index.js +0 -392
- package/src/style-spec/expression/is_constant.js +0 -59
- package/src/style-spec/expression/parsing_context.js +0 -233
- package/src/style-spec/expression/parsing_error.js +0 -13
- package/src/style-spec/expression/runtime_error.js +0 -17
- package/src/style-spec/expression/scope.js +0 -36
- package/src/style-spec/expression/stops.js +0 -39
- package/src/style-spec/expression/types/collator.js +0 -61
- package/src/style-spec/expression/types/formatted.js +0 -73
- package/src/style-spec/expression/types/resolved_image.js +0 -29
- package/src/style-spec/expression/types.js +0 -106
- package/src/style-spec/expression/values.js +0 -123
- package/src/style-spec/feature_filter/README.md +0 -55
- package/src/style-spec/feature_filter/convert.js +0 -208
- package/src/style-spec/feature_filter/index.js +0 -165
- package/src/style-spec/format.js +0 -51
- package/src/style-spec/function/convert.js +0 -254
- package/src/style-spec/function/index.js +0 -262
- package/src/style-spec/group_by_layout.js +0 -75
- package/src/style-spec/migrate/expressions.js +0 -39
- package/src/style-spec/migrate/v8.js +0 -203
- package/src/style-spec/migrate/v9.js +0 -26
- package/src/style-spec/migrate.js +0 -36
- package/src/style-spec/package.json +0 -41
- package/src/style-spec/read_style.js +0 -14
- package/src/style-spec/reference/latest.js +0 -3
- package/src/style-spec/reference/v8.json +0 -5808
- package/src/style-spec/rollup.config.js +0 -45
- package/src/style-spec/style-spec.js +0 -122
- package/src/style-spec/types.js +0 -438
- package/src/style-spec/util/color.js +0 -95
- package/src/style-spec/util/color_spaces.js +0 -139
- package/src/style-spec/util/deep_equal.js +0 -28
- package/src/style-spec/util/extend.js +0 -10
- package/src/style-spec/util/get_type.js +0 -17
- package/src/style-spec/util/interpolate.js +0 -22
- package/src/style-spec/util/properties.js +0 -15
- package/src/style-spec/util/ref_properties.js +0 -2
- package/src/style-spec/util/result.js +0 -19
- package/src/style-spec/util/unbundle_jsonlint.js +0 -24
- package/src/style-spec/validate/latest.js +0 -11
- package/src/style-spec/validate/validate.js +0 -75
- package/src/style-spec/validate/validate_array.js +0 -52
- package/src/style-spec/validate/validate_boolean.js +0 -15
- package/src/style-spec/validate/validate_color.js +0 -20
- package/src/style-spec/validate/validate_constants.js +0 -13
- package/src/style-spec/validate/validate_enum.js +0 -21
- package/src/style-spec/validate/validate_expression.js +0 -43
- package/src/style-spec/validate/validate_filter.js +0 -111
- package/src/style-spec/validate/validate_formatted.js +0 -11
- package/src/style-spec/validate/validate_function.js +0 -207
- package/src/style-spec/validate/validate_glyphs_url.js +0 -21
- package/src/style-spec/validate/validate_image.js +0 -11
- package/src/style-spec/validate/validate_layer.js +0 -134
- package/src/style-spec/validate/validate_layout_property.js +0 -6
- package/src/style-spec/validate/validate_light.js +0 -47
- package/src/style-spec/validate/validate_number.js +0 -29
- package/src/style-spec/validate/validate_object.js +0 -61
- package/src/style-spec/validate/validate_paint_property.js +0 -6
- package/src/style-spec/validate/validate_property.js +0 -64
- package/src/style-spec/validate/validate_source.js +0 -111
- package/src/style-spec/validate/validate_string.js +0 -15
- package/src/style-spec/validate_mapbox_api_supported.js +0 -171
- package/src/style-spec/validate_style.js +0 -39
- package/src/style-spec/validate_style.min.js +0 -78
- package/src/style-spec/visit.js +0 -77
- package/src/symbol/anchor.js +0 -26
- package/src/symbol/check_max_angle.js +0 -81
- package/src/symbol/clip_line.js +0 -71
- package/src/symbol/collision_feature.js +0 -217
- package/src/symbol/collision_index.js +0 -372
- package/src/symbol/cross_tile_symbol_index.js +0 -301
- package/src/symbol/get_anchors.js +0 -167
- package/src/symbol/grid_index.js +0 -335
- package/src/symbol/mergelines.js +0 -82
- package/src/symbol/one_em.js +0 -4
- package/src/symbol/opacity_state.js +0 -27
- package/src/symbol/placement.js +0 -1062
- package/src/symbol/projection.js +0 -450
- package/src/symbol/quads.js +0 -334
- package/src/symbol/shaping.js +0 -816
- package/src/symbol/symbol_layout.js +0 -772
- package/src/symbol/symbol_size.js +0 -113
- package/src/symbol/transform_text.js +0 -29
- package/src/types/callback.js +0 -17
- package/src/types/cancelable.js +0 -3
- package/src/types/tilejson.js +0 -17
- package/src/types/transferable.js +0 -3
- package/src/types/window.js +0 -172
- package/src/ui/anchor.js +0 -32
- package/src/ui/bind_handlers.js +0 -202
- package/src/ui/camera.js +0 -1152
- package/src/ui/control/attribution_control.js +0 -189
- package/src/ui/control/fps_control.js +0 -185
- package/src/ui/control/fullscreen_control.js +0 -147
- package/src/ui/control/geolocate_control.js +0 -594
- package/src/ui/control/logo_control.js +0 -92
- package/src/ui/control/navigation_control.js +0 -148
- package/src/ui/control/scale_control.js +0 -142
- package/src/ui/crs.js +0 -64
- package/src/ui/default_locale.js +0 -20
- package/src/ui/events.js +0 -806
- package/src/ui/handler/box_zoom.js +0 -175
- package/src/ui/handler/dblclick_zoom.js +0 -139
- package/src/ui/handler/drag_pan.js +0 -416
- package/src/ui/handler/drag_rotate.js +0 -378
- package/src/ui/handler/keyboard.js +0 -161
- package/src/ui/handler/scroll_zoom.js +0 -333
- package/src/ui/handler/touch_zoom_rotate.js +0 -293
- package/src/ui/hash.js +0 -147
- package/src/ui/map.js +0 -2883
- package/src/ui/marker.js +0 -607
- package/src/ui/offline_map.js +0 -91
- package/src/ui/popup.js +0 -530
- package/src/util/actor.js +0 -212
- package/src/util/ajax.js +0 -371
- package/src/util/browser/web_worker.js +0 -10
- package/src/util/browser/window.js +0 -5
- package/src/util/browser.js +0 -70
- package/src/util/classify_rings.js +0 -52
- package/src/util/color_ramp.js +0 -28
- package/src/util/config.js +0 -30
- package/src/util/debug.js +0 -12
- package/src/util/dictionary_coder.js +0 -30
- package/src/util/dispatcher.js +0 -70
- package/src/util/dom.js +0 -144
- package/src/util/evented.js +0 -174
- package/src/util/find_pole_of_inaccessibility.js +0 -129
- package/src/util/global_worker_pool.js +0 -17
- package/src/util/image.js +0 -142
- package/src/util/intersection_tests.js +0 -208
- package/src/util/is_char_in_unicode_block.js +0 -311
- package/src/util/mapbox.js +0 -486
- package/src/util/offscreen_canvas_supported.js +0 -14
- package/src/util/performance.js +0 -112
- package/src/util/primitives.js +0 -145
- package/src/util/resolve_tokens.js +0 -16
- package/src/util/script_detection.js +0 -328
- package/src/util/sku_token.js +0 -42
- package/src/util/smart_wrap.js +0 -55
- package/src/util/struct_array.js +0 -243
- package/src/util/struct_array.js.ejs +0 -112
- package/src/util/struct_array_layout.js.ejs +0 -98
- package/src/util/task_queue.js +0 -68
- package/src/util/throttle.js +0 -28
- package/src/util/throttled_invoker.js +0 -46
- package/src/util/tile_cover.js +0 -101
- package/src/util/tile_request_cache.js +0 -172
- package/src/util/util.js +0 -504
- package/src/util/vectortile_to_geojson.js +0 -54
- package/src/util/verticalize_punctuation.js +0 -114
- package/src/util/web_worker.js +0 -91
- package/src/util/web_worker_transfer.js +0 -266
- package/src/util/webp_supported.js +0 -69
- package/src/util/window.js +0 -102
- package/src/util/worker_pool.js +0 -47
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import type SourceCache from './source_cache';
|
|
4
|
-
import type StyleLayer from '../style/style_layer';
|
|
5
|
-
import type CollisionIndex from '../symbol/collision_index';
|
|
6
|
-
import type Transform from '../geo/transform';
|
|
7
|
-
import type {RetainedQueryData} from '../symbol/placement';
|
|
8
|
-
import type {FilterSpecification} from '../style-spec/types';
|
|
9
|
-
import assert from 'assert';
|
|
10
|
-
import {mat4} from 'gl-matrix';
|
|
11
|
-
|
|
12
|
-
/*
|
|
13
|
-
* Returns a matrix that can be used to convert from tile coordinates to viewport pixel coordinates.
|
|
14
|
-
*/
|
|
15
|
-
function getPixelPosMatrix(transform, tileID) {
|
|
16
|
-
const t = mat4.identity([]);
|
|
17
|
-
mat4.translate(t, t, [1, 1, 0]);
|
|
18
|
-
mat4.scale(t, t, [transform.width * 0.5, transform.height * 0.5, 1]);
|
|
19
|
-
return mat4.multiply(t, t, transform.calculatePosMatrix(tileID.toUnwrapped()));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function queryIncludes3DLayer(layers?: Array<string>, styleLayers: {[_: string]: StyleLayer}, sourceID: string) {
|
|
23
|
-
if (layers) {
|
|
24
|
-
for (const layerID of layers) {
|
|
25
|
-
const layer = styleLayers[layerID];
|
|
26
|
-
if (layer && layer.source === sourceID && layer.type === 'fill-extrusion') {
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
for (const key in styleLayers) {
|
|
32
|
-
const layer = styleLayers[key];
|
|
33
|
-
if (layer.source === sourceID && layer.type === 'fill-extrusion') {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function queryRenderedFeatures(sourceCache: SourceCache,
|
|
42
|
-
styleLayers: {[_: string]: StyleLayer},
|
|
43
|
-
serializedLayers: {[_: string]: Object},
|
|
44
|
-
queryGeometry: Array<Point>,
|
|
45
|
-
params: { filter: FilterSpecification, layers: Array<string>, availableImages: Array<string> },
|
|
46
|
-
transform: Transform) {
|
|
47
|
-
|
|
48
|
-
const has3DLayer = queryIncludes3DLayer(params && params.layers, styleLayers, sourceCache.id);
|
|
49
|
-
const maxPitchScaleFactor = transform.maxPitchScaleFactor();
|
|
50
|
-
const tilesIn = sourceCache.tilesIn(queryGeometry, maxPitchScaleFactor, has3DLayer);
|
|
51
|
-
|
|
52
|
-
tilesIn.sort(sortTilesIn);
|
|
53
|
-
const renderedFeatureLayers = [];
|
|
54
|
-
for (const tileIn of tilesIn) {
|
|
55
|
-
renderedFeatureLayers.push({
|
|
56
|
-
wrappedTileID: tileIn.tileID.wrapped().key,
|
|
57
|
-
queryResults: tileIn.tile.queryRenderedFeatures(
|
|
58
|
-
styleLayers,
|
|
59
|
-
serializedLayers,
|
|
60
|
-
sourceCache._state,
|
|
61
|
-
tileIn.queryGeometry,
|
|
62
|
-
tileIn.cameraQueryGeometry,
|
|
63
|
-
tileIn.scale,
|
|
64
|
-
params,
|
|
65
|
-
transform,
|
|
66
|
-
maxPitchScaleFactor,
|
|
67
|
-
getPixelPosMatrix(sourceCache.transform, tileIn.tileID))
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const result = mergeRenderedFeatureLayers(renderedFeatureLayers);
|
|
72
|
-
|
|
73
|
-
// Merge state from SourceCache into the results
|
|
74
|
-
for (const layerID in result) {
|
|
75
|
-
result[layerID].forEach((featureWrapper) => {
|
|
76
|
-
const feature = featureWrapper.feature;
|
|
77
|
-
const state = sourceCache.getFeatureState(feature.layer['source-layer'], feature.id);
|
|
78
|
-
feature.source = feature.layer.source;
|
|
79
|
-
if (feature.layer['source-layer']) {
|
|
80
|
-
feature.sourceLayer = feature.layer['source-layer'];
|
|
81
|
-
}
|
|
82
|
-
feature.state = state;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export function queryRenderedSymbols(styleLayers: {[_: string]: StyleLayer},
|
|
89
|
-
serializedLayers: {[_: string]: StyleLayer},
|
|
90
|
-
sourceCaches: {[_: string]: SourceCache},
|
|
91
|
-
queryGeometry: Array<Point>,
|
|
92
|
-
params: { filter: FilterSpecification, layers: Array<string>, availableImages: Array<string> },
|
|
93
|
-
collisionIndex: CollisionIndex,
|
|
94
|
-
retainedQueryData: {[_: number]: RetainedQueryData}) {
|
|
95
|
-
const result = {};
|
|
96
|
-
const renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry);
|
|
97
|
-
const bucketQueryData = [];
|
|
98
|
-
for (const bucketInstanceId of Object.keys(renderedSymbols).map(Number)) {
|
|
99
|
-
bucketQueryData.push(retainedQueryData[bucketInstanceId]);
|
|
100
|
-
}
|
|
101
|
-
bucketQueryData.sort(sortTilesIn);
|
|
102
|
-
|
|
103
|
-
for (const queryData of bucketQueryData) {
|
|
104
|
-
const bucketSymbols = queryData.featureIndex.lookupSymbolFeatures(
|
|
105
|
-
renderedSymbols[queryData.bucketInstanceId],
|
|
106
|
-
serializedLayers,
|
|
107
|
-
queryData.bucketIndex,
|
|
108
|
-
queryData.sourceLayerIndex,
|
|
109
|
-
params.filter,
|
|
110
|
-
params.layers,
|
|
111
|
-
params.availableImages,
|
|
112
|
-
styleLayers);
|
|
113
|
-
|
|
114
|
-
for (const layerID in bucketSymbols) {
|
|
115
|
-
const resultFeatures = result[layerID] = result[layerID] || [];
|
|
116
|
-
const layerSymbols = bucketSymbols[layerID];
|
|
117
|
-
layerSymbols.sort((a, b) => {
|
|
118
|
-
// Match topDownFeatureComparator from FeatureIndex, but using
|
|
119
|
-
// most recent sorting of features from bucket.sortFeatures
|
|
120
|
-
const featureSortOrder = queryData.featureSortOrder;
|
|
121
|
-
if (featureSortOrder) {
|
|
122
|
-
// queryRenderedSymbols documentation says we'll return features in
|
|
123
|
-
// "top-to-bottom" rendering order (aka last-to-first).
|
|
124
|
-
// Actually there can be multiple symbol instances per feature, so
|
|
125
|
-
// we sort each feature based on the first matching symbol instance.
|
|
126
|
-
const sortedA = featureSortOrder.indexOf(a.featureIndex);
|
|
127
|
-
const sortedB = featureSortOrder.indexOf(b.featureIndex);
|
|
128
|
-
assert(sortedA >= 0);
|
|
129
|
-
assert(sortedB >= 0);
|
|
130
|
-
return sortedB - sortedA;
|
|
131
|
-
} else {
|
|
132
|
-
// Bucket hasn't been re-sorted based on angle, so use the
|
|
133
|
-
// reverse of the order the features appeared in the data.
|
|
134
|
-
return b.featureIndex - a.featureIndex;
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
for (const symbolFeature of layerSymbols) {
|
|
138
|
-
resultFeatures.push(symbolFeature);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Merge state from SourceCache into the results
|
|
144
|
-
for (const layerName in result) {
|
|
145
|
-
result[layerName].forEach((featureWrapper) => {
|
|
146
|
-
const feature = featureWrapper.feature;
|
|
147
|
-
const layer = styleLayers[layerName];
|
|
148
|
-
const sourceCache = sourceCaches[layer.source];
|
|
149
|
-
const state = sourceCache.getFeatureState(feature.layer['source-layer'], feature.id);
|
|
150
|
-
feature.source = feature.layer.source;
|
|
151
|
-
if (feature.layer['source-layer']) {
|
|
152
|
-
feature.sourceLayer = feature.layer['source-layer'];
|
|
153
|
-
}
|
|
154
|
-
feature.state = state;
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
return result;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export function querySourceFeatures(sourceCache: SourceCache, params: any) {
|
|
161
|
-
const tiles = sourceCache.getRenderableIds().map((id) => {
|
|
162
|
-
return sourceCache.getTileByID(id);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
const result = [];
|
|
166
|
-
|
|
167
|
-
const dataTiles = {};
|
|
168
|
-
for (let i = 0; i < tiles.length; i++) {
|
|
169
|
-
const tile = tiles[i];
|
|
170
|
-
const dataID = tile.tileID.canonical.key;
|
|
171
|
-
if (!dataTiles[dataID]) {
|
|
172
|
-
dataTiles[dataID] = true;
|
|
173
|
-
tile.querySourceFeatures(result, params);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return result;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function sortTilesIn(a, b) {
|
|
181
|
-
const idA = a.tileID;
|
|
182
|
-
const idB = b.tileID;
|
|
183
|
-
return (idA.overscaledZ - idB.overscaledZ) || (idA.canonical.y - idB.canonical.y) || (idA.wrap - idB.wrap) || (idA.canonical.x - idB.canonical.x);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function mergeRenderedFeatureLayers(tiles) {
|
|
187
|
-
// Merge results from all tiles, but if two tiles share the same
|
|
188
|
-
// wrapped ID, don't duplicate features between the two tiles
|
|
189
|
-
const result = {};
|
|
190
|
-
const wrappedIDLayerMap = {};
|
|
191
|
-
for (const tile of tiles) {
|
|
192
|
-
const queryResults = tile.queryResults;
|
|
193
|
-
const wrappedID = tile.wrappedTileID;
|
|
194
|
-
const wrappedIDLayers = wrappedIDLayerMap[wrappedID] = wrappedIDLayerMap[wrappedID] || {};
|
|
195
|
-
for (const layerID in queryResults) {
|
|
196
|
-
const tileFeatures = queryResults[layerID];
|
|
197
|
-
const wrappedIDFeatures = wrappedIDLayers[layerID] = wrappedIDLayers[layerID] || {};
|
|
198
|
-
const resultFeatures = result[layerID] = result[layerID] || [];
|
|
199
|
-
for (const tileFeature of tileFeatures) {
|
|
200
|
-
if (!wrappedIDFeatures[tileFeature.featureIndex]) {
|
|
201
|
-
wrappedIDFeatures[tileFeature.featureIndex] = true;
|
|
202
|
-
resultFeatures.push(tileFeature);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import {getImage, ResourceType} from '../util/ajax';
|
|
4
|
-
import {extend} from '../util/util';
|
|
5
|
-
import {Evented} from '../util/evented';
|
|
6
|
-
import browser from '../util/browser';
|
|
7
|
-
import window from '../util/window';
|
|
8
|
-
import offscreenCanvasSupported from '../util/offscreen_canvas_supported';
|
|
9
|
-
import {OverscaledTileID} from './tile_id';
|
|
10
|
-
import RasterTileSource from './raster_tile_source';
|
|
11
|
-
// ensure DEMData is registered for worker transfer on main thread:
|
|
12
|
-
import '../data/dem_data';
|
|
13
|
-
|
|
14
|
-
import type {Source} from './source';
|
|
15
|
-
import type Dispatcher from '../util/dispatcher';
|
|
16
|
-
import type Tile from './tile';
|
|
17
|
-
import type {Callback} from '../types/callback';
|
|
18
|
-
import type {RasterDEMSourceSpecification} from '../style-spec/types';
|
|
19
|
-
|
|
20
|
-
class RasterDEMTileSource extends RasterTileSource implements Source {
|
|
21
|
-
encoding: "mapbox" | "terrarium";
|
|
22
|
-
|
|
23
|
-
constructor(id: string, options: RasterDEMSourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) {
|
|
24
|
-
super(id, options, dispatcher, eventedParent);
|
|
25
|
-
this.type = 'raster-dem';
|
|
26
|
-
this.maxzoom = 22;
|
|
27
|
-
this._options = extend({type: 'raster-dem'}, options);
|
|
28
|
-
this.encoding = options.encoding || "mapbox";
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
serialize() {
|
|
32
|
-
return {
|
|
33
|
-
type: 'raster-dem',
|
|
34
|
-
url: this.url,
|
|
35
|
-
tileSize: this.tileSize,
|
|
36
|
-
tiles: this.tiles,
|
|
37
|
-
bounds: this.bounds,
|
|
38
|
-
encoding: this.encoding
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
loadTile(tile: Tile, callback: Callback<void>) {
|
|
43
|
-
const url = this.map._requestManager.normalizeTileURL(tile.tileID.canonical.url(this.tiles, this.scheme), this.tileSize);
|
|
44
|
-
tile.request = getImage(this.map._requestManager.transformRequest(url, ResourceType.Tile), imageLoaded.bind(this));
|
|
45
|
-
|
|
46
|
-
tile.neighboringTiles = this._getNeighboringTiles(tile.tileID);
|
|
47
|
-
function imageLoaded(err, img) {
|
|
48
|
-
delete tile.request;
|
|
49
|
-
if (tile.aborted) {
|
|
50
|
-
tile.state = 'unloaded';
|
|
51
|
-
callback(null);
|
|
52
|
-
} else if (err) {
|
|
53
|
-
tile.state = 'errored';
|
|
54
|
-
callback(err);
|
|
55
|
-
} else if (img) {
|
|
56
|
-
if (this.map._refreshExpiredTiles) tile.setExpiryData(img);
|
|
57
|
-
delete (img: any).cacheControl;
|
|
58
|
-
delete (img: any).expires;
|
|
59
|
-
const transfer = window.ImageBitmap && img instanceof window.ImageBitmap && offscreenCanvasSupported();
|
|
60
|
-
const rawImageData = transfer ? img : browser.getImageData(img, 1);
|
|
61
|
-
const params = {
|
|
62
|
-
uid: tile.uid,
|
|
63
|
-
coord: tile.tileID,
|
|
64
|
-
source: this.id,
|
|
65
|
-
rawImageData,
|
|
66
|
-
encoding: this.encoding
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
if (!tile.actor || tile.state === 'expired') {
|
|
70
|
-
tile.actor = this.dispatcher.getActor();
|
|
71
|
-
tile.actor.send('loadDEMTile', params, done.bind(this));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function done(err, dem) {
|
|
77
|
-
if (err) {
|
|
78
|
-
tile.state = 'errored';
|
|
79
|
-
callback(err);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (dem) {
|
|
83
|
-
tile.dem = dem;
|
|
84
|
-
tile.needsHillshadePrepare = true;
|
|
85
|
-
tile.state = 'loaded';
|
|
86
|
-
callback(null);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
_getNeighboringTiles(tileID: OverscaledTileID) {
|
|
92
|
-
const canonical = tileID.canonical;
|
|
93
|
-
const dim = Math.pow(2, canonical.z);
|
|
94
|
-
|
|
95
|
-
const px = (canonical.x - 1 + dim) % dim;
|
|
96
|
-
const pxw = canonical.x === 0 ? tileID.wrap - 1 : tileID.wrap;
|
|
97
|
-
const nx = (canonical.x + 1 + dim) % dim;
|
|
98
|
-
const nxw = canonical.x + 1 === dim ? tileID.wrap + 1 : tileID.wrap;
|
|
99
|
-
|
|
100
|
-
const neighboringTiles = {};
|
|
101
|
-
// add adjacent tiles
|
|
102
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y).key] = {backfilled: false};
|
|
103
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y).key] = {backfilled: false};
|
|
104
|
-
|
|
105
|
-
// Add upper neighboringTiles
|
|
106
|
-
if (canonical.y > 0) {
|
|
107
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y - 1).key] = {backfilled: false};
|
|
108
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y - 1).key] = {backfilled: false};
|
|
109
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y - 1).key] = {backfilled: false};
|
|
110
|
-
}
|
|
111
|
-
// Add lower neighboringTiles
|
|
112
|
-
if (canonical.y + 1 < dim) {
|
|
113
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y + 1).key] = {backfilled: false};
|
|
114
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y + 1).key] = {backfilled: false};
|
|
115
|
-
neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y + 1).key] = {backfilled: false};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return neighboringTiles;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
unloadTile(tile: Tile) {
|
|
122
|
-
if (tile.demTexture) this.map.painter.saveTileTexture(tile.demTexture);
|
|
123
|
-
if (tile.fbo) {
|
|
124
|
-
tile.fbo.destroy();
|
|
125
|
-
delete tile.fbo;
|
|
126
|
-
}
|
|
127
|
-
if (tile.dem) delete tile.dem;
|
|
128
|
-
delete tile.neighboringTiles;
|
|
129
|
-
|
|
130
|
-
tile.state = 'unloaded';
|
|
131
|
-
if (tile.actor) {
|
|
132
|
-
tile.actor.send('removeDEMTile', {uid: tile.uid, source: this.id});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export default RasterDEMTileSource;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import DEMData from '../data/dem_data';
|
|
4
|
-
import {RGBAImage} from '../util/image';
|
|
5
|
-
import window from '../util/window';
|
|
6
|
-
|
|
7
|
-
import type Actor from '../util/actor';
|
|
8
|
-
import type {
|
|
9
|
-
WorkerDEMTileParameters,
|
|
10
|
-
WorkerDEMTileCallback,
|
|
11
|
-
TileParameters
|
|
12
|
-
} from './worker_source';
|
|
13
|
-
const {ImageBitmap} = window;
|
|
14
|
-
|
|
15
|
-
class RasterDEMTileWorkerSource {
|
|
16
|
-
actor: Actor;
|
|
17
|
-
loaded: {[_: string]: DEMData};
|
|
18
|
-
offscreenCanvas: OffscreenCanvas;
|
|
19
|
-
offscreenCanvasContext: CanvasRenderingContext2D;
|
|
20
|
-
|
|
21
|
-
constructor() {
|
|
22
|
-
this.loaded = {};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
loadTile(params: WorkerDEMTileParameters, callback: WorkerDEMTileCallback) {
|
|
26
|
-
const {uid, encoding, rawImageData} = params;
|
|
27
|
-
// Main thread will transfer ImageBitmap if offscreen decode with OffscreenCanvas is supported, else it will transfer an already decoded image.
|
|
28
|
-
const imagePixels = (ImageBitmap && rawImageData instanceof ImageBitmap) ? this.getImageData(rawImageData) : rawImageData;
|
|
29
|
-
const dem = new DEMData(uid, imagePixels, encoding);
|
|
30
|
-
this.loaded = this.loaded || {};
|
|
31
|
-
this.loaded[uid] = dem;
|
|
32
|
-
callback(null, dem);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
getImageData(imgBitmap: ImageBitmap): RGBAImage {
|
|
36
|
-
// Lazily initialize OffscreenCanvas
|
|
37
|
-
if (!this.offscreenCanvas || !this.offscreenCanvasContext) {
|
|
38
|
-
// Dem tiles are typically 256x256
|
|
39
|
-
this.offscreenCanvas = new OffscreenCanvas(imgBitmap.width, imgBitmap.height);
|
|
40
|
-
this.offscreenCanvasContext = this.offscreenCanvas.getContext('2d');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
this.offscreenCanvas.width = imgBitmap.width;
|
|
44
|
-
this.offscreenCanvas.height = imgBitmap.height;
|
|
45
|
-
|
|
46
|
-
this.offscreenCanvasContext.drawImage(imgBitmap, 0, 0, imgBitmap.width, imgBitmap.height);
|
|
47
|
-
// Insert an additional 1px padding around the image to allow backfilling for neighboring data.
|
|
48
|
-
const imgData = this.offscreenCanvasContext.getImageData(-1, -1, imgBitmap.width + 2, imgBitmap.height + 2);
|
|
49
|
-
this.offscreenCanvasContext.clearRect(0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height);
|
|
50
|
-
return new RGBAImage({width: imgData.width, height: imgData.height}, imgData.data);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
removeTile(params: TileParameters) {
|
|
54
|
-
const loaded = this.loaded,
|
|
55
|
-
uid = params.uid;
|
|
56
|
-
if (loaded && loaded[uid]) {
|
|
57
|
-
delete loaded[uid];
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export default RasterDEMTileWorkerSource;
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import RasterTileSource from './raster_tile_source';
|
|
2
|
-
import { extend, pick } from '../util/util';
|
|
3
|
-
import Texture from '../render/texture';
|
|
4
|
-
import Database from './offline_database'
|
|
5
|
-
|
|
6
|
-
class RasterTileSourceOffline extends RasterTileSource {
|
|
7
|
-
|
|
8
|
-
constructor(id, options, dispatcher, eventedParent) {
|
|
9
|
-
super(id, options, dispatcher, eventedParent);
|
|
10
|
-
this.id = id;
|
|
11
|
-
this.dispatcher = dispatcher;
|
|
12
|
-
this.setEventedParent(eventedParent);
|
|
13
|
-
|
|
14
|
-
this.type = 'rasteroffline';
|
|
15
|
-
this.minzoom = 0;
|
|
16
|
-
this.maxzoom = 22;
|
|
17
|
-
this.roundZoom = true;
|
|
18
|
-
this.scheme = 'xyz';
|
|
19
|
-
this.tileSize = 512;
|
|
20
|
-
this.imageFormat = 'png';
|
|
21
|
-
this._loaded = false;
|
|
22
|
-
this._options = extend({}, options);
|
|
23
|
-
extend(this, pick(options, ['scheme', 'tileSize', 'imageFormat']));
|
|
24
|
-
|
|
25
|
-
this._transparentPngUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=';
|
|
26
|
-
|
|
27
|
-
this.db = this.openDatabase(options.path)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
openDatabase(dbLocation) {
|
|
31
|
-
return Database.openDatabase(dbLocation)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
copyDatabaseFile(dbLocation, dbName, targetDir) {
|
|
35
|
-
return Database.copyDatabaseFile(dbLocation, dbName, targetDir)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
loadTile(tile, callback) {
|
|
39
|
-
|
|
40
|
-
tile.request = this._getImage(tile.tileID.canonical, done.bind(this));
|
|
41
|
-
|
|
42
|
-
function done(err, img) {
|
|
43
|
-
delete tile.request;
|
|
44
|
-
|
|
45
|
-
if (tile.aborted) {
|
|
46
|
-
tile.state = 'unloaded';
|
|
47
|
-
callback(null);
|
|
48
|
-
} else if (err) {
|
|
49
|
-
tile.state = 'errored';
|
|
50
|
-
callback(err);
|
|
51
|
-
} else if (img) {
|
|
52
|
-
if (this.map._refreshExpiredTiles) tile.setExpiryData(img);
|
|
53
|
-
delete img.cacheControl;
|
|
54
|
-
delete img.expires;
|
|
55
|
-
|
|
56
|
-
const context = this.map.painter.context;
|
|
57
|
-
const gl = context.gl;
|
|
58
|
-
tile.texture = this.map.painter.getTileTexture(img.width);
|
|
59
|
-
if (tile.texture) {
|
|
60
|
-
tile.texture.update(img, { useMipmap: true });
|
|
61
|
-
} else {
|
|
62
|
-
tile.texture = new Texture(context, img, gl.RGBA, { useMipmap: true });
|
|
63
|
-
tile.texture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE, gl.LINEAR_MIPMAP_NEAREST);
|
|
64
|
-
|
|
65
|
-
if (context.extTextureFilterAnisotropic) {
|
|
66
|
-
gl.texParameterf(gl.TEXTURE_2D, context.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
|
|
67
|
-
context.extTextureFilterAnisotropicMax);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
tile.state = 'loaded';
|
|
72
|
-
|
|
73
|
-
callback(null);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
_getBlob(coord, callback){
|
|
79
|
-
|
|
80
|
-
const coordY = Math.pow(2, coord.z) -1 - coord.y;
|
|
81
|
-
|
|
82
|
-
const query = 'SELECT BASE64(tile_data) AS base64_tile_data FROM tiles WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?';
|
|
83
|
-
const params = [coord.z, coord.x, coordY];
|
|
84
|
-
|
|
85
|
-
const base64Prefix = 'data:image/' + this.imageFormat + ';base64,';
|
|
86
|
-
|
|
87
|
-
this.db.then((db) => {
|
|
88
|
-
db.transaction((txn) => {
|
|
89
|
-
txn.executeSql(query, params, (tx, res) => {
|
|
90
|
-
if (res.rows.length) {
|
|
91
|
-
callback(undefined,
|
|
92
|
-
{
|
|
93
|
-
data: base64Prefix + res.rows.item(0).base64_tile_data,
|
|
94
|
-
cacheControl: null,
|
|
95
|
-
expires: null
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
} else {
|
|
99
|
-
console.error('tile ' + params.join(',') + ' not found');
|
|
100
|
-
callback(undefined,
|
|
101
|
-
{
|
|
102
|
-
data: this._transparentPngUrl,
|
|
103
|
-
cacheControl: null,
|
|
104
|
-
expires: null
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}, (error) => {
|
|
109
|
-
callback(error); // Error executing SQL
|
|
110
|
-
});
|
|
111
|
-
}).catch((err) => {
|
|
112
|
-
callback(err);
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
_getImage(coord, callback) {
|
|
118
|
-
|
|
119
|
-
return this._getBlob(coord, (err, imgData) => {
|
|
120
|
-
if (err) return callback(err);
|
|
121
|
-
|
|
122
|
-
const img = new window.Image();
|
|
123
|
-
const URL = window.URL || window.webkitURL;
|
|
124
|
-
img.onload = () => {
|
|
125
|
-
callback(null, img);
|
|
126
|
-
URL.revokeObjectURL(img.src);
|
|
127
|
-
};
|
|
128
|
-
img.cacheControl = imgData.cacheControl;
|
|
129
|
-
img.expires = imgData.expires;
|
|
130
|
-
img.src = imgData.data;
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
export default RasterTileSourceOffline;
|