Клуб API Карт

Программа подготовки слоя тайлов для API Яндекс.Карт

andrey.karmatsky
23 декабря 2009, 18:43

Друзья, мы подготовили первую бета-версию приложения, которое позволит вам подготовить к публикации свою карту и отображать её через API Яндекс.Карт, а при необходимости совмещать их c картой Яндекса (накладывать поверх).



Использовать программу можно в двух режимах:

  • С привязкой по координатам -- расставляются точки привязки, устанавливается соответствие пиксельных координат географическим, изображение перепроецируется под привязку.
  • Без привязки - "нарезка" любого изображения на тайлы, для отображения их через API


Программу публикуем в режме "бета": при обнаружении каких-либо ошибок, сообщите о них нам, пожалуйста в комментариях в этой теме.


Как попробовать:


Надеемся, что программа будет для вас полезной, ждём отзывов, предложений, пожеланий на последующие версии программы.


73 комментария
Подписаться на комментарии к посту
Сергей Миронов
25 декабря 2009, 11:34
Хотел нарезать карту размером 24576x14336px - не получилось
хотя 12288х7168 нарезало замечательно
а есть у меня еще максимальный слой 49200x30030 :)
Сергей Миронов
25 декабря 2009, 11:47
для для 64битной windows будет версия?
то, что не получилось: как именно не получилось? были ли какие-нибудь сообщения об ошибках?
Сергей Миронов
25 декабря 2009, 13:04
файл в PGN размером 24576x14336px
загрузился, но при экспорте (без привязок точек), вышло сообшение
"Не удалось перевести изображение в режим RGBA (8 бит на канал)"
и далее "Failed to get data for 'Layer'"

если загружаю файл в TIFF с тем же размером, то выходит что-то типо: "Изображение не удалось загрузить. Формат файла не изображения".

но... у меня есть скрипт на PHP, через который я замечательно режу эти файлы на локальном денвере.
а если в bmp формате попробовать открыть файлик, получилось?
Сергей Миронов
25 декабря 2009, 13:26
PGN размером 24576x14336px весит почти 15 мегов
а BMP, думаю, будет под сотни мегов... если весь гиг
Если ваше изображение не особо секретное, можете ли мне в почту - andrey.karmatsky(собака)ya.ru отправить файлик, попробуем понять почему он не обрабатывается нормально.

Аналогично "Не удалось перевести изображение в режим RGBA (8 бит на канал)". Файл 16000х14000 в jpg. В bmp таже проблема.

Только изображение почему то непоказывается после открытия, да и прямоугольник непропорциональный какой-то вместо картинки - похоже проблемы с открытием файла.

файл поменьше нормально переваривает
спасибо, попробуем вопсроизвести багу и полечить. а можете уточнить, изображение которое Вы открываете в какой цветовой палитре RGB? если это экспорт растра из Corel или AI например, там легко может быть CMYK записан.
"Не удалось перевести изображение в режим RGBA (8 бит на канал)"5 лет прошло, а баг не исправлен :\спасибо Яндекс, ты лучший.

Собственно, тоже столкнулся с указанным ограничением Tiler'а

Да простят меня разработчики Ymaps, но!

 

Могу помочь с решением проблемы. Ввиду того, что решение каждый раз немного индивидуально, пишите мне на korzhevdp@gmail com. Попробуем нарезать Вашу карту.

Карта режется в оффлайне, потому, пишите на почту.

На данный момент самая большая из нарезанных была 56к X 73k пикселей

Копирую запись из одной ветки в другую

norfolk-ymaps,
Был бы рад если бы вы связались со мной , интересует создание интерактивной карты на основе данного изображения https://yadi.sk/i/3Hj7wIymsqRhK . Задачи от карты : Возможность ставить метки на карту с последующим сохранением. 

Спасибо!


А пожелания и баги куда писать?

