Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
-
valeria
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 19 май 2011, 16:27
- Репутация: 0
Сообщение
valeria » 12 июл 2011, 14:28
Здраствуйте такой вопрос , через 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
- Откуда: Екатеринбург
Сообщение
Vladimir_R » 13 июл 2011, 06:08
Вам нужно организовать проверку. Если существуют открытые 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
Сообщение
valeria » 15 июл 2011, 14:12
спасибо ,большое.
-
Amayak
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 ноя 2010, 07:39
- Репутация: 0
Сообщение
Amayak » 06 сен 2011, 07:32
Помогите пожалуйста, у меня аналогичная проблема, но код немного другой.
Предложенный выше вариант почему-то не срабатывает.
Код: Выделить всё
//--- функция для добавления маркеров ------------------------------------------
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
Сообщение
kosyag » 07 сен 2011, 09:52
Можно их давить принудительно

Например так:
Код: Выделить всё
for (i=0;i<map.popups.length;i++){map.removePopup(map.popups[i]);}
-
Amayak
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 ноя 2010, 07:39
- Репутация: 0
Сообщение
Amayak » 07 сен 2011, 12:48
kosyag писал(а):Можно их давить принудительно

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

Вот, что значить "вариться" в своей задаче - у меня надо держать старый попап на карте до получения детальной информации для нового (пока инфы нет, в нём "бежит" полоска ожидания).
-
Amayak
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 11 ноя 2010, 07:39
- Репутация: 0
Сообщение
Amayak » 15 сен 2011, 20:23
Спасибо ВСЕМ. Лучше не придумаешь. Вопрос закрыт.
Сейчас этот форум просматривают: sb_map и 2 гостя