Клуб API Карт

Подгрузка точек средствами Ajax при перемещении карты:

Пост в архиве.
Kichee
6 апреля 2011, 15:57

Здравствуйте.

Имеется рабочая модель карты, на которой при изменении положения или zoom'a срабатывает функция отправляющая запрос на сервер.

Запрос содержит параметры:

Координаты левого верхнего угла, координаты правого нижнего угла, положение зума.

 

На стороне сервера нужно создать xml ответ, вернее YML, так как на стороне клиента написан обработчик. В ответе от сервера будет информация о метках и объектах в районе этих координат.

 

Вопросов несколько:

1) Первый вопрос в том, есть ли какие нибудь классы для генерации этого YML на php? Понимаю, что написать шаблон не сложно, но боюсь, что уже изобретаю велосипед.

 

2) И второй момент, представим, что в зоне координат крупный город, ответ будет содержать информацию о..., ну, например,  5000 объектах. На карте начинает появляться вся эта "каша", а практического смысла нет никакого, но и не показывать метки вообще на больших отдалениях тоже не правильно.

Видел пару реализаций, где при попадании нескольких меток близко друг от друга они группировались в одну "большую" метку - как это реализовать програмно?

Тоесть нам пришел запрос, мы выбрали все метки в поле действия наших координат, взяли первую метку и сравниваем есть ли близко к ней какая нибудь еще и если есть группируем? Подскажите пожалуйста более красивое решение

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

1) Готовых инструментов нет

2) Это задачу решает кластеризатор меток (недавно эта тема обсуждалась)

наверное не самый лучший способ грузить динамические данные с сервера через механизмы YML, так как их сначало заберет сервер яндекса, а потом уже отдаст результат вам(есть такая вот особенность работы), лучше передавать данные об обьектах в тотже JSON и на сервере ждать эти данные какими-то ненулевыми мозгами.

1. Насколько мне известно - офицально есть только один генератор "данных" под якарты - это генератор активных областей, вообще посмотрите на этот модуль - если у вас данные не так чтобы часто меняются лучше работать через него

2. Самый простой и логичный способ показать не все и загрузить не все довольно оригинален -

- при формировании ответа разбейте отдаваемую область на несколько кусков - например так чтобы ~ 256х256 пикселей.

- узнайте сколько точек есть вообще в этой области, например их там 1000

- получите совершенно рандомно( более менее гарант равномерного покрытия) нужное колличество точек, например - не больше 100

в ответе будет сказано - вот я отображаю тут 100 точек, вот их данные, но вообще, по секрету, за каждой точкой может быть еще 10. Сделайте зум+ чтобы я смог уточнить данные.

Уменьшая размер области вы повышаете точность и честность этого приблизительного "вранья", правда никто вам не мешает эти квадратики кешировать, или даже их адреса в неком виде сохранять в обьектов как "дубль" координат для банального ускорения выборки.

А любые правдоподобные и честные данные может создать только большой и страшный серверный кластеризатор или структура типа quad\r-tree, что в большинстве случаев - "крутовато"