2012-09-02 100 views
3

我試圖使用谷歌地圖的地理編碼服務來顯示附近地點的標記。我沒有得到良好的排序結果,那就是他們似乎是隨機的,並且不接近所提供的郵編。我使用的是50000的半徑。代碼如下所示。谷歌地圖,地方API沒有給出正確的結果

latlng = new google.maps.LatLng(lat,longitude); 
var myOptions = { 
    zoom: zoom, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 

map = new google.maps.Map(document.getElementById("map"), myOptions); 


//alert("Radius:"+radius_hidden); 
var requestsearch = { 
    location: latlng, 
    radius: radius_hidden, 
    name: searchname, 
    types: ['store'] 
}; 
// keyword: searchname,//name: searchname, to get like pages and name to get exact 
service = new google.maps.places.PlacesService(map); 
//service.textSearch(requestsearch, callback); 
service.search(requestsearch, callback); 

if(map != null) { 
    google.maps.event.addListener(map, 'drag', function(event) { 
     calculateCenter(); 
    }); 
} 
      } 
     google.maps.event.addDomListener(window, 'load', initialize); 


     google.maps.event.addDomListener(window, 'resize', function() { 
      map.setCenter(center); 
      //google.maps.event.trigger(map, 'resize'); 
     }); 
      function calculateCenter() { 
     var latlngbounds = new google.maps.LatLngBounds(); 

     for (var i = 0 ; i < markersArray.length ; i++) { 
    latlngbounds.extend(markersArray[i].getPosition()); 
    } 

     //map.setCenter(latlngbounds.getCenter(), map.getBoundsZoomLevel(latlngbounds)); 
    map.setCenter(latlngbounds.getCenter()); 
    map.fitBounds(latlngbounds); 
     center = map.getCenter(); 
       } 

     function callback(results, status) 
     { 
var listing='<table width="100%" border="1">'; 
var num=5; 
markersArray = new Array(); 
if (status == google.maps.places.PlacesServiceStatus.OK) 
{ 
    for (var i = 0; i < results.length; i++) 
    { 
    var pincode=''; 
    var address=''; 
    geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 
     'address': results[i].vicinity, 
     'partialmatch': true},function(resultsp, status) 
     { 
     if (status == 'OK' && resultsp.length > 0) 
     { 
      address=resultsp[0].formatted_address; 
      var len=resultsp[0].address_components.length-1; 
      var res=resultsp[0].address_components[len].short_name; 
      if(res!=undefined) 
      { 
       //address+="<br>Pincode:"+res.toString(); 
      } 
      //listing+='<tr><td>Zip Code: '+res.toString()+'</td></tr>'; 
     } 
    }); 

    marker = new google.maps.Marker({ 
     position: results[i].geometry.location, 
     title: results[i].name, 
     zIndex: 2, 
     icon: gicons["blue"] 
    }); 
      markersArray.push(marker); 
    calculateCenter(); 
    listing+='<tr><td>'; 

    var address_link=results[i].vicinity.replace(" ","+"); 
    if(i==0) 
    { 
     listing+='<table id="div5" width="100%" >'; 
    } 
    else if(i%5==0) 
    { 
     num+=5; 
     listing+='<table id="div'+num+'" style="display:none;" width="100%">'; 
    } 
    //'+results[i].name+' 


listing +='<tr id="searchadd"><td ><input type="hidden" value="'+results[i].name+'" name="end'+i+'" id="end'+i+'"></td></tr><tr><td style="word-wrap: break-word;" onmouseout="markersArray['+i+'].setIcon(gicons.blue)" onmouseover="markersArray['+i+'].setIcon(gicons.yellow)" class="" id="item-'+i+'">'+getaddress(results[i].vicinity)+'<div id="spacer" style="width:120px;height:1px;float:left;"></div><a style="width:100px;height: 20px;" class="sty-hyperlink" target="_blank" href="https://maps.google.com/maps?daddr='+address_link+'"><b><?php echo getFieldFromDB('user_config','DirectionText'); ?></b></a><br></td></tr>'; 

     if(i ==(results.length-1)) 
     { 
      listing+='</table>'; 
      listing+='<span id="largerwindowlink"><br><a target="_blank" class="sty-action-buttn" href="<?php echo $finalURL; ?>"><?php echo trim(getFieldFromDB('user_config','ActionButtonText')); ?></a></span>'; 
     } 
     else if(i>0 &&(i+1)%5==0) 
     { 
      listing+='<tr><td align="right"><a class="sty-hyperlink" style="width:100px;height: 20px;" href="javascript:void(0);" onclick="javascript:show_hide_table('+num+');" ><b><?php echo getFieldFromDB('user_config','MoreResultText'); ?></b></a></td></tr></table>'; 
     } 
     listing+='</td></tr>'; 
     } 
     showOverlays(5); 
     listing +='</table>'; 
     if(results.length<=0) 
     { 
      listing='<br><br><span style="color:green;">Sorry! No stores found.<br>Please try another franchise name</span><br><br>'; 
     } 
    } 
    else 
    { 
     listing='<br><br><span style="color:green;">Sorry! No stores found.<br>Please try another franchise name</span><br><br>'; 
    } 
    document.getElementById("listingAddress").innerHTML=listing; 
} 
function showOverlays(no) 
{ 
    if (markersArray) 
    { 
     for (i in markersArray) 
     { 
      if(i<no && i>=no-5) 
       markersArray[i].setMap(map); 
     } 
    } 
} 
function clearOverlays() 
{ 
    if (markersArray) 
    { 
     for (i in markersArray) 
     { 
       markersArray[i].setMap(null); 
     } 
    } 
} 

我想要以正確的順序得到結果,那就是先接近的,然後是其餘的。

回答

0
var requestsearch = { 
    location: latlng, 
    radius: 5000, 
    name: searchname, 
    types: ['store'] 
}; 

這將location的5公里半徑內內返回地方。