public override void Draw(DrawingContext drawingContext, MapArea viewarea, double zoomRate) { List <PointInt> positions = collector.ToList().ConvertAll <PointInt>( new Converter <PointLatLng, PointInt>(ptll => { return(BingMapTileSystem.LatLngToPixelXY(ptll, MapCore.Level)); })); foreach (PointInt pt in positions) { drawingContext.DrawEllipse(Brushes.Black, new Pen(), new Point((pt.X - viewarea.Area.X) * zoomRate, (pt.Y - viewarea.Area.Y) * zoomRate), radius, radius); } base.Draw(drawingContext, viewarea, zoomRate); }
public override void Draw(DrawingContext drawingContext, MapArea viewarea, double zoomRate) { int height = viewarea.Area.Height; int width = viewarea.Area.Width; if (height == 0 || width == 0) { return; } if (MapCore.IsDragging) { return; } positions = collector.ToList().ConvertAll <PointInt>( new Converter <PointLatLng, PointInt>(ptll => { return(BingMapTileSystem.LatLngToPixelXY(ptll, MapCore.Level)); })); DrawingVisual visual = new DrawingVisual(); DrawingContext dc = visual.RenderOpen(); for (int i = 0; i < positions.Count; i++) { dc.DrawEllipse(HeatMapHelper.CreateBrush((byte)Density, GradientStop), null, new Point(positions[i].X - viewarea.Area.X, positions[i].Y - viewarea.Area.Y), CircleRadius, CircleRadius); } dc.Close(); RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32); rtb.Render(visual); WriteableBitmap bmp = new WriteableBitmap(rtb); bmp.Lock(); for (int i = 0; i < bmp.PixelHeight; i++) { for (int j = 0; j < bmp.PixelWidth; j++) { bmp.SetPixelWithoutLock(i, j, palette); } } bmp.AddDirtyRect(new Int32Rect(0, 0, bmp.PixelWidth, bmp.PixelHeight)); bmp.Unlock(); image.Source = bmp; image.Width = viewarea.Area.Width * zoomRate; image.Height = viewarea.Area.Height * zoomRate; base.Draw(drawingContext, viewarea, zoomRate); }
public override void Draw(DrawingContext drawingContext, MapArea viewarea, double zoomRate) { List <PointInt> positions = collector.ToList().ConvertAll <PointInt>( new Converter <PointLatLng, PointInt>(ptll => { return(BingMapTileSystem.LatLngToPixelXY(ptll, MapCore.Level)); })); for (int i = 0; i < positions.Count; i++) { drawingContext.DrawEllipse(Brushes.Black, new Pen(), new Point((positions[i].X - viewarea.Area.X) * zoomRate, (positions[i].Y - viewarea.Area.Y) * zoomRate), radius, radius); if (i == 0) { continue; } drawingContext.DrawLine(new Pen(Brushes.Blue, 2), new Point((positions[i - 1].X - viewarea.Area.X) * zoomRate, (positions[i - 1].Y - viewarea.Area.Y) * zoomRate), new Point((positions[i].X - viewarea.Area.X) * zoomRate, (positions[i].Y - viewarea.Area.Y) * zoomRate)); } base.Draw(drawingContext, viewarea, zoomRate); }