//DrawingVisual Approach public Path AsTileUsingDrawingVisual(List <SqlGeometry> geometries, List <string> labels, double mapScale, TileInfo region, double tileWidth, double tileHeight, RectangleGeometry area, Func <Point, Point> viewTransform, sb.BoundingBox totalExtent) { if (geometries == null) { return(null); } //Pen pen = new Pen(this.VisualParameters.Stroke, this.VisualParameters.StrokeThickness); //if (this.VisualParameters.DashStyle != null) //{ // pen.DashStyle = this.VisualParameters.DashStyle; //} var pen = this.VisualParameters.GetWpfPen(); Brush brush = this.VisualParameters.Fill; var transform = MapToTileScreenWpf(totalExtent, region.WebMercatorExtent, viewTransform); var drawingVisual = new SqlSpatialToDrawingVisual().ParseSqlGeometry(geometries, transform, pen, brush, this.VisualParameters.PointSize, this.PointSymbol); RenderTargetBitmap image = new RenderTargetBitmap((int)tileWidth, (int)tileHeight, 96, 96, PixelFormats.Pbgra32); image.Render(drawingVisual); if (labels != null) { this.DrawLabels(labels, geometries, image, transform); } image.Freeze(); Path path = new Path() { Data = area, Tag = new LayerTag(mapScale) { Layer = this, IsTiled = true, Tile = region, IsDrawn = true, IsNew = true } }; this.Element = path; path.Fill = new ImageBrush(image); return(path); }
//DrawingVisual Approach public Path AsDrawingVisual(List <SqlGeometry> geometries, List <string> labels, double mapScale, sb.BoundingBox exactCurrentExtent, double width, double height, Func <Point, Point> mapToScreen, RectangleGeometry area) { if (geometries == null) { return(null); } //Pen pen = new Pen(this.VisualParameters.Stroke, this.VisualParameters.StrokeThickness); //pen.DashStyle = this.VisualParameters.DashStyle; var pen = this.VisualParameters.GetWpfPen(); Brush brush = this.VisualParameters.Fill; DrawingVisual drawingVisual = new SqlSpatialToDrawingVisual().ParseSqlGeometry(geometries, i => mapToScreen(i), pen, brush, this.VisualParameters.PointSize, this.PointSymbol); RenderTargetBitmap image = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Pbgra32); image.Render(drawingVisual); if (this.IsLabeled(mapScale)) { this.DrawLabels(labels, geometries, image, mapToScreen); } image.Freeze(); Path path = new Path() { Data = area, Tag = new LayerTag(mapScale) { Layer = this, IsTiled = false } }; this.Element = path; path.Fill = new ImageBrush(image); return(path); }