private void ProcessReadMapData(RenderContext renderContext, MapReadResult mapReadResult) { if (mapReadResult == null) { return; } foreach (PointOfInterest pointOfInterest in mapReadResult.PointOfInterests) { RenderPointOfInterest(renderContext, pointOfInterest); } foreach (Way way in mapReadResult.Ways) { RenderWay(renderContext, new PolylineContainer(way, renderContext.rendererJob.tile)); } if (mapReadResult.IsWater) { RenderWaterBackground(renderContext); } }
/// <summary> /// Called when a job needs to be executed. /// </summary> /// <param name="rendererJob"> /// the job that should be executed. </param> public virtual ITileBitmap ExecuteJob(RendererJob rendererJob) { RenderTheme renderTheme; try { // Wait until RenderTheme is ready renderTheme = rendererJob.renderThemeFuture.Result; } catch (Exception e) { LOGGER.Fatal("Error to retrieve render theme from future", e); return(null); } RenderContext renderContext = null; try { renderContext = new RenderContext(renderTheme, rendererJob, new CanvasRasterer(graphicFactory)); if (RenderBitmap(renderContext)) { ITileBitmap bitmap = null; if (this.mapDatabase != null) { MapReadResult mapReadResult = this.mapDatabase.ReadMapData(rendererJob.tile); ProcessReadMapData(renderContext, mapReadResult); } if (!rendererJob.labelsOnly) { bitmap = this.graphicFactory.CreateTileBitmap(renderContext.rendererJob.tile.TileSize, renderContext.rendererJob.hasAlpha); bitmap.Timestamp = rendererJob.mapDataStore.GetDataTimestamp(renderContext.rendererJob.tile); renderContext.canvasRasterer.CanvasBitmap = bitmap; if (!rendererJob.hasAlpha && rendererJob.displayModel.BackgroundColor != renderContext.renderTheme.MapBackground) { renderContext.canvasRasterer.Fill(renderContext.renderTheme.MapBackground); } renderContext.canvasRasterer.DrawWays(renderContext); } if (renderLabels) { ISet <MapElementContainer> labelsToDraw = ProcessLabels(renderContext); // now draw the ways and the labels renderContext.canvasRasterer.DrawMapElements(labelsToDraw, renderContext.rendererJob.tile); } else { // store elements for this tile in the label cache this.labelStore.StoreMapItems(renderContext.rendererJob.tile, renderContext.labels); } if (!rendererJob.labelsOnly && renderContext.renderTheme.HasMapBackgroundOutside()) { // blank out all areas outside of map Rectangle insideArea = this.mapDatabase.BoundingBox.GetPositionRelativeToTile(renderContext.rendererJob.tile); if (!rendererJob.hasAlpha) { renderContext.canvasRasterer.FillOutsideAreas(renderContext.renderTheme.MapBackgroundOutside, insideArea); } else { renderContext.canvasRasterer.FillOutsideAreas(Color.TRANSPARENT, insideArea); } } return(bitmap); } // outside of map area with background defined: return(CreateBackgroundBitmap(renderContext)); } finally { if (renderContext != null) { renderContext.Destroy(); } } }