2014-04-14 143 views
0

嗨我有一個小問題,在地圖上顯示點。 我使用Arraylist來存儲多個緯度/經度值,然後做一個for循環來添加點和自動縮放。有2個或更多標記時,一切正常。問題是隻有一個標記被添加時,它放大得太近。Android地圖自動縮放

任何人都知道如何解決這個問題?

public static void processMap() 
{ 
    for (int i = 0; i < lat.size(); i++) 
    { 
     MarkerOptions markerOptions = new MarkerOptions(); 
     LatLng latLng = new LatLng(lat.get(i), lng.get(i)); 

     markerOptions.position(latLng); 
     markerOptions.title("title"); 
     markerOptions.snippet("description"); 

     mMap.addMarker(markerOptions); 
     bounds.include(new LatLng(lat.get(i), lng.get(i))); 
    } 

    mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(), 150)); 
} 

更新代碼

public static void processMap() 
    { 
     int num = 0; 
     double lat2 = 0; 
     double lng2 = 0; 

     for (int l = 0; l < lat.size(); l++) 
     { 
      lat2 = lat.get(l); 
      lng2 = lng.get(l); 
      LatLng latLng = new LatLng(lat2, lng2); 

      MarkerOptions markerOptions = new MarkerOptions(); 
      markerOptions.position(latLng); 
      markerOptions.title(title.get(l)); 
      markerOptions.snippet(description.get(l)); 

      mMap.addMarker(markerOptions); 

      bounds.include(new LatLng(lat2, lng2)); 
      num++; 
     } 

     if (num == 1) 
     { 
// if only 1 marker 
      LatLng latLng2 = new LatLng(lat2, lng2); 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng2, 16)); 
     } 
     else 
     { 
// more than 1 marker 
      mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(), 150)); 
     } 
    } 

嗨對不起,我沒有更早我正在試圖解決這個問題答覆。我設法解決這個問題,但這是否是正確的解決方法?

回答

0

您所做的修改應該可以解決您的問題。無論如何,如果只有1個標記,則不需要設置新的LatLng。通過界限應該這樣做。我會做這個小編輯:

if (num == 1) 
    { 
// if only 1 marker 
     mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(bounds.build(), 16)); 
    } 
    else 
    { 
// more than 1 marker 
     mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(), 150)); 
    } 

希望它有幫助。祝你好運!

+0

在類型CameraUpdateFactory的方法newLatLngZoom(經緯度,浮動)不適用的參數(的LatLngBounds,INT)那是錯誤,我得到當我把它更改爲編輯 – user3388630

+0

Sry基因忘了恰克'newLatLngZoom'爲'newLatLngBounds' 。改變這一點,然後爲你的口味提供一個界限值。 (明顯高於150)。 – margabro

0

你的代碼並沒有真正說明你爲什麼使用.newLatLngBounds(),但是這會將地圖放在給定的邊界框上,並考慮給定的150px填充。

然後根據邊界框內的元素調整縮放以顯示所有縮放。當盒子裏只有一個標記時,它會放大(也可能太靠近)。該文件說,地圖將居中「at the greatest possible zoom level」。

所以爲了防止這種情況,我會爲第一個標記選擇一個很好的縮放級別,添加它,移動相機moveCamera(...),然後在剩下其他標記時繼續執行代碼。