Example #1
0
        public TestMapOverlay()
        {
            this.strokeWidthArea = SKMapCanvas.PixelsToMaximumMapSizeAtScale(new Size(50, 50), SKMapCanvas.MaxZoomScale);

            baseBounds = new MapSpan(new Position(37, -122), 1, 1);
            GpsBounds  = new MapSpan(baseBounds.Center,
                                     baseBounds.LatitudeDegrees + strokeWidthArea.Height,
                                     baseBounds.LongitudeDegrees + strokeWidthArea.Width);
        }
Example #2
0
        private SKBitmap DrawTileToBitmap(SKMapSpan tileSpan, double zoomScale)
        {
            Rectangle   mercatorSpan = tileSpan.ToMercator();
            SKBitmap    bitmap       = GetOverlayBitmap();
            SKMapCanvas mapCanvas    = new SKMapCanvas(bitmap, mercatorSpan, zoomScale);

            SharedOverlay.DrawOnMap(mapCanvas, tileSpan, zoomScale);
            return(bitmap);
        }
Example #3
0
        public override void DrawMapRect(MKMapRect mapRect, nfloat zoomScale, CGContext context)
        {
            SKMapSpan rectSpan = mapRect.ToMapSpan();

            if (_SharedOverlay.IsVisible && rectSpan.FastIntersects(_SharedOverlay.GpsBounds))
            {
                CGRect      coreDrawRect = RectForMapRect(mapRect);
                SKBitmap    drawBitmap   = GetOverlayBitmap();
                SKMapCanvas mapCanvas    = new SKMapCanvas(drawBitmap, mapRect.ToRectangle(), zoomScale, true);

                _SharedOverlay.DrawOnMap(mapCanvas, rectSpan, zoomScale);

                Console.WriteLine($"Drawing tile for zoom scale {zoomScale} with GPS bounds {mapRect} and Mercator {mapRect.ToRectangle()}");

                context.DrawImage(coreDrawRect, drawBitmap.ToCGImage());

                // Let's exit this method so MapKit renders to screen while we free our resources in the background.
                Task.Run(() => ReleaseOverlayBitmap(drawBitmap));
            }
        }
Example #4
0
        public override void DrawOnMap(SKMapCanvas canvas, SKMapSpan canvasMapRect, double zoomScale)
        {
            SKPaint paint = new SKPaint();

            paint.IsAntialias = true;
            paint.StrokeWidth = 1;
            paint.Color       = Color.Fuchsia.ToSKColor();

            MvxLog.Instance.Log(MvxLogLevel.Trace,
                                () => $"Drawing line with coords \n" +
                                $"[{GpsBounds.Center.Longitude - GpsBounds.LongitudeDegrees - canvasMapRect.LongitudeDegrees}, " +
                                $"{GpsBounds.Center.Latitude - GpsBounds.LatitudeDegrees - canvasMapRect.LatitudeDegrees}; \n" +
                                $" {GpsBounds.Center.Longitude + GpsBounds.LongitudeDegrees}, " +
                                $"{GpsBounds.Center.Latitude + GpsBounds.LatitudeDegrees}]");

            canvas.DrawLine(GpsBounds.Center.Latitude + GpsBounds.LatitudeDegrees - canvasMapRect.LatitudeDegrees,
                            GpsBounds.Center.Longitude + GpsBounds.LongitudeDegrees - canvasMapRect.LongitudeDegrees,
                            GpsBounds.Center.Latitude + GpsBounds.LatitudeDegrees,
                            GpsBounds.Center.Longitude + GpsBounds.LongitudeDegrees,
                            paint);
        }