можете прямо сюда писать -- в комментариях.
Ожидается ли консольная версия для юниксов?
Хотя подумал... Не так уж она и нужна :) Но спасибо за софтинку. Очень вовремя и очень пригодилась :)
хы :) я консольную версию написал за два часа примерно на джаве. Сложного ничего в этом нет.
Я подумал примерно о том же :) Джаву, правда, не перевариваю ;)
ну не на пыхе же такую приблуду писать?) http://narod.ru/disk/16341327000/MapCutter.zip.html
Костя)) спорим я на пыхе напишу эту приблуду минимум в 2 раза быстрее чем ты на Java
спорим, что она не потянет картинки 19000 на 19000 пикселей? :)
Сергей Миронов
28 декабря 2009, 09:49
спорим, что 49000 на 32000 потянет запросто :)
скрипт на php нарезал это за 7 минут!
угу. 1. И сколько потратил на это памяти? 2. прозрачность у слоёв он тоже поправил? :)
скрипт в студию!
Сергей Миронов
28 декабря 2009, 09:55
я далек от ява
можешь описать, как запустить твой скрипт?
там же описано и даже пример есть запуска в архиве :)
Нарезал прогой тайлы залил боще не понял что произошло половина не отобразилась не понял в чем проблема вот тут делал карта образец
так и не пойму что происходит режу карту прогой вот белиберда получается вот пример карта если у кого есть php скрипт поделитесь или обьясните что я не так делаю
это точно мне?)
У меня четкий вопрос, к вам как к спецам есть карта пример МОЯ КАРТА, могу я е наложить на слой Яндекса Схема поверх моего города, МОЙ ГОРОД ЕЙСКи как это реализовать я пользуюсь программой для нарезки тайлов может есть какие особенности в подготовке изображения или еще какие . (для чего это надо вопервых город не детализирован во вторых не хочется просто квадрат на карте)
ну изначально изображение несомненно надо подготовить: 1. нужно понять, в какой проекции находится карта (дело в том, что карта "натягивается" на определённый геойд, если геойд выбран неверно, то точки карты будут несовпадать с реальными координатами), во вторых определить GPS координаты краёв карты, в третьих посчитать размеры результирующей картинки (которая будет резаться на тайлы) с учётом всех разрешений (всех масштабов - их там штук 20). Только после этого производится нарезка на кусочки.
тоесть как я понял это вполне можно реализовать жаль что у меня нет опыта в API подскажите где найти спеца кто это может реализовать или если у вас есть время может мне поможете не безвоздмезно конечно 
обратитесь на фриланс.ру - там много специалистов, дело нехитрое

Вот вам запятые: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.

Пользуйтесь на здоровье.

Как вы и посоветовали ymik обратился на Фриланс но видимо спецы повывелись помогите кто может решить эту задачу мой скайп для связи domnamope или аська 310634106 о цене договоримся
ох и насоветуете щас ;) речь идёт про нашу программу, в которой про проекцию и геоид знать совсем ничего не нужно.
серьёзно? А как вы проекцию в проекцию переводите? У нас при переезде с gooalemaps на йандекс дороги, помнится, по питеру расходились на пол километра :)
с гуглмэпс, конечно же

нет ничего проще, если знать яндекс-API.

В Яндексе геоид другой, чтобы всё было не для средних умов :)

Ох если получится целый расказ напишу как я карту на яндекс крепил
:) после каникул, возможно, скину пару контактов людей, которые могут зафрилансить разработку
Написал Андрей Кармацкий и Саше отправил исходник чет никото не отвечает ответьте мне как мне быть и что делать помогите 
Станислав, я Вам ответил только что почтой. Я напилил и привязал Вашу карту, отправил ссылки на архивы + инструкции. Теперь пробуйте самостоятельно сделать так же.

Спосибо Андрей за помощь Эксперемент продожается а вот еще вопрос ну карту я нарезал тайлыготовы допустим залил а как сам вывод карты должен происходит тоесть у меня по умолчянию должен стоять слой Яндекса а как тогда тайлы подвязать ???????? блин я так запутался


там в архивах же есть файлик map.html - в котором уже есть код который подклдывает под ваши тайлы тайлы Яндекса.
Приветствую, Давайте по-порядку: У Вас есть: - своя карта в виде растрового изображения - наша программа нарезки тайлов - желание сделать карту с привязкой по координатам и наложением на Я.Карты Итак, что нужно сделать: 1. Открываем программу, открываем там растр карты 2. Привязываем карту по координатам Отмечаем галочкой - "Привязка" -- это значит, что карта будет привязана к координатам (чтобы в последствии наложить её на слой тайлов Яндекса). Суть привязки в сопоставлении пиксельных координат (X,Y) к географическим координатам (долгота, широта). Для этого нужно добавить точки привязки (не меньше 4х, но чем больше, тем точнее будет привязка) -- выставляя точки на изображении пиксельные координаты будут заполняться автоматически, а вот геокоординаты надо вбить туда ручками. Для этого Вам нужно открыть в браузере Яндекс.Карты и для тех мест на которые вы поставили точки найти координаты. Это делается так: включаете в панели инструментов Я.Карт инструмент "Информация" (стрелочка с вопросиком) и кликаете в карту -- там ставится такая зелёная галочка: кликнув в неё, будут написаны координаты в формате: "долгота, широта". Их копипастите в поля в программе. Не забудьте сохранить точки привязки в текстовый файлик, чтобы потом не привязывать ещё раз, если оно ещё раз Вам понадобится. Всё, карта привязана, теперь экспортируете её. 3. Экспорт. Ну тут всё довольно просто выбираете нужные параметры в соответсвии с тем что Вам нужно и напиливаете тайлы -- по ходу отладите все нужные вам параметры (полупрозрачность и на какой слой накладывать и т.п.). Советую ещё почитать хелп Если совсем-совсем не получится: поделитесь со мной большой картинкой, помогу привязать картинку, и отдам файлик с точками привязки, а экспортируете самостоятельнго.
Андрей а как с вами держать связь мой скайп domnamope и аська 310634106
Андрей а как с вами держать связь мой скайп domnamope и аська 310634106 Дело в том что я нарезал просто карту подключил тайлы получается какаето белиберда все тайлы перемешаны

