2014-01-30 175 views
1

我正在研究属性搜索系统的API,并试图让属性在Google地图上显示为标记。一切工作正常与API,我得到有效的答复,正是我正在寻找和我期望得到的。我遇到的问题是标记。Google Maps API不显示所有标记

我限制了对100个属性的响应,并要求他们具有要进行地理编码的信息。我获得了100个属性,可以遍历并列出所有属性,但我在地图上最多只能获得11个标记。根本不改变标准并再次搜索应该返回相同的结果,但我得到了一组不同的标记。再次搜索,我得到一个标记。

我也遇到了标记变量的问题。我在载入时将它设置为一个空数组,然后将每个属性的标记推送给它,但是当我控制台记录数组时,它总是空的。

这里就是整个的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

可能重复:// 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); 
       }); 
的(HTTP [谷歌地图我的视觉力的页面不显示所有标记为获取结果的数量上]