public static ReportInfo GetRDLRouteMap(IUnitOfWork uow, RouteList routeList, bool batchPrint) { string documentName = "RouteMap"; XmlDocument rdlText = new XmlDocument(); XmlNamespaceManager namespaces = new XmlNamespaceManager(rdlText.NameTable); namespaces.AddNamespace("r", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"); rdlText.Load(Path.Combine(Environment.CurrentDirectory, "Reports/Logistic/" + documentName + ".rdl")); var imageData = rdlText.DocumentElement.SelectSingleNode("/r:Report/r:EmbeddedImages/r:EmbeddedImage[@Name=\"map\"]/r:ImageData", namespaces); var map = new GMapControl { MapProvider = GMapProviders.OpenCycleMap, MaxZoom = 18, RoutesEnabled = true, MarkersEnabled = true }; GMapOverlay routeOverlay = new GMapOverlay("route"); using (var calc = new RouteGeometryCalculator(DistanceProvider.Osrm)) { MapDrawingHelper.DrawRoute(routeOverlay, routeList, calc); } GMapOverlay addressesOverlay = new GMapOverlay("addresses"); MapDrawingHelper.DrawAddressesOfRoute(addressesOverlay, routeList); map.Overlays.Add(routeOverlay); map.Overlays.Add(addressesOverlay); map.SetFakeAllocationSize(new Gdk.Rectangle(0, 0, 900, 900)); map.ZoomAndCenterRoutes("route"); byte[] img; using (var bitmap = map.ToBitmap((int count) => _logger.Info("Загружаем плитки карты(осталось {0})...", count), !batchPrint)) { using (MemoryStream stream = new MemoryStream()) { bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png); img = stream.ToArray(); } } string base64image = Convert.ToBase64String(img); imageData.InnerText = base64image; return(new ReportInfo { Title = $"Карта маршрута № { routeList.Id }", Source = rdlText.InnerXml, Parameters = new Dictionary <string, object> { { "route_id", routeList.Id } } }); }