2012-04-20 31 views
17

私は、外部のJSONファイルから得たポイントと線ストリングを持つleaflet.jsマップを持っています。Leaflet.js - 地図ビュー上のgeoJSON座標に合わせる

追加した場合: map.setView(new L.LatLng(0,0)、10);

地図の緯度と経度を0,0に合わせます。マップセンターとズームがJSONのすべてのポイントにフィットするように設定するにはどうすればよいですか?

答えて

20

getBoundsメソッドを持つFeatureGroupにすべてのレイヤーを追加できます。したがって、あなたはちょうど言うことができるはずです

L.FeatureGroupのgetBoundsメソッドは、少なくとも(少なくとも最新のバージョンではなく)0.3.1のmasterブランチでのみ利用できます。

+0

よろしくお願いします。ですから、geoJSONレイヤーを追加するコードは分かります。 geojsonLayer.addGeoJSON(jsonData); map.addLayer(geojsonLayer); map.fitBounds(jsonGroup.getBounds()); 私はそれを次のように変更します: geojsonLayer.addGeoJSON(jsonData); map.addLayer(geojsonLayer); var jsonGroup = new L.FeatureGroup(jsonData); map.fitBounds(jsonGroup.getBounds()); それはうまくいくはずですか? – James

+0

申し訳ありませんが、上記の投稿からすべての書式を取り除きました。私はコメントを保存するときにそれを保存する方法がわかりません。 – James

+0

コメントでデバッグするのはかなり難しいです。 http://jsfiddle.netであなたのコードを貼り付けて、あなたが持っているもの(または少なくともその一部)を見せてもらえますか? – Jason

5

同様の配列だけでL.LatLngBoundsオブジェクトを取るので、これは動作します

map.fitBounds(directionLatLngs); 

を呼び出すことができますdirectionLatLngsと呼ばれるL.LatLngの配列に方向の私のリストを保存します私の場合。 マーカをすべてGeoJsonから描画しました。だから私はボタンをクリックすると繰り返し呼び出される関数を書いた。それがあなたの要求に合っていれば試してみてください。

function bestFitZoom() 
    { 
     // declaring the group variable 
     var group = new L.featureGroup; 

     // map._layers gives all the layers of the map including main container 
     // so looping in all those layers filtering those having feature 
     $.each(map._layers, function(ml){ 

      // here we can be more specific to feature for point, line etc.    
      if(map._layers[].feature) 
      { 
       group.addLayer(this) 
      } 
     }) 

     map.fitBounds(group.getBounds()); 
    } 

マップ/マーカーの状態が変更されても、マーカー/レイヤーの最新/現在の状態が取得されることを最大限に活用することができます。このメソッドが呼び出されるたびに、すべてのレイヤーが適度なズームレベルで表示されます。

関連する問題