diff --git a/lib/src/layer/tile_layer/tile_range.dart b/lib/src/layer/tile_layer/tile_range.dart index b7f2b90d8..990e23a3e 100644 --- a/lib/src/layer/tile_layer/tile_range.dart +++ b/lib/src/layer/tile_layer/tile_range.dart @@ -121,10 +121,12 @@ class DiscreteTileRange extends TileRange { /// Check if a [Point] is inside of the bounds of the [DiscreteTileRange]. /// /// We use a modulo in order to prevent side-effects at the end of the world. + /// [TileCoordinates] at another zoom level are never contained. bool contains( Point point, { bool replicatesWorldLongitude = false, }) { + if (point is TileCoordinates && point.z != zoom) return false; if (!replicatesWorldLongitude) { return _bounds.contains(point); } diff --git a/test/layer/tile_layer/tile_image_view_test.dart b/test/layer/tile_layer/tile_image_view_test.dart index 0261ccc38..7e3c245e4 100644 --- a/test/layer/tile_layer/tile_image_view_test.dart +++ b/test/layer/tile_layer/tile_image_view_test.dart @@ -139,6 +139,28 @@ void main() { }); group('renderTiles', () { + test('a tile of another zoom level is not rendered as visible', () { + // Every visible z10 tile is ready: no fallback is needed. The z9 tile + // has x/y inside the z10 visible range but belongs to another level. + final tileImages = tileImagesMappingFrom([ + MockTileImage(2, 2, 10), + MockTileImage(3, 2, 10), + MockTileImage(2, 3, 10), + MockTileImage(3, 3, 10), + MockTileImage(2, 2, 9), + ]); + final tileImageView = TileImageView( + tileImages: tileImages, + positionCoordinates: Set.from(tileImages.keys), + visibleRange: discreteTileRange(2, 2, 3, 3, zoom: 10), + keepRange: discreteTileRange(2, 2, 3, 3, zoom: 10), + ); + expect( + tileImageView.renderTiles, + isNot(contains(const TileCoordinates(2, 2, 9))), + ); + }); + test('%.retainChildren uses correct coordinates for z+2 fallback', () { // This test verifies that _retainChildren correctly calculates // descendant coordinates when recursing to z+2 level. diff --git a/test/layer/tile_layer/tile_range_test.dart b/test/layer/tile_layer/tile_range_test.dart index c14a86556..43e236b29 100644 --- a/test/layer/tile_layer/tile_range_test.dart +++ b/test/layer/tile_layer/tile_range_test.dart @@ -281,6 +281,7 @@ void main() { expect(tileRange.contains(const Point(2, 4)), isFalse); expect(tileRange.contains(const Point(3, 4)), isFalse); expect(tileRange.contains(const Point(4, 4)), isFalse); + expect(tileRange.contains(const TileCoordinates(3, 3, 0)), isFalse); }); }); }