2014-01-30 6 views
1

Я работаю над API для системы поиска свойств, и я пытаюсь отобразить свойства в качестве маркеров на карте Google. Все работает отлично с API, я получаю действительные ответы, именно то, что я ищу, и то, что я ожидаю получить. У меня проблема с маркерами.API Карт Google, не отображающий все маркеры

Я ограничиваю ответ на 100 свойств и требуя, чтобы у них была информация, подлежащая геокодированию. Я получаю 100 свойств и могу прокручивать их и перечислить их, но я получаю только 11 маркеров max на карте. Не меняя критерии вообще, и поиск снова должен возвращать те же результаты, но я получаю другой набор маркеров. Повторите поиск, и я получу один маркер.

У меня также возникают проблемы с переменной маркеров. Я установил его как пустой массив при загрузке, а затем надавил на него маркер каждого свойства, но когда я консоль регистрирую массив, он всегда пуст.

Вот весь JavaScript:

<script> 
    var user = "bac0Fmk5"; 
    var key  = "Vkjx5BV8VeYOxAixFD"; 
    var secret = "CU5g6wQR2ZJV7"; 

    var markers = []; 

$(document).ready(function(){ 
    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 10, 
     center: new google.maps.LatLng(30.1767, -85.8056), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    var geocoder = new google.maps.Geocoder(); 

    var infowindow = new google.maps.InfoWindow({ 
     content: '' 
    }); 

    $('#search_btn').click(function(){ 
     clearOverlays(); 

     $.ajax({ 
      type: 'POST', 
      dataType: "json", 
      async: false, 
      url: "api/ex.api.php", 
      data: { 
       user:   user, 
       key:   key, 
       secret:   secret, 
       area:   $('#area').val(), 
       category:  $('#type').val(), 
       min_price:  $('#min_price').val(), 
       max_price:  $('#max_price').val(), 
       bedrooms:  $('#bedrooms').val(), 
       bathrooms:  $('#bathrooms').val(), 
       subdivision: $('#subdivision').val(), 
       city:   $('#city').val(), 
       mls_acct:  $('#mls_acct').val() 
      }, 
      success: function (responseData, textStatus, jqXHR) { 
       // console.log(responseData); 
       // console.log(jqXHR); 
       $.each(jqXHR.responseJSON, function(i, e){ 
        //console.log(e.mls_acct); 

        geocoder.geocode({ 'address': e.street_num+' '+e.street_name+' '+e.city+','+e.state+' '+e.zip}, function(results, status) { 
          if (status == google.maps.GeocoderStatus.OK) { 
          // console.log("location : " + results[0].geometry.location.lat() + " " +results[0].geometry.location.lng()); 
          var lat = results[0].geometry.location.lat(); 
          var lng = results[0].geometry.location.lng(); 
          //window.locs.push([lat, lng]); 

          if(e.street_num == '' || e.street_name == '' || e.city == '' || e.state == '' || e.zip == '') 
          { 
           console.log('got a dead one'); 
          } 

          marker = new google.maps.Marker({ 
           position: new google.maps.LatLng(lat, lng), 
           map: map 
          }); 
          markers.push(marker); 

          bindInfoWindow(marker, map, infowindow, "<div><h2>"+e.mls_acct+"</h2></div>"); 
         } 
        }); 
       }); 
      }, 
      error: function (responseData, textStatus, errorThrown) { 
       console.log('Response Data: ' + responseData); 
       console.log('Status: ' + textStatus); 
       console.log('Error Thrown: ' + errorThrown); 
      } 
     }); 

     return false; 
    }); 
}); 

function bindInfoWindow(marker, map, infowindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.setContent(html); 
     infowindow.open(map, marker); 
    }); 
} 

function clearOverlays() { 
    for (var i = 0; i < markers.length; i++) { 
    markers[i].setMap(null); 
    } 
    markers.length = 0; 
} 
</script> 
+0

возможно дубликат [Google Maps на моей странице Визуальный Force не показывает все маркеры, как количество результатов неправдоподобным] (Http: // stackoverflow.com/questions/21422125/google-maps-on-my-visual-force-page-doesnt-show-all-markers-as-the-number-of-re) – geocodezip

ответ

0

Вы молча игнорируя GeocoderStatus, когда он не "OK". Вероятно, вы получаете ответы OVER_QUERY_LIMIT. Добавить предупреждение, по крайней мере, пусть вы знаете, почему это не удается:

   geocoder.geocode({ 'address': e.street_num+' '+e.street_name+' '+e.city+','+e.state+' '+e.zip}, function(results, status) { 
         if (status == google.maps.GeocoderStatus.OK) { 
         // console.log("location : " + results[0].geometry.location.lat() + " " +results[0].geometry.location.lng()); 
         var lat = results[0].geometry.location.lat(); 
         var lng = results[0].geometry.location.lng(); 
         //window.locs.push([lat, lng]); 

         if(e.street_num == '' || e.street_name == '' || e.city == '' || e.state == '' || e.zip == '') 
         { 
          console.log('got a dead one'); 
         } 

         marker = new google.maps.Marker({ 
          position: new google.maps.LatLng(lat, lng), 
          map: map 
         }); 
         markers.push(marker); 

         bindInfoWindow(marker, map, infowindow, "<div><h2>"+e.mls_acct+"</h2></div>"); 
        } else alert("Geocode failed, status="+status); 
       }); 
Смежные вопросы