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

Dil*_*lip 2 android google-maps xamarin.android xamarin google-play-services

我已在我的应用中成功实施了Google地图.我必须为Xamarin Android实现Marker Clustering .

这里的链接提供了关于如何实现的良好解释,但我无法理解如何引用包.

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

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

Sus*_*ver 6

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

注意:我已经分叉了一个旧的Github仓库,其中包括一个绑定项目和示例,并将其更新到最新版本android-maps-utils.aar(v0.4.3截至本文).

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

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

GoogleMapOptions mapOptions = new GoogleMapOptions()
    .InvokeMapType(GoogleMap.MapTypeNormal)
    .InvokeZoomControlsEnabled(true)
    .InvokeMapToolbarEnabled(true)
    .InvokeZoomGesturesEnabled(true)
    .InvokeRotateGesturesEnabled(true)
    .InvokeCompassEnabled(true);
Run Code Online (Sandbox Code Playgroud)

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

_clusterManager = new ClusterManager(this, _map);
_clusterManager.SetOnClusterClickListener(this);
_clusterManager.SetOnClusterItemClickListener(this);
_map.SetOnCameraChangeListener(_clusterManager);
_map.SetOnMarkerClickListener(_clusterManager);
Run Code Online (Sandbox Code Playgroud)

我修改了原始示例以在日志中创建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);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述