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(); } }
public override void ViewDidLoad() { base.ViewDidLoad(); InitClustering(); AddClusterItems(); clusterManager.Cluster(); }
private void HandleClusterRequest() { try { clusterManager.Cluster(); } catch (Exception) { } }
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(); }); }
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(); }
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(); }