private async void DrawPokemonsHeatMap(CancellationToken token)
        {
            await Dispatcher.BeginInvoke(new ThreadStart(delegate
            {
                foreach (var p in _pokemons.Values)
                {
                    RouteCreatorMap.Markers.Remove(p);
                }
            }));

            _pokemons.Clear();

            var pokeList = _mappedPokemons.ToList();

            var heatMapMarkers =
                await HeatMapHelper.GuildPokemonSeenHeatMap(pokeList, _globalSettings.HeatMapClusterRadius, Dispatcher, token);

            if (heatMapMarkers == null)
            {
                return;
            }
            await Dispatcher.BeginInvoke(new ThreadStart(delegate
            {
                foreach (var marker in heatMapMarkers)
                {
                    if (_pokemons.ContainsKey(marker.Key))
                    {
                        continue;
                    }

                    _pokemons.Add(marker.Key, marker.Value);
                    RouteCreatorMap.Markers.Add(marker.Value);
                }
            }));
        }
        private void RoutesListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var lb = sender as ListBox;

            if (lb == null || lb.SelectedIndex < 0)
            {
                return;
            }
            var selectedRoute = lb.SelectedItem as BotRoute;

            if (selectedRoute == null)
            {
                return;
            }
            ClearRouteBuilder();
            var start = true;

            foreach (var wp in selectedRoute.InitialWp)
            {
                CreateNewMarker(new PointLatLng(wp.Latitude, wp.Longitude), start);
                if (start)
                {
                    start = false;
                }
            }
            double dist;
            var    mid =
                HeatMapHelper.GetMidPointAndRadius(
                    selectedRoute.InitialWp.Select(x => new PointLatLng(x.Latitude, x.Longitude)), out dist);

            RunDataTasks(mid, dist);
            RouteCreatorMap.ZoomAndCenterMarkers(null);
        }
        private void Render()
        {
            try
            {
                if (_isLoaded && _map != null)
                {
                    var locationsStr = Locations?.Positions.Select(c =>
                    {
                        Windows.Foundation.Point p;

                        _map.GetOffsetFromLocation(new Geopoint(c), out p);

                        return(p);
                    })
                                       .Select(l => $"{l.X},{l.Y}")
                                       .Aggregate((x, y) => $"{x}|{y}");

                    var      zoom             = _formsMap.GetZoomLevel();
                    var      renderParameters = HeatMapHelper.GetRenderParameters(locationsStr, _radius, _minRadius, zoom + 2);
                    string[] args             = { renderParameters.Locations, renderParameters.Radius, renderParameters.Zoom };

                    InvokeJS("Render", args);
                }
            }
            catch { }
        }
Example #4
0
        private void Render()
        {
            var locationsStr = Locations?.Select(c => LatLngToPoint(c, _map))
                               .Select(l => $"{l.X},{l.Y}")
                               .Aggregate((x, y) => $"{x}|{y}");

            var zoom             = _formsMap.GetZoomLevel();
            var renderParameters = HeatMapHelper.GetRenderParameters(locationsStr, _radius, _minRadius, zoom + 3);

            _baseWebView.EvaluateJavascript($"Render('{renderParameters.Locations}', '{renderParameters.Radius}', '{renderParameters.Zoom}');", null);
        }
        private void SetOptions()
        {
            if (_baseWebView == null)
            {
                return;
            }

            var options = HeatMapHelper.GetOptionsJson(_intensity);

            ExecuteScript($"SetOptions(\"{options}\", 'true');");
        }
        private void Render()
        {
            if (_baseWebView == null)
            {
                return;
            }

            var locationsStr = Locations?.Select(c => GetCoordinateProjection(c, _map))
                               .Select(l => $"{l.X},{l.Y}")
                               .Aggregate((x, y) => $"{x}|{y}");

            var zoom             = _formsMap.GetZoomLevel();
            var renderParameters = HeatMapHelper.GetRenderParameters(locationsStr, _radius, _minRadius, zoom + 2);

            ExecuteScript($"Render('{renderParameters.Locations}', '{renderParameters.Radius}', '{renderParameters.Zoom}');");
        }
        public void DidReceiveScriptMessage(WKUserContentController userContentController, WKScriptMessage message)
        {
            try
            {
                var data       = message.Body.ToString();
                var imageBytes = HeatMapHelper.GetHeatMapImageBytes(data);

                NSData  imageData = NSData.FromArray(imageBytes);
                UIImage image     = UIImage.LoadFromData(imageData);

                _img.Image  = image;
                _img.Hidden = false;
            }
            catch (System.Exception e)
            {
                System.Diagnostics.Debug.WriteLine($"Error decoding heat map image: {e}");
            }
        }
