Подтвердить что ты не робот

Минимальный уровень масштабирования в OpenLayers

Я использую OpenLayers для отображения карты на веб-странице. Я использую плитки из CloudMade, но те же проблемы возникают с плитами Mapnik из OpenStreetMap.

Я пытаюсь ограничить карту так, чтобы пользователь не мог увеличить весь экран до мирового уровня - я хочу, чтобы они почти не приближались к масштабу на уровне города.

Я попытался использовать свойства minZoomLevel/maxZoomLevel/numZoomLevels; только свойства maxZoomLevel и numZoomLevels, похоже, работают, тогда как свойство minZoomLevel, кажется, полностью игнорируется.

Есть ли другой способ сделать это?

4b9b3361

Ответ 2

Вы можете переопределить функцию isValidZoomLevel. Что-то вроде этого (не проверено):

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

ИЗМЕНИТЬ

Или вам нужно переопределить доступные разрешения, см. пример здесь: http://dev.openlayers.org/examples/zoomLevels.html

Ответ 3

Я нашел самый простой способ ограничить уровни maxZoom для слоя XYZ, чтобы переопределить метод getNumZoomLevels:

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

Это означает, что изображение выходит за пределы уровня 10, а также правильно управляет регулятором масштабирования. Это и комбинация опций zoomOffset должны позволять вам легко управлять минимальным/максимальным увеличением без необходимости возиться с разрешениями или подклассами.

Ответ 4

Другие ответы здесь относятся к версиям OpenLayers до версии 3.

С помощью OpenLayers 3 вы можете использовать опцию карты maxZoom при инициализации карты следующим образом:

    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
        })
    });

Более подробную информацию можно найти в документации OpenLayers: http://openlayers.org/en/v3.0.0/doc/tutorials/concepts.html

Ответ 5

Определение разрешений не решает проблему (даже в версии 2.1). Я не нашел для нее никакого фиксированного исправления, поэтому я сделал свой собственный зомбар в JS - это то, что я рекомендую всем, кто сталкивается с проблемами с zoombar, используя пользовательские плитки.

Ответ 6

Я закончил с этим решением, так как не мог понять, как использовать zoomOffset в моей настройке.

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

Ответ 7

Я пробовал что-то вроде этого, и это работает для меня:

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

Ответ 9

Теперь я использую это в "View":

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

И он отлично работает