Клуб API Карт

Ошибка 404 при добавления слоя с тайлами

Дмитрий Ращупкин
12 ноября 2017, 21:17

Добрый день.

Добавляю собственный слой на карту. все хорошо отрисовывается и за пределами идет куча запросов к несуществующим тайлам.

Читал про метод restrict у слоя но не понял как реализовать. Есть у кого пример реализации метода или как то можно по другому обыграть эти ошибки?

7 комментариев
Как вариант вы можете всегда отдавать один и тот же прозрачный тайл, либо  у собственного слоя определите метод restrict


https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Layer-docpage/#restrict





layer.restrict = function (tileNumber, tileZoom) {
  if (tileNumber[0] > 100 || tileNumber[1] > 100) {
  return null;
}
return tileNumber;
};



Обновлено 13 ноября 2017, 06:21
Дмитрий Ращупкин
13 ноября 2017, 10:45
dimik,
 а если я делаю тайлы через программу "API Яндекс.Карт. Подготовка слоя тайлов" и привязку по точкам.
Не понятна конструкция
if (tileNumber[0] > 100 || tileNumber[1] > 100) {
return null;
}
если номер тайла больше 100 то но возвращаем null.
У меня получается что номера тайлов начинаются tileNumber[0]= 39624, tileNumber[1] = 20765
Дмитрий Ращупкин,
ох, ну вы хотели пример, вот "100" - это пример,
я же не знаю где ваши номера тайлов начинаются и заканчиваются.
Метод restrict – то место где вы можете написать свое исключение под свою область
Метод должен вернуть tileNumber[Number, Number] или null
Дмитрий Ращупкин
13 ноября 2017, 12:07
dimik,
Ох, эти тайлы или моя дурная голова)))
Подскажите пожалуйста, бьюсь 4 день. мне нужно ограничить вот эту область https://yadi.sk/d/vS4_WUPU3PeK8g координаты этого места 55.060764, 37.688064. или мне надо идти в другую сторону  и находить номера тайлов ?

Дмитрий Ращупкин,
в общем случае номер тайла есть в имени файла тайла.
вам надо посмотреть в какой диапазон попадают номера по X и по Y у ваших тайлов и прописать его в условном выражении в restrict
Дмитрий Ращупкин
13 ноября 2017, 13:57
dimik,
 типо такого ? и для каждого слоя отдельное условие(у меня их 5)? Такое условие прошло и нет ошибок 
if(tileZoom == 16)
{
if (tileNumber[0] > 39631 || tileNumber[0] < 39627 || tileNumber[1] > 10384 || tileNumber[1] < 10382)
{
return null;
}
}
Дмитрий Ращупкин
13 ноября 2017, 11:05
dimik,
или может в подготовке слоя тайлов проблема у меня картинка не квадратная а прямоугольная и потом я нарезаю на тайлы.