How to implement Marker Clustering for Google Maps in Xamarin

后端 未结 1 1203
广开言路
广开言路 2021-02-11 02:22

I have implemented Google Maps successfully in my App. I have to implement Marker Clustering for Xamarin Android.

The link here gives a good explanatio

1条回答
  •  伪装坚强ぢ
    2021-02-11 02:56

    You want to use the Xamarin.Android Binding project that includes the android-maps-utils.aar file.

    Note: I have forked an older Github repo that included a binding project and example and updated it to the latest version of android-maps-utils.aar (v0.4.3 as of this post).

    Just clone that repo and copy the entire GoogleMapsUtility project into your Xamarin.Android solution and add that to your solution (via Add Existing Project).

    Then you can create a Google Map like you would normally, i.e.:

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

    Then you can add your Map markers to the ClusterManager and let it manage the clustering:

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

    I modified the original example to create 20 markers in a log. spiral pattern to test the cluster at various zoom levels:

    private void AddClusterItems()
    {
        double lat = 47.59978;
        double lng = -122.3346;
    
        var items = new List();
    
        // 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);
    }
    

    0 讨论(0)
提交回复
热议问题