7

我在地图上画了很多标记,当它们靠近时,它们会相互重叠。所以我想在小缩放时隐藏一些标记,并在用户缩放地图时显示更多标记。喜欢更多的放大,更多的标记。这是活动和创建标记的示例代码,如您所见,我正在使用 google maps 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 上实现它。有没有人有一些可以做到这一点的工作代码?

4

2 回答 2

4

这是我对这个问题的解决方案:https ://github.com/Bersh/MarkersCluster

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

于 2013-02-06T15:11:34.343 回答
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

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

于 2013-01-31T19:24:00.460 回答