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