轻松获得BingMaps的Tile图片

在编写WP7的GPS模拟器,其中用BMSL(BingMaps Silverlight)实现移动的地图。因为考虑模拟器在没有互联网网络的环境中使用,所以我不使用BMSL默认的Mode,需要搭建自己的TileServer。但是如果自己用MapCruncher切图太痛苦,而如果写程序遍历下载所有的图片太麻烦,我想到一种简单的方法,编写自定义的Mode,在Mode的TileSource中如下编写

 public class OOBChineseRoadModeTileSource : LocationRectTileSource
    {
        public override Uri GetUri(int x, int y, int zoomLevel)
        {
            //调用LocationRectTileSource的GetUri返回的是null,估计这个就是OOB下显示不出地图的原因,因此自己计算Uri返回
            string quadkey = new QuadKey(x, y, zoomLevel).Key;
            Uri uri = new Uri("http://r3.tiles.ditu.live.com/tiles/r" + quadkey + ".png?g=47");//使用中国Bing地图
            WebClient wc = new WebClient();
            wc.OpenReadAsync(uri, quadkey);
            wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
            return uri;
        }

        void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            string path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
            using (FileStream fs = File.OpenWrite(path + @"/tiles/" + e.UserState + ".png"))
            {
                e.Result.CopyTo(fs);
            }           
        }
    }

也就是把BMSL发出去的请求uri图片用WebClient保存到本地磁盘(由于是保存到本地磁盘,所以需要使用启用了信任的OOB模式运行)。

然后在BingMapsSL中在自己的抓取的那部分区域移动、缩放就可以,把想抓取的区域都走一遍,这样就会自动把我们看的区域的地图的Tile下载下来了。

然后用CassiniDev把下载的Tile图片的文件夹设置为Web路径就可以。

你可能感兴趣的:(object,String,Path,silverlight,bing,磁盘)