osm: update script to request but not store tiles, for more zones
This commit is contained in:
parent
a06107e170
commit
5f2890038e
|
@ -1,6 +1,7 @@
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import requests
|
import requests
|
||||||
|
import sys
|
||||||
|
|
||||||
def deg2num(lat_deg, lon_deg, zoom):
|
def deg2num(lat_deg, lon_deg, zoom):
|
||||||
lat_rad = math.radians(lat_deg)
|
lat_rad = math.radians(lat_deg)
|
||||||
|
@ -10,29 +11,62 @@ def deg2num(lat_deg, lon_deg, zoom):
|
||||||
return (xtile, ytile)
|
return (xtile, ytile)
|
||||||
|
|
||||||
|
|
||||||
COMBO_MAP_MAX_BOUNDS = {
|
cities = [
|
||||||
"corner1": {"lat": 45.9134, "lng": 4.6733},
|
# Grand Lyon
|
||||||
"corner2": {"lat": 45.5583, "lng": 5.1574}
|
{
|
||||||
}
|
"corner1": {"lat": 45.9134, "lng": 4.6733},
|
||||||
|
"corner2": {"lat": 45.5583, "lng": 5.1574}
|
||||||
|
},
|
||||||
|
# Clermont-Ferrand
|
||||||
|
{
|
||||||
|
"corner1": {"lat": 45.8077, "lng": 3.0375},
|
||||||
|
"corner2": {"lat": 45.7187, "lng": 3.2053}
|
||||||
|
},
|
||||||
|
# Grenoble
|
||||||
|
{
|
||||||
|
"corner1": {"lat": 45.2307, "lng": 5.6640},
|
||||||
|
"corner2": {"lat": 45.1179, "lng": 5.7980}
|
||||||
|
},
|
||||||
|
# Quimper
|
||||||
|
{
|
||||||
|
"corner1": {"lat": 48.0657, "lng": -4.2218},
|
||||||
|
"corner2": {"lat": 47.9380, "lng": -3.9647}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
for zoom in range(3, 20):
|
def update_progress(label, progress, num_columns=120):
|
||||||
xtile1, ytile1 = deg2num(COMBO_MAP_MAX_BOUNDS['corner1']['lat'],
|
sys.stdout.write('[%s] [%s] %s%%\r' % (
|
||||||
COMBO_MAP_MAX_BOUNDS['corner1']['lng'],
|
label, ('#'*((num_columns-10)*progress/100)).ljust(num_columns-10), progress))
|
||||||
zoom)
|
|
||||||
xtile2, ytile2 = deg2num(COMBO_MAP_MAX_BOUNDS['corner2']['lat'],
|
for map_max_bounds in cities:
|
||||||
COMBO_MAP_MAX_BOUNDS['corner2']['lng'],
|
print ''
|
||||||
zoom)
|
for zoom in range(14, 20):
|
||||||
for xtile in range(xtile1, xtile2+1):
|
xtile1, ytile1 = deg2num(map_max_bounds['corner1']['lat'],
|
||||||
for ytile in range(ytile1, ytile2+1):
|
map_max_bounds['corner1']['lng'],
|
||||||
path = '%s/%s/%s.png' % (zoom, xtile, ytile)
|
zoom)
|
||||||
if os.path.exists(path):
|
xtile2, ytile2 = deg2num(map_max_bounds['corner2']['lat'],
|
||||||
continue
|
map_max_bounds['corner2']['lng'],
|
||||||
url = 'https://tiles.entrouvert.org/hdm/%s/%s/%s.png' % (zoom, xtile, ytile)
|
zoom)
|
||||||
print url
|
num_tiles = (1 + xtile2 - xtile1) * (1 + ytile2 - ytile1)
|
||||||
if not os.path.exists(os.path.dirname(path)):
|
idx = 0
|
||||||
os.makedirs(os.path.dirname(path))
|
for xtile in range(xtile1, xtile2+1):
|
||||||
r = requests.get(url)
|
for ytile in range(ytile1, ytile2+1):
|
||||||
if r.status_code != 200:
|
update_progress(zoom, int(math.ceil(100.0 * idx / num_tiles)))
|
||||||
continue
|
idx += 1
|
||||||
with open(path, 'w') as fd:
|
path = '%s/%s/%s.png' % (zoom, xtile, ytile)
|
||||||
fd.write(r.content)
|
if os.path.exists(path):
|
||||||
|
continue
|
||||||
|
url = 'https://tiles.entrouvert.org/hdm/%s/%s/%s.png' % (zoom, xtile, ytile)
|
||||||
|
if False:
|
||||||
|
# store
|
||||||
|
if not os.path.exists(os.path.dirname(path)):
|
||||||
|
os.makedirs(os.path.dirname(path))
|
||||||
|
r = requests.get(url)
|
||||||
|
if r.status_code != 200:
|
||||||
|
continue
|
||||||
|
with open(path, 'w') as fd:
|
||||||
|
fd.write(r.content)
|
||||||
|
else:
|
||||||
|
# just make sure tile is in cache
|
||||||
|
requests.head(url)
|
||||||
|
print ''
|
||||||
|
|
Loading…
Reference in New Issue