wms osm examples example ejemplos javascript zoom openlayers openstreetmap cloudmade

javascript - osm - openlayers wms example



Nivel de zoom mínimo/máximo en OpenLayers (9)

Estoy usando OpenLayers para mostrar un mapa en una página web. Estoy usando mosaicos de CloudMade, pero ocurren los mismos problemas con los mosaicos de MapStreet de OpenStreetMap.

Estoy tratando de restringir el mapa para que el usuario no pueda acercarse por completo a la vista del mundo; quiero que se mantenga en un nivel aproximado de la ciudad como mínimo.

He intentado usar las minZoomLevel / maxZoomLevel / numZoomLevels ; solo las propiedades maxZoomLevel y numZoomLevels parecen funcionar, mientras que la propiedad minZoomLevel parece ignorarse por completo.

¿Hay otra manera de lograr esto?


Ahora 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 bien


Definir resoluciones no resuelve el problema (incluso en v2.1). No encontré ninguna solución permanente para esto, así que hice mi propio zoombar en JS. Eso es lo que recomendaría a cualquiera que tenga problemas con zoombar usando la costumbre. azulejos


Descubrí que la forma más sencilla de restringir los niveles de maxZoom para una capa XYZ era anular el método getNumZoomLevels:

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

Estos eventos van más allá del nivel 10 y también dibujan el control de la barra de zoom correctamente. Esto y una combinación de la opción zoomOffset deberían permitirle controlar fácilmente el zoom mínimo / máximo sin tener que meterse con resoluciones o subclases.



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

Con OpenLayers 3, puede usar 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 }) });

Puede encontrar más información en la documentación de OpenLayers: http://openlayers.org/en/v3.0.0/doc/tutorials/concepts.html


Podría anular 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 necesitaría anular las resoluciones disponibles, consulte el ejemplo aquí: http://dev.openlayers.org/examples/zoomLevels.html


Probé 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; };


Terminé con esta solución porque no pude averiguar cómo usar 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; }