none
问一个用bingmap做离线地图的问题 RRS feed

  • 问题

  • 离线地图的数据可以通过这种发现获得:在maptilesource中的GetUri函数中把其中的Uri所指向的图片保存到本地。

    离线工作时,从本地获得这些图片来生成地图。

    但如果要自己编码把这些图片显示到地图控件中相当麻烦。

    有没有可能把本地保存的图片映射成Uri,直接在GetUri函数中返回这些图片对应的Uri?

    2011年4月27日 4:29

答案

全部回复

  • 能再说的详细些吗,我觉得您的想法很好。
    Cedar
    2011年4月27日 8:45
    版主
  • 其实即使不做处理,这些图片也都是会自动缓存的。

    你可以试着先联网访问一下地图,然后断开网络,刚才访问过的区域的图片都还是可以显示的~~~

    UriMapper是有的,但是似乎没办法直接实现这种网络到本地的~~~~


    Window Phone 7 is comming!
    2011年4月27日 14:06
    版主
  • 从TileSource派生一个MyTileSource类。

    public class MyTileSource : TileSource
    {
        public MyTileSource()
            : base("BingMapUriBase")
        {
            firstTile = true;
        }   
        override public Uri GetUri(int x, int y, int zoomLevel)
        {
            string filename = string.Format("mymap{0}_{1}_{2}.png", zoomLevel, x, y);
            var store = IsolatedStorageFile.GetUserStoreForApplication();
            if (store.FileExists(filename))
            {
                var uu = UriMadeUpFromFileName;//生成一个指向该文件的Uri。
                return uu;
            }
            else if(OfflineMode)
            {
                var uu = new Uri(string.Format(this.UriFormat, new Random().Next() % 4, x, y, zoomLevel));
                DownloadFile(uu, filename);//下载图片,保存到本地。
                return uu;
            }
            else
            {
                return null;
            }
        }
    }

    然后把这个类的一个实例添加到MapTileLayer中,再添加到Map中。

    BingMap应该是通过这里的GetUri返回的Uri去获取该区域(x,y,zoomlevel)的地图图片。所以最简单的实现离线地图的方法就是生成一个指向本地文件的Uri,然后BingMap去自动加载。

    当然,也可以通过其他方式让BingMap去加载这些本地文件。不过我还没有找到能让BingMap加载本地文件的方法。特来求助。

    2011年4月28日 1:10
  • 为啥我自己编的这个地图没有缓存呢?程序关了再开就啥都没有了。需要在哪里设置吗?
    另外,缓存应该也存不了太多东西吧。只能存近期浏览过的。
    2011年4月28日 1:18
  • I think you might be able to get a great deal of what you need from here: http://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer


    Cedar
    2011年5月9日 3:13
    版主
  • 我也遇上与你同样的

    如果使用arcgis提供的控件的话这个问题可以解决,arcgis的方法里已经给留了扩展的地方。

    具体例子请见 http://blog.newnaw.com/?p=993 (ArcGIS移动客户端中可以自动离线的底图图层 - 菩提老王的葡萄架).

    不知道你的问题是否已解决,arcgis的加载效率与效果不如 ms的好一些,所以目前还想用wp上的map控件来做。我的QQ191131029,欢迎与我交流。

    2012年4月1日 7:23