如何在Xamarin中实现Google地图的标记聚类

时间:2016-07-12 08:36:19

标签: android google-maps xamarin xamarin.android google-play-services

我已在我的应用中成功实施了Google地图。我必须为 Xamarin Android实现标记聚类。

这里的link给出了关于如何实现的一个很好的解释,但我无法理解如何引用包。

我收到了一些源文件,但它没有帮助,因为我不知道如何引用jar文件。我得到的文件与Java有关,但与C#无关。以下是几个链接:

https://github.com/googlemaps/android-maps-utils https://forums.xamarin.com/discussion/13569/google-maps-android-api-utility-library-support/p2?

1 个答案:

答案 0 :(得分:5)

您想要使用包含Xamarin.Android文件的android-maps-utils.aar绑定项目。

注意:我有forked一个旧的Github仓库,其中包含一个绑定项目和示例,并将其更新为android-maps-utils.aar的最新版本(截至此帖子为v0.4.3)。

只需克隆该repo并将整个GoogleMapsUtility项目复制到您的Xamarin.Android解决方案中,然后将其添加到您的解决方案中(通过添加现有项目)。

然后您可以像平常一样创建Google地图,例如:

GoogleMapOptions mapOptions = new GoogleMapOptions()
    .InvokeMapType(GoogleMap.MapTypeNormal)
    .InvokeZoomControlsEnabled(true)
    .InvokeMapToolbarEnabled(true)
    .InvokeZoomGesturesEnabled(true)
    .InvokeRotateGesturesEnabled(true)
    .InvokeCompassEnabled(true);

然后,您可以将地图标记添加到ClusterManager并让它管理群集:

_clusterManager = new ClusterManager(this, _map);
_clusterManager.SetOnClusterClickListener(this);
_clusterManager.SetOnClusterItemClickListener(this);
_map.SetOnCameraChangeListener(_clusterManager);
_map.SetOnMarkerClickListener(_clusterManager);

我修改了原始示例,在日志中创建了20个标记。螺旋模式以各种缩放级别测试集群:

private void AddClusterItems()
{
    double lat = 47.59978;
    double lng = -122.3346;

    var items = new List<ClusterItem>();

    // Create a log. spiral of markers to test clustering
    for (int i = 0; i < 20; ++i)
    {
        var t = i * Math.PI * 0.33f;
        var r = 0.005 * Math.Exp(0.1 * t);
        var x = r * Math.Cos(t);
        var y = r * Math.Sin(t);
        var item = new ClusterItem(lat + x, lng + y);
        items.Add(item);
    }
    _clusterManager.AddItems(items);
}

enter image description here