2016-08-23 10 views
0

mapbox.jsを使用してMarkerClusterでGEOJsonを実装したいと思います。 MarkerclusterなしMapbox.js GEOJson with Markercluster

、すべてが正常に動作します:

$.ajax({ 
     url: 'dashboard/geoJSON', 
     dataType: 'json', 
     type: 'POST', 
     success: function(geojson) { 

      locations = L.mapbox.featureLayer().addTo(map) 
      locations.on('layeradd', function (e) { 
       var marker = e.layer; 
       markers.push(marker); 
      }); 

      locations.setGeoJSON(geojson); 

      ... 

しかし、ときに病気MarkerClusterを実装しようとすると、それだけで1つのマーカー

 ... 
     success: function(geojson) { 

      locations = L.mapbox.featureLayer().addTo(map) 
      var clusterGroup = new L.MarkerClusterGroup(); 
      locations.on('layeradd', function (e) { 
       var marker = e.layer; 
       markers.push(marker); 
       clusterGroup.addLayer(markers); 
      }); 
      locations.setGeoJSON(geojson); 
      map.addLayer(clusterGroup); 

を示し、私に次のエラーが表示されます。

TypeError: t.onAdd is not a function 

誰でも私を助けることができます、どのように私は正常にGEERJsとmarkerclusterを組み合わせることができますリモートサーバーからですか?事前に おかげ

//編集:実測値がすでに使用して動作します異なる例:

 var markers = L.markerClusterGroup(); 

     var geoJsonLayer = L.geoJson(geojson, { 
      onEachFeature: function (feature, layer) { 

      } 
     }); 
     markers.addLayer(geoJsonLayer); 

     map.addLayer(markers);  

     map.fitBounds(markers.getBounds()); 

をしかし、今では「マーカ色」のような特性を持つ私の「デフォルト」のスタイリングを失いました - 」マーカー - サイズ "。

マーカーのスタイルを変更するにはどうすればよいですか?

Mapboxはそのようなことを解決するために、少なくとも10個の方法が常に存在しているように見える、少し奇妙である。)

答えて

1

あなたmarkers変数が配列である場合には(あなたがそれに.push()を使用して)、あなたが使用することはできませんclusterGroup.addLayer(markers).addLayers(markers)addLayersに "s"を付けて)を使用している可能性があります。

"layeradd"イベントごとに配列全体を追加したくないと思われるので、clusterGroup.addLayer(marker)(の個々のマーカー/機能に「s」は付けないでください)を意味する可能性があります。

ところで、L.mapbox.featureLayer()onEachFeatureオプションをイベントリスナーを使用する代わりに使用している可能性があります。

最後に、はありませんあなたのフィーチャグループもマップに追加してください。それはあなたの唯一のマーカーを現在追加しているものです。クラスタグループに、マーカーの追加/削除をマップから自動的に処理させる必要があります。

+0

あなたの答えをありがとう、私は少し質問を変更しました。 – derdida

+0

マルタークラスターをリセットするにはどうすればよいですか?たとえば、ユーザーがフィルタを変更したときにマーカーを再度読み込み、clustergroupを再初期化します。通常は悪い使い方です:markers.forEach(function(entry){ map.removeLayer(entry); });しかし、これはもはや働いていません。何か案は? – derdida

+0

私はあなたが何を意味するのか分かりません...あなたは 'clusterGroup.clearLayers()'を試すことができます。それがあなたが探しているものでないなら、多分もっと詳細な専用の質問を開くべきでしょう。 – ghybs

関連する問題