(z: int, x: int, y: int)
| 44 | |
| 45 | |
| 46 | def zxy_to_tileid(z: int, x: int, y: int) -> int: |
| 47 | if z > 31: |
| 48 | raise OverflowError("tile zoom exceeds 64-bit limit") |
| 49 | if x > (1 << z) - 1 or y > (1 << z) - 1: |
| 50 | raise ValueError("tile x/y outside zoom level bounds") |
| 51 | |
| 52 | acc = ((1 << (z * 2)) - 1) // 3 |
| 53 | a = z - 1 |
| 54 | while a >= 0: |
| 55 | s = 1 << a |
| 56 | rx = s & x |
| 57 | ry = s & y |
| 58 | acc += ((3 * rx) ^ ry) << a |
| 59 | (x, y) = rotate(s, x, y, rx, ry) |
| 60 | a -= 1 |
| 61 | return acc |
| 62 | |
| 63 | |
| 64 | def tileid_to_zxy(tile_id: int) -> tuple[int, int, int]: |
searching dependent graphs…