Клуб API Карт

Граф на карте (а-ля подсветка улиц в Яндекс-панорамах)

Пост в архиве.
Роман Савинков
12 августа 2013, 13:11

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

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

Можно ли это реализовать с помощью API Яндекс.Карт не в ущерб производительности? Ведь сам по себе вывод 2000 точек без использования кластеризации или активных областей вызывает жуткие тормоза.

Или может кто-нибудь сможет рассказать, как реализована подсветка улиц в Яндекс-панорамах?

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

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

есть несколько вариантов:

1. как сказала Марина - хотспоты. если данные статичны и не нужна их фильтрация и т.д. на клиенте

2. можно рисовать Ваши линии и метки на клиенте. просто для этого использовать не апишные функции, а собственные, заточенные именно под рисование точек и линий)) + сделать подготовку данных на сервере.

кстати, интересная задача. если есть пример данных - пришлите, я протестирую второй вариант.

Роман Савинков
14 августа 2013, 15:34

Для примера есть пока только 2000 точек, связями соединить их ещё предстоит.

1. Хотспоты очень подходили бы, если б не надо было нарисовать эти линии. В документации по хотспотам для "картиночного"' слоя используются подготовленные изображения для тайлов. А способа рисовать графические примитивы в тайлах я не нашел (может плохо искал?). Выходит нужно будет сгенерировать много-много png-изображений?

2. Т.е. на основе координат центра карты, масштаба, размера контейнера с картой - определять, где рисовать линии?

1. Рисовать тайлы надо сервере. это несложно, достаточно перевести геокоординаты в пиксельные на нужном масштабе. я рисовал в php с помощью gd2 - получалось 13-15 штук в секунду. примитивы рисуются также, как и маркеры.

дада. многомного картинок. и отдавать их nginx'ом.

2. размер контейнера тут ни при чем. надо рисовать тайлы размером 256х256 точек. где рисовать - определять по номеру тайла. он кодируется х,y и , где z - масштаб.

вот тут есть описание http://api.yandex.ru/maps/doc/theory/concepts/coordinates.xml