7 votos

La carga de terceros Api sólo cuando la correspondiente capa de mapa se solicita?

OpenLayers permite múltiples capas de mapa para ser alojado en una plataforma común. Si el mapa de la aplicación es compatible con una amplia variedad de mapas de Google, Yahoo y Microsoft, me parece que en la inicialización, la Api de estos servicios de mapas se cargan así, independientemente de si utiliza o no.

No estoy seguro de si las llamadas a estos terceros javascripts cuentan para la cuota de uso de estas mapa de proveedores de servicios (parece ser). Además, también hay un retraso adicional en la carga de la página web.

Habiendo dicho eso, estoy buscando una forma de poner un marcador de posición en la capa switcher como para evitar declarar el tercer partido de la capa de mapa de clase y, por tanto, evitar una llamada a la tercera parte de la API de secuencia de comandos.

1voto

bob-the-destroyer Puntos 138

Me dio una oportunidad y funciona bastante bien. Eche un vistazo a http://jsfiddle.net/75L79616/2/ .

Añadir un detector de eventos para changebaselayer:

map = new OpenLayers.Map('map', {
        projection: new OpenLayers.Projection("EPSG:3857"),
        strong texteventListeners: {
            "changebaselayer": mapBaseLayerChanged
        }
    });

añadir un Google-dummy-Capa:

google_layer = new OpenLayers.Layer("Google", {
        isBaseLayer: true,
        displayInLayerSwitcher: true
    });

agregar estas funciones de la capa interior-cambio-Evento:

function click_load() {
    console.log("change");
    if (typeof (google) == "undefined") {

        $.getScript('https://maps.google.com/maps/api/js?v=3.3&sensor=false&callback=google_ready');
    } else {
        console.log("google api already loaded");
    }
}

// de devolución de llamada de la función del Ajax de Solicitud:

function google_ready() {
    // replace Google-layer
    google_layer = new OpenLayers.Layer.Google("Google", {
        isBaseLayer: true
    });
    map.addLayer(google_layer); // add Google-layer
    map.setBaseLayer(google_layer);
    map.layers.splice(1, 1);
    map.layers.splice(map.layers.length - 1, 1);
    map.layers.splice(1, 0, google_layer);
    switcher.redraw();



}


function mapBaseLayerChanged(event) {
    //console.log(event.type + " " + event.layer.name);
    if (event.layer.name == 'Google') {
        click_load();
    }
    }

0voto

MJH Puntos 111

usted puede obtener una lista de capas, tales como Google/OSM/Bing, pero sólo crear cuando los usuarios seleccionan. función createOtherAPIs() { var osmLayer = new OpenLayers.La capa.OSM(); } llame createOtherAPIs cuando sea necesario Carga de Mapa de OSM

aunque puede ver que la carga de la 3ª parte de secuencias de comandos en el cuerpo de la carga. las fichas sólo se cargan cuando se agrega la capa de mapa utilizando el mapa.addLayer(osmLayer);

Separar la interfaz de usuario de la api de código. por lo que el usuario verá una opción para cargar osm capa y sólo será activado en un botón, haga clic en o marcando una casilla de verificación

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