openlayers popup

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
valeria
Интересующийся
Сообщения: 38
Зарегистрирован: 19 май 2011, 16:27
Репутация: 0

openlayers popup

Сообщение 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();
Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: openlayers popup

Сообщение 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();
valeria
Интересующийся
Сообщения: 38
Зарегистрирован: 19 май 2011, 16:27
Репутация: 0

Re: openlayers popup

Сообщение valeria »

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

Re: openlayers popup

Сообщение 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);    
}
//------------------------------------------------------------------------------
kosyag
Интересующийся
Сообщения: 30
Зарегистрирован: 22 янв 2010, 13:19
Репутация: 0

Re: openlayers popup

Сообщение kosyag »

Можно их давить принудительно :) Например так:

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

for (i=0;i<map.popups.length;i++){map.removePopup(map.popups[i]);}
Amayak
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 ноя 2010, 07:39
Репутация: 0

Re: openlayers popup

Сообщение Amayak »

kosyag писал(а):Можно их давить принудительно :) Например так:

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

for (i=0;i<map.popups.length;i++){map.removePopup(map.popups[i]);}
Спасибо. Сработало. Хотя думаю не очень удачное решение.
Всё равно спасибо!
Nasol
Новоприбывший
Сообщения: 1
Зарегистрирован: 27 янв 2011, 11:27
Репутация: 0

Re: openlayers popup

Сообщение Nasol »

Всё намного проще.У функции addPopup есть второй параметр: addPopup: function(popup,exclusive), отвечающий за эксклюзивность нового окошка на экране. Если этот флажок задать в true, то все прошлые поп-апы автоматически закроются.
Замените

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

map.addPopup(this.popup);
на

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

map.addPopup(this.popup,true);
kosyag
Интересующийся
Сообщения: 30
Зарегистрирован: 22 янв 2010, 13:19
Репутация: 0

Re: openlayers popup

Сообщение kosyag »

Кстати, да. :) Вот, что значить "вариться" в своей задаче - у меня надо держать старый попап на карте до получения детальной информации для нового (пока инфы нет, в нём "бежит" полоска ожидания).
Amayak
Новоприбывший
Сообщения: 8
Зарегистрирован: 11 ноя 2010, 07:39
Репутация: 0

Re: openlayers popup

Сообщение Amayak »

Спасибо ВСЕМ. Лучше не придумаешь. Вопрос закрыт.
Ответить

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

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

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