private async Task SetMarkerListeners() { if (_listeningLoneMarkerKeys == null) { _listeningLoneMarkerKeys = new List <string>(); } //use GetMappedValue<T> to map and extract the array of guid keys of unclustered markers GoogleMapsComponents.JsObjectRef jsRef = new GoogleMapsComponents.JsObjectRef(JsObjectRef, _markerClustering.Guid); var guidStrings = (await jsRef.GetMappedValue <List <string> >("clusters", "marker", "guidString")) .Where((x) => { return(x != null); }); if (!guidStrings.Any()) { return; } // Among markers not in clusters, find those which don't yet have a listener MarkerList deafLoneMarkersList = await MarkerList.CreateAsync(JsObjectRef, new Dictionary <string, MarkerOptions>()); foreach (var key in guidStrings) { var markr = markers.First(x => key == x.Guid.ToString()); if (_listeningLoneMarkerKeys.Contains(key)) { continue; } deafLoneMarkersList.BaseListableEntities.Add(key, markr); _listeningLoneMarkerKeys.Add(key); } if (!deafLoneMarkersList.BaseListableEntities.Any()) { return; } await deafLoneMarkersList.AddListeners <MouseEvent>(deafLoneMarkersList.Markers.Keys.ToList(), "click", async (o, e) => { //await JsObjectRef.InvokeVoidAsync("loneMarkerClickEvent", e); }); // if all points set, clean up idle listener. if (_listeningLoneMarkerKeys.Count == markers.Count) { _listeningLoneMarkerKeys = null; await _markerClustering.ClearListeners("clusteringend"); } }
private async Task AddMarkersGroup(IEnumerable <LatLngLiteral> coordinates) { if (_markerList == null) { _markerList = await MarkerList.CreateAsync( map1.JsRuntime, coordinates.ToDictionary(s => Guid.NewGuid().ToString(), y => new MarkerOptions() { Position = new LatLngLiteral() { Lng = y.Lng, Lat = y.Lat }, Map = map1.InteropObject, //Icon = new Icon() { Url = s.MarkerIconPath, ScaledSize = iconSize, Anchor = iconAnchor }, Clickable = true, Title = Guid.NewGuid().ToString(), Visible = true }) ); } else { var cordDic = coordinates.ToDictionary(s => Guid.NewGuid().ToString(), y => new MarkerOptions() { Position = new LatLngLiteral() { Lng = y.Lng, Lat = y.Lat }, Map = map1.InteropObject, //Icon = new Icon() { Url = s.MarkerIconPath, ScaledSize = iconSize, Anchor = iconAnchor }, Clickable = true, Title = Guid.NewGuid().ToString(), Visible = true }); await _markerList.AddMultipleAsync(cordDic); } foreach (var latLngLiteral in coordinates) { await bounds.Extend(latLngLiteral); } await FitBounds(); }