Клуб API Карт

Перетаскивание фигур, ajax загрузка меток.

Kichee
14 марта 2011, 02:38

Большое спасибо за комментарии в предыдущих моих темах.

Сталкнулся с новой проблемой, на карте, средствами АпиЯндексКарт нарисован прямоугольник по 4 координатам

                       

var style = new YMaps.Style("default#greenPoint");
                        style.polygonStyle = new YMaps.PolygonStyle();
                        style.polygonStyle.fill = 0;
                        style.polygonStyle.outline = 1;
                        style.polygonStyle.strokeWidth = 8;
                        style.polygonStyle.strokeColor = "0000ff77";
                        style.polygonStyle.fillColor = "ffffffff";
                        YMaps.Styles.add("polygon#Example", style);
                        var polygon = new YMaps.Polygon([
                        new YMaps.GeoPoint(30.441666,59.928438),
                        new YMaps.GeoPoint(30.507266,59.928438),
                        new YMaps.GeoPoint(30.507266,59.962838),
                        new YMaps.GeoPoint(30.441666,59.962838),
                        ], {style: "polygon#Example", hasHint: 0, hasBalloon: 0, drag: 0});

Требуется, чтобы прокручивая карту, квадрат оставался по центру относительно экрана.

Вторая проблема немного сложнее. Проект включает в себя огромное количество меток, в любом случае их загрузка должна быть реализована через ajax. Чтобы не изобретать велосипед, хотел спросить, вдруг есть готовое решение с похожим функционалом.

Задача: При загрузке страницы первый раз рисуется квадрат (о котором я писал выше) и начинают загружаться метки, которые входят в этот квадрат. Если мы перетаскиваем карту (квадрат все также обрамляет экран) старые метки за пределами квадрата исчезают (по возможности удаляясь из кода), а новые подгружаются.

Заранее благодарен за ответы.

6 комментариев
Подписаться на комментарии к посту

Первое можно решить с помощью пользовательского слоя пример

2. Можно использовать YMaps.jQuery.ajax

Спасибо за пример, но боюсь данным способом не получится реализовать зум, только если отслеживать изменение положения карты, а это не удобно.

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

слушайте Drag у карты и перемещайте полигон

 

если при таскании не важно чтобы он был посередине

( а только когда перетаскивание закончилось )

можно слушать DragEnd или Update

1. Единственный вариант создать такой квадрат - разместить его в слое контролов.

Правда не его там проше будет нарисовать обычным DIVом.

2. Я не рекомендовал бы так делать, так как у вас будет дергаться сервер на каждый чих, например на смешение на пару пикселей.

Лучше грузить по всей видимой области, и "дофильтровывать" видимые в данный момент метки уже на клиенте. Подгрузка нового блока - как только "квадрат" вышел за пределы заранее подгруженной области.

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