Pregunta

Estoy usando OpenLayers para mostrar un mapa en una página web. Estoy utilizando baldosas de CloudMade, pero los mismos problemas que se producen con los azulejos Mapnik de OpenStreetMap.

Estoy tratando de restringir el mapa de manera que el usuario no puede enfocar todo el camino a la visión del mundo -. Quiero que se queden en aproximadamente un zoom nivel de la ciudad, como mínimo

He intentado usar las propiedades minZoomLevel / maxZoomLevel / numZoomLevels; sólo las propiedades maxZoomLevel y numZoomLevels parecen funcionar, mientras que la propiedad minZoomLevel parece estar completamente ignorado.

¿Hay otra manera de lograr esto?

¿Fue útil?

Solución

minZoomLevel no se admite para capas XYZ, de los cuales OSM es una subclase.

Vea las siguientes entradas para soluciones:

Otros consejos

Se puede reemplazar la función isValidZoomLevel. Algo como esto (no probado):

OpenLayers.Map.isValidZoomLevel = function(zoomLevel) {
   return ( (zoomLevel != null) &&
      (zoomLevel >= 2) && // set min level here, could read from property
      (zoomLevel < this.getNumZoomLevels()) );
}

Editar

O que se necesita para anular las resoluciones disponibles, véase el ejemplo aquí: http: // dev.openlayers.org/examples/zoomLevels.html

he encontrado la forma más sencilla para restringir los niveles maxZoom para una capa XYZ era reemplazar el método getNumZoomLevels:

map.getNumZoomLevels = function(){
        return 10;
        };

Este pevents zoom más allá del nivel 10 y también dibuja el control zoomBar correctamente. Esto y una combinación de la opción debe zoomOffset permitirá controlar fácilmente min zoom / máximo sin tener que perder el tiempo con las resoluciones o subclases.

Otras respuestas aquí se refieren a versiones OpenLayers antes de la versión 3.

Con OpenLayers 3, se puede utilizar la opción de mapa maxZoom al inicializar el mapa, de la siguiente manera:

    var map = new ol.Map({
        target: 'mapcontainer-001',
        layers: layers,  // Layers need to be initialized previously
        view: new ol.View({
          center: ol.proj.transform([-5.12345, 42.12345], 'EPSG:4326', 'EPSG:3857'),
          zoom: 12,
          maxZoom: 19
        })
    });

Más información se puede encontrar en la documentación de OpenLayers: http: // openlayers .org / es / v3.0.0 / doc / tutoriales / concepts.html

Ahora yo uso esto en la "Vista":

view: new ol.View({
    center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'),
    zoom: 15,
    maxZoom: 17,
    minZoom: 6
}),

Y funciona muy bien

Definición de las resoluciones no resuelve el problema (incluso en v2.1) - yo no se encontró ninguna solución para este pernament, así que hice mi propia zoombar en JS - eso es lo que yo recomendaría a cualquier persona que se encuentra con problemas con zoombar usando azulejos personalizados.

terminé con esta solución ya que no podía encontrar la manera de utilizar zoomOffset en mi configuración.

        map.getNumZoomLevels = function(){
            return (options.maxzoom-options.minzoom+1);
        };

        map.isValidZoomLevel = function(zoomLevel) {
            var valid = ( (zoomLevel != null) &&
                (zoomLevel >= options.minzoom) &&
                (zoomLevel <= options.maxzoom) );
            if(!valid && map.getZoom() == 0){
                map.zoomTo(options.maxzoom - (options.maxzoom - options.minzoom)/2);

            }
            return valid;
        }

He intentado algo como esto y funciona para mí:

map.newMoveTo = map.moveTo;
map.moveTo = function(lonlat,zoom,options){
    return(zoom>=maxZoom && zoom<=minZoom)?map.newMoveTo(lonlat,zoom,options):false;
};

La mejor respuesta que encontré (incluyendo un ejemplo) estaba en OpenLayers - limitar el número de niveles de zoom . No me lo pego aquí, por favor, consulte las instrucciones de allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top