Restrict Pan outside WMS extent in OpenLayers3

前端 未结 3 1038
无人共我
无人共我 2020-12-29 08:28

I have rectangle WMS of small area and want to restrict panning outside WMS extends, so there aren\'t white or black area outside the map visible at all. Adding exten

3条回答
  •  一个人的身影
    2020-12-29 09:01

    Here's my solution. I wrote it just now, and so it is not extensively tested. It would probably break if you start rotating the map, for example, and it may be glitchy if you zoom out too far.

    var constrainPan = function() {
        var visible = view.calculateExtent(map.getSize());
        var centre = view.getCenter();
        var delta;
        var adjust = false;
        if ((delta = extent[0] - visible[0]) > 0) {
            adjust = true;
            centre[0] += delta;
        } else if ((delta = extent[2] - visible[2]) < 0) {
            adjust = true;
            centre[0] += delta;
        }
        if ((delta = extent[1] - visible[1]) > 0) {
            adjust = true;
            centre[1] += delta;
        } else if ((delta = extent[3] - visible[3]) < 0) {
            adjust = true;
            centre[1] += delta;
        }
        if (adjust) {
            view.setCenter(centre);
        }
    };
    view.on('change:resolution', constrainPan);
    view.on('change:center', constrainPan);
    

    This expects the variables map, view (with obvious meanings) and extent (the xmin, ymin, xmax, ymax you want to be visible) to be available.

提交回复
热议问题