Example #8
0
        public void HeatMapRenderCallback(string base64img)
        {
            var activity = Xamarin.Forms.Forms.Context as Activity;

            activity?.RunOnUiThread(async() =>
            {
                try
                {
                    var imageBytes     = HeatMapHelper.GetHeatMapImageBytes(base64img);
                    Bitmap decodedByte = await BitmapFactory.DecodeByteArrayAsync(imageBytes, 0, imageBytes.Length);

                    _img.SetImageBitmap(decodedByte);
                    _img.Visibility = Android.Views.ViewStates.Visible;
                }
                catch (System.Exception e)
                {
                    System.Diagnostics.Debug.WriteLine($"Error decoding heat map image: {e}");
                }
            });
        }
        private async void BaseWebViewScriptNotify(object sender, NotifyEventArgs e)
        {
            try
            {
                var bmp        = new BitmapImage();
                var imageBytes = HeatMapHelper.GetHeatMapImageBytes(e.Value);

                using (var ms = new Windows.Storage.Streams.InMemoryRandomAccessStream())
                {
                    using (var writer = new Windows.Storage.Streams.DataWriter(ms.GetOutputStreamAt(0)))
                    {
                        writer.WriteBytes(imageBytes);
                        await writer.StoreAsync();
                    }

                    await bmp.SetSourceAsync(ms);
                }

                imageBytes      = null;
                _img.Source     = bmp;
                _img.Visibility = Windows.UI.Xaml.Visibility.Visible;
            }
            catch { }
        }
Example #10
0
        private void SetOptions()
        {
            var options = HeatMapHelper.GetOptionsJson(_intensity);

            _baseWebView.EvaluateJavascript($"SetOptions(\"{options}\", 'true');", null);
        }
Example #11
0
        private void LoadHeatMap()
        {
            var options = HeatMapHelper.GetOptionsJson(_intensity);

            _baseWebView.EvaluateJavascript($"LoadHeatMap(\"{options}\");", null);
        }
Example #12
0
        private static void Main(string[] args)
        {
            foreach (var slideName in Util.GetSlideFilenames(args))
            {
                using (var slideCache = new SlideCache(slideName)){
                    var scale    = 0.5f;
                    var tileSize = 500;
                    var slidePartitionerFileName = slideCache.DataPath + "BudDetection.Buds.xml";
                    var slidePartitioner         = File.Exists(slidePartitionerFileName)?SlidePartitioner <int?>
                                                   .Load(slidePartitionerFileName):new SlidePartitioner <int?>(slideCache.Slide, scale, new Size(tileSize, tileSize));

                    var heatMapHelper = new HeatMapHelper(slideCache.GetImage("tissueHeatMap"));
                    var budCountRange = new Range <int>();

                    foreach (var tile in slidePartitioner.Values)
                    {
                        if (tile.Data.HasValue)
                        {
                            Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ":" + tile.Data.Value + " skipped");
                            budCountRange.Add(tile.Data.Value);
                            continue;
                        }

                        var colors = heatMapHelper.GetAffectedColors(slideCache.Slide.Size, tile.SourceArea);
                        var values = heatMapHelper.GetAffectedValues(slideCache.Slide.Size, tile.SourceArea);
                        if (values.All(v => 0 != v))
                        {
                            Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ": no tissue");
                            continue;
                        }

                        using (var tileImage = slideCache.Slide.GetImagePart(tile)){
                            if (false)
                            {
                                var tileCache = slideCache.GetTileCache(tile.Index);
                                tileCache.SetImage("rgb", tileImage);                               //speichert unter C:\ProgramData\processingRepository\[slideCache.SlideName]\[Index]\... ansonsten tileImage.Save("[uri].png")
                            }
                            var r = BudDetection.Detector.Execute(tileImage);
                            //var r = ColorDeconvolution.Detect(tileImage);
                            var layer = r.Value;
                            tile.Data = layer.Objects.Count;
                            budCountRange.Add(layer.Objects.Count);
                            foreach (var io in layer.Objects)
                            {
                                //var bb=io.Contour.FindBoundingBox();
                                var offset       = tile.SourceArea.Location;
                                var sourcePoints = new List <Point>();
                                foreach (var contourPoint in io.Contour.GetPoints())
                                {
                                    double x           = Math.Round(contourPoint.X / scale + offset.X);
                                    double y           = Math.Round(contourPoint.Y / scale + offset.Y);
                                    var    sourcePoint = new Point((int)x, (int)y);
                                    sourcePoints.Add(sourcePoint);
                                }
                                var annotation = slideCache.Slide.CreateAnnotation(AnnotationType.PolygonLine);
                                foreach (var point in sourcePoints)
                                {
                                    annotation.AppendPoints(point);
                                }
                                annotation.Color = Color.OrangeRed;
                                annotation.Name  = null == io.Class?"bud":io.Class.Name;
                            }
                        }
                        Console.WriteLine(slideCache.SlideName + "-" + tile.Index + " done");
                        if (Console.KeyAvailable)
                        {
                            break;
                        }
                    }
                    slidePartitioner.Save(slidePartitionerFileName);
                    using (var heatMap = slidePartitioner.GenerateHeatMap(b => {
                        if (!b.HasValue)
                        {
                            return(Color.LightSeaGreen);
                        }
                        var c = (int)Math.Round(budCountRange.Normalize(b.Value) * 255d);
                        return(Color.FromArgb(c, c, c));
                    }))
                        slideCache.SetImage("budHeatMap", heatMap);
                }
            }
        }
        private void SetOptions()
        {
            var options = HeatMapHelper.GetOptionsJson(_intensity);

            InvokeJS("SetOptions", new string[] { options, "true" });
        }
        private void LoadHeatMap()
        {
            var options = HeatMapHelper.GetOptionsJson(_intensity);

            InvokeJS("LoadHeatMap", new string[] { options });
        }
