@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,254 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import assert from 'assert';
|
|
4
|
-
import type {StylePropertySpecification} from '../style-spec';
|
|
5
|
-
|
|
6
|
-
export default convertFunction;
|
|
7
|
-
|
|
8
|
-
function convertLiteral(value) {
|
|
9
|
-
return typeof value === 'object' ? ['literal', value] : value;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function convertFunction(parameters: any, propertySpec: StylePropertySpecification) {
|
|
13
|
-
let stops = parameters.stops;
|
|
14
|
-
if (!stops) {
|
|
15
|
-
// identity function
|
|
16
|
-
return convertIdentityFunction(parameters, propertySpec);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';
|
|
20
|
-
const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;
|
|
21
|
-
const zoomDependent = zoomAndFeatureDependent || !featureDependent;
|
|
22
|
-
|
|
23
|
-
stops = stops.map((stop) => {
|
|
24
|
-
if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {
|
|
25
|
-
return [stop[0], convertTokenString(stop[1])];
|
|
26
|
-
}
|
|
27
|
-
return [stop[0], convertLiteral(stop[1])];
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
if (zoomAndFeatureDependent) {
|
|
31
|
-
return convertZoomAndPropertyFunction(parameters, propertySpec, stops);
|
|
32
|
-
} else if (zoomDependent) {
|
|
33
|
-
return convertZoomFunction(parameters, propertySpec, stops);
|
|
34
|
-
} else {
|
|
35
|
-
return convertPropertyFunction(parameters, propertySpec, stops);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function convertIdentityFunction(parameters, propertySpec): Array<mixed> {
|
|
40
|
-
const get = ['get', parameters.property];
|
|
41
|
-
|
|
42
|
-
if (parameters.default === undefined) {
|
|
43
|
-
// By default, expressions for string-valued properties get coerced. To preserve
|
|
44
|
-
// legacy function semantics, insert an explicit assertion instead.
|
|
45
|
-
return propertySpec.type === 'string' ? ['string', get] : get;
|
|
46
|
-
} else if (propertySpec.type === 'enum') {
|
|
47
|
-
return [
|
|
48
|
-
'match',
|
|
49
|
-
get,
|
|
50
|
-
Object.keys(propertySpec.values),
|
|
51
|
-
get,
|
|
52
|
-
parameters.default
|
|
53
|
-
];
|
|
54
|
-
} else {
|
|
55
|
-
const expression = [propertySpec.type === 'color' ? 'to-color' : propertySpec.type, get, convertLiteral(parameters.default)];
|
|
56
|
-
if (propertySpec.type === 'array') {
|
|
57
|
-
expression.splice(1, 0, propertySpec.value, propertySpec.length || null);
|
|
58
|
-
}
|
|
59
|
-
return expression;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function getInterpolateOperator(parameters) {
|
|
64
|
-
switch (parameters.colorSpace) {
|
|
65
|
-
case 'hcl': return 'interpolate-hcl';
|
|
66
|
-
case 'lab': return 'interpolate-lab';
|
|
67
|
-
default: return 'interpolate';
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function convertZoomAndPropertyFunction(parameters, propertySpec, stops) {
|
|
72
|
-
const featureFunctionParameters = {};
|
|
73
|
-
const featureFunctionStops = {};
|
|
74
|
-
const zoomStops = [];
|
|
75
|
-
for (let s = 0; s < stops.length; s++) {
|
|
76
|
-
const stop = stops[s];
|
|
77
|
-
const zoom = stop[0].zoom;
|
|
78
|
-
if (featureFunctionParameters[zoom] === undefined) {
|
|
79
|
-
featureFunctionParameters[zoom] = {
|
|
80
|
-
zoom,
|
|
81
|
-
type: parameters.type,
|
|
82
|
-
property: parameters.property,
|
|
83
|
-
default: parameters.default,
|
|
84
|
-
};
|
|
85
|
-
featureFunctionStops[zoom] = [];
|
|
86
|
-
zoomStops.push(zoom);
|
|
87
|
-
}
|
|
88
|
-
featureFunctionStops[zoom].push([stop[0].value, stop[1]]);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// the interpolation type for the zoom dimension of a zoom-and-property
|
|
92
|
-
// function is determined directly from the style property specification
|
|
93
|
-
// for which it's being used: linear for interpolatable properties, step
|
|
94
|
-
// otherwise.
|
|
95
|
-
const functionType = getFunctionType({}, propertySpec);
|
|
96
|
-
if (functionType === 'exponential') {
|
|
97
|
-
const expression = [getInterpolateOperator(parameters), ['linear'], ['zoom']];
|
|
98
|
-
|
|
99
|
-
for (const z of zoomStops) {
|
|
100
|
-
const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);
|
|
101
|
-
appendStopPair(expression, z, output, false);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return expression;
|
|
105
|
-
} else {
|
|
106
|
-
const expression = ['step', ['zoom']];
|
|
107
|
-
|
|
108
|
-
for (const z of zoomStops) {
|
|
109
|
-
const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);
|
|
110
|
-
appendStopPair(expression, z, output, true);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
fixupDegenerateStepCurve(expression);
|
|
114
|
-
|
|
115
|
-
return expression;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function coalesce(a, b) {
|
|
120
|
-
if (a !== undefined) return a;
|
|
121
|
-
if (b !== undefined) return b;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function convertPropertyFunction(parameters, propertySpec, stops) {
|
|
125
|
-
const type = getFunctionType(parameters, propertySpec);
|
|
126
|
-
const get = ['get', parameters.property];
|
|
127
|
-
if (type === 'categorical' && typeof stops[0][0] === 'boolean') {
|
|
128
|
-
assert(parameters.stops.length > 0 && parameters.stops.length <= 2);
|
|
129
|
-
const expression = ['case'];
|
|
130
|
-
for (const stop of stops) {
|
|
131
|
-
expression.push(['==', get, stop[0]], stop[1]);
|
|
132
|
-
}
|
|
133
|
-
expression.push(convertLiteral(coalesce(parameters.default, propertySpec.default)));
|
|
134
|
-
return expression;
|
|
135
|
-
} else if (type === 'categorical') {
|
|
136
|
-
const expression = ['match', get];
|
|
137
|
-
for (const stop of stops) {
|
|
138
|
-
appendStopPair(expression, stop[0], stop[1], false);
|
|
139
|
-
}
|
|
140
|
-
expression.push(convertLiteral(coalesce(parameters.default, propertySpec.default)));
|
|
141
|
-
return expression;
|
|
142
|
-
} else if (type === 'interval') {
|
|
143
|
-
const expression = ['step', ['number', get]];
|
|
144
|
-
for (const stop of stops) {
|
|
145
|
-
appendStopPair(expression, stop[0], stop[1], true);
|
|
146
|
-
}
|
|
147
|
-
fixupDegenerateStepCurve(expression);
|
|
148
|
-
return parameters.default === undefined ? expression : [
|
|
149
|
-
'case',
|
|
150
|
-
['==', ['typeof', get], 'number'],
|
|
151
|
-
expression,
|
|
152
|
-
convertLiteral(parameters.default)
|
|
153
|
-
];
|
|
154
|
-
} else if (type === 'exponential') {
|
|
155
|
-
const base = parameters.base !== undefined ? parameters.base : 1;
|
|
156
|
-
const expression = [
|
|
157
|
-
getInterpolateOperator(parameters),
|
|
158
|
-
base === 1 ? ["linear"] : ["exponential", base],
|
|
159
|
-
["number", get]
|
|
160
|
-
];
|
|
161
|
-
|
|
162
|
-
for (const stop of stops) {
|
|
163
|
-
appendStopPair(expression, stop[0], stop[1], false);
|
|
164
|
-
}
|
|
165
|
-
return parameters.default === undefined ? expression : [
|
|
166
|
-
'case',
|
|
167
|
-
['==', ['typeof', get], 'number'],
|
|
168
|
-
expression,
|
|
169
|
-
convertLiteral(parameters.default)
|
|
170
|
-
];
|
|
171
|
-
} else {
|
|
172
|
-
throw new Error(`Unknown property function type ${type}`);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {
|
|
177
|
-
const type = getFunctionType(parameters, propertySpec);
|
|
178
|
-
let expression;
|
|
179
|
-
let isStep = false;
|
|
180
|
-
if (type === 'interval') {
|
|
181
|
-
expression = ['step', input];
|
|
182
|
-
isStep = true;
|
|
183
|
-
} else if (type === 'exponential') {
|
|
184
|
-
const base = parameters.base !== undefined ? parameters.base : 1;
|
|
185
|
-
expression = [getInterpolateOperator(parameters), base === 1 ? ["linear"] : ["exponential", base], input];
|
|
186
|
-
|
|
187
|
-
} else {
|
|
188
|
-
throw new Error(`Unknown zoom function type "${type}"`);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
for (const stop of stops) {
|
|
192
|
-
appendStopPair(expression, stop[0], stop[1], isStep);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
fixupDegenerateStepCurve(expression);
|
|
196
|
-
|
|
197
|
-
return expression;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
function fixupDegenerateStepCurve(expression) {
|
|
201
|
-
// degenerate step curve (i.e. a constant function): add a noop stop
|
|
202
|
-
if (expression[0] === 'step' && expression.length === 3) {
|
|
203
|
-
expression.push(0);
|
|
204
|
-
expression.push(expression[3]);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
function appendStopPair(curve, input, output, isStep) {
|
|
209
|
-
// Skip duplicate stop values. They were not validated for functions, but they are for expressions.
|
|
210
|
-
// https://github.com/mapbox/mapbox-gl-js/issues/4107
|
|
211
|
-
if (curve.length > 3 && input === curve[curve.length - 2]) {
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
// step curves don't get the first input value, as it is redundant.
|
|
215
|
-
if (!(isStep && curve.length === 2)) {
|
|
216
|
-
curve.push(input);
|
|
217
|
-
}
|
|
218
|
-
curve.push(output);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function getFunctionType(parameters, propertySpec) {
|
|
222
|
-
if (parameters.type) {
|
|
223
|
-
return parameters.type;
|
|
224
|
-
} else {
|
|
225
|
-
assert(propertySpec.expression);
|
|
226
|
-
return (propertySpec.expression: any).interpolated ? 'exponential' : 'interval';
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// "String with {name} token" => ["concat", "String with ", ["get", "name"], " token"]
|
|
231
|
-
export function convertTokenString(s: string) {
|
|
232
|
-
const result = ['concat'];
|
|
233
|
-
const re = /{([^{}]+)}/g;
|
|
234
|
-
let pos = 0;
|
|
235
|
-
for (let match = re.exec(s); match !== null; match = re.exec(s)) {
|
|
236
|
-
const literal = s.slice(pos, re.lastIndex - match[0].length);
|
|
237
|
-
pos = re.lastIndex;
|
|
238
|
-
if (literal.length > 0) result.push(literal);
|
|
239
|
-
result.push(['get', match[1]]);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (result.length === 1) {
|
|
243
|
-
return s;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
if (pos < s.length) {
|
|
247
|
-
result.push(s.slice(pos));
|
|
248
|
-
} else if (result.length === 2) {
|
|
249
|
-
return ['to-string', result[1]];
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return result;
|
|
253
|
-
}
|
|
254
|
-
|
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import * as colorSpaces from '../util/color_spaces';
|
|
3
|
-
import Color from '../util/color';
|
|
4
|
-
import extend from '../util/extend';
|
|
5
|
-
import getType from '../util/get_type';
|
|
6
|
-
import * as interpolate from '../util/interpolate';
|
|
7
|
-
import Interpolate from '../expression/definitions/interpolate';
|
|
8
|
-
import Formatted from '../expression/types/formatted';
|
|
9
|
-
import ResolvedImage from '../expression/types/resolved_image';
|
|
10
|
-
import {supportsInterpolation} from '../util/properties';
|
|
11
|
-
import {findStopLessThanOrEqualTo} from '../expression/stops';
|
|
12
|
-
|
|
13
|
-
export function isFunction(value) {
|
|
14
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function identityFunction(x) {
|
|
18
|
-
return x;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function createFunction(parameters, propertySpec) {
|
|
22
|
-
const isColor = propertySpec.type === 'color';
|
|
23
|
-
const zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';
|
|
24
|
-
const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;
|
|
25
|
-
const zoomDependent = zoomAndFeatureDependent || !featureDependent;
|
|
26
|
-
const type = parameters.type || (supportsInterpolation(propertySpec) ? 'exponential' : 'interval');
|
|
27
|
-
|
|
28
|
-
if (isColor) {
|
|
29
|
-
parameters = extend({}, parameters);
|
|
30
|
-
|
|
31
|
-
if (parameters.stops) {
|
|
32
|
-
parameters.stops = parameters.stops.map((stop) => {
|
|
33
|
-
return [stop[0], Color.parse(stop[1])];
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (parameters.default) {
|
|
38
|
-
parameters.default = Color.parse(parameters.default);
|
|
39
|
-
} else {
|
|
40
|
-
parameters.default = Color.parse(propertySpec.default);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (parameters.colorSpace && parameters.colorSpace !== 'rgb' && !colorSpaces[parameters.colorSpace]) { // eslint-disable-line import/namespace
|
|
45
|
-
throw new Error(`Unknown color space: ${parameters.colorSpace}`);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
let innerFun;
|
|
49
|
-
let hashedStops;
|
|
50
|
-
let categoricalKeyType;
|
|
51
|
-
if (type === 'exponential') {
|
|
52
|
-
innerFun = evaluateExponentialFunction;
|
|
53
|
-
} else if (type === 'interval') {
|
|
54
|
-
innerFun = evaluateIntervalFunction;
|
|
55
|
-
} else if (type === 'categorical') {
|
|
56
|
-
innerFun = evaluateCategoricalFunction;
|
|
57
|
-
|
|
58
|
-
// For categorical functions, generate an Object as a hashmap of the stops for fast searching
|
|
59
|
-
hashedStops = Object.create(null);
|
|
60
|
-
for (const stop of parameters.stops) {
|
|
61
|
-
hashedStops[stop[0]] = stop[1];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Infer key type based on first stop key-- used to encforce strict type checking later
|
|
65
|
-
categoricalKeyType = typeof parameters.stops[0][0];
|
|
66
|
-
|
|
67
|
-
} else if (type === 'identity') {
|
|
68
|
-
innerFun = evaluateIdentityFunction;
|
|
69
|
-
} else {
|
|
70
|
-
throw new Error(`Unknown function type "${type}"`);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (zoomAndFeatureDependent) {
|
|
74
|
-
const featureFunctions = {};
|
|
75
|
-
const zoomStops = [];
|
|
76
|
-
for (let s = 0; s < parameters.stops.length; s++) {
|
|
77
|
-
const stop = parameters.stops[s];
|
|
78
|
-
const zoom = stop[0].zoom;
|
|
79
|
-
if (featureFunctions[zoom] === undefined) {
|
|
80
|
-
featureFunctions[zoom] = {
|
|
81
|
-
zoom,
|
|
82
|
-
type: parameters.type,
|
|
83
|
-
property: parameters.property,
|
|
84
|
-
default: parameters.default,
|
|
85
|
-
stops: []
|
|
86
|
-
};
|
|
87
|
-
zoomStops.push(zoom);
|
|
88
|
-
}
|
|
89
|
-
featureFunctions[zoom].stops.push([stop[0].value, stop[1]]);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const featureFunctionStops = [];
|
|
93
|
-
for (const z of zoomStops) {
|
|
94
|
-
featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z], propertySpec)]);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const interpolationType = {name: 'linear'};
|
|
98
|
-
return {
|
|
99
|
-
kind: 'composite',
|
|
100
|
-
interpolationType,
|
|
101
|
-
interpolationFactor: Interpolate.interpolationFactor.bind(undefined, interpolationType),
|
|
102
|
-
zoomStops: featureFunctionStops.map(s => s[0]),
|
|
103
|
-
evaluate({zoom}, properties) {
|
|
104
|
-
return evaluateExponentialFunction({
|
|
105
|
-
stops: featureFunctionStops,
|
|
106
|
-
base: parameters.base
|
|
107
|
-
}, propertySpec, zoom).evaluate(zoom, properties);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
} else if (zoomDependent) {
|
|
111
|
-
const interpolationType = type === 'exponential' ?
|
|
112
|
-
{name: 'exponential', base: parameters.base !== undefined ? parameters.base : 1} : null;
|
|
113
|
-
return {
|
|
114
|
-
kind: 'camera',
|
|
115
|
-
interpolationType,
|
|
116
|
-
interpolationFactor: Interpolate.interpolationFactor.bind(undefined, interpolationType),
|
|
117
|
-
zoomStops: parameters.stops.map(s => s[0]),
|
|
118
|
-
evaluate: ({zoom}) => innerFun(parameters, propertySpec, zoom, hashedStops, categoricalKeyType)
|
|
119
|
-
};
|
|
120
|
-
} else {
|
|
121
|
-
return {
|
|
122
|
-
kind: 'source',
|
|
123
|
-
evaluate(_, feature) {
|
|
124
|
-
const value = feature && feature.properties ? feature.properties[parameters.property] : undefined;
|
|
125
|
-
if (value === undefined) {
|
|
126
|
-
return coalesce(parameters.default, propertySpec.default);
|
|
127
|
-
}
|
|
128
|
-
return innerFun(parameters, propertySpec, value, hashedStops, categoricalKeyType);
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function coalesce(a, b, c) {
|
|
135
|
-
if (a !== undefined) return a;
|
|
136
|
-
if (b !== undefined) return b;
|
|
137
|
-
if (c !== undefined) return c;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function evaluateCategoricalFunction(parameters, propertySpec, input, hashedStops, keyType) {
|
|
141
|
-
const evaluated = typeof input === keyType ? hashedStops[input] : undefined; // Enforce strict typing on input
|
|
142
|
-
return coalesce(evaluated, parameters.default, propertySpec.default);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function evaluateIntervalFunction(parameters, propertySpec, input) {
|
|
146
|
-
// Edge cases
|
|
147
|
-
if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);
|
|
148
|
-
const n = parameters.stops.length;
|
|
149
|
-
if (n === 1) return parameters.stops[0][1];
|
|
150
|
-
if (input <= parameters.stops[0][0]) return parameters.stops[0][1];
|
|
151
|
-
if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];
|
|
152
|
-
|
|
153
|
-
const index = findStopLessThanOrEqualTo(parameters.stops.map((stop) => stop[0]), input);
|
|
154
|
-
|
|
155
|
-
return parameters.stops[index][1];
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function evaluateExponentialFunction(parameters, propertySpec, input) {
|
|
159
|
-
const base = parameters.base !== undefined ? parameters.base : 1;
|
|
160
|
-
|
|
161
|
-
// Edge cases
|
|
162
|
-
if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);
|
|
163
|
-
const n = parameters.stops.length;
|
|
164
|
-
if (n === 1) return parameters.stops[0][1];
|
|
165
|
-
if (input <= parameters.stops[0][0]) return parameters.stops[0][1];
|
|
166
|
-
if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];
|
|
167
|
-
|
|
168
|
-
const index = findStopLessThanOrEqualTo(parameters.stops.map((stop) => stop[0]), input);
|
|
169
|
-
const t = interpolationFactor(
|
|
170
|
-
input, base,
|
|
171
|
-
parameters.stops[index][0],
|
|
172
|
-
parameters.stops[index + 1][0]);
|
|
173
|
-
|
|
174
|
-
const outputLower = parameters.stops[index][1];
|
|
175
|
-
const outputUpper = parameters.stops[index + 1][1];
|
|
176
|
-
let interp = interpolate[propertySpec.type] || identityFunction; // eslint-disable-line import/namespace
|
|
177
|
-
|
|
178
|
-
if (parameters.colorSpace && parameters.colorSpace !== 'rgb') {
|
|
179
|
-
const colorspace = colorSpaces[parameters.colorSpace]; // eslint-disable-line import/namespace
|
|
180
|
-
interp = (a, b) => colorspace.reverse(colorspace.interpolate(colorspace.forward(a), colorspace.forward(b), t));
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (typeof outputLower.evaluate === 'function') {
|
|
184
|
-
return {
|
|
185
|
-
evaluate(...args) {
|
|
186
|
-
const evaluatedLower = outputLower.evaluate.apply(undefined, args);
|
|
187
|
-
const evaluatedUpper = outputUpper.evaluate.apply(undefined, args);
|
|
188
|
-
// Special case for fill-outline-color, which has no spec default.
|
|
189
|
-
if (evaluatedLower === undefined || evaluatedUpper === undefined) {
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
return interp(evaluatedLower, evaluatedUpper, t);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return interp(outputLower, outputUpper, t);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
function evaluateIdentityFunction(parameters, propertySpec, input) {
|
|
201
|
-
if (propertySpec.type === 'color') {
|
|
202
|
-
input = Color.parse(input);
|
|
203
|
-
} else if (propertySpec.type === 'formatted') {
|
|
204
|
-
input = Formatted.fromString(input.toString());
|
|
205
|
-
} else if (propertySpec.type === 'resolvedImage') {
|
|
206
|
-
input = ResolvedImage.fromString(input.toString());
|
|
207
|
-
} else if (getType(input) !== propertySpec.type && (propertySpec.type !== 'enum' || !propertySpec.values[input])) {
|
|
208
|
-
input = undefined;
|
|
209
|
-
}
|
|
210
|
-
return coalesce(input, parameters.default, propertySpec.default);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Returns a ratio that can be used to interpolate between exponential function
|
|
215
|
-
* stops.
|
|
216
|
-
*
|
|
217
|
-
* How it works:
|
|
218
|
-
* Two consecutive stop values define a (scaled and shifted) exponential
|
|
219
|
-
* function `f(x) = a * base^x + b`, where `base` is the user-specified base,
|
|
220
|
-
* and `a` and `b` are constants affording sufficient degrees of freedom to fit
|
|
221
|
-
* the function to the given stops.
|
|
222
|
-
*
|
|
223
|
-
* Here's a bit of algebra that lets us compute `f(x)` directly from the stop
|
|
224
|
-
* values without explicitly solving for `a` and `b`:
|
|
225
|
-
*
|
|
226
|
-
* First stop value: `f(x0) = y0 = a * base^x0 + b`
|
|
227
|
-
* Second stop value: `f(x1) = y1 = a * base^x1 + b`
|
|
228
|
-
* => `y1 - y0 = a(base^x1 - base^x0)`
|
|
229
|
-
* => `a = (y1 - y0)/(base^x1 - base^x0)`
|
|
230
|
-
*
|
|
231
|
-
* Desired value: `f(x) = y = a * base^x + b`
|
|
232
|
-
* => `f(x) = y0 + a * (base^x - base^x0)`
|
|
233
|
-
*
|
|
234
|
-
* From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a
|
|
235
|
-
* little algebra:
|
|
236
|
-
* ```
|
|
237
|
-
* a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)
|
|
238
|
-
* = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)
|
|
239
|
-
* ```
|
|
240
|
-
*
|
|
241
|
-
* If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have
|
|
242
|
-
* `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as
|
|
243
|
-
* an interpolation factor between the two stops' output values.
|
|
244
|
-
*
|
|
245
|
-
* (Note: a slightly different form for `ratio`,
|
|
246
|
-
* `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer
|
|
247
|
-
* expensive `Math.pow()` operations.)
|
|
248
|
-
*
|
|
249
|
-
* @private
|
|
250
|
-
*/
|
|
251
|
-
function interpolationFactor(input, base, lowerValue, upperValue) {
|
|
252
|
-
const difference = upperValue - lowerValue;
|
|
253
|
-
const progress = input - lowerValue;
|
|
254
|
-
|
|
255
|
-
if (difference === 0) {
|
|
256
|
-
return 0;
|
|
257
|
-
} else if (base === 1) {
|
|
258
|
-
return progress / difference;
|
|
259
|
-
} else {
|
|
260
|
-
return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import refProperties from './util/ref_properties';
|
|
3
|
-
|
|
4
|
-
function stringify(obj) {
|
|
5
|
-
const type = typeof obj;
|
|
6
|
-
if (type === 'number' || type === 'boolean' || type === 'string' || obj === undefined || obj === null)
|
|
7
|
-
return JSON.stringify(obj);
|
|
8
|
-
|
|
9
|
-
if (Array.isArray(obj)) {
|
|
10
|
-
let str = '[';
|
|
11
|
-
for (const val of obj) {
|
|
12
|
-
str += `${stringify(val)},`;
|
|
13
|
-
}
|
|
14
|
-
return `${str}]`;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const keys = Object.keys(obj).sort();
|
|
18
|
-
|
|
19
|
-
let str = '{';
|
|
20
|
-
for (let i = 0; i < keys.length; i++) {
|
|
21
|
-
str += `${JSON.stringify(keys[i])}:${stringify(obj[keys[i]])},`;
|
|
22
|
-
}
|
|
23
|
-
return `${str}}`;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function getKey(layer) {
|
|
27
|
-
let key = '';
|
|
28
|
-
for (const k of refProperties) {
|
|
29
|
-
key += `/${stringify(layer[k])}`;
|
|
30
|
-
}
|
|
31
|
-
return key;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export default groupByLayout;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Given an array of layers, return an array of arrays of layers where all
|
|
38
|
-
* layers in each group have identical layout-affecting properties. These
|
|
39
|
-
* are the properties that were formerly used by explicit `ref` mechanism
|
|
40
|
-
* for layers: 'type', 'source', 'source-layer', 'minzoom', 'maxzoom',
|
|
41
|
-
* 'filter', and 'layout'.
|
|
42
|
-
*
|
|
43
|
-
* The input is not modified. The output layers are references to the
|
|
44
|
-
* input layers.
|
|
45
|
-
*
|
|
46
|
-
* @private
|
|
47
|
-
* @param {Array<Layer>} layers
|
|
48
|
-
* @param {Object} [cachedKeys] - an object to keep already calculated keys.
|
|
49
|
-
* @returns {Array<Array<Layer>>}
|
|
50
|
-
*/
|
|
51
|
-
function groupByLayout(layers, cachedKeys) {
|
|
52
|
-
const groups = {};
|
|
53
|
-
|
|
54
|
-
for (let i = 0; i < layers.length; i++) {
|
|
55
|
-
|
|
56
|
-
const k = (cachedKeys && cachedKeys[layers[i].id]) || getKey(layers[i]);
|
|
57
|
-
// update the cache if there is one
|
|
58
|
-
if (cachedKeys)
|
|
59
|
-
cachedKeys[layers[i].id] = k;
|
|
60
|
-
|
|
61
|
-
let group = groups[k];
|
|
62
|
-
if (!group) {
|
|
63
|
-
group = groups[k] = [];
|
|
64
|
-
}
|
|
65
|
-
group.push(layers[i]);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const result = [];
|
|
69
|
-
|
|
70
|
-
for (const k in groups) {
|
|
71
|
-
result.push(groups[k]);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return result;
|
|
75
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
eachLayer,
|
|
5
|
-
eachProperty
|
|
6
|
-
} from '../visit';
|
|
7
|
-
import {isExpression} from '../expression';
|
|
8
|
-
import convertFunction, {convertTokenString} from '../function/convert';
|
|
9
|
-
import convertFilter from '../feature_filter/convert';
|
|
10
|
-
|
|
11
|
-
import type {StyleSpecification} from '../types';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Migrate the given style object in place to use expressions. Specifically,
|
|
15
|
-
* this will convert (a) "stop" functions, and (b) legacy filters to their
|
|
16
|
-
* expression equivalents.
|
|
17
|
-
*/
|
|
18
|
-
export default function(style: StyleSpecification) {
|
|
19
|
-
const converted = [];
|
|
20
|
-
|
|
21
|
-
eachLayer(style, (layer) => {
|
|
22
|
-
if (layer.filter) {
|
|
23
|
-
layer.filter = (convertFilter(layer.filter): any);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
eachProperty(style, {paint: true, layout: true}, ({path, value, reference, set}) => {
|
|
28
|
-
if (isExpression(value)) return;
|
|
29
|
-
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
30
|
-
set(convertFunction(value, reference));
|
|
31
|
-
converted.push(path.join('.'));
|
|
32
|
-
} else if (reference.tokens && typeof value === 'string') {
|
|
33
|
-
set(convertTokenString(value));
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
return style;
|
|
38
|
-
}
|
|
39
|
-
|