具体的实现代码如下:
const EARTH_RADIUS = 6378137;
const TILE_SIZE = 256;
const origin = [-20037508.34, 20037508.34];
function calculateTileBounds(x, y, z) {
const d = 2 * EARTH_RADIUS * Math.PI;
const size = TILE_SIZE * (d / (TILE_SIZE * Math.pow(2, z)));
const minX = origin[0] + x * size;
const maxX = origin[0] + (x + 1) * size;
const minY = origin[1] - (y + 1) * size;
const maxY = origin[1] - y * size;
return { minX, minY, maxX, maxY };
}
function mercatorToWGS84(x, y) {
const lon = (x / EARTH_RADIUS) * (180 / Math.PI);
const lat = (Math.atan(Math.exp(y / EARTH_RADIUS)) * 360 / Math.PI) - 90;
return [lon, lat];
}
function generateWMSUrl(x, y, z) {
const { minX, minY, maxX, maxY } = calculateTileBounds(x, y, z);
const xy0 = mercatorToWGS84(minX, minY);
const xy1 = mercatorToWGS84(maxX, maxY);
return `http://url/wms?BBOX=${xy0[0]