3 votos

La capa se actualiza después de una petición ajax con openlayers

No puedo entender por qué mi vector es vacia después de esta petición ajax :

function loadKMLTMINT(terminalcode) {
    MapPanel.el.mask();
    Ext.Ajax.request({
        url: 'php/GetKMLTM.php',
        method: 'POST',
        params: {
            terminalcode: terminalcode
        },
        success: function (r) {
             if (r.responseText.length > 0) {
                var data_tmp = JSON.parse(JSON.stringify(r.responseText));
                vector_term.parseFeatures(data_tmp, new ol.parser.GeoJSON(), ol.proj.get("EPSG:3857"));
                var first = true, precExtent = [];
                for (var vec in vector_term.featureCache_.idLookup_) {
                    if (vector_term.featureCache_.idLookup_[vec].values_.Intermodal == 'Y' && vector_term.featureCache_.idLookup_[vec].values_.NAME.substring(0, 5) === terminalcode.substring(3, 8)){
                        if (first) {
                            first = false;
                            precExtent = vector_term.featureCache_.idLookup_[vec].values_.geometry.rings_[0].bounds_;
                        } else {
                            ol.extent.extend(precExtent, vector_term.featureCache_.idLookup_[vec].values_.geometry.rings_[0].bounds_);
                        }
                    }
                }
                olmap.getView().fitExtent(precExtent, olmap.getSize());
            } 
            MapPanel.el.unmask();
        }
    }); 
}

Voy a llamar a esta función del tiempo, con el fin de añadir algunos valores para la capa de vector_term. Con la depuración puedo ver que mi vector_term es completa cuando llamo a la función, pero cuando llega a la success: function(r) se convierte en vacío ! Cómo saber si estoy haciendo algo mal? Debo usar addFeatures en lugar de parseFeatures? Gracias

EDIT : vector_term definición

var vector_term = new ol.layer.Vector({
    source: new ol.source.Vector({
        parser: new ol.parser.GeoJSON()
    }),
    style: new ol.style.Style({
        rules: [
            new ol.style.Rule({
                filter : 'geometryType("polygon")',
                symbolizers: [
                    new ol.style.Fill({
                        color: ol.expr.parse('color'),
                        opacity: 0.4
                    }),
                    new ol.style.Stroke({
                        color: ol.expr.parse('color'),
                        opacity: 0.8
                    }),
                    new ol.style.Text({
                        color: '#0A3ABF', //'#165EF0',
                        text: ol.expr.parse('NAME'),
                        fontFamily: 'Arial',
                        fontSize: 14,
                        zIndex: 7
                    })
                ]
            })
        ]
    })
});

4voto

Brad8118 Puntos 1285

Usted puede definir vector_term como variable global o pasar como argumento en loadKMLTMINT función. Para pasar como parámetro en la definición de la función debe ser

function loadKMLTMINT(terminalcode,vector_term) {

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X