Клуб API Карт

Картиночный слой - соотнесение тайлов и географических координат

Пост в архиве.

Здравствуйте
Разрабатываю приложение в котором на карте в определённых областях будет располагаться большое кол-во изображений (поверх слоя карты)

Для этой задачи решил использовать слои - в частности картиночный слой (http://api.yandex.ru/maps/doc/jsapi/2.x/dg/concepts/image-layer.xml)
Проблема моя в следующем - я не понимаю как мне соотнести географические координаты с номером тайла и именно в зависимости от географических координат решать - будет конретный тайл чем-то заполнен или нет.

Вот к примеру у меня есть 2 обьекта по координатам [56,64;54,65] и [52,64;51,65] - данные хранятся в БД на сервере
Я добавил картиночный слой который через php скрипт запрашивает тайлы вида testImagesLayer.php?z=%z&x=%x&y=%y
И как мне определить, надо ли для тайла x,y что то отдавать (и что именно) или нет? К тому же необходимо сделать так, чтобы центр изображения находился в привязанных к нему в БД координатах.

Я читал ещё о возможности самостоятельно создавать слои со своими тайлами и прочее - но мне данный вариант неподходит так как данный о геообьектах будут меняться очень часто.

Как мне решить эту проблему? Или может мне просто использовать геоообьекты  (метки, прямоугольники) с кастомизацией? Но как тогда будет с производительностью при большом кол-ве обьектов на карте?

Спасибо за помощь)

2 комментария
Sergey Konstantinov
28 января 2016, 03:00
Чтобы из географических координат получить номер тайла, нужно
(а) перевести их в глобальные пиксели
(б) поделить глобальные пиксели на 256.
В js это делается так:
var pixelPoint = ymaps.projection.wgs84Mercator.toGlobalPixels(geoPoint, z),
      tileNumber = [Math.floor(pixelPoint[0] / 256), Math.floor(pixelPoint[1] / 256)],
где geoPoint = [широта, долгота] либо [долгота, широта] в зависимости от coordOrder.
Если те же функции нужно реализовать на стороне сервера, то можно подглядеть сюда, например:
https://github.com/twirl/hsTiler/blob/master/include/Point.class.php
Метод fromGeoPoint

Да, мне нужно именно на сервере это делать чтобы не гонять данные лишний раз.
Ну в данном случае 256 - это размер самого тайла я так понимаю - если у меня он не 256 - то нужно делить на тот размер который у меня прописан?
Спасибо за ссылку - буду пробовать и разбираться))