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境界で呼び出されたリーフレットを使用する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最大値と等しくなり、実際の境界は固定されません。

この問題は修正されました。マスターからバージョンを使用するか、次の認識が来るのを待つことができます。

于 2013-06-05T09:09:52.823 に答える