Клуб API Карт

Создание собственных тайлов

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

В нашем клубе уже спрашивали пример использования YMaps.ITile, а также как правильно его использовать.

 

В Справочнике по программному интерфейсу у нас представлено несколько интерфейсов: YMaps.IControl, YMaps.GeoObject, YMaps.ILayer, YMaps.IMouseEvent, YMaps.ITile и др.

Интерфейсы задают набор методов, которые необходимо реализовать в пользовательском классе, чтобы он мог взаимодействовать с API Яндекс.Карт.

Интерфейсы не нужно путать с классами (например, YMaps.Zoom, YMaps.Balloon и т.д.). От них нельзя наследоваться.

 YMaps.ITile - это интерфейс тайла (определение тайла см. в Глоссарии).  Если Вы хотите использовать интерфейс, то необходимо реализовать ВСЕ методы, описанные в интерфейсе.

Для YMaps.ITile необходимо создать свой класс, в котором будут следующие методы: abort(), error(), getPosition(), load(), onAddToMap(), onRemoveFromMap(), scale(), setPosition().

Благодаря своей реализации интерфейса YMaps.ITile можно использовать вместо тайла любое html-содержимое.

Пример реализации своих тайлов можно посмотреть здесь: http://rodlex.narod.ru/examples/itile.html 

14 комментариев
привет а как вставить собственую карту в формате png (разрешение 10000х10000px) если не сложно - прям код странички... пробовал на основе примера http://api.yandex.ru/maps/jsapi/examples/usermap.html - не получилось... P.S.: для тайлов надо папку на хосте делать? какие права нужны для нее? Я думаю, этот вопрос не только меня одолевает)) спасибо заранее.
Если Вы хотите сами резать на тайлы картинку, то Вы сами и решаете как хранить тайлы. В клубе уже обсуждался пример создания своей карты.
спасибо огромное :) а документация где-то есть, как можно резать(разрешение и пр, как порезать в фотошопе - знаю) и под какими именами сохранять?
Как резать и сохранять - ваше личное дело. Вам нужно будет просто сформировать соотвестсвующий TileUrlTemplate. Ориентируйтесь на класс YMaps.TileDataSource.
rodlex,
а можете подсказать, как сформировать TileUrlTemplate? что-то кучу всего перечитал, ничего не нашел... в GMap Uploader карту на тайлы порезал, там все работает... слил файлы к себе на хост, поменял путь - не работает, выдает 404img ... сорри за ламерский вопрос)))
Ламер - это человек, абсолютно некомпетентный в той или иной сфере, но твердо уверенный в обратном и не предпринимающий абсолютно никаких попыток что-нибудь узнать (я придерживаюсь именно этого определения). Вы интересуетесь и более того сами предпринимаете всяческие попытки для того, чтобы разобраться со своей проблемой, поэтому ламером себя не называйте (потому что это не так). Как задать TileUrlTemplate можно почитать в Справочнике по программному интерфейсу. Например, шаблона адреса может выглядеть так: http://mysite.ru/tiles?%c, что заменится соответственно на адрес типа http://mysite.ru/tiles?x=1&y=1&z=1 (суть я думаю, что понятна). Обязательно сообщите получилось ли у вас решить свою задачу. Удачи!
я брал примера... рабочий вариант (использовал GMap Uploader): слил все файлы к себе на хостинг (скорость низкая, хочу, чтобы карта грузилась быстрее, да и формат хочу на gif сменить позднее - гораздо компактнее) файлы имеют имена вида tile-1-2.png заменяю var myData = new YMaps.TileDataSource("http://mt.gmapuploader.com/tiles/g1ZM7IA4BU/", false, false); на var myData = new YMaps.TileDataSource("http://www.magnitka.ws/karta/", false, false); в итоге карту не отображает... 404 :( что не так?
что-то рабочий вариант не показало... пробую еще раз)) var map; function init () { map = new YMaps.Map(document.getElementById("YMapsID")); map.setCenter(new YMaps.GeoPoint(0, 0),0); map.enableScrollZoom(); map.addControl(new YMaps.Zoom()); map.addControl(new YMaps.ToolBar()); map.addControl(new YMaps.ScaleLine()); map.enableMagnifier(); var myData = new YMaps.TileDataSource("http://mt.gmapuploader.com/tiles/g1ZM7IA4BU/", false, false); myData.getTileUrl = function (tile, zoom) { return this.getTileUrlTemplate() + "/tile-" + zoom + "-" + (tile.y * Math.pow(2, zoom) + tile.x) + ".png"; } map.addCopyright('© 2008 Магнитогорский бизнес портал'); map.setType(new YMaps.MapType([new YMaps.MapLayer(myData)], 'Карта Магнитогорска', {minZoom:2, maxZoom:6})); }
чОрт ))) у меня права стояли 600 на файлы))) сейчас буду пробовать)
rodlex,
спасибо :) все ок))) и скорость загрузки заметно повысилась) я предполагал, что ошибка с моей стороны какая-то... просто архивом тайлы на хост залил, а при разархивации он атрибут 600 всем файлам поставил... тааааак... открываю новую тему :)
Отлично! Обязательно покажите свое творение, когда закончите ;)
А как можно сделать чтобы карта не дублировалась??
например на этом примере как сделать чтбы карта не повторялась? http://webmaps.t35.com/
Сейчас такого сделать нельзя. Мы учтем Ваши пожелании.