代码改变世界

ADOBE FLASH BUILDER 4.6 IOS 开发之离线地图

2012-05-02 10:59  c#在路上  阅读(1521)  评论(0编辑  收藏  举报

移动设备开发中,因为使用的是移动网络,需要考虑到流量的问题,在地图应用程序中使用离线地图是一种很好的解决方案。开发离线地图功能的几个必要条件。

 1,图源的获取

 地图中显示记载的大部分都是图片,离线的方式即把这些图片保存到设备然后找一种算法然后再去加载图片。加载图片的算法即瓦片算法,一般的API 都会提供

拓展的类。像前面提到的Arcgis   Mapquest 都是可以拓展的。

图源的获取工具,《mobile atlas creator》,绝对强大的工具,可以从不同的地图服务器中获取图源,比如google bingmap 等等。http://bbs.hiapk.com/thread-343851-1-1.html 这一篇帖子是讲怎么用的,我随后便把工具也附上,直接可以运行的。这里的图源的保存方式有很多种,我这里选择的是sqlite,这样图源就被保存到了数据库中,那怎么样变成图片了,我写了个python 脚本, 可以用来转换成图片。这里就不在赘述了。

 2,地图api 的拓展。我这里只贴出来。

 原理很简单,就是从app 程序的目录读取图片,然后显示出来。

 package com.google

{
    
    import com.dingli.model.ModelLocator;
    
    import flash.net.URLRequest;

    /**
     * google 离线地图 层
     
*/
    public class GoogleOfflineLayer extends GoogleMayLayer
    {
        private var dir:String;
        public function GoogleOfflineLayer()
        {
            super();
            dir = "";
        }
        
        /**
         * 此处构造 离线图片的url
         * @param level ,层
         * @param row ,行
         * @param col ,列
         * @return 图片所在的url 
         * 
         * level 为 17 - level
         * 构造返回为 地图地址+ 图片地址
         *           地图地址 + row+ "F"+col+"F"+level.png
         
*/
        override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest
        {
            var retUrl:URLRequest = new URLRequest();
            var googleLevel:Number = 17 - level;
            var url:String = col.toString()+"F"+row.toString()+"F"+googleLevel.toString()+".png";
            url = dir + "/"+ url;
            retUrl.url = url;
            
            // Debug 
            //retUrl.url = "assets/ditu/2.png";
            trace("GoogleOfflineLayer.as line 46:  "+url);
            
            return retUrl;
        }
    }
}

 

 

 3,图片上传到设备。

 

ifiles或者 91 助手等,都可以将目录直接上传到设备中。前提是设备必须是越狱的。

离线地图工具./Files/csharponworking/MobileAtlasCreator17sqlite离线地图.rar