Completed
Push — master ( e9db99...08ced9 )
by Steven
01:06
created

calc()   A

Complexity

Conditions 1

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 1
rs 10
1
#!/usr/bin/python
2
3
# Author: Steven D. Lander, RGi
4
# March 18, 2016
5
6
# This script assumes world-referenced tile coordinates
7
8
from collections import namedtuple
9
10
TileRange = namedtuple("TileRange", ["min", "max"])
11
12
def tile_bounds_geodetic(z, x, y):
13
    """Shamelessly taken from gdal2tiles.py"""
14
    tile_size = 256
15
    res_fact = 360.0 / tile_size
16
    res = res_fact / 2**z
17
    def calc(axis, max): return axis * tile_size * res - max
18
    return (calc(x, 180), calc(y, 90),
19
            calc((x + 1), 180), calc((y + 1), 90))
20
21
def iterate_tiles(z, range_x, range_y, **kwargs):
22
    try:
23
        base_url = kwargs["base_url"]
24
    except(AttributeError, KeyError):
25
        base_url = ""
26
    if type(range_x) is not TileRange or \
27
            type(range_y) is not TileRange:
28
        raise KeyError("z/x/y ranges must be TileRange objects")
29
    tmpl = "{}&BBOX={},{},{},{}"
30
    tile_urls = []
31
    for x in range(range_x.min, range_x.max+1):
32
        for y in range(range_y.min, range_y.max+1):
33
            # convert tile into bbox
34
            bbox = tile_bounds_geodetic(z, x, y)
35
            tile_urls.append(tmpl.format(base_url,
36
                bbox[0], bbox[1], bbox[2], bbox[3]))
37
    return tile_urls
38
39
# Print all these URLs out to the console, so they can
40
# be piped to output if desired
41
base_url = "http://localhost/GPEP/Hybrid-Performance-Test/service?"
42
base_url += "VERSION=1.3.0&REQUEST=GetMap&CRS=CRS:84&WIDTH=256&HEIGHT=256"
43
base_url += "&LAYERS=2,6,10,11,12&STYLES=,,,,&EXCEPTIONS=xml&FORMAT=image/jpeg"
44
base_url += "&BGCOLOR=0xFEFFFF&TRANSPARENT=TRUE"
45
tasks = [
46
        (6, TileRange(32, 55), TileRange(16,27)),
47
        (7, TileRange(72, 83), TileRange(40, 43)),
48
        (8, TileRange(160, 175), TileRange(64, 67)),
49
        (9, TileRange(336, 355), TileRange(128, 139)),
50
        (10, TileRange(676, 703), TileRange(256, 271)),
51
        (11, TileRange(1364, 1387), TileRange(524, 539)),
52
        (12, TileRange(2744, 2751), TileRange(1056, 1067)),
53
        (13, TileRange(5496, 5519), TileRange(2120, 2127)),
54
        (14, TileRange(11012, 11027), TileRange(4244, 4255)),
55
        (16, TileRange(44088, 44119), TileRange(17012, 17015)),
56
        ]
57
58
for task in tasks:
59
    level = iterate_tiles(task[0], task[1], task[2], base_url=base_url)
60
    for entry in level:
61
        print(entry)
62