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); }
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); }
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)); } }
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); }
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)); }
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); }