Клик по Маркеру в OL

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Клик по Маркеру в OL

Сообщение dobeer »

Делаю маркеры как в примере
Как сделать реакцию на клик по нему?..вывод попапа с текстом например...
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение Denis Rykov »

Код: Выделить всё

marker.events.register("onclick",marker,function(){})
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение dobeer »

Спасибо, _DR_. Но функция будет выполняться при клике на любом маркере, а у меня их много, как идентифировать именно тот маркер по которому я кликнул?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение Denis Rykov »

С помощью this, пример из документации:

Код: Выделить всё

 marker.events.register('mousedown', marker, function(evt) { alert(this.icon.url); OpenLayers.Event.stop(evt); });
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение dobeer »

Я так понимаю выдет сообщение выводящее путь к иконки...у меня из базы берутся сотни маркеров с одним и тем же изображением, и при клике на маркере необходимо вывести инфу описывающую маркер. Можно ли както при создании маркера

Код: Выделить всё

markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon)); 
прописать ему определенный идентификатор (ссылку на запись в БД), чтоб при клике достать этот идентификатор и по нему уже отбирать записи?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение Denis Rykov »

Я сам с маркерами не работал, поэтому сразу не подскажу, надо посмотреть. А почемувы остановились именно на маркерах, а не на точечном векторном слое? Насколько мне извстно - маркеры - это из прошлого OL, когда в браузрах были проблемы с рендерингом векторных фич. Несколько раз встречал указания на то, что лучше использовать как раз точечные объекты. Если хотите, чтобы точка отображалась в виде какой-нибудь ионки, то просто укажите в настройке стиля параметр externalGraphic.

Код: Выделить всё

popupfield = feature.attributes['NAME'];
popup = new OpenLayers.Popup.AnchoredBubble("popupid", 
                    feature.layer.getLonLatFromViewPortPx(currPos),
                    null,
                    popupfield,
                    null
                );
map.addPopup(popup); 
В данном примере feature - объект, на который кликнули, currPos - место клика.
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение dobeer »

Экспериментировал с маркерами сегодня и никак неполучилось вывести ни одно из его свойств...

Код: Выделить всё

marker.events.register('mousedown', marker, function(evt) { alert(this.icon.url); OpenLayers.Event.stop(evt); });
не работает...
попробовал вывести хотя бы имя объекта

Код: Выделить всё

mark.events.register('mousedown', mark, function(evt) { alert(this.name); OpenLayers.Event.stop(evt); });
выдает имя "marker" :)
хотел добраться до координат маркера по которому кликнул

Код: Выделить всё

alert(this.lonlat); 
но также браузер входит сообщение "undefined"...
Все же хочется понять как работать с маркерами :(
Хочется оставить именно маркеры на карте, т.к. уже все сделано, настроен вывод маркеров из базы и т.д.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение Denis Rykov »

Код: Выделить всё

function setMarker(lon, lat, count){

    var lonLatMarker = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection,  map.projection);;
    var feature = new OpenLayers.Feature(markers, lonLatMarker);
    feature.closeBox = true;
    feature.popupClass = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, {minSize: new OpenLayers.Size(300, 180) } );
    feature.data.popupContentHTML = 'Hello World';
    feature.data.overflow = "hidden";

    var icon = new OpenLayers.Icon("/src/includes/lib/map/export_badge.php?number="+count);
    var marker = new OpenLayers.Marker(lonLatMarker, icon);
    marker.feature = feature;

    var markerClick = function(evt) {
        if (this.popup == null) {
            this.popup = this.createPopup(this.closeBox);
            map.addPopup(this.popup);
            this.popup.show();
        } else {
            this.popup.toggle();
        }
        OpenLayers.Event.stop(evt);
    };
    marker.events.register("mousedown", feature, markerClick);

    markers.addMarker(marker);
} 
источник

Просто добавьте в функцию setMarker дополнительный параметр и передавайте его в feature.data.popupContentHTML.
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение dobeer »

То, что _DR_ прописал! Спасибо, это мне и нужно было, все работает, круть))) Можно в рецепты было бы наверно оформить....
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение dobeer »

А как сделать, чтоб курсор при наведении на маркер менялся на указательный палец?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение Denis Rykov »

Как вариант - к приаттаченной к маркеру фичи в свойствах стиля установить

Код: Выделить всё

{cursor: pointer} 
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Клик по Маркеру в OL

Сообщение dobeer »

а как у фичи устанавливаются стили
Amayak
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 ноя 2010, 07:39
Репутация: 0

Re: Клик по Маркеру в OL

Сообщение Amayak »

Спасибо за примеры. Это работает! Подскажите как сделать чтобы popup маркер закрывался при клике на другой маркер. Спасибо.
Amayak
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 ноя 2010, 07:39
Репутация: 0

Re: Клик по Маркеру в OL

Сообщение Amayak »

Вопрос закрыт.
Вместо
map.addPopup(this.popup);
надо
map.addPopup(this.popup,true);
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя