Android映射自动缩放

时间:2014-04-14 18:30:25

标签: android

你好我在地图上显示点有点问题。 我使用Arraylist存储多个lat / lng值,然后执行for循环以添加点和自动缩放。当有2个或更多标记时,一切正常。问题是当只添加1个标记时,它放大得太近。

任何人都知道如何解决这个问题?

 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));
        }
    }

对不起我之前没有回复我试图解决问题。我设法修复它,但这是正确的方法吗?

2 个答案:

答案 0 :(得分:0)

您的代码并没有真正说明您使用.newLatLngBounds()的原因,但这会将地图置于您给定的边界框的中心,并尊重框周围给定的150px填充。

然后根据边界框内的元素调整缩放以显示所有这些元素。如果框内只有一个标记,它将缩放到它(可能太近)。文档说地图将以#34; at the greatest possible zoom level &#34;为中心。

为了防止出现这种情况,我会为第一个标记选择一个好的缩放级别,添加它,使用moveCamera(...)移动相机,然后在剩下其他标记时继续使用代码。

答案 1 :(得分: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));
    }

希望它有所帮助。祝你好运!