你好我在地图上显示点有点问题。 我使用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));
}
}
对不起我之前没有回复我试图解决问题。我设法修复它,但这是正确的方法吗?
答案 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));
}
希望它有所帮助。祝你好运!