Клуб API Карт

Рендеринг тайлов для своей карты

Пост в архиве.
bff7755a
10 февраля 2013, 16:01

Добрый день!

 

Занимаюсь одним проектом - с помощью YMaps API создаются многоугольники и их координаты сохраняются в БД (postgres). Далее по этим данным нужно отрендерить карту. Планирую это делать с помощью Python Image Library. Вопрос в том, как мне узнать, как должны называться отрендеренные тайлы, чтобы после подключения этого слоя к карте сохранился масштаб? Координаты многоугольников сохраняю географические (например: {"((55.9376913782687,37.2939306640625),(55.9392329443745,37.9228979492187),(55.4880320888839,37.9228979492187),(55.4833532479826,37.31041015625),(55.9376913782687,37.2939306640625))"}).

 

Другими словами, нужна формула для преобразования географических координат в координаты тайла (x, y) для заданного масштаба z.

 

Буду благодарен за любую подсказку.

3 комментария

Нашёл что-то похожее  в документации по OpenStreetMap.

По координате X всё сходится, по Y пока не очень (для масштаба 17 расхождение на 15 единиц). Формула там такая:

n = 2 ^ zoom
xtile = n * ((lon_deg + 180) / 360)
ytile = n * (1 - (log(tan(lat_rad) + sec(lat_rad)) / π)) / 2

В правильном ли я направлении двигаюсь?

Тема очень много обсуждалась в клубе, можете поискать по "сборка своей карты" и т.п.

По поводу формулы — тайлы имеют фиксированный размер и линейно соотносятся с глобальными пиксельными координатами на каждом зуме, т.е. вам нужна формула перевода в глобальные координаты, а она есть в АПИ в открытом виде — подключите карту в режиме разработчика и смотрите исходники.

Формат урлов, насколько я помню, можно проставить при создании слоя. Еще можно на web-сервере порулить, если нужно что-то специфическое.

Как самый "крутой" вариант - вы можете перевести данные в формат osm и натравить на них один из osm рендеров.