2017-08-11 6 views
1

私は、画面を塗りつぶすマップと、画面の下部に表示される非マップコンテンツの水平オーバーレイを持っています。地図ビュー内でできるだけ大きくなるように地図上にポリラインを表示したいが、はオーバーレイされたコンテンツの下に隠されていない。以下はリーフレットマップでLatLngBoundsをオフセットする

enter image description here

は、私はそれに近い作品しようとしていますものですが、マップの現在のビューのズーム/位置に応じて、異なる結果が得られます。私はマップの現在のビューから独立したものが必要です。

// `map` is the leaflet map 
// `polyline` is a leaflet polyline 

function fitBounds (latLngBounds, offsetY) { // offsetY in pixels 
    var zoom, southeast, southeastOffset, newBounds; 

    if (offsetY) { 
    zoom = map.getBoundsZoom(latLngBounds); 
    southeast = map.project(latLngBounds.getSouthEast(), zoom); 
    southeastOffset = new L.Point(southeast.x, southeast.y + offsetY); 
    newBounds = latLngBounds.extend(map.unproject(southeastOffset, zoom)); 
    } 

    map.fitBounds(newBounds || latLngBounds); 
} 

var contentHeight = 350; 
// this will be calculated and is the distance from the top of the 
// overlaid content to the bottom of the map 

fitBounds(polyline.getBounds(), contentHeight); 

map.getBoundsZoom(latLngBounds)project/unprojectは、マップをパンしたり、異なるズームされたときに異なる値を返すように見えます。私はdocsから、現在のマップビューから独立していると理解しました。

私は間違った方法を使用していますか、または私が必要とするものを達成するための別の戦略がありますか?ありがとう。

+1

[リーフレットプラグインリスト](http://leafletjs.com/plugins#events)の 'leaflet-active-area'プラグインと' Leaflet.ControlledBounds'プラグインを参照して、彼らは 'fitBounds () 'と非常によく似ています。 – IvanSanchez

+0

ありがとうIvanSanchez。私は正常に問題に取り組んで 'リーフレット - アクティブエリア'を得ているので、私の問題を解決します。誰もがそれを見て、コメントしたいと思えば、なぜ元のコードがうまくいかなかったのか、私はまだ興味があります。 – Premasagar

答えて

0

getBoundsZoomは、現在のマップビューのポートサイズに依存します。したがって、異なるサイズでテストした場合(マップコンテナがページ幅全体を満たし、ブラウザウィンドウの幅が異なる可能性があります(おそらくコンソールのため)、結果は異なります。

マップコンテナのサイズが変更されておらず、JSBin/Plunker/JSFiddleで問題を再現できる場合は、リーフレットにバグがある可能性があります。問題トラッカーに報告してください。

+0

ありがとうございます。それは問題だったかもしれません。 – Premasagar

関連する問題