@arms1631

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

Задача заключается в следующем:

Нужно произвести математические расчеты, так что на входе у нас есть координаты прим.: 55.750626, 37.597664

А на выходе мы должны рассчитать координаты X,Y для плитки (tile) в которую входят эти координаты для Яндекс карт.

Т.е условно кликнув на карту, выбрав произвольную точку, берем координаты точки - и по ним ищем X и Y соответствующей плитки в сервисе яндекс.
  • Вопрос задан
  • 631 просмотр
Пригласить эксперта
Ответы на вопрос 1
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] + "]";
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы