显示或隐藏标记取决于缩放级别

时间:2013-01-31 08:58:36

标签: android google-maps-android-api-2

我在地图上绘制了很多标记,当它们靠近时它们相互重叠。因此,我希望在小缩放时隐藏一些标记,并在用户缩放地图时显示更多标记。像更多放大,更多标记。这里是活动的示例代码和标记的创建,你可以看到我正在使用谷歌地图android api v2:

public class MainActivity extends FragmentActivity
{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    map.getUiSettings().setMyLocationButtonEnabled(true);
    createMarkers(map);
}

private void createMarkers(GoogleMap map) {
    double initLat = 48.462740;
    double initLng = 35.039572;
    for(float i = 0; i < 2; i+=0.2) {
        LatLng pos = new LatLng(initLat + i,initLng);
        map.addMarker(new MarkerOptions()
                .position(pos)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
    }
    for(float i = 0; i < 2; i+=0.2) {
        LatLng pos = new LatLng(initLat, initLng + i);
        map.addMarker(new MarkerOptions()
                .position(pos)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
    }
}

对我来说这听起来像是一项典型的任务,但我仍然无法找到合适的解决方案。我已经阅读了这篇文章https://developers.google.com/maps/articles/toomanymarkers,但我不知道如何在android上实现它。有人有一些可以做到这一点的工作代码吗?

2 个答案:

答案 0 :(得分:4)

以下是我对此问题的解决方案:https://github.com/Bersh/MarkersCluster

也许这不是最好的解决方案,但它对我有用。希望它有用。

答案 1 :(得分:3)

您基本上是在询问如何在Android上实施群集。据我所知,谷歌没有提供解决方案。您在评论中引用的文档(developers.google.com/maps/articles/toomanymarkers)指的是google maps javascript API。不幸的是,Android上还没有任何与群集相关的代码。

您必须提出自己的算法来聚类标记。您指向的developers.google.com/maps/articles/toomanymarkers文档可能是确定哪种算法最适合您的良好起点(基于网格的群集,基于距离的群集等)。

另一个稍微容易实现(但并不完美)的选项可能是在缩放级别发生变化时将标记图像更改为较小的图标,这样它们就不会重叠太多。看看我对这个问题的回答:https://stackoverflow.com/a/13976080/1103584

您可以使用该答案来确定何时超过“缩放阈值”,并在缩小超过某个阈值时将标记更改为较小的值,并在放大后将图标更改为较大的图像。我在几个自己的应用程序中使用此技巧,在缩小时将常规图标更改为小点图像,并在放大时将其更改为常规图标。