function getTileMetric(tiles) {
let [x1, y1, zoom] = d3.tileWrap(tiles[0]);
let [x2, y2] = d3.tileWrap(tiles[tiles.length - 1]);
let nTiles = 2 ** zoom;
if (x2 < x1) x2 += nTiles;
return function(tile) {
let dz = zoom - tile.z;
let zoomFac = 2 ** dz;
let tb = Object({
x1: tile.x * zoomFac,
x2: (tile.x + 1) * zoomFac,
y1: tile.y * zoomFac,
y2: (tile.y + 1) * zoomFac
});
let dx = Math.min(
Math.max(x1 - tb.x2, tb.x1 - x2),
Math.max(x1 - (tb.x2 + nTiles), tb.x1 + nTiles - x2)
);
let dy = Math.max(y1 - tb.y2, tb.y1 - y2);
return Object({ dx, dy, dz });
};
}