• Как найти плитку (tiles) на карте Яндекс по координатам XYZ?

    Nelermont
    @Nelermont
    Flutter and iOS developer
    Вот что пишет Яндекс про это
    // Доступные проекции и соответствующие значения эксцентриситетов.
    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] + "]";
    });
    Ответ написан
    Комментировать