gis openlayers-2 – La ventana emergente de Openlayers no se cierra

Pregunta:

Este es un caso especial, tengo muchas ventanas emergentes adjuntas a los objetos y funcionan bien y tengo un problema en un solo caso.

Todas las capas y ventanas emergentes son manejadas por el control de selección onFeatureSelect , pero este es manejado por capas featureSelected evento.

Al abrir la ventana emergente, arroja:

Error de tipo no detectado: no se puede leer la propiedad 'lat' de nulo.

El error de expansión muestra un error en la función OpenLayers.Bounds.OpenLayers.Class.determineQuadrant pero se abre la ventana emergente.

Al hacer clic en el botón cerrar, el evento de clic también se onPopupClose y también se llama a la función onPopupClose (lo he comprobado con monitor y monitorEvents en la consola) pero la ventana emergente no se cierra. La ventana emergente en otras capas sigue funcionando normalmente.

Aquí está el código:

select_Control = new OpenLayers.Control.SelectFeature([business, schools, healthfacilities, open_space], {
    onSelect: onFeatureSelect,
    onUnselect: onFeatureUnselect,
    click: true
});

open_space.events.on({
    "featureselected": function(e) {
        var PopupPos1 = e.feature.geometry.getBounds().getCenterLonLat();
        popup_content = '<div class="sites-embed-border-on sites-embed sites-embed-full-width" style="width:100%;"><div class="sites-embed-object-title" style="display:none;">sifal ground</div><div class="sites-embed-content sites-embed-type-spreadsheet"><iframe src="https://spreadsheets.google.com/spreadsheet/loadredirect?chrome=false&amp;key=0AkXY0mfPYUxLdE9adGRXZFdlc1RxaHpIREtLbGhEZFE&amp;output=html&amp;pubredirect=true&amp;widget=true" width="100%" height="600" title="sifal ground" frameborder="0" id="193883325"></iframe></div></div>';
        var popup1 = new OpenLayers.Popup.FramedCloud("chicken",
            PopupPos1,
            null,
            popup_content,
            null, true, onPopupClose);

        e.feature.popup = popup1;
        map.addPopup(popup1);
        popup1.setBackgroundColor('#FFBBBB');
        popup1.updateSize();
        popup1.draw();
    }
})

function onPopupClose(e) {
    select_Control.unselectAll();
}

function onFeatureSelect(feature) {
    //debugger;
    var PopupPos1 = new OpenLayers.LonLat(feature.geometry.x, feature.geometry.y)
    popup_content = feature.attributes.name;
    var popup1 = new OpenLayers.Popup.FramedCloud("chicken",
        PopupPos1,
        null,
        popup_content,
        null, true, onPopupClose);
    feature.popup = popup1;
    map.addPopup(popup1);
    popup1.setBackgroundColor('#FFBBBB');
    popup1.draw();
}

function onFeatureUnselect(feature) {
    map.removePopup(feature.popup);
    select_Control.unselectAll();
}

Respuesta:

¿Ha intentado eliminarlos con un bucle for?

function onFeatureUnselect(feature) {
select_Control.unselectAll();
feature.popup.destroy();
feature.popup = null; 
for(var i=0;i<map.popups.length;i++)
{
map.removePopup(map.popups[0]);
}

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım