3

これは、マップをロードするための私のinit関数です。オランダのみを表示したいので、ズームインは可能ですが、ズームアウトはできません。いたるところを検索しましたが、その方法について適切な説明が見つかりません。

var config = {
zoom: 14,
zoomStart: 8,
centerPoint: new OpenLayers.LonLat(622044.536098, 6797086.3022847),
strokeColor: "#941B80",
strokeColor_allloc: "#575757",
strokeOpacity: 0.8,
strokeOpacity_allloc: 0.9,
strokeWeight: 2,
trackWeight: 5,
fillColor: "#941B80",
fillColor_allloc: "#575757",
fillOpacity: 0.25,
fillOpacity_allloc: 0.40,
pointRadius: 5,
fontColor: "black",
fontSize: 10,
fontFamily: "Arial",
scaleFactor: 1000000,
extent: new OpenLayers.Bounds(-5037508, -5037508, 5037508, 5037508.34),
units: 'm',
resolution: 156543.0339,
displayProjection: new OpenLayers.Projection("EPSG:4326"),
projection: new OpenLayers.Projection("EPSG:900913"),
controls: [
new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.Attribution()],
copyright: 'Map data &copy; 2010 <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a><br /><a href="http://openstreetmap.org">OpenStreetMap.org</a> contributors',
numZoomLevels: 10,
numberPlateTail: new OpenLayers.Size(117.333, 42),
numberPlate: new OpenLayers.Size(117.333, 25),
iconSize: new OpenLayers.Size(32, 37)
};

var myLayers = {
base: new OpenLayers.Layer.OSM('', '', {
    attribution: config.copyright,
    transitionEffect: 'resize',
    layers: 'basic'
}, {
    isBaseLayer: true
}),
vector: new OpenLayers.Layer.Vector('Vormen aan/uit', {
    styleMap: my_style,
    renderers: ['Canvas', 'SVG', 'VML']
}),
allloc_vector: new OpenLayers.Layer.Vector('Vormen aan/uit', {
    styleMap: my_style,
    renderers: ['Canvas', 'SVG', 'VML']
}),
markers: new OpenLayers.Layer.Markers('Markers')
};
init: function (canvas) {
    this.canvas = canvas;
    $('#' + canvas).append('<input type="button" class="button" value="Volledig scherm" onclick="tbMap.toggleFs();" />');
    this.map = new OpenLayers.Map(this.canvas, {
        controls: config.controls,
        displayProjection: config.displayProjection,
        Projection: config.projection,
        maxExtent: config.extent,
        maxResolution: config.resolution,
        units: config.units,
        numZoomLevels: config.numZoomLevels,
        theme: null
    });
    tbMap.zoom();
    this.map.addLayers([myLayers.base, myLayers.vector]);
    this.map.setCenter(config.centerPoint, config.zoomStart);
},
zoom: function () {
    OpenLayers.Control.Navigation.prototype.counter = 0;
    //Inzoomgevoeligheid
    OpenLayers.Control.Navigation.prototype.wheelUp = function (evt) {
        this.counter++;
        if (this.counter > 2) {
            this.counter = 0;
            this.wheelChange(evt, 1);
        }
    };
    //Uitzoomgevoeligheid
    OpenLayers.Control.Navigation.prototype.wheelDown = function (evt) {
        this.counter--;
        if (this.counter < -2) {
            this.counter = 0;
            this.wheelChange(evt, -1);
        }
    };
},
4

2 に答える 2

1

config 属性maxExtentを設定できます。構成で既存の境界を使用すると、次のようになります。

maxExtent : new OpenLayers.Bounds(-5037508, -5037508, 5037508, 5037508.34)

初期化時にこれをマップ構成に追加します。

また、 restrictedExtentを見たいと思うかもしれません

お役に立てれば

于 2012-06-12T13:30:09.700 に答える
1

多分あなたを助けることができます:

/**
 * 
 * @type {int}
 * @constant
 */
var MAX_ZOOM_LEVEL = 6;

/**
 * The OpenLayers object that sets the map extent to the Europe scale
 * @type {OpenLayers.Bounds}
 * @var
 */
var europeGoogleExtent = new OpenLayers.Bounds(-4931105.5677773, 2641663.6973633, 8570731.1060977, 12425603.316113);



Zoom in?

//triggered after a zoom completes
mp.events.register('zoomend', this, checkZoom);

function checkZoom() {
    var zoom = mp.getZoom();

    if(MAX_ZOOM_LEVEL >= zoom ) {
        J('#dialog').html('You reached the maximum zoom level. <strong>The spatial accuracy is of the order of X km.</strong>');
        J('#dialog').attr('title', 'Warning message');
        J('#dialog').dialog({
            height: 140,
            modal: true
        });
    } else {
        return true;
    }   
}

//Loading the initial extent
if (!mp.getCenter()) {
    if (document.getElementById('userMapExtent').value != '') {
        var sExtent = document.getElementById('userMapExtent').value.split(',');
        mp.zoomToExtent(new OpenLayers.Bounds(sExtent[0], sExtent[1], sExtent[2], sExtent[3]), true);
    } else {
        mp.zoomToExtent(europeGoogleExtent);
    }
}
于 2012-06-28T14:13:01.103 に答える