public TileDef[] GetTiles(int levelOfDetail, Rect requestRect, out int width, out int height) { uint tileCountOfWidth = GetMapSize(levelOfDetail) / (uint)_tileSize.Width; float resTileX = (float)(_mapFullRect.Width / tileCountOfWidth); float resTileY = (float)(_mapFullRect.Height / tileCountOfWidth); uint bx = 0; if (requestRect.X > _mapFullRect.X) { bx = (uint)((requestRect.X - _mapFullRect.X) / resTileX); } uint by = 0; if (requestRect.Y > _mapFullRect.Y) { by = (uint)((requestRect.Y - _mapFullRect.Y) / resTileY); } uint offset = 1; if (levelOfDetail == 1) { offset = 0; } uint ex = bx + offset + (uint)Math.Ceiling(Math.Min(requestRect.Width, _mapFullRect.Width) / resTileX); uint ey = by + offset + (uint)Math.Ceiling(Math.Min(requestRect.Height, _mapFullRect.Height) / resTileY); width = (int)((ex - bx) * _tileSize.Width); height = (int)((ey - by) * _tileSize.Height); List <TileDef> tiles = new List <TileDef>(); for (uint c = bx; c < ex; c++) { for (uint r = by; r < ey; r++) { string quadkey = TileXYToQuadKey(c, r, levelOfDetail); Rect rect = new Rect(_mapFullRect.X + c * resTileX, _mapFullRect.Y + r * resTileY, resTileX, resTileY); TileDef tile = new TileDef(r, c, rect, quadkey); tiles.Add(tile); } } return(tiles.Count > 0 ? tiles.ToArray() : null); }
// public string GetMapImageUrl(TileDef tileDef) { return(string.Format(_urlTemplate, tileDef.Quadkey)); }
public string GetMapImageUrl(TileDef tileDef) { _mapServiceClient.GetMapImageByQuadkeyAsync(tileDef.Quadkey, tileDef.Rect.X, tileDef.Rect.Y, tileDef.Rect.Width, tileDef.Rect.Height, 256, 256); return(null); }