Example #5
0
        public override void DrawOnMap(SKMapCanvas canvas, SKMapSpan canvasMapRect, double zoomScale)
        {
            SKPaint paint = new SKPaint();

            paint.IsAntialias = true;
            paint.StrokeWidth = 1;
            paint.Color       = Color.Fuchsia.ToSKColor();

            if (canvasMapRect.Center.Latitude > 0)
            {
                canvas.DrawLine(new Position(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees, canvasMapRect.Center.Longitude),
                                new Position(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude + canvasMapRect.LongitudeDegrees),
                                paint);
                canvas.DrawLine(new Position(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude + canvasMapRect.LongitudeDegrees),
                                new Position(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude - canvasMapRect.LongitudeDegrees),
                                paint);
                canvas.DrawLine(new Position(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude - canvasMapRect.LongitudeDegrees),
                                new Position(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees, canvasMapRect.Center.Longitude),
                                paint);
            }
            else
            {
                canvas.DrawLine(new Position(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees, canvasMapRect.Center.Longitude),
                                new Position(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude + canvasMapRect.LongitudeDegrees),
                                paint);
                canvas.DrawLine(new Position(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude + canvasMapRect.LongitudeDegrees),
                                new Position(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude - canvasMapRect.LongitudeDegrees),
                                paint);
                canvas.DrawLine(new Position(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees,
                                             canvasMapRect.Center.Longitude - canvasMapRect.LongitudeDegrees),
                                new Position(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees, canvasMapRect.Center.Longitude),
                                paint);
            }

            paint.Style       = SKPaintStyle.Stroke;
            paint.StrokeWidth = 10;
            paint.StrokeCap   = SKStrokeCap.Round;
            paint.StrokeJoin  = SKStrokeJoin.Round;
            paint.Color       = Color.Red.ToSKColor();
            SKMapPath zonePath = canvas.CreateEmptyMapPath();

            zonePath.MoveTo((float)(baseBounds.Center.Latitude - baseBounds.LatitudeDegrees), (float)baseBounds.Center.Longitude);
            zonePath.LineTo((float)(baseBounds.Center.Latitude + baseBounds.LatitudeDegrees), (float)(baseBounds.Center.Longitude + baseBounds.LongitudeDegrees));
            zonePath.LineTo((float)(baseBounds.Center.Latitude + baseBounds.LatitudeDegrees), (float)(baseBounds.Center.Longitude - baseBounds.LongitudeDegrees));
            zonePath.Close();

            canvas.DrawPath(zonePath, paint);

            paint.Color = Color.Green.MultiplyAlpha(0.5).ToSKColor();
            Size    currentScaleStrokeArea = SKMapCanvas.PixelsToMapSizeAtScale(new Size(5, 5), baseBounds.Center, zoomScale);
            MapSpan insetBounds            = new MapSpan(baseBounds.Center,
                                                         baseBounds.LatitudeDegrees - currentScaleStrokeArea.Height,
                                                         baseBounds.LongitudeDegrees - currentScaleStrokeArea.Width);

            canvas.DrawRect(insetBounds, paint);

            paint.StrokeWidth = 1;
            paint.Color       = Color.Black.ToSKColor();
            canvas.DrawRect(baseBounds, paint);

            paint.Color = Color.Black.ToSKColor();
            canvas.DrawRect(GpsBounds, paint);

            IResourceLocator resLocator = Mvx.IoCProvider.Resolve <IResourceLocator>();
            string           resPath    = resLocator.GetResourcePath(ResourceKeys.ImagesKey, "symbol_logo.svg");
            SKSvg            logoSvg    = new SKSvg();

            logoSvg.Load(resLocator.ResourcesAssembly.GetManifestResourceStream(resPath));
            canvas.DrawPicture(logoSvg.Picture, baseBounds.Center, new Size(100, 100));
        }
Example #6
0
        public override void DrawOnMap(SKMapCanvas canvas, SKMapSpan canvasMapRect, double zoomScale)
        {
            SKPaint paint = new SKPaint();

            paint.IsAntialias = true;
            paint.StrokeWidth = 1;
            paint.Color       = Color.Fuchsia.ToSKColor();

            if (canvasMapRect.Center.Latitude > 0)
            {
                canvas.DrawLine(canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees,
                                canvasMapRect.Center.Longitude - canvasMapRect.LongitudeDegrees,
                                canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees,
                                canvasMapRect.Center.Longitude + canvasMapRect.LongitudeDegrees,
                                paint);
            }
            else
            {
                canvas.DrawLine(canvasMapRect.Center.Latitude + canvasMapRect.LatitudeDegrees,
                                canvasMapRect.Center.Longitude - canvasMapRect.LongitudeDegrees,
                                canvasMapRect.Center.Latitude - canvasMapRect.LatitudeDegrees,
                                canvasMapRect.Center.Longitude + canvasMapRect.LongitudeDegrees,
                                paint);
            }

            paint.StrokeWidth = 5;
            paint.Color       = Color.Blue.ToSKColor();

            canvas.DrawLine(baseBounds.Center.Latitude + baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude + baseBounds.LongitudeDegrees,
                            baseBounds.Center.Latitude - baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude - baseBounds.LongitudeDegrees,
                            paint);

            canvas.DrawLine(baseBounds.Center.Latitude - baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude + baseBounds.LongitudeDegrees,
                            baseBounds.Center.Latitude + baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude - baseBounds.LongitudeDegrees,
                            paint);

            paint.Color = Color.Red.ToSKColor();

            canvas.DrawLine(baseBounds.Center.Latitude + baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude + baseBounds.LongitudeDegrees,
                            baseBounds.Center.Latitude - baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude - baseBounds.LongitudeDegrees,
                            paint,
                            false);

            canvas.DrawLine(baseBounds.Center.Latitude - baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude + baseBounds.LongitudeDegrees,
                            baseBounds.Center.Latitude + baseBounds.LatitudeDegrees,
                            baseBounds.Center.Longitude - baseBounds.LongitudeDegrees,
                            paint,
                            false);
            paint.StrokeWidth = 5;
            paint.Color       = Color.Orange.ToSKColor();

            canvas.DrawLine(GpsBounds.Center.Latitude + GpsBounds.LatitudeDegrees,
                            GpsBounds.Center.Longitude - GpsBounds.LongitudeDegrees,
                            GpsBounds.Center.Latitude - GpsBounds.LatitudeDegrees,
                            GpsBounds.Center.Longitude + GpsBounds.LongitudeDegrees,
                            paint,
                            false);

            canvas.DrawLine(GpsBounds.Center.Latitude + GpsBounds.LatitudeDegrees,
                            GpsBounds.Center.Longitude + GpsBounds.LongitudeDegrees,
                            GpsBounds.Center.Latitude - GpsBounds.LatitudeDegrees,
                            GpsBounds.Center.Longitude - GpsBounds.LongitudeDegrees,
                            paint,
                            false);
        }