Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        /// <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();
                }
            }
        }