Calcular sub bounds a partir de bounds grande (TopLeft, BottomRight)
lat_top_left = 5.9657537
lon_top_left = -75.7617188
lat_btm_right = -34.3797126
lon_btm_right = -33.8378906
qtdd_split_ratio = 5
piece_lat_div = (lat_top_left - lat_btm_right) / qtdd_split_ratio
piece_lon_div = (lon_btm_right - lon_top_left) / qtdd_split_ratio
done = False
k = 0
num_increments = 0
def incrementar():
global k
global num_increments
if k % 2 == 0: # se for par, deve incrementar
num_increments += 1
k += 1
return True
else:
k += 1
return False
bounds_list = []
j = 0
counter = 0
for i in range(qtdd_split_ratio):
lon = lon_top_left + (i * piece_lon_div)
while num_increments < qtdd_split_ratio + 1:
lat = lat_top_left - (j * piece_lat_div)
lon_aux = lon + piece_lon_div * (counter % 2)
bounds_list.append(str(lon_aux) + ', ' + str(lat))
# print(str(lat) + ' ' + str(lon_aux))
if incrementar():
j += 1
counter += 1
bounds_list = bounds_list[:-1]
j = 0
counter = 0
num_increments = 0
k = 0
for item in bounds_list:
print(item)
import math
import http.client as httplib
import sys
import tempfile
from PIL import Image
from urllib.request import urlopen as requests
import urllib
if not len(sys.argv) > 6:
raise SystemExit("Usage: upper_lat upper_lon lower_lat lower_lon zoom output_file")
upper_lat = float(sys.argv[1])
upper_lon = float(sys.argv[2])
lower_lat = float(sys.argv[3])
lower_lon = float(sys.argv[4])
zoom = int(sys.argv[5])
output = sys.argv[6]
tmp_location = './tmp/'
def deg2num(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
return (xtile, ytile)
def writetile(x, y, zoom):
url = 'http://localhost:8787/styles/klokantech-basic/{z}/{x}/{y}.png'
file_name = str(x) + '_' + str(y) + '.png'
url_dl = url.replace("{x}", str(x)).replace("{y}", str(y)).replace("{z}", str(zoom))
m_file = urllib.request.urlretrieve(url_dl, './tmp/' + file_name)
return file_name
top_left = deg2num(upper_lat, upper_lon, zoom)
bottom_right = deg2num(lower_lat, lower_lon, zoom)
height = (bottom_right[1] - top_left[1]) * 256
width = (bottom_right[0] - top_left[0]) * 256
print(width, height)
osm_map = Image.new("RGBA", (width, height))
for x in range(top_left[0], bottom_right[0]):
for y in range(top_left[1], bottom_right[1]):
foo = Image.open(tmp_location + writetile(x, y, zoom))
osm_map.paste(foo, (256 * (x - top_left[0]), 256 * (y - top_left[1])))
writetile(x, y, zoom)
print('Saving map to ./' + output)
osm_map.save('./' + output)