예제 #1
0
        public IList <TileInfo> GetTilesWanted(TileSchema schema, Extent extent, int level)
        {
            IList <TileInfo> infos = new List <TileInfo>();
            int step = 1;

            // Iterating through all levels from current to zero. If lower levels are
            // not availeble the renderer can fall back on higher level tiles.
            while (level >= 0)
            {
                IList <TileInfo> infosOfLevel = schema.GetTilesInView(extent, level);
                infosOfLevel = PrioritizeTiles(infosOfLevel, extent.CenterX, extent.CenterY, sorter);

                foreach (TileInfo info in infosOfLevel)
                {
                    if ((info.Index.Row >= 0) && (info.Index.Col >= 0))
                    {
                        infos.Add(info);
                    }
                }
                level = level - step;
                step++;
            }

            return(infos);
        }
예제 #2
0
        private void DrawRecursive(Canvas canvas, TileSchema schema, ITransform transform, MemoryCache <MemoryStream> memoryCache, Extent extent, int level)
        {
            IList <TileInfo> tiles = schema.GetTilesInView(extent, level);

            foreach (TileInfo tile in tiles)
            {
                MemoryStream image = memoryCache.Find(tile.Index);
                if (image == null)
                {
                    if (level > 0)
                    {
                        DrawRecursive(canvas, schema, transform, memoryCache, tile.Extent.Intersect(extent), level - 1);
                    }
                }
                else
                {
                    Rect   dest    = MapTransformHelper.WorldToMap(tile.Extent, transform);
                    double opacity = DrawImage(canvas, image, dest, tile);
                    if ((opacity < 1) && (level > 0))
                    {
                        DrawRecursive(canvas, schema, transform, memoryCache, tile.Extent.Intersect(extent), level - 1);
                    }
                }
            }
        }
예제 #3
0
 public IEnumerable <TileInfo> GetTilesInView(Extent extent, string levelId)
 {
     return(TileSchema.GetTilesInView(this, extent, levelId));
 }