行動裝置開發中,因為使用的是移動網路,需要考慮到流量的問題,在地圖應用程式中使用離線地圖是一種很好的解決方案。開發離線地圖功能的幾個必要條件。
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