Вот что пишет Яндекс про это
// Доступные проекции и соответствующие значения эксцентриситетов.
var projections = [{
name: 'wgs84Mercator',
eccentricity: 0.0818191908426
}, {
name: 'sphericalMercator',
eccentricity: 0
}],
// Для вычисления номера нужного тайла следует задать параметры:
// - уровень масштабирования карты;
// - географические х объекта, попадающего в тайл;
// - проекцию, для которой нужно получить тайл.
params = {
z: 0,
geoCoords: [55.733776, 37.587936],
projection: projections[0]
};
// Функция для перевода географических координат объекта
// в глобальные пиксельные координаты.
function fromGeoToPixels (lat, long, projection, z) {
var x_p, y_p,
pixelCoords,
tilenumber = [],
rho,
pi = Math.PI,
beta,
phi,
theta,
e = projection.eccentricity;
rho = Math.pow(2, z + 8) / 2;
beta = lat * pi / 180;
phi = (1 - e * Math.sin(beta)) / (1 + e * Math.sin(beta));
theta = Math.tan(pi / 4 + beta / 2) * Math.pow(phi, e / 2);
x_p = rho * (1 + long / 180);
y_p = rho * (1 - Math.log(theta) / pi);
return [x_p, y_p];
}
// Функция для расчета номера тайла на основе глобальных пиксельных координат.
function fromPixelsToTileNumber (x, y) {
return [
Math.floor(x / 256),
Math.floor(y / 256)
];
}
// Переведем географические координаты объекта в глобальные пиксельные координаты.
pixelCoords = fromGeoToPixels(
params.geoCoords[0],
params.geoCoords[1],
params.projection,
params.z
);
// Посчитаем номер тайла на основе пиксельных координат.
tileNumber = fromPixelsToTileNumber(pixelCoords[0], pixelCoords[1]);
// Отобразим результат.
document.addEventListener("DOMContentLoaded", function () {
document.getElementById("result").innerHTML = "
Исходные данные:" +
"– уровень масштабирования: " + params.z + "
" +
"– географические координаты: [" + params.geoCoords[0] +", " + params.geoCoords[1]+ "]" + "
" +
"– проекция: '" + params.projection.name + "'" +
"
Результат вычислений:"+
"Номер тайла: [" + tileNumber[0] + ", " + tileNumber[1] + "]";
});