From de7b8e587eb0c5574a7399132e06364335ab0d48 Mon Sep 17 00:00:00 2001 From: evlist Date: Sat, 15 Oct 2022 14:17:24 +0200 Subject: [PATCH] Refactoring to work with any number of layers. --- svgmap/src/components/map/Map.tsx | 1 + .../components/map/TiledLayersConductor.tsx | 65 +++++++++---------- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/svgmap/src/components/map/Map.tsx b/svgmap/src/components/map/Map.tsx index 90ba0b0..692570f 100644 --- a/svgmap/src/components/map/Map.tsx +++ b/svgmap/src/components/map/Map.tsx @@ -85,6 +85,7 @@ const Map: react.FC = (props: MapProperties) => { zoom={zoom} tileSize={256} key='tiled-layers' + numberOfZoomLevels={3} /> , diff --git a/svgmap/src/components/map/TiledLayersConductor.tsx b/svgmap/src/components/map/TiledLayersConductor.tsx index 96fe0df..6fa6100 100644 --- a/svgmap/src/components/map/TiledLayersConductor.tsx +++ b/svgmap/src/components/map/TiledLayersConductor.tsx @@ -12,6 +12,7 @@ interface TiledLayerConductorProperties { shift: Point; zoom: number; tileSize: number; + numberOfZoomLevels?: number; } const TiledLayerConductor: react.FC = ( @@ -20,44 +21,40 @@ const TiledLayerConductor: react.FC = ( const nbTiles = Math.ceil((Math.max(props.width, props.height) * 2) / 256) + 2; - return ( - <> - {' '} + const numberOfZoomLevels = + props.numberOfZoomLevels === undefined + ? 1 + : props.numberOfZoomLevels % 2 === 0 + ? props.numberOfZoomLevels + 1 + : props.numberOfZoomLevels; + + const layers = []; + + for (let i = 0; i < numberOfZoomLevels; i++) { + layers.push( = 2 ** (i - 0.5) + : props.zoom < 2 ** (i + 0.5) && props.zoom >= 2 ** (i - 0.5) + } /> - = Math.SQRT2 && props.zoom < 2 * Math.SQRT2} - /> - = 2 * Math.SQRT2} - /> - - ); + ); + } + + return <>{layers}; }; export default TiledLayerConductor;