5 votos

Diferentes niveles de detail(layers) en el nivel de zoom diferente en el mapa de OpenLayers

Quiero mostrar diferentes detail(layers) en el nivel de zoom diferentes mapa de OpenLayers. Me refiero a cuando zoom en debe mostrar gran cantidad de capas y alejar esas capas debería ocultar automáticamente. Diferentes capas deberían mostrar el nivel de zoom diferentes, no utilizando a conmutación de capa.

¿Puede hacer esto con OpenLayers?

Si no ¿cuál es la solución open source? En caso afirmativo, favor dar algunos enlaces para tener alguna idea o ejemplo

Gracias por leer y responder

7voto

texai Puntos 178

usted puede hacer esto con alguna forma programática como el registro de mapa con zoomend :

eventListeners

{Objeto} Si se establece como una opción en la construcción, la eventListeners objeto será registrado con .

EVENT_TYPES

{Array(Cadena)} solicitud de apoyo de los tipos de evento. El registro de un escucha para un evento en particular, con la siguiente sintaxis:

map.events.register(type, obj, listener);

Los oyentes se llama con una referencia a un objeto de evento. El las propiedades de este evento depende de exactamente lo que sucedió.

Solución De Código:

var layer1 = new OpenLayers.Layer.WMS( "OpenLayers WMS",
        "http://vmap0.tiles.osgeo.org/wms/vmap0",
        {layers: 'basic'}, {'displayInLayerSwitcher':false} );

var layer2 = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
    "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
    {layers: "landsat7"}, {'isBaseLayer': false});

var layer3 = new OpenLayers.Layer.WMS( "DM Solutions Demo",
    "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap",
    {layers: "bathymetry,land_fn,park,drain_fn,drainage," +
             "prov_bound,fedlimit,rail,road,popplace",
     transparent: "true", format: "image/png" });


layer2.setVisibility(false);
layer3.setVisibility(false);

map.addLayers([layer1, layer2, layer3]);

map.events.register('zoomend', this, function (event) {
        var zLevel = map.getZoom();     

        if( zLevel == 13 || zLevel == 14 || zLevel == 15  )
        {
            layer2.setVisibility(true);
        }
        if( zLevel == 16 || zLevel == 17 || zLevel == 18)
        {
            layer2.setVisibility(false);
            layer3.setVisibility(true);
        }

    });

espero te sirva de ayuda...

3voto

Robert Koritnik Puntos 731

Con propiedad de "escalas" de capa se puede controlar qué niveles de zoom son válidos para la capa. El enlace sugested por sacprasanna es el mejor lugar para aprender todo esto.

2voto

pufferfish Puntos 679

Aunque Aragons respuesta es buena, max y minResolution propiedades de la OpenLayers.Vector (que la capa WMS hereda): http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Layer-js.html#OpenLayers.Layer.maxResolution

Conjunto apropiado de min y max escalas en la inicialización, y usted debe obtener el mismo comportamiento como en Aragons ejemplo.

El único inconveniente es que tienes que cuidar sobre resulutions en lugar de niveles de zoom

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