2014-04-14 39 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(...),然后在剩下其他标记时继续执行代码。