Растровое волшебство
Что такое карты в интернете? Тайлы-картинки, либо медленная векторная отрисовка. На этом уровне застряли мы, стоит и Яндекс. Гугль, тем временем, позволяет через свой API творить настоящие чудеса:
Но... как?!
Но... как?!
Мнения, высказанные на этом сайте, отражают точку зрения лично автора сайта и ничью больше: ни его бывших или настоящих работодателей, ни семьи и знакомых.
Поди еще тайлы заранее нарендерены, просто перекрашиваются. Возможно есть несколько чернобелых растровых слоев.
Еще и дорого наверно использование этого API.
Фигня какая-то. Но у гугла были и векторные тайлы вроде.
Я вообще профан в графике — это просто моя профанская гипотеза. Но подобный метод мне достаточно интересен. Кто-нибудь знает точно, осуществим ли он?
Насчет включения/выключения подписей — подписи представлены отдельным тайлсетом. Это необходимо для поддержки топонимов языка пользователя.
В принципе, мне кажется, что слой подписей не лежит на сервере, а генерируется по запросу- генерировать его быстро, а тайлы для всех языков держать на сервере — накладно.
http://mt0.googleapis.com/vt?lyrs=m@169183024& ;y=1373&z=12&apistyle=p.s%3A-80%2Cs.t%3A40|p.h%3A%23ff0023|p.s%3A40&s=Galileo&style=api|smartmaps
А в ихнем WebGL разве не готовые тайлы используются?
(«http://narod.ru/disk/37274897001/0.png.html»)
(«http://narod.ru/disk/37275857001/76203.png.html»)
Основная проблема в этом методе — нужно рендить таким стилем, при котором каждому типу объекта соответствовали уникальные индексы.
Ну там явно что-то похитрее чем 256-цветная картинка с палитрой.
Возможно много черно-белых слоев.
А почему бы и не 256-цветов? Может хватить для нормальной карты. Надо только вынести отдельно слои poi и подписей.
Для антиалиазинга не хватит.
Кстати,только что подумал,что если гугль все-таки применяет для этого дела слои — в скором времени они должны внедрить функцию включения/выключения определенных тематических слоев. Эта функция весьма полезна, а если карта уже разбита на множество тематических тайлов — то реализовать это совсем не сложно.
Но и порождать множество послойных тайлов для osm нереально.
Вообще если нацелиться на возможность перекрашивать не все объекты, а только основные (вода, здания, подстилка), то может хватить 256. Хотя тут нужно очень хитро составить стиль.
р.s. поправка к моему предыдущему сообщению: слой poi и подписей ничто не мешать сделать единым.
Зачем это хипстерство в OSM? Толку от возможности поменять только цвета по-моему никакого. Или уж мощная кастомизация, или не нужно это всё.
В Виндовс при загрузке так полосочка бегала.
А есть ли такая возможность?
Там не просто мапник.
А попробовать редактор стилей однозначно стОит.
Если сделать тайлсет без сглаживания, то «перекраска» объектов на таких тайлах через смену палитры не составит труда. Каждой группе соответствуют уникальные цвета. Сглаживание можно проводить на стороне клиента.
Через мапник-питон так создаются подобные тайлы:
import mapnik
mapfile=’./style.xml’#стиль для мапника*
tile=’./tile.png’#куда записываем
m=mapnik.Map(256,256)
mapnik.load_map(m, mapfile)
e=Envelope(x1,y1,x2,y2)#координаты тайла
m.zoom_to_envelope(e)
mapnik.render_to_file(m,’tile.png’,’png256’)
*в xml-стиле нет специального синтаксиса для серых оттенков, в <Map> вроде бы нужно указать buffer-size=«256».
Вроде бы так. Можно собрать тайлсет для небольшого кусочка мира. Ресурс mapbox.com предаставляет бесплатно 5гб на 5 дней для тайлов. Можно поэкспериментировать...
Не знаете, есть готовые серые xml-стили?
Скорее всего используется картинка, в которой задизайнена определенная палитра. А потом с этой палитрой производятся преобразования, один цвет растекается (blur), второй обводится (хотя обводки тоже заранее можно подготовить). Судя по количеству объектов 256 цветов в палитре хватит.
Можно отрисовать тайлы для маленького региона.
Я могу отрисовать тайлы в мапнике, кинуть на сервер и сделать небольшую тестовую программку(web-приложение не могу, слабоват я в вебе). Есдинственная проблема с xml-стилем — делается долго и опыта у меня мало.
Если кто-нибудь может помочь с xml-стилем, пишите — shishkin-michail@yandex.ru
Результаты следующие:
Цвет линий (тег stroke в LineSymbolizer):
Всего 521 варианта:уникальных — 62
Цвет полигонов(тег fill в PolygonSymbolizer):
Всего 11 вариантов:уникальных — 8
Цвет текста(теги fill и halo-fill в TextSymbolizer):
Всего 84 вариантов надписей: уникальных — 18
Предполагается,что изображение не сглаживается, прозрачность отсутствует. Иконки и щиты по понятным причинам не рассматривались. По непонятной причине в схеме не оказалось MarkersSymbolizer.
Отсюда вывод:
Чтобы сделать перекрашеваемую карту, нужно:
1.Вывести подписи, щиты, иконки в отдельный слой
2.Уменьшить количество уникальных линий(521 цвет на линии я думаю легко можно сократить)
3. Сопоставить каждой группе объектов множество уникальных цветов(256 цветов на всю карту должно хватить).
4.На сервере хранить несглаженные тайлы.
P.S. Очень сомневаюсь насчет количества цветов для полигонов — схема какая-то паленая попалась. Но по-крайней мере порядок чисел похож на действительность.
Только я решил собрать тестовую перекрашиваемую карту, как наткнулся на ресурс
http://www.itoworld.com/product/data/ito_map/main
Оказывается это ресурс был запущен в апреле 2010 года.
Хотя это не совсем то о чем здесь говорилось, но это почти то.