Example #15
0
        private static void Main(string[] args)
        {
            foreach (var slideName in Util.GetSlideFilenames(args))
            {
                using (var slideCache = new SlideCache(slideName)){
                    // var scale = 0.1f;
                    var scale    = 0.5f; // besser so laut 19.07.2018
                    var tileSize = 100;
                    var slidePartitionerFileName = slideCache.DataPath + "BudDetection.Buds.xml";
                    var slidePartitioner         = File.Exists(slidePartitionerFileName)?SlidePartitioner <int?> .Load(slidePartitionerFileName):new SlidePartitioner <int?>(slideCache.Slide, scale, new Size(tileSize, tileSize));

                    var heatMapHelper = new HeatMapHelper(slideCache.GetImage("tissueHeatMap"));
                    var budCountRange = new Range <int>();
                    var counter       = 0;

                    foreach (var tile in slidePartitioner.Values)
                    {
                        // test, ob schon was für die kackel berechnet wurde
                        if (tile.Data.HasValue)
                        {
                            Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ":" + tile.Data.Value + " skipped");
                            budCountRange.Add(tile.Data.Value);
                            continue;
                        }

                        // soll kachel bearbeitet werden
                        var colors = heatMapHelper.GetAffectedColors(slideCache.Slide.Size, tile.SourceArea);
                        var values = heatMapHelper.GetAffectedValues(slideCache.Slide.Size, tile.SourceArea);
                        if (values.All(v => 255 == v))                      // 255 weiß
                        {
                            Console.WriteLine(slideCache.SlideName + "-" + tile.Index + ": no tissue");
                            continue;
                        }

                        using (var tileImage = slideCache.Slide.GetImagePart(tile)){
                            counter = counter + 1;

                            if (false)
                            {
                                var tileCache = slideCache.GetTileCache(tile.Index);
                                tileCache.SetImage("rgb", tileImage);                               //speichert unter C:\ProgramData\processingRepository\[slideCache.SlideName]\[Index]\... ansonsten tileImage.Save("[uri].png")
                            }

                            var r     = BudDetection.Detector.Execute(tileImage);                         // importent call
                            var layer = r.Value;

                            tile.Data = layer.Objects.Count;
                            budCountRange.Add(layer.Objects.Count);

                            // für alle gefundene objekte wird eine annotation angelegt
                            foreach (var io in layer.Objects)
                            {
                                //var bb=io.Contour.FindBoundingBox();
                                var offset       = tile.SourceArea.Location;
                                var sourcePoints = new List <Point>();
                                foreach (var contourPoint in io.Contour.GetPoints())
                                {
                                    double x           = Math.Round(contourPoint.X / scale + offset.X);
                                    double y           = Math.Round(contourPoint.Y / scale + offset.Y);
                                    var    sourcePoint = new Point((int)x, (int)y);
                                    sourcePoints.Add(sourcePoint);
                                }
                                var annotation = slideCache.Slide.CreateAnnotation(AnnotationType.PolygonLine);
                                foreach (var point in sourcePoints)
                                {
                                    annotation.AppendPoints(point);
                                }
                                annotation.Color = Color.PaleVioletRed;
                                annotation.Name  = null == io.Class?"bud":io.Class.Name;
                            }
                        }
                        if (counter % 100 == 0)
                        {
                            Console.WriteLine(slideCache.SlideName + "-" + tile.Index + " done");
                        }

                        if (Console.KeyAvailable)
                        {
                            break;
                        }
                    }

                    slidePartitioner.Save(slidePartitionerFileName);

                    // normalisierung
                    using (var heatMap = slidePartitioner.GenerateHeatMap(b => {
                        if (!b.HasValue)
                        {
                            return(Color.LightSeaGreen);
                        }
                        var c = (int)Math.Round(budCountRange.Normalize(b.Value) * 255d);
                        return(Color.FromArgb(c, c, c));                      // grauwert(hell == viele butts)
                    }))

                        slideCache.SetImage("budHeatMap", heatMap);
                }
            }
        }