ol 9.2.5-sh.1 → 10.0.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/Collection.d.ts +1 -1
- package/Collection.d.ts.map +1 -1
- package/DataTile.d.ts +15 -1
- package/DataTile.d.ts.map +1 -1
- package/DataTile.js +26 -1
- package/Feature.d.ts +1 -1
- package/Feature.d.ts.map +1 -1
- package/Geolocation.d.ts +2 -2
- package/Geolocation.d.ts.map +1 -1
- package/Geolocation.js +1 -0
- package/Image.d.ts +4 -4
- package/Image.d.ts.map +1 -1
- package/ImageCanvas.d.ts +2 -1
- package/ImageCanvas.d.ts.map +1 -1
- package/ImageCanvas.js +2 -0
- package/ImageTile.d.ts.map +1 -1
- package/ImageTile.js +1 -1
- package/Map.d.ts +5 -4
- package/Map.d.ts.map +1 -1
- package/Map.js +15 -14
- package/MapBrowserEvent.d.ts +4 -2
- package/MapBrowserEvent.d.ts.map +1 -1
- package/MapBrowserEvent.js +4 -0
- package/MapBrowserEventHandler.d.ts +4 -1
- package/MapBrowserEventHandler.d.ts.map +1 -1
- package/MapBrowserEventHandler.js +4 -0
- package/MapBrowserEventType.d.ts +1 -1
- package/MapEvent.d.ts.map +1 -1
- package/MapEventType.d.ts +1 -1
- package/Object.d.ts.map +1 -1
- package/ObjectEventType.d.ts +1 -1
- package/Observable.d.ts +2 -2
- package/Observable.d.ts.map +1 -1
- package/Overlay.d.ts +2 -2
- package/Overlay.d.ts.map +1 -1
- package/Overlay.js +2 -2
- package/README.md +1 -1
- package/Tile.d.ts +10 -30
- package/Tile.d.ts.map +1 -1
- package/Tile.js +6 -79
- package/TileCache.d.ts +2 -1
- package/TileCache.d.ts.map +1 -1
- package/TileCache.js +4 -0
- package/TileQueue.d.ts +3 -2
- package/TileQueue.d.ts.map +1 -1
- package/TileQueue.js +7 -4
- package/VectorRenderTile.d.ts +11 -16
- package/VectorRenderTile.d.ts.map +1 -1
- package/VectorRenderTile.js +19 -24
- package/VectorTile.d.ts +20 -17
- package/VectorTile.d.ts.map +1 -1
- package/VectorTile.js +14 -10
- package/View.d.ts +1 -1
- package/View.d.ts.map +1 -1
- package/array.d.ts +2 -2
- package/array.d.ts.map +1 -1
- package/asserts.d.ts.map +1 -1
- package/centerconstraint.d.ts.map +1 -1
- package/color.d.ts.map +1 -1
- package/color.js +2 -2
- package/console.d.ts +1 -1
- package/console.d.ts.map +1 -1
- package/control/Attribution.d.ts.map +1 -1
- package/control/Attribution.js +5 -12
- package/control/Control.d.ts.map +1 -1
- package/control/Control.js +4 -6
- package/control/FullScreen.d.ts +1 -1
- package/control/FullScreen.d.ts.map +1 -1
- package/control/FullScreen.js +1 -0
- package/control/MousePosition.d.ts +1 -1
- package/control/MousePosition.d.ts.map +1 -1
- package/control/MousePosition.js +1 -0
- package/control/OverviewMap.d.ts.map +1 -1
- package/control/OverviewMap.js +16 -13
- package/control/Rotate.d.ts +4 -1
- package/control/Rotate.d.ts.map +1 -1
- package/control/Rotate.js +3 -0
- package/control/ScaleLine.d.ts +3 -3
- package/control/ScaleLine.d.ts.map +1 -1
- package/control/ZoomSlider.d.ts.map +1 -1
- package/control/ZoomSlider.js +1 -0
- package/control/ZoomToExtent.d.ts.map +1 -1
- package/control/defaults.d.ts.map +1 -1
- package/coordinate.d.ts +1 -1
- package/coordinate.d.ts.map +1 -1
- package/css.d.ts.map +1 -1
- package/dist/ol.d.ts +10 -8
- package/dist/ol.d.ts.map +1 -1
- package/dist/ol.js +1 -3
- package/dist/ol.js.map +1 -1
- package/dom.d.ts +0 -5
- package/dom.d.ts.map +1 -1
- package/dom.js +1 -9
- package/events/SnapEvent.d.ts.map +1 -1
- package/events/Target.d.ts.map +1 -1
- package/events/Target.js +1 -0
- package/events/condition.d.ts +2 -2
- package/events/condition.d.ts.map +1 -1
- package/events/condition.js +1 -1
- package/events.d.ts.map +1 -1
- package/events.js +6 -4
- package/expr/cpu.d.ts +1 -1
- package/expr/cpu.d.ts.map +1 -1
- package/expr/cpu.js +2 -16
- package/expr/expression.d.ts +8 -15
- package/expr/expression.d.ts.map +1 -1
- package/expr/expression.js +388 -508
- package/expr/gpu.d.ts +3 -3
- package/expr/gpu.d.ts.map +1 -1
- package/expr/gpu.js +1 -14
- package/extent.d.ts +2 -2
- package/extent.d.ts.map +1 -1
- package/featureloader.d.ts +10 -10
- package/featureloader.d.ts.map +1 -1
- package/featureloader.js +6 -6
- package/format/EsriJSON.d.ts +9 -12
- package/format/EsriJSON.d.ts.map +1 -1
- package/format/EsriJSON.js +7 -0
- package/format/Feature.d.ts +14 -14
- package/format/Feature.d.ts.map +1 -1
- package/format/Feature.js +8 -6
- package/format/GML2.d.ts.map +1 -1
- package/format/GML2.js +7 -9
- package/format/GML3.d.ts +2 -1
- package/format/GML3.d.ts.map +1 -1
- package/format/GML3.js +23 -31
- package/format/GML32.d.ts.map +1 -1
- package/format/GML32.js +1 -0
- package/format/GMLBase.d.ts.map +1 -1
- package/format/GMLBase.js +3 -0
- package/format/GPX.d.ts.map +1 -1
- package/format/GPX.js +3 -0
- package/format/GeoJSON.d.ts +17 -13
- package/format/GeoJSON.d.ts.map +1 -1
- package/format/GeoJSON.js +25 -17
- package/format/IGC.d.ts +1 -1
- package/format/IGC.d.ts.map +1 -1
- package/format/IGC.js +2 -0
- package/format/IIIFInfo.d.ts.map +1 -1
- package/format/JSONFeature.d.ts +15 -31
- package/format/JSONFeature.d.ts.map +1 -1
- package/format/JSONFeature.js +20 -16
- package/format/KML.d.ts +6 -6
- package/format/KML.d.ts.map +1 -1
- package/format/KML.js +5 -1
- package/format/MVT.d.ts +15 -13
- package/format/MVT.d.ts.map +1 -1
- package/format/MVT.js +19 -20
- package/format/OSMXML.d.ts.map +1 -1
- package/format/OSMXML.js +1 -0
- package/format/OWS.d.ts.map +1 -1
- package/format/OWS.js +1 -0
- package/format/Polyline.d.ts +6 -3
- package/format/Polyline.d.ts.map +1 -1
- package/format/Polyline.js +6 -0
- package/format/TextFeature.d.ts +9 -14
- package/format/TextFeature.d.ts.map +1 -1
- package/format/TextFeature.js +8 -0
- package/format/TopoJSON.d.ts +1 -8
- package/format/TopoJSON.d.ts.map +1 -1
- package/format/TopoJSON.js +2 -0
- package/format/WFS.d.ts.map +1 -1
- package/format/WFS.js +3 -0
- package/format/WKB.d.ts +9 -5
- package/format/WKB.d.ts.map +1 -1
- package/format/WKB.js +8 -0
- package/format/WKT.d.ts.map +1 -1
- package/format/WKT.js +6 -0
- package/format/WMSCapabilities.d.ts.map +1 -1
- package/format/WMSCapabilities.js +1 -0
- package/format/WMSGetFeatureInfo.d.ts.map +1 -1
- package/format/WMSGetFeatureInfo.js +1 -0
- package/format/WMTSCapabilities.d.ts.map +1 -1
- package/format/WMTSCapabilities.js +1 -0
- package/format/XMLFeature.d.ts +11 -15
- package/format/XMLFeature.d.ts.map +1 -1
- package/format/XMLFeature.js +8 -0
- package/format/filter/Bbox.d.ts.map +1 -1
- package/format/filter/Comparison.d.ts.map +1 -1
- package/format/filter/ComparisonBinary.d.ts.map +1 -1
- package/format/filter/Contains.d.ts.map +1 -1
- package/format/filter/DWithin.d.ts.map +1 -1
- package/format/filter/Disjoint.d.ts.map +1 -1
- package/format/filter/During.d.ts.map +1 -1
- package/format/filter/EqualTo.d.ts.map +1 -1
- package/format/filter/Filter.d.ts.map +1 -1
- package/format/filter/GreaterThan.d.ts.map +1 -1
- package/format/filter/GreaterThanOrEqualTo.d.ts.map +1 -1
- package/format/filter/Intersects.d.ts.map +1 -1
- package/format/filter/IsBetween.d.ts.map +1 -1
- package/format/filter/IsLike.d.ts.map +1 -1
- package/format/filter/IsNull.d.ts.map +1 -1
- package/format/filter/LessThan.d.ts.map +1 -1
- package/format/filter/LessThanOrEqualTo.d.ts.map +1 -1
- package/format/filter/LogicalNary.d.ts.map +1 -1
- package/format/filter/Not.d.ts.map +1 -1
- package/format/filter/NotEqualTo.d.ts.map +1 -1
- package/format/filter/ResourceId.d.ts.map +1 -1
- package/format/filter/Spatial.d.ts.map +1 -1
- package/format/filter/Within.d.ts.map +1 -1
- package/format/filter.d.ts.map +1 -1
- package/functions.d.ts +2 -2
- package/functions.d.ts.map +1 -1
- package/functions.js +6 -5
- package/geom/Circle.d.ts +10 -3
- package/geom/Circle.d.ts.map +1 -1
- package/geom/Circle.js +13 -0
- package/geom/Geometry.d.ts +2 -2
- package/geom/GeometryCollection.d.ts +6 -3
- package/geom/GeometryCollection.d.ts.map +1 -1
- package/geom/GeometryCollection.js +13 -0
- package/geom/LineString.d.ts +9 -5
- package/geom/LineString.d.ts.map +1 -1
- package/geom/LineString.js +7 -0
- package/geom/LinearRing.d.ts +8 -4
- package/geom/LinearRing.d.ts.map +1 -1
- package/geom/LinearRing.js +7 -0
- package/geom/MultiLineString.d.ts +8 -4
- package/geom/MultiLineString.d.ts.map +1 -1
- package/geom/MultiLineString.js +7 -0
- package/geom/MultiPoint.d.ts +6 -3
- package/geom/MultiPoint.d.ts.map +1 -1
- package/geom/MultiPoint.js +6 -0
- package/geom/MultiPolygon.d.ts +8 -4
- package/geom/MultiPolygon.d.ts.map +1 -1
- package/geom/MultiPolygon.js +8 -0
- package/geom/Point.d.ts +4 -2
- package/geom/Point.d.ts.map +1 -1
- package/geom/Point.js +7 -0
- package/geom/Polygon.d.ts +8 -4
- package/geom/Polygon.d.ts.map +1 -1
- package/geom/Polygon.js +8 -0
- package/geom/SimpleGeometry.d.ts +2 -1
- package/geom/SimpleGeometry.d.ts.map +1 -1
- package/geom/SimpleGeometry.js +6 -0
- package/geom/flat/area.d.ts.map +1 -1
- package/geom/flat/area.js +9 -7
- package/geom/flat/center.d.ts.map +1 -1
- package/geom/flat/closest.d.ts.map +1 -1
- package/geom/flat/contains.d.ts.map +1 -1
- package/geom/flat/deflate.d.ts.map +1 -1
- package/geom/flat/flip.d.ts.map +1 -1
- package/geom/flat/geodesic.d.ts.map +1 -1
- package/geom/flat/inflate.d.ts.map +1 -1
- package/geom/flat/interiorpoint.d.ts.map +1 -1
- package/geom/flat/interpolate.d.ts.map +1 -1
- package/geom/flat/intersectsextent.d.ts.map +1 -1
- package/geom/flat/length.d.ts.map +1 -1
- package/geom/flat/linechunk.d.ts.map +1 -1
- package/geom/flat/orient.d.ts.map +1 -1
- package/geom/flat/reverse.d.ts.map +1 -1
- package/geom/flat/segments.d.ts +1 -1
- package/geom/flat/segments.d.ts.map +1 -1
- package/geom/flat/simplify.d.ts.map +1 -1
- package/geom/flat/straightchunk.d.ts.map +1 -1
- package/geom/flat/textpath.d.ts.map +1 -1
- package/geom/flat/topology.d.ts.map +1 -1
- package/geom/flat/transform.d.ts.map +1 -1
- package/interaction/DblClickDragZoom.d.ts.map +1 -1
- package/interaction/DblClickDragZoom.js +1 -0
- package/interaction/DoubleClickZoom.d.ts.map +1 -1
- package/interaction/DoubleClickZoom.js +1 -0
- package/interaction/DragAndDrop.d.ts +4 -3
- package/interaction/DragAndDrop.d.ts.map +1 -1
- package/interaction/DragAndDrop.js +2 -0
- package/interaction/DragBox.d.ts +3 -3
- package/interaction/DragBox.d.ts.map +1 -1
- package/interaction/DragBox.js +6 -2
- package/interaction/DragPan.d.ts +6 -4
- package/interaction/DragPan.d.ts.map +1 -1
- package/interaction/DragPan.js +6 -1
- package/interaction/DragRotate.d.ts +3 -3
- package/interaction/DragRotate.d.ts.map +1 -1
- package/interaction/DragRotate.js +5 -2
- package/interaction/DragRotateAndZoom.d.ts +2 -2
- package/interaction/DragRotateAndZoom.d.ts.map +1 -1
- package/interaction/DragRotateAndZoom.js +4 -1
- package/interaction/DragZoom.d.ts +3 -3
- package/interaction/DragZoom.d.ts.map +1 -1
- package/interaction/DragZoom.js +3 -2
- package/interaction/Draw.d.ts +9 -8
- package/interaction/Draw.d.ts.map +1 -1
- package/interaction/Draw.js +9 -5
- package/interaction/Extent.d.ts +4 -3
- package/interaction/Extent.d.ts.map +1 -1
- package/interaction/Extent.js +6 -1
- package/interaction/Interaction.d.ts +1 -1
- package/interaction/Interaction.d.ts.map +1 -1
- package/interaction/KeyboardPan.d.ts +2 -2
- package/interaction/KeyboardPan.d.ts.map +1 -1
- package/interaction/KeyboardPan.js +2 -1
- package/interaction/KeyboardZoom.d.ts +2 -2
- package/interaction/KeyboardZoom.d.ts.map +1 -1
- package/interaction/KeyboardZoom.js +2 -1
- package/interaction/Link.d.ts +1 -1
- package/interaction/Link.d.ts.map +1 -1
- package/interaction/Link.js +4 -0
- package/interaction/Modify.d.ts +15 -12
- package/interaction/Modify.d.ts.map +1 -1
- package/interaction/Modify.js +11 -3
- package/interaction/MouseWheelZoom.d.ts +3 -3
- package/interaction/MouseWheelZoom.d.ts.map +1 -1
- package/interaction/MouseWheelZoom.js +2 -1
- package/interaction/PinchRotate.d.ts.map +1 -1
- package/interaction/PinchRotate.js +3 -0
- package/interaction/PinchZoom.d.ts.map +1 -1
- package/interaction/PinchZoom.js +3 -0
- package/interaction/Pointer.d.ts.map +1 -1
- package/interaction/Pointer.js +1 -0
- package/interaction/Select.d.ts +14 -15
- package/interaction/Select.d.ts.map +1 -1
- package/interaction/Select.js +8 -6
- package/interaction/Snap.d.ts +3 -2
- package/interaction/Snap.d.ts.map +1 -1
- package/interaction/Snap.js +3 -0
- package/interaction/Translate.d.ts +11 -10
- package/interaction/Translate.d.ts.map +1 -1
- package/interaction/Translate.js +9 -4
- package/interaction/defaults.d.ts.map +1 -1
- package/layer/Base.d.ts +1 -1
- package/layer/Base.d.ts.map +1 -1
- package/layer/Base.js +1 -0
- package/layer/BaseImage.d.ts.map +1 -1
- package/layer/BaseTile.d.ts +22 -5
- package/layer/BaseTile.d.ts.map +1 -1
- package/layer/BaseTile.js +23 -3
- package/layer/BaseVector.d.ts +7 -6
- package/layer/BaseVector.d.ts.map +1 -1
- package/layer/BaseVector.js +9 -4
- package/layer/Graticule.d.ts +5 -3
- package/layer/Graticule.d.ts.map +1 -1
- package/layer/Graticule.js +2 -1
- package/layer/Group.d.ts +2 -2
- package/layer/Group.d.ts.map +1 -1
- package/layer/Group.js +3 -0
- package/layer/Heatmap.d.ts +16 -10
- package/layer/Heatmap.d.ts.map +1 -1
- package/layer/Heatmap.js +25 -12
- package/layer/Image.d.ts.map +1 -1
- package/layer/Image.js +4 -0
- package/layer/Layer.d.ts +4 -4
- package/layer/Layer.d.ts.map +1 -1
- package/layer/Layer.js +7 -8
- package/layer/Tile.d.ts +6 -3
- package/layer/Tile.d.ts.map +1 -1
- package/layer/Tile.js +7 -2
- package/layer/Vector.d.ts +19 -9
- package/layer/Vector.d.ts.map +1 -1
- package/layer/Vector.js +15 -5
- package/layer/VectorImage.d.ts +9 -7
- package/layer/VectorImage.d.ts.map +1 -1
- package/layer/VectorImage.js +9 -4
- package/layer/VectorTile.d.ts +50 -15
- package/layer/VectorTile.d.ts.map +1 -1
- package/layer/VectorTile.js +51 -12
- package/layer/WebGLPoints.d.ts +1 -2
- package/layer/WebGLPoints.d.ts.map +1 -1
- package/layer/WebGLPoints.js +3 -0
- package/layer/WebGLTile.d.ts +9 -12
- package/layer/WebGLTile.d.ts.map +1 -1
- package/layer/WebGLTile.js +20 -21
- package/loadingstrategy.d.ts.map +1 -1
- package/math.d.ts.map +1 -1
- package/net.d.ts.map +1 -1
- package/obj.d.ts.map +1 -1
- package/ol.css +4 -0
- package/package.json +4 -4
- package/pixel.d.ts.map +1 -1
- package/proj/Projection.d.ts +1 -1
- package/proj/Projection.d.ts.map +1 -1
- package/proj/Units.d.ts +1 -1
- package/proj/epsg3857.d.ts.map +1 -1
- package/proj/epsg4326.d.ts.map +1 -1
- package/proj/proj4.d.ts.map +1 -1
- package/proj.d.ts.map +1 -1
- package/render/Box.d.ts.map +1 -1
- package/render/Box.js +1 -0
- package/render/Event.d.ts.map +1 -1
- package/render/EventType.d.ts +2 -2
- package/render/Feature.d.ts +6 -4
- package/render/Feature.d.ts.map +1 -1
- package/render/Feature.js +2 -0
- package/render/canvas/Builder.d.ts.map +1 -1
- package/render/canvas/Builder.js +2 -0
- package/render/canvas/BuilderGroup.d.ts.map +1 -1
- package/render/canvas/Executor.d.ts +6 -27
- package/render/canvas/Executor.d.ts.map +1 -1
- package/render/canvas/Executor.js +7 -13
- package/render/canvas/ExecutorGroup.d.ts +4 -5
- package/render/canvas/ExecutorGroup.d.ts.map +1 -1
- package/render/canvas/ExecutorGroup.js +2 -1
- package/render/canvas/ImageBuilder.d.ts +2 -1
- package/render/canvas/ImageBuilder.d.ts.map +1 -1
- package/render/canvas/ImageBuilder.js +4 -0
- package/render/canvas/Immediate.d.ts +24 -12
- package/render/canvas/Immediate.d.ts.map +1 -1
- package/render/canvas/Immediate.js +14 -0
- package/render/canvas/Instruction.d.ts.map +1 -1
- package/render/canvas/LineStringBuilder.d.ts.map +1 -1
- package/render/canvas/LineStringBuilder.js +4 -0
- package/render/canvas/PolygonBuilder.d.ts.map +1 -1
- package/render/canvas/PolygonBuilder.js +4 -0
- package/render/canvas/TextBuilder.d.ts +4 -2
- package/render/canvas/TextBuilder.d.ts.map +1 -1
- package/render/canvas/TextBuilder.js +4 -0
- package/render/canvas/ZIndexContext.d.ts +2 -1
- package/render/canvas/ZIndexContext.d.ts.map +1 -1
- package/render/canvas/ZIndexContext.js +1 -0
- package/render/canvas/hitdetect.d.ts +1 -1
- package/render/canvas/hitdetect.d.ts.map +1 -1
- package/render/canvas/style.d.ts +3 -3
- package/render/canvas/style.d.ts.map +1 -1
- package/render/canvas/style.js +6 -5
- package/render/canvas.d.ts +1 -1
- package/render/canvas.d.ts.map +1 -1
- package/render/canvas.js +2 -1
- package/render/webgl/MixedGeometryBatch.d.ts +4 -1
- package/render/webgl/MixedGeometryBatch.d.ts.map +1 -1
- package/render/webgl/MixedGeometryBatch.js +4 -0
- package/render/webgl/VectorStyleRenderer.d.ts +56 -30
- package/render/webgl/VectorStyleRenderer.d.ts.map +1 -1
- package/render/webgl/VectorStyleRenderer.js +39 -0
- package/render/webgl/renderinstructions.d.ts +4 -4
- package/render/webgl/utils.d.ts +1 -1
- package/render/webgl/utils.d.ts.map +1 -1
- package/render.d.ts.map +1 -1
- package/renderer/Composite.d.ts +3 -2
- package/renderer/Composite.d.ts.map +1 -1
- package/renderer/Composite.js +10 -4
- package/renderer/Layer.d.ts +22 -29
- package/renderer/Layer.d.ts.map +1 -1
- package/renderer/Layer.js +33 -37
- package/renderer/Map.d.ts +1 -1
- package/renderer/Map.d.ts.map +1 -1
- package/renderer/canvas/ImageLayer.d.ts +6 -4
- package/renderer/canvas/ImageLayer.d.ts.map +1 -1
- package/renderer/canvas/ImageLayer.js +12 -9
- package/renderer/canvas/Layer.d.ts +4 -9
- package/renderer/canvas/Layer.d.ts.map +1 -1
- package/renderer/canvas/Layer.js +1 -6
- package/renderer/canvas/TileLayer.d.ts +106 -42
- package/renderer/canvas/TileLayer.d.ts.map +1 -1
- package/renderer/canvas/TileLayer.js +546 -330
- package/renderer/canvas/VectorImageLayer.d.ts +7 -4
- package/renderer/canvas/VectorImageLayer.d.ts.map +1 -1
- package/renderer/canvas/VectorImageLayer.js +10 -3
- package/renderer/canvas/VectorLayer.d.ts +7 -4
- package/renderer/canvas/VectorLayer.d.ts.map +1 -1
- package/renderer/canvas/VectorLayer.js +8 -0
- package/renderer/canvas/VectorTileLayer.d.ts +18 -16
- package/renderer/canvas/VectorTileLayer.d.ts.map +1 -1
- package/renderer/canvas/VectorTileLayer.js +79 -54
- package/renderer/vector.d.ts.map +1 -1
- package/renderer/webgl/Layer.d.ts +1 -6
- package/renderer/webgl/Layer.d.ts.map +1 -1
- package/renderer/webgl/Layer.js +2 -6
- package/renderer/webgl/PointsLayer.d.ts +23 -8
- package/renderer/webgl/PointsLayer.d.ts.map +1 -1
- package/renderer/webgl/PointsLayer.js +22 -1
- package/renderer/webgl/TileLayer.d.ts +16 -5
- package/renderer/webgl/TileLayer.d.ts.map +1 -1
- package/renderer/webgl/TileLayer.js +18 -0
- package/renderer/webgl/TileLayerBase.d.ts +7 -16
- package/renderer/webgl/TileLayerBase.d.ts.map +1 -1
- package/renderer/webgl/TileLayerBase.js +69 -84
- package/renderer/webgl/VectorLayer.d.ts +32 -8
- package/renderer/webgl/VectorLayer.d.ts.map +1 -1
- package/renderer/webgl/VectorLayer.js +53 -0
- package/renderer/webgl/VectorTileLayer.d.ts +34 -29
- package/renderer/webgl/VectorTileLayer.d.ts.map +1 -1
- package/renderer/webgl/VectorTileLayer.js +27 -0
- package/renderer/webgl/worldUtil.d.ts.map +1 -1
- package/reproj/DataTile.d.ts.map +1 -1
- package/reproj/DataTile.js +121 -119
- package/reproj/Image.d.ts +2 -1
- package/reproj/Image.d.ts.map +1 -1
- package/reproj/Image.js +4 -2
- package/reproj/Tile.d.ts.map +1 -1
- package/reproj/Tile.js +16 -19
- package/reproj/Triangulation.d.ts.map +1 -1
- package/reproj.d.ts +1 -1
- package/reproj.d.ts.map +1 -1
- package/resolution.d.ts.map +1 -1
- package/resolutionconstraint.d.ts.map +1 -1
- package/rotationconstraint.d.ts.map +1 -1
- package/size.d.ts.map +1 -1
- package/source/BingMaps.d.ts +3 -3
- package/source/BingMaps.d.ts.map +1 -1
- package/source/BingMaps.js +1 -2
- package/source/CartoDB.d.ts +2 -2
- package/source/CartoDB.d.ts.map +1 -1
- package/source/CartoDB.js +1 -1
- package/source/Cluster.d.ts +5 -5
- package/source/Cluster.d.ts.map +1 -1
- package/source/Cluster.js +5 -2
- package/source/DataTile.d.ts +51 -22
- package/source/DataTile.d.ts.map +1 -1
- package/source/DataTile.js +67 -9
- package/source/GeoTIFF.d.ts +4 -7
- package/source/GeoTIFF.d.ts.map +1 -1
- package/source/GeoTIFF.js +4 -3
- package/source/Google.d.ts +2 -1
- package/source/Google.d.ts.map +1 -1
- package/source/Google.js +4 -2
- package/source/IIIF.d.ts +1 -1
- package/source/IIIF.js +1 -1
- package/source/Image.d.ts +3 -2
- package/source/Image.d.ts.map +1 -1
- package/source/Image.js +1 -0
- package/source/ImageArcGISRest.d.ts.map +1 -1
- package/source/ImageArcGISRest.js +4 -0
- package/source/ImageCanvas.d.ts +2 -1
- package/source/ImageCanvas.d.ts.map +1 -1
- package/source/ImageCanvas.js +1 -0
- package/source/ImageMapGuide.d.ts.map +1 -1
- package/source/ImageMapGuide.js +4 -0
- package/source/ImageStatic.d.ts.map +1 -1
- package/source/ImageStatic.js +1 -0
- package/source/ImageTile.d.ts +102 -0
- package/source/ImageTile.d.ts.map +1 -0
- package/source/ImageTile.js +206 -0
- package/source/ImageWMS.d.ts.map +1 -1
- package/source/ImageWMS.js +4 -0
- package/source/OGCMapTile.d.ts +2 -2
- package/source/OGCMapTile.js +1 -1
- package/source/OGCVectorTile.d.ts +9 -9
- package/source/OGCVectorTile.d.ts.map +1 -1
- package/source/OGCVectorTile.js +4 -4
- package/source/OSM.d.ts +2 -7
- package/source/OSM.d.ts.map +1 -1
- package/source/OSM.js +1 -3
- package/source/Raster.d.ts +41 -26
- package/source/Raster.d.ts.map +1 -1
- package/source/Raster.js +83 -102
- package/source/Source.d.ts +1 -1
- package/source/Source.d.ts.map +1 -1
- package/source/Source.js +5 -14
- package/source/StadiaMaps.d.ts +2 -2
- package/source/StadiaMaps.d.ts.map +1 -1
- package/source/StadiaMaps.js +2 -18
- package/source/Tile.d.ts +7 -36
- package/source/Tile.d.ts.map +1 -1
- package/source/Tile.js +9 -69
- package/source/TileArcGISRest.d.ts +2 -2
- package/source/TileArcGISRest.d.ts.map +1 -1
- package/source/TileArcGISRest.js +2 -1
- package/source/TileDebug.d.ts.map +1 -1
- package/source/TileDebug.js +0 -1
- package/source/TileEventType.d.ts +1 -1
- package/source/TileImage.d.ts +9 -12
- package/source/TileImage.d.ts.map +1 -1
- package/source/TileImage.js +21 -43
- package/source/TileJSON.d.ts +2 -2
- package/source/TileJSON.d.ts.map +1 -1
- package/source/TileJSON.js +1 -1
- package/source/TileWMS.d.ts +2 -2
- package/source/TileWMS.d.ts.map +1 -1
- package/source/TileWMS.js +3 -4
- package/source/UTFGrid.d.ts +5 -3
- package/source/UTFGrid.d.ts.map +1 -1
- package/source/UTFGrid.js +7 -8
- package/source/UrlTile.d.ts +16 -13
- package/source/UrlTile.d.ts.map +1 -1
- package/source/UrlTile.js +13 -7
- package/source/Vector.d.ts +21 -21
- package/source/Vector.d.ts.map +1 -1
- package/source/Vector.js +16 -13
- package/source/VectorEventType.d.ts +1 -1
- package/source/VectorTile.d.ts +13 -24
- package/source/VectorTile.d.ts.map +1 -1
- package/source/VectorTile.js +19 -87
- package/source/WMTS.d.ts +3 -3
- package/source/WMTS.d.ts.map +1 -1
- package/source/WMTS.js +5 -4
- package/source/XYZ.d.ts +14 -17
- package/source/XYZ.d.ts.map +1 -1
- package/source/XYZ.js +8 -8
- package/source/Zoomify.d.ts +5 -4
- package/source/Zoomify.d.ts.map +1 -1
- package/source/Zoomify.js +5 -2
- package/source/arcgisRest.d.ts +4 -4
- package/source/arcgisRest.d.ts.map +1 -1
- package/source/arcgisRest.js +5 -5
- package/source/mapguide.d.ts +3 -3
- package/source/mapguide.d.ts.map +1 -1
- package/source/mapguide.js +11 -8
- package/source/ogcTileUtil.d.ts +2 -2
- package/source/ogcTileUtil.d.ts.map +1 -1
- package/source/ogcTileUtil.js +7 -7
- package/source/static.d.ts +3 -3
- package/source/static.d.ts.map +1 -1
- package/source/static.js +7 -7
- package/source/wms.d.ts +2 -2
- package/source/wms.d.ts.map +1 -1
- package/source/wms.js +16 -19
- package/source.d.ts +1 -0
- package/source.d.ts.map +1 -1
- package/source.js +1 -0
- package/sphere.d.ts +1 -1
- package/structs/LRUCache.d.ts.map +1 -1
- package/structs/PriorityQueue.d.ts.map +1 -1
- package/structs/RBush.d.ts +10 -32
- package/structs/RBush.d.ts.map +1 -1
- package/structs/RBush.js +9 -12
- package/style/Circle.d.ts +2 -1
- package/style/Circle.d.ts.map +1 -1
- package/style/Circle.js +2 -1
- package/style/Fill.d.ts +3 -3
- package/style/Fill.d.ts.map +1 -1
- package/style/Fill.js +1 -1
- package/style/Icon.d.ts +8 -5
- package/style/Icon.d.ts.map +1 -1
- package/style/Icon.js +21 -0
- package/style/IconImage.d.ts.map +1 -1
- package/style/IconImage.js +3 -2
- package/style/IconImageCache.d.ts.map +1 -1
- package/style/Image.d.ts +3 -3
- package/style/Image.d.ts.map +1 -1
- package/style/RegularShape.d.ts +11 -5
- package/style/RegularShape.d.ts.map +1 -1
- package/style/RegularShape.js +23 -5
- package/style/Stroke.d.ts.map +1 -1
- package/style/Style.d.ts +5 -5
- package/style/Style.d.ts.map +1 -1
- package/style/Style.js +2 -2
- package/style/Text.d.ts +2 -2
- package/style/Text.d.ts.map +1 -1
- package/style/flat.d.ts.map +1 -1
- package/style/webgl.d.ts.map +1 -1
- package/tilecoord.d.ts +7 -0
- package/tilecoord.d.ts.map +1 -1
- package/tilecoord.js +11 -1
- package/tilegrid/TileGrid.d.ts +1 -1
- package/tilegrid/TileGrid.d.ts.map +1 -1
- package/tilegrid/WMTS.d.ts.map +1 -1
- package/tilegrid/WMTS.js +1 -1
- package/tileurlfunction.d.ts +3 -7
- package/tileurlfunction.d.ts.map +1 -1
- package/tileurlfunction.js +14 -47
- package/transform.d.ts +15 -15
- package/transform.d.ts.map +1 -1
- package/uri.d.ts +23 -3
- package/uri.d.ts.map +1 -1
- package/uri.js +75 -0
- package/util.d.ts.map +1 -1
- package/util.js +1 -1
- package/vec/mat4.d.ts.map +1 -1
- package/webgl/BaseTileRepresentation.d.ts +3 -3
- package/webgl/BaseTileRepresentation.d.ts.map +1 -1
- package/webgl/BaseTileRepresentation.js +9 -2
- package/webgl/Buffer.d.ts.map +1 -1
- package/webgl/Helper.d.ts.map +1 -1
- package/webgl/Helper.js +1 -0
- package/webgl/PostProcessingPass.d.ts +48 -12
- package/webgl/PostProcessingPass.d.ts.map +1 -1
- package/webgl/PostProcessingPass.js +42 -6
- package/webgl/RenderTarget.d.ts.map +1 -1
- package/webgl/ShaderBuilder.d.ts +1 -1
- package/webgl/TileGeometry.d.ts.map +1 -1
- package/webgl/TileGeometry.js +4 -1
- package/webgl/TileTexture.d.ts.map +1 -1
- package/webgl/TileTexture.js +14 -8
- package/webgl/styleparser.d.ts.map +1 -1
- package/webgl/styleparser.js +54 -66
- package/webgl.d.ts.map +1 -1
- package/worker/webgl.js +1 -1
- package/xml.d.ts.map +1 -1
- package/xml.js +27 -39
- package/source/SentinelHub.d.ts +0 -507
- package/source/SentinelHub.d.ts.map +0 -1
- package/source/SentinelHub.js +0 -616
- package/structs/LinkedList.d.ts +0 -130
- package/structs/LinkedList.d.ts.map +0 -1
- package/structs/LinkedList.js +0 -259
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* @module ol/renderer/canvas/TileLayer
|
|
3
3
|
*/
|
|
4
4
|
import CanvasLayerRenderer from './Layer.js';
|
|
5
|
+
import DataTile, {asImageLike} from '../../DataTile.js';
|
|
5
6
|
import ImageTile from '../../ImageTile.js';
|
|
7
|
+
import LRUCache from '../../structs/LRUCache.js';
|
|
8
|
+
import ReprojDataTile from '../../reproj/DataTile.js';
|
|
6
9
|
import ReprojTile from '../../reproj/Tile.js';
|
|
7
10
|
import TileRange from '../../TileRange.js';
|
|
8
11
|
import TileState from '../../TileState.js';
|
|
@@ -16,34 +19,125 @@ import {
|
|
|
16
19
|
createEmpty,
|
|
17
20
|
equals,
|
|
18
21
|
getIntersection,
|
|
19
|
-
getRotatedViewport,
|
|
20
22
|
getTopLeft,
|
|
21
23
|
intersects,
|
|
22
24
|
} from '../../extent.js';
|
|
25
|
+
import {createOrUpdate as createTileCoord, getKeyZXY} from '../../tilecoord.js';
|
|
23
26
|
import {fromUserExtent} from '../../proj.js';
|
|
24
27
|
import {getUid} from '../../util.js';
|
|
25
28
|
import {toSize} from '../../size.js';
|
|
26
29
|
|
|
30
|
+
/**
|
|
31
|
+
* @param {string} sourceKey The source key.
|
|
32
|
+
* @param {number} z The tile z level.
|
|
33
|
+
* @param {number} x The tile x level.
|
|
34
|
+
* @param {number} y The tile y level.
|
|
35
|
+
* @return {string} The cache key.
|
|
36
|
+
*/
|
|
37
|
+
function getCacheKey(sourceKey, z, x, y) {
|
|
38
|
+
return `${sourceKey},${getKeyZXY(z, x, y)}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @typedef {Object<number, Set<import("../../Tile.js").default>>} TileLookup
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Add a tile to the lookup.
|
|
47
|
+
* @param {TileLookup} tilesByZ Lookup of tiles by zoom level.
|
|
48
|
+
* @param {import("../../Tile.js").default} tile A tile.
|
|
49
|
+
* @param {number} z The zoom level.
|
|
50
|
+
* @return {boolean} The tile was added to the lookup.
|
|
51
|
+
*/
|
|
52
|
+
function addTileToLookup(tilesByZ, tile, z) {
|
|
53
|
+
if (!(z in tilesByZ)) {
|
|
54
|
+
tilesByZ[z] = new Set([tile]);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
const set = tilesByZ[z];
|
|
58
|
+
const existing = set.has(tile);
|
|
59
|
+
if (!existing) {
|
|
60
|
+
set.add(tile);
|
|
61
|
+
}
|
|
62
|
+
return !existing;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Remove a tile from the lookup.
|
|
67
|
+
* @param {TileLookup} tilesByZ Lookup of tiles by zoom level.
|
|
68
|
+
* @param {import("../../Tile.js").default} tile A tile.
|
|
69
|
+
* @param {number} z The zoom level.
|
|
70
|
+
* @return {boolean} The tile was removed from the lookup.
|
|
71
|
+
*/
|
|
72
|
+
function removeTileFromLookup(tilesByZ, tile, z) {
|
|
73
|
+
const set = tilesByZ[z];
|
|
74
|
+
if (set) {
|
|
75
|
+
return set.delete(tile);
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
82
|
+
* @param {import("../../extent.js").Extent} extent The frame extent.
|
|
83
|
+
* @return {import("../../extent.js").Extent} Frame extent intersected with layer extents.
|
|
84
|
+
*/
|
|
85
|
+
function getRenderExtent(frameState, extent) {
|
|
86
|
+
const layerState = frameState.layerStatesArray[frameState.layerIndex];
|
|
87
|
+
if (layerState.extent) {
|
|
88
|
+
extent = getIntersection(
|
|
89
|
+
extent,
|
|
90
|
+
fromUserExtent(layerState.extent, frameState.viewState.projection),
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
const source = /** @type {import("../../source/Tile.js").default} */ (
|
|
94
|
+
layerState.layer.getRenderSource()
|
|
95
|
+
);
|
|
96
|
+
if (!source.getWrapX()) {
|
|
97
|
+
const gridExtent = source
|
|
98
|
+
.getTileGridForProjection(frameState.viewState.projection)
|
|
99
|
+
.getExtent();
|
|
100
|
+
if (gridExtent) {
|
|
101
|
+
extent = getIntersection(extent, gridExtent);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return extent;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @typedef {Object} Options
|
|
109
|
+
* @property {number} [cacheSize=512] The cache size.
|
|
110
|
+
*/
|
|
111
|
+
|
|
27
112
|
/**
|
|
28
113
|
* @classdesc
|
|
29
114
|
* Canvas renderer for tile layers.
|
|
30
115
|
* @api
|
|
31
|
-
* @template {import("../../layer/Tile.js").default
|
|
116
|
+
* @template {import("../../layer/Tile.js").default|import("../../layer/VectorTile.js").default} [LayerType=import("../../layer/Tile.js").default<import("../../source/Tile.js").default>|import("../../layer/VectorTile.js").default]
|
|
32
117
|
* @extends {CanvasLayerRenderer<LayerType>}
|
|
33
118
|
*/
|
|
34
119
|
class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
35
120
|
/**
|
|
36
121
|
* @param {LayerType} tileLayer Tile layer.
|
|
122
|
+
* @param {Options} [options] Options.
|
|
37
123
|
*/
|
|
38
|
-
constructor(tileLayer) {
|
|
124
|
+
constructor(tileLayer, options) {
|
|
39
125
|
super(tileLayer);
|
|
40
126
|
|
|
127
|
+
options = options || {};
|
|
128
|
+
|
|
41
129
|
/**
|
|
42
130
|
* Rendered extent has changed since the previous `renderFrame()` call
|
|
43
131
|
* @type {boolean}
|
|
44
132
|
*/
|
|
45
133
|
this.extentChanged = true;
|
|
46
134
|
|
|
135
|
+
/**
|
|
136
|
+
* The last call to `renderFrame` was completed with all tiles loaded
|
|
137
|
+
* @type {boolean}
|
|
138
|
+
*/
|
|
139
|
+
this.renderComplete = false;
|
|
140
|
+
|
|
47
141
|
/**
|
|
48
142
|
* @private
|
|
49
143
|
* @type {?import("../../extent.js").Extent}
|
|
@@ -76,60 +170,101 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
76
170
|
|
|
77
171
|
/**
|
|
78
172
|
* @private
|
|
79
|
-
* @type {
|
|
173
|
+
* @type {string}
|
|
80
174
|
*/
|
|
81
|
-
this.
|
|
175
|
+
this.renderedSourceKey_;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @private
|
|
179
|
+
* @type {number}
|
|
180
|
+
*/
|
|
181
|
+
this.renderedSourceRevision_;
|
|
82
182
|
|
|
83
183
|
/**
|
|
84
184
|
* @protected
|
|
85
185
|
* @type {import("../../extent.js").Extent}
|
|
86
186
|
*/
|
|
87
|
-
this.
|
|
187
|
+
this.tempExtent = createEmpty();
|
|
88
188
|
|
|
89
189
|
/**
|
|
90
190
|
* @private
|
|
91
191
|
* @type {import("../../TileRange.js").default}
|
|
92
192
|
*/
|
|
93
|
-
this.
|
|
193
|
+
this.tempTileRange_ = new TileRange(0, 0, 0, 0);
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @type {import("../../tilecoord.js").TileCoord}
|
|
197
|
+
* @private
|
|
198
|
+
*/
|
|
199
|
+
this.tempTileCoord_ = createTileCoord(0, 0, 0);
|
|
200
|
+
|
|
201
|
+
const cacheSize = options.cacheSize !== undefined ? options.cacheSize : 512;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @type {import("../../structs/LRUCache.js").default<import("../../Tile.js").default>}
|
|
205
|
+
* @private
|
|
206
|
+
*/
|
|
207
|
+
this.tileCache_ = new LRUCache(cacheSize);
|
|
208
|
+
|
|
209
|
+
this.maxStaleKeys = cacheSize * 0.5;
|
|
94
210
|
}
|
|
95
211
|
|
|
96
212
|
/**
|
|
97
|
-
* @
|
|
98
|
-
* @param {import("../../Tile.js").default} tile Tile.
|
|
99
|
-
* @return {boolean} Tile is drawable.
|
|
213
|
+
* @return {LRUCache} Tile cache.
|
|
100
214
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const tileState = tile.getState();
|
|
104
|
-
const useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
|
|
105
|
-
return (
|
|
106
|
-
tileState == TileState.LOADED ||
|
|
107
|
-
tileState == TileState.EMPTY ||
|
|
108
|
-
(tileState == TileState.ERROR && !useInterimTilesOnError)
|
|
109
|
-
);
|
|
215
|
+
getTileCache() {
|
|
216
|
+
return this.tileCache_;
|
|
110
217
|
}
|
|
111
218
|
|
|
112
219
|
/**
|
|
220
|
+
* Get a tile from the cache or create one if needed.
|
|
221
|
+
*
|
|
113
222
|
* @param {number} z Tile coordinate z.
|
|
114
223
|
* @param {number} x Tile coordinate x.
|
|
115
224
|
* @param {number} y Tile coordinate y.
|
|
116
225
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
117
|
-
* @return {
|
|
226
|
+
* @return {import("../../Tile.js").default|null} Tile (or null if outside source extent).
|
|
227
|
+
* @protected
|
|
118
228
|
*/
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
const projection = frameState.viewState.projection;
|
|
229
|
+
getOrCreateTile(z, x, y, frameState) {
|
|
230
|
+
const tileCache = this.tileCache_;
|
|
122
231
|
const tileLayer = this.getLayer();
|
|
123
232
|
const tileSource = tileLayer.getSource();
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
233
|
+
const cacheKey = getCacheKey(tileSource.getKey(), z, x, y);
|
|
234
|
+
|
|
235
|
+
/** @type {import("../../Tile.js").default} */
|
|
236
|
+
let tile;
|
|
237
|
+
|
|
238
|
+
if (tileCache.containsKey(cacheKey)) {
|
|
239
|
+
tile = tileCache.get(cacheKey);
|
|
240
|
+
} else {
|
|
241
|
+
tile = tileSource.getTile(
|
|
242
|
+
z,
|
|
243
|
+
x,
|
|
244
|
+
y,
|
|
245
|
+
frameState.pixelRatio,
|
|
246
|
+
frameState.viewState.projection,
|
|
247
|
+
);
|
|
248
|
+
if (!tile) {
|
|
249
|
+
return null;
|
|
129
250
|
}
|
|
251
|
+
tileCache.set(cacheKey, tile);
|
|
130
252
|
}
|
|
131
|
-
|
|
132
|
-
|
|
253
|
+
return tile;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* @param {number} z Tile coordinate z.
|
|
258
|
+
* @param {number} x Tile coordinate x.
|
|
259
|
+
* @param {number} y Tile coordinate y.
|
|
260
|
+
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
261
|
+
* @return {import("../../Tile.js").default|null} Tile (or null if outside source extent).
|
|
262
|
+
* @protected
|
|
263
|
+
*/
|
|
264
|
+
getTile(z, x, y, frameState) {
|
|
265
|
+
const tile = this.getOrCreateTile(z, x, y, frameState);
|
|
266
|
+
if (!tile) {
|
|
267
|
+
return null;
|
|
133
268
|
}
|
|
134
269
|
return tile;
|
|
135
270
|
}
|
|
@@ -137,6 +272,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
137
272
|
/**
|
|
138
273
|
* @param {import("../../pixel.js").Pixel} pixel Pixel.
|
|
139
274
|
* @return {Uint8ClampedArray} Data at the pixel location.
|
|
275
|
+
* @override
|
|
140
276
|
*/
|
|
141
277
|
getData(pixel) {
|
|
142
278
|
const frameState = this.frameState;
|
|
@@ -157,8 +293,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
157
293
|
}
|
|
158
294
|
}
|
|
159
295
|
|
|
160
|
-
const pixelRatio = frameState.pixelRatio;
|
|
161
|
-
const projection = frameState.viewState.projection;
|
|
162
296
|
const viewState = frameState.viewState;
|
|
163
297
|
const source = layer.getRenderSource();
|
|
164
298
|
const tileGrid = source.getTileGridForProjection(viewState.projection);
|
|
@@ -170,21 +304,8 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
170
304
|
--z
|
|
171
305
|
) {
|
|
172
306
|
const tileCoord = tileGrid.getTileCoordForCoordAndZ(coordinate, z);
|
|
173
|
-
const tile =
|
|
174
|
-
|
|
175
|
-
tileCoord[1],
|
|
176
|
-
tileCoord[2],
|
|
177
|
-
pixelRatio,
|
|
178
|
-
projection,
|
|
179
|
-
);
|
|
180
|
-
if (
|
|
181
|
-
!(tile instanceof ImageTile || tile instanceof ReprojTile) ||
|
|
182
|
-
(tile instanceof ReprojTile && tile.getState() === TileState.EMPTY)
|
|
183
|
-
) {
|
|
184
|
-
return null;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
if (tile.getState() !== TileState.LOADED) {
|
|
307
|
+
const tile = this.getTile(z, tileCoord[1], tileCoord[2], frameState);
|
|
308
|
+
if (!tile || tile.getState() !== TileState.LOADED) {
|
|
188
309
|
continue;
|
|
189
310
|
}
|
|
190
311
|
|
|
@@ -192,6 +313,21 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
192
313
|
const tileSize = toSize(tileGrid.getTileSize(z));
|
|
193
314
|
const tileResolution = tileGrid.getResolution(z);
|
|
194
315
|
|
|
316
|
+
/**
|
|
317
|
+
* @type {import('../../DataTile.js').ImageLike}
|
|
318
|
+
*/
|
|
319
|
+
let image;
|
|
320
|
+
if (tile instanceof ImageTile) {
|
|
321
|
+
image = tile.getImage();
|
|
322
|
+
} else if (tile instanceof DataTile) {
|
|
323
|
+
image = asImageLike(tile.getData());
|
|
324
|
+
if (!image) {
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
} else {
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
|
|
195
331
|
const col = Math.floor(
|
|
196
332
|
tilePixelRatio *
|
|
197
333
|
((coordinate[0] - tileOrigin[0]) / tileResolution -
|
|
@@ -208,47 +344,210 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
208
344
|
tilePixelRatio * source.getGutterForProjection(viewState.projection),
|
|
209
345
|
);
|
|
210
346
|
|
|
211
|
-
return this.getImageData(
|
|
347
|
+
return this.getImageData(image, col + gutter, row + gutter);
|
|
212
348
|
}
|
|
213
349
|
|
|
214
350
|
return null;
|
|
215
351
|
}
|
|
216
352
|
|
|
217
353
|
/**
|
|
218
|
-
*
|
|
219
|
-
* @param {
|
|
220
|
-
* @
|
|
221
|
-
* @
|
|
354
|
+
* Determine whether render should be called.
|
|
355
|
+
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
356
|
+
* @return {boolean} Layer is ready to be rendered.
|
|
357
|
+
* @override
|
|
222
358
|
*/
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
359
|
+
prepareFrame(frameState) {
|
|
360
|
+
const source = this.getLayer().getSource();
|
|
361
|
+
if (!source) {
|
|
362
|
+
return false;
|
|
226
363
|
}
|
|
227
|
-
|
|
364
|
+
const sourceRevision = this.getLayer().getSource().getRevision();
|
|
365
|
+
if (!this.renderedRevision_) {
|
|
366
|
+
this.renderedRevision_ = sourceRevision;
|
|
367
|
+
} else if (this.renderedRevision_ !== sourceRevision) {
|
|
368
|
+
this.renderedRevision_ = sourceRevision;
|
|
369
|
+
if (this.renderedSourceKey_ === source.getKey()) {
|
|
370
|
+
this.tileCache_.clear();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return true;
|
|
228
374
|
}
|
|
229
375
|
|
|
230
376
|
/**
|
|
231
|
-
* Determine whether render should be called.
|
|
232
377
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
233
|
-
* @
|
|
378
|
+
* @param {import("../../extent.js").Extent} extent The extent to be rendered.
|
|
379
|
+
* @param {number} initialZ The zoom level.
|
|
380
|
+
* @param {TileLookup} tilesByZ Lookup of tiles by zoom level.
|
|
381
|
+
* @param {number} preload Number of additional levels to load.
|
|
234
382
|
*/
|
|
235
|
-
|
|
236
|
-
|
|
383
|
+
enqueueTiles(frameState, extent, initialZ, tilesByZ, preload) {
|
|
384
|
+
const viewState = frameState.viewState;
|
|
385
|
+
const tileLayer = this.getLayer();
|
|
386
|
+
const tileSource = tileLayer.getRenderSource();
|
|
387
|
+
const tileGrid = tileSource.getTileGridForProjection(viewState.projection);
|
|
388
|
+
|
|
389
|
+
const tileSourceKey = getUid(tileSource);
|
|
390
|
+
if (!(tileSourceKey in frameState.wantedTiles)) {
|
|
391
|
+
frameState.wantedTiles[tileSourceKey] = {};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
const wantedTiles = frameState.wantedTiles[tileSourceKey];
|
|
395
|
+
|
|
396
|
+
const map = tileLayer.getMapInternal();
|
|
397
|
+
const minZ = Math.max(
|
|
398
|
+
initialZ - preload,
|
|
399
|
+
tileGrid.getMinZoom(),
|
|
400
|
+
tileGrid.getZForResolution(
|
|
401
|
+
Math.min(
|
|
402
|
+
tileLayer.getMaxResolution(),
|
|
403
|
+
map
|
|
404
|
+
? map
|
|
405
|
+
.getView()
|
|
406
|
+
.getResolutionForZoom(Math.max(tileLayer.getMinZoom(), 0))
|
|
407
|
+
: tileGrid.getResolution(0),
|
|
408
|
+
),
|
|
409
|
+
tileSource.zDirection,
|
|
410
|
+
),
|
|
411
|
+
);
|
|
412
|
+
for (let z = initialZ; z >= minZ; --z) {
|
|
413
|
+
const tileRange = tileGrid.getTileRangeForExtentAndZ(
|
|
414
|
+
extent,
|
|
415
|
+
z,
|
|
416
|
+
this.tempTileRange_,
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
const tileResolution = tileGrid.getResolution(z);
|
|
420
|
+
|
|
421
|
+
for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
|
422
|
+
for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
|
423
|
+
const tile = this.getTile(z, x, y, frameState);
|
|
424
|
+
if (!tile) {
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
const added = addTileToLookup(tilesByZ, tile, z);
|
|
428
|
+
if (!added) {
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
const tileQueueKey = tile.getKey();
|
|
433
|
+
wantedTiles[tileQueueKey] = true;
|
|
434
|
+
|
|
435
|
+
if (tile.getState() === TileState.IDLE) {
|
|
436
|
+
if (!frameState.tileQueue.isKeyQueued(tileQueueKey)) {
|
|
437
|
+
const tileCoord = createTileCoord(z, x, y, this.tempTileCoord_);
|
|
438
|
+
frameState.tileQueue.enqueue([
|
|
439
|
+
tile,
|
|
440
|
+
tileSourceKey,
|
|
441
|
+
tileGrid.getTileCoordCenter(tileCoord),
|
|
442
|
+
tileResolution,
|
|
443
|
+
]);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Look for tiles covering the provided tile coordinate at an alternate
|
|
453
|
+
* zoom level. Loaded tiles will be added to the provided tile texture lookup.
|
|
454
|
+
* @param {import("../../tilecoord.js").TileCoord} tileCoord The target tile coordinate.
|
|
455
|
+
* @param {TileLookup} tilesByZ Lookup of tiles by zoom level.
|
|
456
|
+
* @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.
|
|
457
|
+
* @private
|
|
458
|
+
*/
|
|
459
|
+
findStaleTile_(tileCoord, tilesByZ) {
|
|
460
|
+
const tileCache = this.tileCache_;
|
|
461
|
+
const z = tileCoord[0];
|
|
462
|
+
const x = tileCoord[1];
|
|
463
|
+
const y = tileCoord[2];
|
|
464
|
+
const staleKeys = this.getStaleKeys();
|
|
465
|
+
for (let i = 0; i < staleKeys.length; ++i) {
|
|
466
|
+
const cacheKey = getCacheKey(staleKeys[i], z, x, y);
|
|
467
|
+
if (tileCache.containsKey(cacheKey)) {
|
|
468
|
+
const tile = tileCache.get(cacheKey);
|
|
469
|
+
if (tile.getState() === TileState.LOADED) {
|
|
470
|
+
tile.endTransition(getUid(this));
|
|
471
|
+
addTileToLookup(tilesByZ, tile, z);
|
|
472
|
+
return true;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Look for tiles covering the provided tile coordinate at an alternate
|
|
481
|
+
* zoom level. Loaded tiles will be added to the provided tile texture lookup.
|
|
482
|
+
* @param {import("../../tilegrid/TileGrid.js").default} tileGrid The tile grid.
|
|
483
|
+
* @param {import("../../tilecoord.js").TileCoord} tileCoord The target tile coordinate.
|
|
484
|
+
* @param {number} altZ The alternate zoom level.
|
|
485
|
+
* @param {TileLookup} tilesByZ Lookup of tiles by zoom level.
|
|
486
|
+
* @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.
|
|
487
|
+
* @private
|
|
488
|
+
*/
|
|
489
|
+
findAltTiles_(tileGrid, tileCoord, altZ, tilesByZ) {
|
|
490
|
+
const tileRange = tileGrid.getTileRangeForTileCoordAndZ(
|
|
491
|
+
tileCoord,
|
|
492
|
+
altZ,
|
|
493
|
+
this.tempTileRange_,
|
|
494
|
+
);
|
|
495
|
+
|
|
496
|
+
if (!tileRange) {
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
let covered = true;
|
|
501
|
+
const tileCache = this.tileCache_;
|
|
502
|
+
const source = this.getLayer().getRenderSource();
|
|
503
|
+
const sourceKey = source.getKey();
|
|
504
|
+
for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
|
505
|
+
for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
|
506
|
+
const cacheKey = getCacheKey(sourceKey, altZ, x, y);
|
|
507
|
+
let loaded = false;
|
|
508
|
+
if (tileCache.containsKey(cacheKey)) {
|
|
509
|
+
const tile = tileCache.get(cacheKey);
|
|
510
|
+
if (tile.getState() === TileState.LOADED) {
|
|
511
|
+
addTileToLookup(tilesByZ, tile, altZ);
|
|
512
|
+
loaded = true;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
if (!loaded) {
|
|
516
|
+
covered = false;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return covered;
|
|
237
521
|
}
|
|
238
522
|
|
|
239
523
|
/**
|
|
240
524
|
* Render the layer.
|
|
525
|
+
*
|
|
526
|
+
* The frame rendering logic has three parts:
|
|
527
|
+
*
|
|
528
|
+
* 1. Enqueue tiles
|
|
529
|
+
* 2. Find alt tiles for those that are not yet loaded
|
|
530
|
+
* 3. Render loaded tiles
|
|
531
|
+
*
|
|
241
532
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
242
533
|
* @param {HTMLElement} target Target that may be used to render content to.
|
|
243
534
|
* @return {HTMLElement} The rendered element.
|
|
535
|
+
* @override
|
|
244
536
|
*/
|
|
245
537
|
renderFrame(frameState, target) {
|
|
538
|
+
this.renderComplete = true;
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* TODO:
|
|
542
|
+
* * maybe skip transition when not fully opaque
|
|
543
|
+
* * decide if this.renderComplete is useful
|
|
544
|
+
*/
|
|
545
|
+
|
|
246
546
|
const layerState = frameState.layerStatesArray[frameState.layerIndex];
|
|
247
547
|
const viewState = frameState.viewState;
|
|
248
548
|
const projection = viewState.projection;
|
|
249
549
|
const viewResolution = viewState.resolution;
|
|
250
550
|
const viewCenter = viewState.center;
|
|
251
|
-
const rotation = viewState.rotation;
|
|
252
551
|
const pixelRatio = frameState.pixelRatio;
|
|
253
552
|
|
|
254
553
|
const tileLayer = this.getLayer();
|
|
@@ -258,8 +557,15 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
258
557
|
const z = tileGrid.getZForResolution(viewResolution, tileSource.zDirection);
|
|
259
558
|
const tileResolution = tileGrid.getResolution(z);
|
|
260
559
|
|
|
261
|
-
|
|
262
|
-
|
|
560
|
+
const sourceKey = tileSource.getKey();
|
|
561
|
+
if (!this.renderedSourceKey_) {
|
|
562
|
+
this.renderedSourceKey_ = sourceKey;
|
|
563
|
+
} else if (this.renderedSourceKey_ !== sourceKey) {
|
|
564
|
+
this.prependStaleKey(this.renderedSourceKey_);
|
|
565
|
+
this.renderedSourceKey_ = sourceKey;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
let frameExtent = frameState.extent;
|
|
263
569
|
const tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);
|
|
264
570
|
|
|
265
571
|
this.prepareContainer(frameState, target);
|
|
@@ -271,8 +577,8 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
271
577
|
const layerExtent =
|
|
272
578
|
layerState.extent && fromUserExtent(layerState.extent, projection);
|
|
273
579
|
if (layerExtent) {
|
|
274
|
-
|
|
275
|
-
|
|
580
|
+
frameExtent = getIntersection(
|
|
581
|
+
frameExtent,
|
|
276
582
|
fromUserExtent(layerState.extent, projection),
|
|
277
583
|
);
|
|
278
584
|
}
|
|
@@ -286,84 +592,107 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
286
592
|
viewCenter[1] + dy,
|
|
287
593
|
];
|
|
288
594
|
|
|
289
|
-
|
|
595
|
+
/**
|
|
596
|
+
* @type {TileLookup}
|
|
597
|
+
*/
|
|
598
|
+
const tilesByZ = {};
|
|
290
599
|
|
|
291
600
|
/**
|
|
292
|
-
*
|
|
601
|
+
* Part 1: Enqueue tiles
|
|
293
602
|
*/
|
|
294
|
-
const tilesToDrawByZ = {};
|
|
295
|
-
tilesToDrawByZ[z] = {};
|
|
296
603
|
|
|
297
|
-
const
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
604
|
+
const preload = tileLayer.getPreload();
|
|
605
|
+
if (frameState.nextExtent) {
|
|
606
|
+
const targetZ = tileGrid.getZForResolution(
|
|
607
|
+
viewState.nextResolution,
|
|
608
|
+
tileSource.zDirection,
|
|
609
|
+
);
|
|
610
|
+
const nextExtent = getRenderExtent(frameState, frameState.nextExtent);
|
|
611
|
+
this.enqueueTiles(frameState, nextExtent, targetZ, tilesByZ, preload);
|
|
612
|
+
}
|
|
302
613
|
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
614
|
+
const renderExtent = getRenderExtent(frameState, frameExtent);
|
|
615
|
+
this.enqueueTiles(frameState, renderExtent, z, tilesByZ, 0);
|
|
616
|
+
if (preload > 0) {
|
|
617
|
+
setTimeout(() => {
|
|
618
|
+
this.enqueueTiles(
|
|
619
|
+
frameState,
|
|
620
|
+
renderExtent,
|
|
621
|
+
z - 1,
|
|
622
|
+
tilesByZ,
|
|
623
|
+
preload - 1,
|
|
624
|
+
);
|
|
625
|
+
}, 0);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* Part 2: Find alt tiles for those that are not yet loaded
|
|
630
|
+
*/
|
|
631
|
+
|
|
632
|
+
const uid = getUid(this);
|
|
633
|
+
const time = frameState.time;
|
|
634
|
+
|
|
635
|
+
// look for cached tiles to use if a target tile is not ready
|
|
636
|
+
for (const tile of tilesByZ[z]) {
|
|
637
|
+
const tileState = tile.getState();
|
|
638
|
+
if (
|
|
639
|
+
(tile instanceof ReprojTile || tile instanceof ReprojDataTile) &&
|
|
640
|
+
tileState === TileState.EMPTY
|
|
641
|
+
) {
|
|
642
|
+
continue;
|
|
643
|
+
}
|
|
644
|
+
const tileCoord = tile.tileCoord;
|
|
645
|
+
|
|
646
|
+
if (tileState === TileState.LOADED) {
|
|
647
|
+
const alpha = tile.getAlpha(uid, time);
|
|
648
|
+
if (alpha === 1) {
|
|
649
|
+
// no need to look for alt tiles
|
|
650
|
+
tile.endTransition(uid);
|
|
320
651
|
continue;
|
|
321
652
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
const uid = getUid(this);
|
|
325
|
-
if (tile.getState() == TileState.LOADED) {
|
|
326
|
-
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
|
|
327
|
-
let inTransition = tile.inTransition(uid);
|
|
328
|
-
if (inTransition && layerState.opacity !== 1) {
|
|
329
|
-
// Skipping transition when layer is not fully opaque avoids visual artifacts.
|
|
330
|
-
tile.endTransition(uid);
|
|
331
|
-
inTransition = false;
|
|
332
|
-
}
|
|
333
|
-
if (
|
|
334
|
-
!this.newTiles_ &&
|
|
335
|
-
(inTransition || !this.renderedTiles.includes(tile))
|
|
336
|
-
) {
|
|
337
|
-
this.newTiles_ = true;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
if (tile.getAlpha(uid, frameState.time) === 1) {
|
|
341
|
-
// don't look for alt tiles if alpha is 1
|
|
342
|
-
continue;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
653
|
+
}
|
|
654
|
+
this.renderComplete = false;
|
|
345
655
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
656
|
+
const hasStaleTile = this.findStaleTile_(tileCoord, tilesByZ);
|
|
657
|
+
if (hasStaleTile) {
|
|
658
|
+
// use the stale tile before the new tile's transition has completed
|
|
659
|
+
removeTileFromLookup(tilesByZ, tile, z);
|
|
660
|
+
frameState.animate = true;
|
|
661
|
+
continue;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
// first look for child tiles (at z + 1)
|
|
665
|
+
const coveredByChildren = this.findAltTiles_(
|
|
666
|
+
tileGrid,
|
|
667
|
+
tileCoord,
|
|
668
|
+
z + 1,
|
|
669
|
+
tilesByZ,
|
|
670
|
+
);
|
|
671
|
+
|
|
672
|
+
if (coveredByChildren) {
|
|
673
|
+
continue;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// next look for parent tiles
|
|
677
|
+
const minZoom = tileGrid.getMinZoom();
|
|
678
|
+
for (let parentZ = z - 1; parentZ >= minZoom; --parentZ) {
|
|
679
|
+
const coveredByParent = this.findAltTiles_(
|
|
680
|
+
tileGrid,
|
|
681
|
+
tileCoord,
|
|
682
|
+
parentZ,
|
|
683
|
+
tilesByZ,
|
|
350
684
|
);
|
|
351
685
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
covered = findLoadedTiles(z + 1, childTileRange);
|
|
355
|
-
}
|
|
356
|
-
if (!covered) {
|
|
357
|
-
tileGrid.forEachTileCoordParentTileRange(
|
|
358
|
-
tile.tileCoord,
|
|
359
|
-
findLoadedTiles,
|
|
360
|
-
tmpTileRange,
|
|
361
|
-
tmpExtent,
|
|
362
|
-
);
|
|
686
|
+
if (coveredByParent) {
|
|
687
|
+
break;
|
|
363
688
|
}
|
|
364
689
|
}
|
|
365
690
|
}
|
|
366
691
|
|
|
692
|
+
/**
|
|
693
|
+
* Part 3: Render loaded tiles
|
|
694
|
+
*/
|
|
695
|
+
|
|
367
696
|
const canvasScale =
|
|
368
697
|
((tileResolution / viewResolution) * pixelRatio) / tilePixelRatio;
|
|
369
698
|
|
|
@@ -381,7 +710,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
381
710
|
-height / 2,
|
|
382
711
|
);
|
|
383
712
|
|
|
384
|
-
if (
|
|
713
|
+
if (layerState.extent) {
|
|
385
714
|
this.clipUnrotated(context, frameState, layerExtent);
|
|
386
715
|
}
|
|
387
716
|
|
|
@@ -393,20 +722,12 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
393
722
|
|
|
394
723
|
this.renderedTiles.length = 0;
|
|
395
724
|
/** @type {Array<number>} */
|
|
396
|
-
|
|
725
|
+
const zs = Object.keys(tilesByZ).map(Number);
|
|
397
726
|
zs.sort(ascending);
|
|
398
727
|
|
|
399
|
-
let
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
(!this.containerReused ||
|
|
403
|
-
tileSource.getOpaque(frameState.viewState.projection))
|
|
404
|
-
) {
|
|
405
|
-
zs = zs.reverse();
|
|
406
|
-
} else {
|
|
407
|
-
clips = [];
|
|
408
|
-
clipZs = [];
|
|
409
|
-
}
|
|
728
|
+
let currentClip;
|
|
729
|
+
const clips = [];
|
|
730
|
+
const clipZs = [];
|
|
410
731
|
for (let i = zs.length - 1; i >= 0; --i) {
|
|
411
732
|
const currentZ = zs[i];
|
|
412
733
|
const currentTilePixelSize = tileSource.getTilePixelSize(
|
|
@@ -431,11 +752,10 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
431
752
|
]);
|
|
432
753
|
const tileGutter =
|
|
433
754
|
tilePixelRatio * tileSource.getGutterForProjection(projection);
|
|
434
|
-
const
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
);
|
|
755
|
+
for (const tile of tilesByZ[currentZ]) {
|
|
756
|
+
if (tile.getState() !== TileState.LOADED) {
|
|
757
|
+
continue;
|
|
758
|
+
}
|
|
439
759
|
const tileCoord = tile.tileCoord;
|
|
440
760
|
|
|
441
761
|
// Calculate integer positions and sizes so that tiles align
|
|
@@ -447,67 +767,50 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
447
767
|
const y = Math.round(origin[1] - yIndex * dy);
|
|
448
768
|
const w = nextX - x;
|
|
449
769
|
const h = nextY - y;
|
|
450
|
-
const transition =
|
|
770
|
+
const transition = zs.length === 1;
|
|
451
771
|
|
|
452
|
-
const inTransition =
|
|
453
|
-
transition && tile.getAlpha(getUid(this), frameState.time) !== 1;
|
|
454
772
|
let contextSaved = false;
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
contextSaved = true;
|
|
471
|
-
}
|
|
472
|
-
context.beginPath();
|
|
473
|
-
// counter-clockwise (outer ring) for current tile
|
|
474
|
-
context.moveTo(currentClip[0], currentClip[1]);
|
|
475
|
-
context.lineTo(currentClip[2], currentClip[3]);
|
|
476
|
-
context.lineTo(currentClip[4], currentClip[5]);
|
|
477
|
-
context.lineTo(currentClip[6], currentClip[7]);
|
|
478
|
-
// clockwise (inner ring) for higher z tile
|
|
479
|
-
context.moveTo(clip[6], clip[7]);
|
|
480
|
-
context.lineTo(clip[4], clip[5]);
|
|
481
|
-
context.lineTo(clip[2], clip[3]);
|
|
482
|
-
context.lineTo(clip[0], clip[1]);
|
|
483
|
-
context.clip();
|
|
484
|
-
}
|
|
773
|
+
|
|
774
|
+
// Clip mask for regions in this tile that already filled by a higher z tile
|
|
775
|
+
currentClip = [x, y, x + w, y, x + w, y + h, x, y + h];
|
|
776
|
+
for (let i = 0, ii = clips.length; i < ii; ++i) {
|
|
777
|
+
if (!transition && currentZ < clipZs[i]) {
|
|
778
|
+
const clip = clips[i];
|
|
779
|
+
if (
|
|
780
|
+
intersects(
|
|
781
|
+
[x, y, x + w, y + h],
|
|
782
|
+
[clip[0], clip[3], clip[4], clip[7]],
|
|
783
|
+
)
|
|
784
|
+
) {
|
|
785
|
+
if (!contextSaved) {
|
|
786
|
+
context.save();
|
|
787
|
+
contextSaved = true;
|
|
485
788
|
}
|
|
789
|
+
context.beginPath();
|
|
790
|
+
// counter-clockwise (outer ring) for current tile
|
|
791
|
+
context.moveTo(currentClip[0], currentClip[1]);
|
|
792
|
+
context.lineTo(currentClip[2], currentClip[3]);
|
|
793
|
+
context.lineTo(currentClip[4], currentClip[5]);
|
|
794
|
+
context.lineTo(currentClip[6], currentClip[7]);
|
|
795
|
+
// clockwise (inner ring) for higher z tile
|
|
796
|
+
context.moveTo(clip[6], clip[7]);
|
|
797
|
+
context.lineTo(clip[4], clip[5]);
|
|
798
|
+
context.lineTo(clip[2], clip[3]);
|
|
799
|
+
context.lineTo(clip[0], clip[1]);
|
|
800
|
+
context.clip();
|
|
486
801
|
}
|
|
487
|
-
clips.push(currentClip);
|
|
488
|
-
clipZs.push(currentZ);
|
|
489
|
-
} else {
|
|
490
|
-
context.clearRect(x, y, w, h);
|
|
491
802
|
}
|
|
492
803
|
}
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
h,
|
|
500
|
-
tileGutter,
|
|
501
|
-
transition,
|
|
502
|
-
);
|
|
503
|
-
if (clips && !inTransition) {
|
|
504
|
-
if (contextSaved) {
|
|
505
|
-
context.restore();
|
|
506
|
-
}
|
|
507
|
-
this.renderedTiles.unshift(tile);
|
|
508
|
-
} else {
|
|
509
|
-
this.renderedTiles.push(tile);
|
|
804
|
+
clips.push(currentClip);
|
|
805
|
+
clipZs.push(currentZ);
|
|
806
|
+
|
|
807
|
+
this.drawTile(tile, frameState, x, y, w, h, tileGutter, transition);
|
|
808
|
+
if (contextSaved) {
|
|
809
|
+
context.restore();
|
|
510
810
|
}
|
|
811
|
+
this.renderedTiles.unshift(tile);
|
|
812
|
+
|
|
813
|
+
// TODO: decide if this is necessary
|
|
511
814
|
this.updateUsedTiles(frameState.usedTiles, tileSource, tile);
|
|
512
815
|
}
|
|
513
816
|
}
|
|
@@ -520,18 +823,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
520
823
|
this.renderedPixelRatio = pixelRatio;
|
|
521
824
|
this.renderedProjection = projection;
|
|
522
825
|
|
|
523
|
-
this.manageTilePyramid(
|
|
524
|
-
frameState,
|
|
525
|
-
tileSource,
|
|
526
|
-
tileGrid,
|
|
527
|
-
pixelRatio,
|
|
528
|
-
projection,
|
|
529
|
-
extent,
|
|
530
|
-
z,
|
|
531
|
-
tileLayer.getPreload(),
|
|
532
|
-
);
|
|
533
|
-
this.scheduleExpireCache(frameState, tileSource);
|
|
534
|
-
|
|
535
826
|
this.postRender(this.context, frameState);
|
|
536
827
|
|
|
537
828
|
if (layerState.extent) {
|
|
@@ -539,11 +830,39 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
539
830
|
}
|
|
540
831
|
context.imageSmoothingEnabled = true;
|
|
541
832
|
|
|
833
|
+
// TODO: let the renderers manage their own cache instead of managing the source cache
|
|
834
|
+
/**
|
|
835
|
+
* Here we unconditionally expire the source cache since the renderer maintains
|
|
836
|
+
* its own cache.
|
|
837
|
+
* @param {import("../../Map.js").default} map Map.
|
|
838
|
+
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
839
|
+
*/
|
|
840
|
+
const postRenderFunction = (map, frameState) => {
|
|
841
|
+
const tileSourceKey = getUid(tileSource);
|
|
842
|
+
const wantedTiles = frameState.wantedTiles[tileSourceKey];
|
|
843
|
+
const tilesCount = wantedTiles ? Object.keys(wantedTiles).length : 0;
|
|
844
|
+
this.updateCacheSize(tilesCount);
|
|
845
|
+
this.tileCache_.expireCache();
|
|
846
|
+
};
|
|
847
|
+
|
|
848
|
+
frameState.postRenderFunctions.push(postRenderFunction);
|
|
849
|
+
|
|
542
850
|
return this.container;
|
|
543
851
|
}
|
|
544
852
|
|
|
545
853
|
/**
|
|
546
|
-
*
|
|
854
|
+
* Increases the cache size if needed
|
|
855
|
+
* @param {number} tileCount Minimum number of tiles needed.
|
|
856
|
+
*/
|
|
857
|
+
updateCacheSize(tileCount) {
|
|
858
|
+
this.tileCache_.highWaterMark = Math.max(
|
|
859
|
+
this.tileCache_.highWaterMark,
|
|
860
|
+
tileCount * 2,
|
|
861
|
+
);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
/**
|
|
865
|
+
* @param {import("../../Tile.js").default} tile Tile.
|
|
547
866
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
548
867
|
* @param {number} x Left of the tile.
|
|
549
868
|
* @param {number} y Top of the tile.
|
|
@@ -551,9 +870,20 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
551
870
|
* @param {number} h Height of the tile.
|
|
552
871
|
* @param {number} gutter Tile gutter.
|
|
553
872
|
* @param {boolean} transition Apply an alpha transition.
|
|
873
|
+
* @protected
|
|
554
874
|
*/
|
|
555
|
-
|
|
556
|
-
|
|
875
|
+
drawTile(tile, frameState, x, y, w, h, gutter, transition) {
|
|
876
|
+
let image;
|
|
877
|
+
if (tile instanceof DataTile) {
|
|
878
|
+
image = asImageLike(tile.getData());
|
|
879
|
+
if (!image) {
|
|
880
|
+
throw new Error('Rendering array data is not yet supported');
|
|
881
|
+
}
|
|
882
|
+
} else {
|
|
883
|
+
image = this.getTileImage(
|
|
884
|
+
/** @type {import("../../ImageTile.js").default} */ (tile),
|
|
885
|
+
);
|
|
886
|
+
}
|
|
557
887
|
if (!image) {
|
|
558
888
|
return;
|
|
559
889
|
}
|
|
@@ -608,36 +938,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
608
938
|
return tile.getImage();
|
|
609
939
|
}
|
|
610
940
|
|
|
611
|
-
/**
|
|
612
|
-
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
613
|
-
* @param {import("../../source/Tile.js").default} tileSource Tile source.
|
|
614
|
-
* @protected
|
|
615
|
-
*/
|
|
616
|
-
scheduleExpireCache(frameState, tileSource) {
|
|
617
|
-
if (tileSource.canExpireCache()) {
|
|
618
|
-
/**
|
|
619
|
-
* @param {import("../../source/Tile.js").default} tileSource Tile source.
|
|
620
|
-
* @param {import("../../Map.js").default} map Map.
|
|
621
|
-
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
622
|
-
*/
|
|
623
|
-
const postRenderFunction = function (tileSource, map, frameState) {
|
|
624
|
-
const tileSourceKey = getUid(tileSource);
|
|
625
|
-
if (tileSourceKey in frameState.usedTiles) {
|
|
626
|
-
tileSource.expireCache(
|
|
627
|
-
frameState.viewState.projection,
|
|
628
|
-
frameState.usedTiles[tileSourceKey],
|
|
629
|
-
);
|
|
630
|
-
}
|
|
631
|
-
}.bind(null, tileSource);
|
|
632
|
-
|
|
633
|
-
frameState.postRenderFunctions.push(
|
|
634
|
-
/** @type {import("../../Map.js").PostRenderFunction} */ (
|
|
635
|
-
postRenderFunction
|
|
636
|
-
),
|
|
637
|
-
);
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
941
|
/**
|
|
642
942
|
* @param {!Object<string, !Object<string, boolean>>} usedTiles Used tiles.
|
|
643
943
|
* @param {import("../../source/Tile.js").default} tileSource Tile source.
|
|
@@ -652,90 +952,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
652
952
|
}
|
|
653
953
|
usedTiles[tileSourceKey][tile.getKey()] = true;
|
|
654
954
|
}
|
|
655
|
-
|
|
656
|
-
/**
|
|
657
|
-
* Manage tile pyramid.
|
|
658
|
-
* This function performs a number of functions related to the tiles at the
|
|
659
|
-
* current zoom and lower zoom levels:
|
|
660
|
-
* - registers idle tiles in frameState.wantedTiles so that they are not
|
|
661
|
-
* discarded by the tile queue
|
|
662
|
-
* - enqueues missing tiles
|
|
663
|
-
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
664
|
-
* @param {import("../../source/Tile.js").default} tileSource Tile source.
|
|
665
|
-
* @param {import("../../tilegrid/TileGrid.js").default} tileGrid Tile grid.
|
|
666
|
-
* @param {number} pixelRatio Pixel ratio.
|
|
667
|
-
* @param {import("../../proj/Projection.js").default} projection Projection.
|
|
668
|
-
* @param {import("../../extent.js").Extent} extent Extent.
|
|
669
|
-
* @param {number} currentZ Current Z.
|
|
670
|
-
* @param {number} preload Load low resolution tiles up to `preload` levels.
|
|
671
|
-
* @param {function(import("../../Tile.js").default):void} [tileCallback] Tile callback.
|
|
672
|
-
* @protected
|
|
673
|
-
*/
|
|
674
|
-
manageTilePyramid(
|
|
675
|
-
frameState,
|
|
676
|
-
tileSource,
|
|
677
|
-
tileGrid,
|
|
678
|
-
pixelRatio,
|
|
679
|
-
projection,
|
|
680
|
-
extent,
|
|
681
|
-
currentZ,
|
|
682
|
-
preload,
|
|
683
|
-
tileCallback,
|
|
684
|
-
) {
|
|
685
|
-
const tileSourceKey = getUid(tileSource);
|
|
686
|
-
if (!(tileSourceKey in frameState.wantedTiles)) {
|
|
687
|
-
frameState.wantedTiles[tileSourceKey] = {};
|
|
688
|
-
}
|
|
689
|
-
const wantedTiles = frameState.wantedTiles[tileSourceKey];
|
|
690
|
-
const tileQueue = frameState.tileQueue;
|
|
691
|
-
const minZoom = tileGrid.getMinZoom();
|
|
692
|
-
const rotation = frameState.viewState.rotation;
|
|
693
|
-
const viewport = rotation
|
|
694
|
-
? getRotatedViewport(
|
|
695
|
-
frameState.viewState.center,
|
|
696
|
-
frameState.viewState.resolution,
|
|
697
|
-
rotation,
|
|
698
|
-
frameState.size,
|
|
699
|
-
)
|
|
700
|
-
: undefined;
|
|
701
|
-
let tileCount = 0;
|
|
702
|
-
let tile, tileRange, tileResolution, x, y, z;
|
|
703
|
-
for (z = minZoom; z <= currentZ; ++z) {
|
|
704
|
-
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z, tileRange);
|
|
705
|
-
tileResolution = tileGrid.getResolution(z);
|
|
706
|
-
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
|
707
|
-
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
|
708
|
-
if (
|
|
709
|
-
rotation &&
|
|
710
|
-
!tileGrid.tileCoordIntersectsViewport([z, x, y], viewport)
|
|
711
|
-
) {
|
|
712
|
-
continue;
|
|
713
|
-
}
|
|
714
|
-
if (currentZ - z <= preload) {
|
|
715
|
-
++tileCount;
|
|
716
|
-
tile = tileSource.getTile(z, x, y, pixelRatio, projection);
|
|
717
|
-
if (tile.getState() == TileState.IDLE) {
|
|
718
|
-
wantedTiles[tile.getKey()] = true;
|
|
719
|
-
if (!tileQueue.isKeyQueued(tile.getKey())) {
|
|
720
|
-
tileQueue.enqueue([
|
|
721
|
-
tile,
|
|
722
|
-
tileSourceKey,
|
|
723
|
-
tileGrid.getTileCoordCenter(tile.tileCoord),
|
|
724
|
-
tileResolution,
|
|
725
|
-
]);
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
if (tileCallback !== undefined) {
|
|
729
|
-
tileCallback(tile);
|
|
730
|
-
}
|
|
731
|
-
} else {
|
|
732
|
-
tileSource.useTile(z, x, y, projection);
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
tileSource.updateCacheSize(tileCount, projection);
|
|
738
|
-
}
|
|
739
955
|
}
|
|
740
956
|
|
|
741
957
|
export default CanvasTileLayerRenderer;
|