Страница 1 из 1
openlayers popup
Добавлено: 12 июл 2011, 14:28
valeria
Здраствуйте такой вопрос , через popup я получаю информацию об объекте при клике на него ,но никак не могу найти функцию,чтобы первый popup автоматически закрывался при клике по карте ,а то получается этих окошков сотни ,подскажите пожалуйста ,код
Код: Выделить всё
info = new OpenLayers.Control.WMSGetFeatureInfo({
url: "http://localhost:8080/geoserver/wms",
title: 'Information',
queryVisible: true,
eventListeners: {
getfeatureinfo: function(event) {
map.addPopup(new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(event.xy),
null,
event.text,
null,
true
));
}
}
});
map.addControl(info);
info.activate();
Re: openlayers popup
Добавлено: 13 июл 2011, 06:08
Vladimir_R
Вам нужно организовать проверку. Если существуют открытые popup, то их необходимо закрыть.
Код: Выделить всё
var popup = null;
info = new OpenLayers.Control.WMSGetFeatureInfo({
url: "http://localhost:8080/geoserver/wms",
title: 'Information',
queryVisible: true,
eventListeners: {
getfeatureinfo: function(event) {
if (!event.text.match(/<body>\s*<\/body>/)) //проверка: ответил ли сервер на запрос
{
if (popup) //проверка: существуют ли popup'ы на карте, если да, то закрываем
{
popup.destroy();
popup = null;
}
popup = new OpenLayers.Popup.FramedCloud(
"chicken",
map.getLonLatFromPixel(event.xy),
null,
event.text,
null,
true
);
map.addPopup(popup);
}
}
}
});
map.addControl(info);
info.activate();
Re: openlayers popup
Добавлено: 15 июл 2011, 14:12
valeria
спасибо ,большое.
Re: openlayers popup
Добавлено: 06 сен 2011, 07:32
Amayak
Помогите пожалуйста, у меня аналогичная проблема, но код немного другой.
Предложенный выше вариант почему-то не срабатывает.
Код: Выделить всё
//--- функция для добавления маркеров ------------------------------------------
function setMarker(lon, lat)
{
lnlt = new OpenLayers.LonLat(lon, lat);
//--- параметры иконки для маркера
var size = new OpenLayers.Size(16,16);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
icon = new OpenLayers.Icon('../img/marker_green_16.png',size,offset);
feature = new OpenLayers.Feature(markers, lnlt);
feature.closeBox = true;
feature.popupClass = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble,
{autoSize: true, minSize: new OpenLayers.Size(300, 150)});
feature.data.popupContentHTML = icao;//'<?php print $tlg; ?>';
feature.data.overflow = "hidden";
//--- добавить маркер
marker = new OpenLayers.Marker(lnlt, 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);
}
//------------------------------------------------------------------------------
Re: openlayers popup
Добавлено: 07 сен 2011, 09:52
kosyag
Можно их давить принудительно

Например так:
Код: Выделить всё
for (i=0;i<map.popups.length;i++){map.removePopup(map.popups[i]);}
Re: openlayers popup
Добавлено: 07 сен 2011, 12:48
Amayak
kosyag писал(а):Можно их давить принудительно

Например так:
Код: Выделить всё
for (i=0;i<map.popups.length;i++){map.removePopup(map.popups[i]);}
Спасибо. Сработало. Хотя думаю не очень удачное решение.
Всё равно спасибо!
Re: openlayers popup
Добавлено: 09 сен 2011, 05:58
Nasol
Всё намного проще.У функции addPopup есть второй параметр: addPopup: function(popup,exclusive), отвечающий за эксклюзивность нового окошка на экране. Если этот флажок задать в true, то все прошлые поп-апы автоматически закроются.
Замените
на
Re: openlayers popup
Добавлено: 09 сен 2011, 12:37
kosyag
Кстати, да.

Вот, что значить "вариться" в своей задаче - у меня надо держать старый попап на карте до получения детальной информации для нового (пока инфы нет, в нём "бежит" полоска ожидания).
Re: openlayers popup
Добавлено: 15 сен 2011, 20:23
Amayak
Спасибо ВСЕМ. Лучше не придумаешь. Вопрос закрыт.