Performance: fix stuttering at low zoom
This commit is contained in:
parent
4f4b60afd8
commit
e9a511e5bd
4 changed files with 13 additions and 2 deletions
|
@ -39,7 +39,7 @@ export default class LayoutSource extends FeatureSourceMerger {
|
|||
const osmLayers = layers.filter((layer) => layer.source.geojsonSource === undefined)
|
||||
const fromCache = osmLayers.map(
|
||||
(l) =>
|
||||
new LocalStorageFeatureSource(backend, l.id, 15, mapProperties, {
|
||||
new LocalStorageFeatureSource(backend, l, 15, mapProperties, {
|
||||
isActive: isDisplayed(l.id),
|
||||
maxAge: l.maxAgeOfCache,
|
||||
})
|
||||
|
|
|
@ -66,6 +66,7 @@ export default class DynamicGeoJsonTileSource extends DynamicTileSource {
|
|||
const blackList = new Set<string>()
|
||||
super(
|
||||
source.geojsonZoomLevel,
|
||||
layer.minzoom,
|
||||
(zxy) => {
|
||||
if (whitelist !== undefined) {
|
||||
const isWhiteListed = whitelist.get(zxy[1])?.has(zxy[2])
|
||||
|
|
|
@ -11,6 +11,7 @@ import FeatureSourceMerger from "../Sources/FeatureSourceMerger"
|
|||
export default class DynamicTileSource extends FeatureSourceMerger {
|
||||
constructor(
|
||||
zoomlevel: number,
|
||||
minzoom: number,
|
||||
constructSource: (tileIndex) => FeatureSource,
|
||||
mapProperties: {
|
||||
bounds: Store<BBox>
|
||||
|
@ -26,6 +27,12 @@ export default class DynamicTileSource extends FeatureSourceMerger {
|
|||
mapProperties.bounds
|
||||
.mapD(
|
||||
(bounds) => {
|
||||
if (options?.isActive && !options?.isActive.data) {
|
||||
return undefined
|
||||
}
|
||||
if (mapProperties.zoom.data < minzoom) {
|
||||
return undefined
|
||||
}
|
||||
const tileRange = Tiles.TileRangeBetween(
|
||||
zoomlevel,
|
||||
bounds.getNorth(),
|
||||
|
|
|
@ -4,11 +4,12 @@ import { BBox } from "../../BBox"
|
|||
import TileLocalStorage from "../Actors/TileLocalStorage"
|
||||
import { Feature } from "geojson"
|
||||
import StaticFeatureSource from "../Sources/StaticFeatureSource"
|
||||
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
|
||||
|
||||
export default class LocalStorageFeatureSource extends DynamicTileSource {
|
||||
constructor(
|
||||
backend: string,
|
||||
layername: string,
|
||||
layer: LayerConfig,
|
||||
zoomlevel: number,
|
||||
mapProperties: {
|
||||
bounds: Store<BBox>
|
||||
|
@ -19,6 +20,7 @@ export default class LocalStorageFeatureSource extends DynamicTileSource {
|
|||
maxAge?: number // In seconds
|
||||
}
|
||||
) {
|
||||
const layername = layer.id
|
||||
const storage = TileLocalStorage.construct<Feature[]>(
|
||||
backend,
|
||||
layername,
|
||||
|
@ -26,6 +28,7 @@ export default class LocalStorageFeatureSource extends DynamicTileSource {
|
|||
)
|
||||
super(
|
||||
zoomlevel,
|
||||
layer.minzoom,
|
||||
(tileIndex) =>
|
||||
new StaticFeatureSource(
|
||||
storage.getTileSource(tileIndex).mapD((features) => {
|
||||
|
|
Loading…
Reference in a new issue