вот начелось кино загоняю карту резать а прога пишет Failed to get data for Layar

и все

Вы сначала попробуйте привязать карту самостоятельно, поглядите на хелп -- Вы же пробовали резать тайлы без привязки. а связь, почта - пожалуйста: andrey.karmatsky (a) yandex.ru
Хорошая и очень нужная программа. Спасибо авторам.

Растровые файлы размером более 13000 х 10000 пикс не удалось порезать ни при каких вариациях параметров, которые в этой ветке форума упоминались. С фйалами размером чуть поменьше прога управляется хорошо. Резал непривязанные файлы для простой, т.е. географически непривязанной карты. Создаваемый html код работает хорошо, но окошечко обзорной карты в углу показывает не нарезанную карту, а северные широты с конкретными географическими координатами, к которым, как я понял, самой прогой по умолчанию разрезаемый растр привязан. ВОПРОС: "Как заставить обзорное окошечко показывать нарезанную карту?"

И еще одна проблема. Как разместить несколько непривязанных карт на одной инет-странице? Стандартный трюк с разными YmapID и центрами карт у меня не получился. Я вышел из положения, используя тег , внутрь которого я вставлял URL-ссылку на инет-страницу, генерируемую вашим резаком.
Дайте ссылку на страницу, на которой можно наблюдать обе из перечисленных проблем.
Извиниясь. Не сообразил.  здесь 
Решение первой проблемы:
var miniMap = new YMaps.MiniMap();
miniMap.setType(myMapType);
map.addControl(miniMap);
Решение второй проблемы можно найти здесь:
http://api.yandex.ru/maps/jsapi/doc/dg/tasks/map-basics-examples.xml#how-to-add-multiple-maps
Спасибо, Саша, за решение первой проблемы. Все отлично получилось. Неплохо было бы заложить это решение сразу в код вашего резака-tiler.

