Страница 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, то все прошлые поп-апы автоматически закроются.
Замените

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

map.addPopup(this.popup);
на

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

map.addPopup(this.popup,true);

Re: openlayers popup

Добавлено: 09 сен 2011, 12:37
kosyag
Кстати, да. :) Вот, что значить "вариться" в своей задаче - у меня надо держать старый попап на карте до получения детальной информации для нового (пока инфы нет, в нём "бежит" полоска ожидания).

Re: openlayers popup

Добавлено: 15 сен 2011, 20:23
Amayak
Спасибо ВСЕМ. Лучше не придумаешь. Вопрос закрыт.