Вопрос

Я был в этом весь день долго и честно у меня нет идеи. У меня есть несколько слоев WMS, которые я хотел бы отобразить / не отображать в зависимости от текущего уровня зума. Да, я прошел через документы API, и они, кажется, ясно, как день, но я следую всему, что предлагается, и я не получаю желаемое для результатов :(

Это был один из источников, на которые я посмотрел: http://trac.osgeo.org/openlayers/wiki/settingsoomlevels

Затем, чтобы сделать вопросы еще хуже, я обнаружил, что если у вас есть базовый слой карты Open Street, отображаемый на загрузке, он, кажется, ограничивает ваш контроль над Map MomzoMlevels, именно то, что мне нужно, так как я хочу использовать это как мой нагрудный уровень ...

Так что мои вопросы:

Что я делаю неправильно? Это правда, что на самом деле нет обходного пути на контроль уровней масштабирования при использовании базового слоя карты открытого улицы на нагрузке? Или есть что-то, что я просто не знаю?

Вот некоторые из моих попыток моего кода: Возьмите 1: слой Tib_Villages должен отображаться только при уровне масштабирования 8-10, не работает!

var options = {
                                        controls: [new OpenLayers.Control.Navigation()], //Needed to use GeoExt controls such as the zoomslider
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
            units: 'm',
            numZoomLevels: null, //setting the map's zoom levels to null
            allOverlays: false
        }

var osm = new OpenLayers.Layer.OSM(); //MY base layer

//MY overlay layer
var tib_villages = new OpenLayers.Layer.WMS(
                    "Villages", "http://localhost:8080/geoserver/wms", {layers: 'cite:tib_villages', transparent: true, numZoomLevels: 10, minZoomLevel: 8}, {isBaseLayer: false, displayInLayerSwitcher: true, visibility: true}
                );

Возьмите 2: слой Tib_Villages должен показывать только тогда, когда уровень масштабирования 8-10, карта должна иметь только 10 уровней масштабирования, но вместо этого имеет 19, когда слой карты Open Street обеспечивает его, не работает!

var options = {
                                        controls: [new OpenLayers.Control.Navigation()], //Needed to use GeoExt controls such as the zoomslider
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
            units: 'm',
            numZoomLevels: 10, //setting the map's zoom levels to 10 only
            allOverlays: false
        }

var osm = new OpenLayers.Layer.OSM(); //MY base layer

//MY overlay layer
var tib_villages = new OpenLayers.Layer.WMS(
                    "Villages", "http://localhost:8080/geoserver/wms", {layers: 'cite:tib_villages', transparent: true, numZoomLevels: null, minZoomLevel: 8}, {isBaseLayer: false, displayInLayerSwitcher: true, visibility: true}
                )

;

Возьмите 3: после избавления от карты Open Street Base Layer на нагрузке, на карте имеет только 10 уровней масштабирования, как указано, но слой Tib_Villages должен только показать, когда уровень зума составляет 8-10, не работает!

var options = {
                                        controls: [new OpenLayers.Control.Navigation()], //Needed to use GeoExt controls such as the zoomslider
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
            units: 'm',
            numZoomLevels: 10, //setting the map's zoom levels to 10
            allOverlays: false
        }

//MY overlay layer
var tib_villages = new OpenLayers.Layer.WMS(
                    "Villages", "http://localhost:8080/geoserver/wms", {layers: 'cite:tib_villages', transparent: true, numZoomLevels: 10, minZoomLevel: 8}, {isBaseLayer: false, displayInLayerSwitcher: true, visibility: true}
                );

Все ваши предложения искренне ценятся!

elshae.

Это было полезно?

Решение

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

Другие советы

Попробуй использовать minResolution а также maxResolution вместо minZoomLevel. Отказ Обычно это работает нормально. Вы можете получить разрешение для любого рычага зума, если вы звоните map.getResolution() метод.

Другой вариант - слушать OpenLayers.MapС. zoomend Событие и переключение видимости слоя соответственно. Что-то вроде этого:

map.events.on({ "zoomend": function (e) {
    if (this.getZoom() > 2) {
      layer1.setVisibility(false);
      layer2.setVisibility(true);
    }
    else {
      layer2.setVisibility(false);
      layer1.setVisibility(true);
    }
  }
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top