А вот решение второй проблемы с размещением нескольких ПОЛЬЗОВАТЕЛЬСКИХ карт, сделанных из своих тайлов, а не яндексных, на одной странице я не смог реализовать по советам на указанной инет-странице. Возможно, я туплю. :(  С вашими, т.е. яндексными тайлами, все ваши советы работают, а вот с чужими тайлами - не прокатывает, по крайней мере у меня.

Вот, например, есть пользовательская, т.е. собранная из своих тайлов, КАРТА 1  и есть другая пользовательская КАРТА 2  .  Как их разместить на одной странице, не используя ? Обе пользовательские карты были сделаны вашим тайлером.

Для каждой карты необходимо задать уникальный идентификатор и контейнер.
Подробнее здесь: http://api.yandex.ru/maps/jsapi/doc/dg/tasks/map-basics-examples.xml#how-to-add-multiple-maps

Применительно к вашей задаче это можно сделать следующим образом:
window.onload = function () {
    // Первая карта
    var map = new YMaps.Map(document.getElementById("YMapsID"));
    map.setCenter(new YMaps.GeoPoint(-179.957706928253, 85.0815221348237), 14, new YMaps.MapType([
        createLayer("http://chgmap.narod.ru/ivant4yamap1/%z/tile-%x-%y.jpg", true, false)
    ], "Схема"));
   
    // Вторая карта
    var map2 = new YMaps.Map(document.getElementById("YMapsID2"));
    map2.setCenter(new YMaps.GeoPoint(-179.066848754883, 85.028255658967), 9, new YMaps.MapType([
        createLayer("http://chgmap.narod.ru/bal4yamap1/%z/tile-%x-%y.jpg", true, false)
    ], "Схема"));
   
}

 // Создает слой
function createLayer (tileUrlTemplate, isTransparent, smoothZooming) {
   var myData = new YMaps.TileDataSource(tileUrlTemplate, isTransparent, smoothZooming);

    myData.getTileUrl = function (tile, zoom) {
        return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom);
    }

    return new YMaps.Layer(myData);
}
Спасибо, Саша. Как говорил кот Матроскин: "Ура! Заработало." 5 карт встали на одной странице как миленькие.
Вот только обзорные карты (miniMap) в углу не удалось "прикрутить" к этому коду. :-(
Добавить ее можно вот так:
// Первая карта
var map = new YMaps.Map(document.getElementById("YMapsID")),
    mapType = new YMaps.MapType([
        createLayer("http://chgmap.narod.ru/ivant4yamap1/%z/tile-%x-%y.jpg", true, false)
    ], "Схема");
   
map.setCenter(new YMaps.GeoPoint(-179.957706928253, 85.0815221348237), 14, mapType);

// Добавление миникарты
var miniMap = new YMaps.MiniMap();
miniMap.setType(mapType);
map.addControl(miniMap);
Программа не скачивается. Набирал капчу раз 20 - бесполезно :(
вероятно, у вас какая-то проблема, т.к. всё должно нормально скачиваться. как вариант, могу порекомендовать поставить bar.yandex.ru (FireFox или IE) -- там нет капчи при скачивании
Зравствуйте, Андрей.

При использовании программы столкнулся со следующей проблемой:
1. В режиме привязки по координатам программа сама определяет минимальный зум для картинки.

Файл png 2000*4000 зум 13.
Привязка(по углам) :
[GCP0]
Pixel=0
Line=0
X=30.1631186816371
Y=60.1133776698174
[GCP1]
Pixel=1999
Line=0
X=30.5062697741664
Y=60.1133776698174
[GCP2]
Pixel=0
Line=3999
X=30.1631186816371
Y=59.7695370819785
[GCP3]
Pixel=1999
Line=3999
X=30.5062697741664
Y=59.7695370819785

Файл 8000*16000 зум 15 (с теме же географическими координатами)
Этот вопрос не отражен в документации.  Как высчитать размер файла для того, чтобы получить зум 17? Хотелось бы иметь возможность задавать нужный зум (например с потерей качества изображения)

2. Программа неправильно отображет высоту и ширину картинки (вместо 2000*4000 1999 на  3999)

Версия программы 1.0.1.806

3. В первом посте нет ссылки на текущую версию программы.
http://api.yandex.ru/maps/jsapi/doc/dg/concepts/ymapstiler.xml

Сергей Миронов
7 февраля 2011, 14:29
Маска имен файлов тайловЗадает правила формирования имен тайловых файлов. Вместо символов %z в имя файла подставляется коэффициент масштабирования, для которого  предназначен тайл, вместо %x и %y – координаты тайла. Например, если  задана маска %z\tile-%x-%y.png, то тайл с координатами (43797;20185) для 16-го масштаба будет сохранен в подпапку 16 под именем tile-43797-20185.png.
хотелось бы маску задавать в виде: %z\tile-{14230+%x}-{12435+%y}.png
...чтоб указывать смещение для тайла
Комментарий удалён

А сколько по времени занимает преобразование? На форме экспорт тайлов после 5минут выдает (флоат див бу зеро) и потом далее  написано (подготовка изображения к преобразованию) и ни слуху не духу 30мин. Размер картинки 10к х 10к пнг.

Возникла проблемка.

предыстория. - Нарезал 10 000 х 10 000 удачно без проблем.

А вот 20480 х 20480 нарезать не удалось, при попытке начать резать сразу же вылетает окошко (Не хватает памяти.) 

8 гигабайт не хватило подумал я. Но это не проблема, запустил на серверной машинке с 25 гигами на борту. Результат тот же. Не хватает памяти. предполагаю что программка не смогла обварить такой размер или картинки или по весу. 341 мб..

очень нужно нарезать тайлы . что делать?

gmapuploader.com?

Не. тоже не обваривает такой размер

всё просто. Либо обратиться к специалисту, либо к корням.

1. Посмотрите в дистрибутиве тайлера на находящиеся там файлики и сторонние программки

2. Воспользуйтесь гуглем или Яндексом (тут начинается магия, волшебные буквы: GDAL)

3. Находим, ставим, изучаем, работаем (тут иногда уходят годы :-|)

3a. Если всё ещё будет непонятно - пишите мне :) korzhevdp@gmail.com

mihalevich.andrey
25 июня 2014, 13:27

Не получается нарезать картинку без черных полос по краям.

Беру изображение кратное 256, самый большой слой нарезает нормально, на остальных справа и снизу черные полосы.

Если вам не нужна геопривязка вашего слоя к слоям яндекса (схема, спутник, гибрид)

можете попробовать этот инструмент

Доброе время суток, чем еще можно порезать картнку для Яндекс Карт?

Варианты как php и java скрипты не подходят, я даже не знаю как их запустить и где. Меня интересует просто программы. 

В данной программе файл 42049х25791px с привязкой и без, не режет, один раз как то получилось и все, теперь постоянно пишет при экспорте "Не удалось перевести изображение в режим RGBA (8 бит на канал)", пробывал разные форматы.