2017-04-05 18 views
-1

私のマップにはjsonのポイントが表示されていますが、以下のコードでこれらのポイントをフィルタリングすることはできません。私はマーカとフィルタの間に接続があるはずだと思いますが、私はどのようにしているのか分かりません。marker.setVisibleはGoogleマップの機能ではありません

var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -34.397, lng: 150.644}, 
    scrollwheel: false, 
    zoom: 8 
}); 

var points = 'http://www.example.com/json.json'; 

$.getJSON(points, function(json1) { 
    $.each(json1, function(key, data) { 
     var latLng = new google.maps.LatLng(data.latlng.lat, data.latlng.lng); 
     // Creating a marker and putting it on the map 
     var marker = new google.maps.Marker({ 
      position: latLng, 
      map: map, 
      category: data.category, 
      //icon: iconBase + data.posture + '.svg', 
      title: data.title 
     }); 
    }); 

    filterMarkers = function (posture) { 
     for (i = 0; i < json1.length; i++) { 
      marker = json1[i]; 
      // If is same category or category not picked 
      if (marker.category == category || category.length === 0) { 
       marker.setVisible(true); 
      } 
      // Categories don't match 
      else { 
       marker.setVisible(false); 
      } 
     } 
    } 
    $('.button-group a').click(function(e){ 
     var category = $(this).attr('data-filter'); 
     filterMarkers(category); 
    }); 

}); 

解決策はありますか?

+1

エラーは何ですか?問題を解決するためにどのような手順を試しましたか? – Magix

+0

フィルタアンカー( '.button-group a')をクリックしようとするとコンソールはエラーを返します' marker.setVisible is not function' –

+3

必要に応じて 'marker.setVisible()'を行う 'marker' Googleのマーカーそのものになる。あなたのjson要素 'json1 [i]'の1つで関数を実行しようとしているようです。 Googleマーカーを作成する際に配列にGoogleマーカーを格納し、その関数を実行するときに正しい配列アイテムにアクセスする必要があります。 –

答えて

0

私は以下のコメントを理解しました。これを行うには、すべてのマーカーを配列に配置し、この配列にフィルターを作用させます。

var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -34.397, lng: 150.644}, 
    scrollwheel: false, 
    zoom: 8 
}); 

var points = 'http://www.example.com/json.json'; 

$.getJSON(points, function(json1) { 
    var markers_array = []; 
    $.each(json1, function(key, data) { 
     var latLng = new google.maps.LatLng(data.latlng.lat, data.latlng.lng); 
     // Creating a marker and putting it on the map 
     var marker = new google.maps.Marker({ 
      position: latLng, 
      map: map, 
      category: data.category, 
      //icon: iconBase + data.posture + '.svg', 
      title: data.title 
     }); 

     markers_array.push(marker); 

    }); 

    filterMarkers = function (posture) { 
     for (i = 0; i < markers_array.length; i++) { 
      marker = markers_array[i]; 
      // If is same category or category not picked 
      if (marker.category == category || category.length === 0) { 
       marker.setVisible(true); 
      } 
      // Categories don't match 
      else { 
       marker.setVisible(false); 
      } 
     } 
    } 
    $('.button-group a').click(function(e){ 
     var category = $(this).attr('data-filter'); 
     filterMarkers(category); 
    }); 
}); 
関連する問題