public static IEnumerable <TileInfo> GetTilesInView(ITileSchema schema, Extent extent, string levelId) { var range = TileTransform.WorldToTile(extent, levelId, schema); for (var x = range.FirstCol; x < range.FirstCol + range.ColCount; x++) { for (var y = range.FirstRow; y < range.FirstRow + range.RowCount; y++) { if (x < 0 || x >= schema.GetMatrixWidth(levelId)) { continue; } if (y < 0 || y >= schema.GetMatrixHeight(levelId)) { continue; } var info = new TileInfo { Extent = TileTransform.TileToWorld(new TileRange(x, y), levelId, schema), Index = new TileIndex(x, y, levelId) }; yield return(info); } } }
internal static IEnumerable <TileInfo> GetTileInfos(ITileSchema schema, Extent extent, string levelId) { // todo: move this method elsewhere. var range = TileTransform.WorldToTile(extent, levelId, schema); // todo: use a method to get tilerange for full schema and intersect with requested tilerange. var startX = Math.Max(range.FirstCol, schema.GetMatrixFirstCol(levelId)); var stopX = Math.Min(range.FirstCol + range.ColCount, schema.GetMatrixFirstCol(levelId) + schema.GetMatrixWidth(levelId)); var startY = Math.Max(range.FirstRow, schema.GetMatrixFirstRow(levelId)); var stopY = Math.Min(range.FirstRow + range.RowCount, schema.GetMatrixFirstRow(levelId) + schema.GetMatrixHeight(levelId)); for (var x = startX; x < stopX; x++) { for (var y = startY; y < stopY; y++) { yield return(new TileInfo { Extent = TileTransform.TileToWorld(new TileRange(x, y), levelId, schema), Index = new TileIndex(x, y, levelId) }); } } }
internal static IEnumerable<TileInfo> GetTileInfos(ITileSchema schema, Extent extent, string levelId) { // todo: move this method elsewhere. var range = TileTransform.WorldToTile(extent, levelId, schema); // todo: use a method to get tilerange for full schema and intersect with requested tilerange. var startX = Math.Max(range.FirstCol, schema.GetMatrixFirstCol(levelId)); var stopX = Math.Min(range.FirstCol + range.ColCount, schema.GetMatrixFirstCol(levelId) + schema.GetMatrixWidth(levelId)); var startY = Math.Max(range.FirstRow, schema.GetMatrixFirstRow(levelId)); var stopY = Math.Min(range.FirstRow + range.RowCount, schema.GetMatrixFirstRow(levelId) + schema.GetMatrixHeight(levelId)); for (var x = startX; x < stopX; x++) { for (var y = startY; y < stopY; y++) { yield return new TileInfo { Extent = TileTransform.TileToWorld(new TileRange(x, y), levelId, schema), Index = new TileIndex(x, y, levelId) }; } } }