2012-08-10 68 views
2

現在我有一個位置陣列,其中一個位置將是一個標記。 第二個標記將基於用戶搜索的位置。谷歌地圖放大顯示所有標記

現在的代碼是這樣的:

function find_closest_marker(lat1, lon1) { 

    var pi = Math.PI; 
    var R = 6371; //equatorial radius 
    var distances = []; 
    var closest = -1; 

    var markers = allMyLocations; 


    for(i=0;i<markers.length; i++) { 

    var lat2 = markers[i][1]; 
    var lon2 = markers[i][2]; 

    var chLat = lat2-lat1; 
    var chLon = lon2-lon1; 


    var dLat = chLat*(pi/180); 
    var dLon = chLon*(pi/180); 

    var rLat1 = lat1*(pi/180); 
    var rLat2 = lat2*(pi/180); 

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 


    distances[i] = d; 
    if (closest == -1 || d < distances[closest]) { 
     closest = i; 

    } 



    var closestMarker = markers[closest]; 
    var newLat = markers[closest][1] 
    var newLon = markers[closest][2] 
    var b = new google.maps.LatLng(newLat, newLon); 
    map.setCenter(b); 
    map.setZoom(10); 

    google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ 
    ShowHideMenu(); 

     if($('#newPos').length==0){ 
    $('div.gmnoprint').last().parent().wrap('<div id="newPos" />'); 
    } 
    //showInfoWindow(map, closest);  

    }); 
    } 
} 

眼下這個代碼在用戶搜索得到的最接近的位置和中心的網頁上。我想要做的是使其縮放,以便搜索的位置居中,數組中的位置位於地圖區域內。地圖不是正常尺寸,它是790x400px。

有人可以幫助我與變焦的邏輯和我怎麼能使這成爲可能嗎?

回答

6

你試過LatLngBounds function這個函數會構造一個基於東南角和東北角的可視化表單。結果這些引腳將會在地圖中居中。如果需要,您可以使用縮放,但您可以忽略它,看看它是否會給您所需的結果。

代碼的樣本是:

讓你的宣言

var mybounds = new google.maps.LatLngBounds(); 

那麼你的事件偵聽器中,您創建標記添加

mybounds.extend(b); 

然後最後事件之外聽衆

map.fitBounds(mybounds) 
+0

我試圖使用你的代碼,但是我不能夠看到標記之後......我在哪裏做錯了? – Saty 2014-01-17 10:36:55

+0

@Saty你能提供迄今爲止創建的代碼嗎?讓我建議你發佈一個新問題,以顯示你已經得到了多少,這將有助於確定問題 – rlcrews 2014-01-17 18:18:06