-#!/usr/bin/python
+#!/usr/bin/python3
"""
Expire meta tiles from a OSM change file by resetting their modified time.
"""
import argparse
-import os.path as ospath
+import os
import osmium as o
import pyproj
# width/height of the spherical mercator projection
SIZE = 40075016.6855784
-proj_wsg84 = pyproj.Proj(init='epsg:4326')
-proj_merc = pyproj.Proj(init='epsg:3857')
+proj_transformer = pyproj.Transformer.from_crs('epsg:4326', 'epsg:3857', always_xy = True)
class TileCollector(o.SimpleHandler):
return
lat = max(-85, min(85.0, location.lat))
- x, y = pyproj.transform(proj_wsg84, proj_merc, location.lon, lat)
+ x, y = proj_transformer.transform(location.lon, lat)
# renormalise into unit space [0,1]
x = 0.5 + x / SIZE
self.done_nodes.add(n.ref)
try:
self.add_tile_from_node(self.node_cache.get(n.ref))
- except o.NotFoundError:
+ except KeyError:
pass # no coordinate
if path is None:
path = (part + ".meta")
else:
- path = ospath.join(part, path)
+ path = os.path.join(part, path)
- return ospath.join(str(z), path)
+ return os.path.join(str(z), path)
def expire_meta(meta):
"""Expire the meta tile by setting the modified time back.
"""
- if ospath.exists(meta):
- print("Expiring " + meta)
+ exists = os.path.exists(meta)
+ if exists:
os.utime(meta, (EXPIRY_TIME, EXPIRY_TIME))
+ return exists
def expire_meta_tiles(options):
meta = xyz_to_meta(xy[0], xy[1], xy[2], options.meta_size)
for tile_dir in options.tile_dir:
- meta_set.add(ospath.join(tile_dir, meta))
+ meta_set.add(os.path.join(tile_dir, meta))
# add the parent into the set for the next round
new_set.add((int(xy[0]/2), int(xy[1]/2), xy[2] - 1))
# expire all meta tiles
+ expired = 0
for meta in meta_set:
- expire_meta(meta)
+ if expire_meta(meta):
+ expired += 1
+ print("Expired {0} tiles at zoom {1}".format(expired, z))
# continue with parent tiles
tile_set = new_set