1

私は現在、このビットのコードを持っており、私が望むように機能しています。mapbox マップと共に読み込まれた JSON を空白にし、ローカル ファイルから JSON セットを読み込み、いくつかのポイントをフィルター処理します。前回の記事のおかげで解決できました。

ここで、マップを自動パン/ズームして、表示されていて運がないマーカーのみを含めたいと考えています。fitBounds と map.extent のいくつかのバリエーションを試し、map.markerLayer.getGeoJSON または markerLayer.getGeoJSON でフィードしました。前者は「lat」未定義のコンソール エラーをスローし、console.log ハントに送られ、loadURL を使用すると getGeoJSON が結果を返さなくなったようです。

助けてくれてありがとう。これがコードです。

var statestring = String(Request.QueryString("location"));
var map = L.mapbox.map('map', 'aam.map-ryzdcons');

map.markerLayer.setGeoJSON([]);
var markerLayer = L.mapbox.markerLayer()
.loadURL('markers.geojson.txt')
.setFilter(function(f) {
return f.properties['coverage'].toLowerCase().indexOf(statestring.toLowerCase()) > -1 ; })
.addTo(map);

ここの間に map.fitBounds(markerLayer.getBounds()); を入れてみました。成功せず、その他のバリエーションがあります。

  markerLayer.on('mouseover', function(e) {
      e.layer.openPopup();
  });
  markerLayer.on('mouseout', function(e) {
      e.layer.closePopup();
  });

編集#2:これを試したところ、最初にloadURLを設定するとgetGeoJSONが実際に機能しないという私の理論が証明されました。それは一種の機能ですが、私が明らかに望んでいることを達成しません。

$.getJSON("markers.geojson.txt", function (data) {
map.markerLayer.setGeoJSON(data);                           
map.fitBounds(markerLayer.getBounds());
if (markers.length == '1') {
map.setZoom(8);
}
map.markerLayer.setGeoJSON([]);
}); 

#3を編集します。これは、さらに数時間質問に答えられないためです。

答えは、少なくとも私の場合は、ready イベントを待つ必要があるということです。編集 #2 のものを markerLayer.on Ready イベントに移動しました。

var markers = [];   
markerLayer.on('ready', function(e) {
this.eachLayer(function(marker) { markers.push(marker); });
map.fitBounds(markerLayer.getBounds());
if (markers.length == '1') {
    map.setZoom(8);
    }
//alert(markers.length);
}); 
4

1 に答える 1