3

Leaflet.js用于开源地图项目,但我需要设置用户无法超越的特定界限。地图对象的 maxBounds 属性在北、东和西方向上按预期工作——但它让我永远向南滚动。

在小提琴中,绿色背景显示了边界应该在哪里结束,并且我添加了一个纬度的点击警报以进行检查。

http://jsfiddle.net/7m7n7/

var map = L.map('map', {
maxZoom: 4,
minZoom: 1,
maxBounds: [
    //south west
    [-85.07815906717186, -179.97802734374997],
    //north east
    [-60.413852350464914, 39.8583984375]
]
}).setView([-72.5, -110], 1);

L.tileLayer(
    'http://{s}.tile.cloudmade.com/{API}/998/256/{z}/{x}/{y}.png', 
    { maxZoom: 18 }).addTo(map);
4

1 回答 1

2

当您使用带边界setBounds调用的 then 传单L.Map.panInsideBounds时,您在哪里尝试获取投影:viewSw = this.project(viewBounds.getSouthWest()),它使用下一个代码进行默认投影:

project: function (latlng) { // (LatLng) -> Point
    var d = L.LatLng.DEG_TO_RAD,
    max = this.MAX_LATITUDE,
    lat = Math.max(Math.min(max, latlng.lat), -max),
    x = latlng.lng * d,
    y = lat * d;

    y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));

    return new L.Point(x, y);
}

所以Math.max(Math.min(max, latlng.lat), -max)不能超过最大值或最小值,并且viewSw等于最大值并且实际界限不固定。

这个问题是固定的。您可以使用master 的版本或等待下一次实现时。

于 2013-06-05T09:09:52.823 回答