微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

轻松获得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路径就可以。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