|
|
const KEY = 'de3b6a53d8cc5e4c9b8b202';
const MAX_Z = 18;
const TILE_SIZE = 256;
/**
* 将超出最大支持级别的tile xyz数据,降级到maxZoom,并返回变换参数
* @param {number} x 目标级别下的x
* @param {number} y 目标级别下的y
* @param {number} z 目标级别
* @param {number} maxZoom 服务端最大支持的级别
* @returns {object} { srcX, srcY, srcZ, scale, dx, dy }
*/
function downgradeTile(x, y, z, maxZoom) {
if (z <= maxZoom) {
// 不需要降级
return {
srcX: x,
srcY: y,
srcZ: z,
scale: 1,
dx: 0,
dy: 0
};
}
const scale = 2 ** (z - maxZoom);
const srcX = Math.floor(x / scale);
const srcY = Math.floor(y / scale);
const srcZ = maxZoom;
// 计算该瓦片在目标级别下的起始位置
const tileSize = 256; // 假设瓦片宽高256px
const offsetX = (x % scale) * tileSize / scale;
const offsetY = (y % scale) * tileSize / scale;
return {
srcX,
srcY,
srcZ,
scale,
dx: -offsetX * scale,
dy: -offsetY * scale
};
}
const luckyServer = Math.floor(Math.random() * 8);
function generateTileUrl(x, y, z, type, key = KEY) {
return `//t${luckyServer}.tianditu.com/DataServer?T=${type}&x=${x}&y=${y}&l=${z}&tk=${key}`;
去掉括号了,也不成功,心好累 |
|