Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android地图自动缩放_Android - Fatal编程技术网

Android地图自动缩放

Android地图自动缩放,android,Android,嗨,我对在地图上显示点有点小问题。 我使用Arraylist存储多个lat/lng值,然后执行for循环以添加点和自动缩放。当有2个或更多标记时,一切正常。问题是,当只添加一个标记时,它会放大得太近 有人知道如何解决这个问题吗 public static void processMap() { for (int i = 0; i < lat.size(); i++) { MarkerOptions markerOptions = new MarkerOpt

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

有人知道如何解决这个问题吗

 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));
}
publicstaticvoidprocessmap()
{
对于(int i=0;i
更新代码

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));
        }
    }
publicstaticvoidprocessmap()
{
int num=0;
双lat2=0;
双lng2=0;
对于(int l=0;l

嗨,很抱歉,我之前没有回复,我正在尝试解决问题。我设法修复了它,但这是正确的方法吗?

您的代码并不能真正说明为什么要使用
.newLatLngBounds()
,但这将使贴图集中在给定的边界框上,并考虑框周围给定的150px填充

然后根据边界框内的元素调整缩放以显示所有元素。当框内只有一个标记时,它将缩放到该标记(可能太近)。文件上说地图将以“”为中心


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

您所做的编辑应该可以解决您的问题。无论如何,如果你只有一个标记,你不需要设置新的板条。通过边界就可以了。我会做一个小小的编辑:

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

希望能有帮助。祝你好运

CameraUpdateFactory类型中的newLatLngZoom(LatLng,float)方法不适用于参数(LatLngBounds,int),这是我在将其更改为您的编辑时遇到的错误。我忘记更改
newLatLngZoom
newLatLngBounds
。更改该值,然后根据您的喜好为边界设置一个值。(明显高于150)。