示例#1
0
        private void NativeMapOnCameraIdle(object sender, EventArgs e)
        {
            var cameraPosition = NativeMap.CameraPosition;

            if (previousCameraPostion == null || Math.Abs(previousCameraPostion.Zoom - cameraPosition.Zoom) > 0.001)
            {
                previousCameraPostion = NativeMap.CameraPosition;
                clusterManager.Cluster();
            }
        }
示例#2
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            InitClustering();
            AddClusterItems();
            clusterManager.Cluster();
        }
示例#3
0
 private void HandleClusterRequest()
 {
     try
     {
         clusterManager.Cluster();
     }
     catch (Exception)
     {
     }
 }
示例#4
0
        async Task SetMapStationPins(Station[] stations, float alpha = 1)
        {
            var stationsToUpdate = stations.Where(station => {
                ClusterMarkerOptions marker;
                var stats = station.Locked ? string.Empty : station.BikeCount + "|" + station.EmptySlotCount;
                if (existingMarkers.TryGetValue(station.Id, out marker))
                {
                    if (marker.Options.Snippet == stats && !showedStale)
                    {
                        return(false);
                    }
                    clusterManager.RemoveItem(marker);
                }
                return(true);
            }).ToList();

            var w = (int)Math.Round(TypedValue.ApplyDimension(ComplexUnitType.Dip, 32, Resources.DisplayMetrics));
            var h = (int)Math.Round(TypedValue.ApplyDimension(ComplexUnitType.Dip, 34, Resources.DisplayMetrics));

            var pins = await Task.Run(() => stationsToUpdate.ToDictionary(station => station.Id, station => {
                if (station.Locked)
                {
                    return(BitmapDescriptorFactory.FromBitmap(pinFactory.GetClosedPin(w, h)));
                }
                var ratio = (float)TruncateDigit(station.BikeCount / ((float)station.Capacity), 2);
                return(BitmapDescriptorFactory.FromFile(pinFactory.GetPin(ratio,
                                                                          station.BikeCount,
                                                                          w, h,
                                                                          alpha: alpha)));
            }));

            var clusterItems = new List <ClusterMarkerOptions> ();

            foreach (var station in stationsToUpdate)
            {
                var pin = pins [station.Id];

                var markerOptions = new MarkerOptions()
                                    .SetTitle(station.Id + "|" + station.Name)
                                    .SetSnippet(station.Locked ? string.Empty : station.BikeCount + "|" + station.EmptySlotCount)
                                    .SetPosition(new Android.Gms.Maps.Model.LatLng(station.Location.Lat, station.Location.Lon))
                                    .SetIcon(pin);
                var markerItem = new ClusterMarkerOptions(markerOptions);
                existingMarkers [station.Id] = markerItem;
                clusterItems.Add(markerItem);
            }
            clusterManager.AddItems(clusterItems);
            clusterManager.Cluster();
        }
        protected override void StartMap()
        {
            googleMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(51.503186, -0.126446), 9.5f));
            clusterManager          = new ClusterManager(this, googleMap);
            clusterManager.Renderer = new PersonRenderer(this, googleMap, clusterManager);
            googleMap.SetOnCameraIdleListener(clusterManager);
            googleMap.SetOnMarkerClickListener(clusterManager);
            googleMap.SetOnInfoWindowClickListener(clusterManager);
            clusterManager.SetOnClusterClickListener(this);
            clusterManager.SetOnClusterItemClickListener(this);
            clusterManager.SetOnClusterInfoWindowClickListener(this);
            clusterManager.SetOnClusterItemInfoWindowClickListener(this);

            AddItems();
            clusterManager.Cluster();
        }
        private void HandleMarkerUpdates(IChangeSet <ClusterMarker, string> changes)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                foreach (var change in changes)
                {
                    if (change.Reason == ChangeReason.Add)
                    {
                        renderedMarkers.Add(change.Current.Id, change.Current);
                        clusterManager.AddItem(change.Current);
                    }
                    else if (change.Reason == ChangeReason.Moved)
                    {
                        // since we aren't sorting we can ignore moves
                    }
                    else if (change.Reason == ChangeReason.Refresh)
                    {
                        // ignore refresh
                    }
                    else if (change.Reason == ChangeReason.Remove)
                    {
                        clusterManager.RemoveItem(renderedMarkers[change.Key]);
                        renderedMarkers[change.Key].Dispose();
                        renderedMarkers.Remove(change.Key);
                    }
                    else if (change.Reason == ChangeReason.Update)
                    {
                        var origMarker = clusterManager.MarkerCollection.Markers.FirstOrDefault(x => x.Title == change.Current.Title);
                        if (origMarker != null)
                        {
                            origMarker.Position         = change.Current.Position;
                            renderedMarkers[change.Key] = change.Current;
                        }
                        else
                        {
                            clusterManager.RemoveItem(renderedMarkers[change.Key]);
                            renderedMarkers[change.Key] = change.Current;
                            clusterManager.AddItem(change.Current);
                        }
                    }
                }

                clusterManager.Cluster();
            });
        }
示例#7
0
        protected override void startDemo(bool isRestore)
        {
            if (!isRestore)
            {
                getMap().MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(51.503186, -0.126446), 9.5f));
            }

            mClusterManager          = new ClusterManager(this, getMap());
            mClusterManager.Renderer = new PersonRenderer(this);
            getMap().SetOnCameraIdleListener(mClusterManager);
            getMap().SetOnMarkerClickListener(mClusterManager);
            getMap().SetOnInfoWindowClickListener(mClusterManager);
            mClusterManager.SetOnClusterClickListener(this);
            mClusterManager.SetOnClusterInfoWindowClickListener(this);
            mClusterManager.SetOnClusterItemClickListener(this);
            mClusterManager.SetOnClusterItemInfoWindowClickListener(this);

            addItems();
            mClusterManager.Cluster();
        }
示例#8
0
        private void SetupMapCluster()
        {
            if (_map != null)
            {
                _clusterManager          = new ClusterManager(this, _map);
                _clusterManager.Renderer = new MarkerRenderer(this, _map, _clusterManager);
                _clusterManager.SetOnClusterClickListener(this);
                _clusterManager.SetOnClusterItemClickListener(this);
                _clusterManager.SetOnClusterItemInfoWindowClickListener(this);
                _clusterManager.MarkerCollection.SetOnInfoWindowAdapter(new CustomInfoAdapter(LayoutInflater.From(this)));

                _map.SetOnCameraIdleListener(_clusterManager);
                _map.SetOnMarkerClickListener(_clusterManager);
                _map.SetOnInfoWindowClickListener(_clusterManager);
                _map.SetInfoWindowAdapter(_clusterManager.MarkerManager);

                AddClusterItems();
                _clusterManager.Cluster();
            }
        }
        private void UpdatePins()
        {
            var mapTile  = (MapTile)Element;
            var pinItems = mapTile.PinList;

            ClusterManager.ClearItems();
            NativeMap.Clear();

            var clusterItems = pinItems.Select(i => new ClusterItem(i)).ToList();

            ClusterManager.AddItems(clusterItems);

            ClusterManager.Cluster();

            if (LocationMarkerOptions.Position != null)
            {
                LocationMarker = NativeMap.AddMarker(LocationMarkerOptions);
            }

            UpdateLocationPinPosition();
        }
 protected override void AddItems(IList newItems)
 {
     base.AddItems(newItems);
     clusterManager.Cluster();
 }