文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/前端
移動端的網速和流量耗費是移動開發必須考慮的兩個點。常規的瓦片展現方案是移動端實時請求在線瓦片服務(瓦片放在服務器端供直接讀取,或者瓦片由地理服務器發佈成WMTS服務等)。這個方案存在兩個問題:緩存
* 瓦片實時請求加載受限於移動端網速,容易致使加載卡頓現象服務器
* 瓦片請求耗費手機流量。微信
試想,若是咱們將切圖瓦片提早存放到移動設備上,每次瓦片請求時直接讀取設備緩存瓦片,不只能夠提升瓦片加載效率,也能夠規避流量的耗費。目前各大地圖廠商也都提供了地圖下載功能,使得手機即便在無網環境下依然能夠照常使用地圖。前端優化
var offlineURL = "http://mobile.test.com.cn/tile? "
請求參數中增長瓦片服務端獲取URL,當手機本地沒有尋找到對應瓦片時,則觸發服務端獲取的URL,從服務端獲取瓦片後再緩存至手機本地,如:工具
var offlineURL = "http://mobile.test.com.cn/tile?raw=" url = offlineURL+encodeURIComponent(url)+"&level="+level+ "&row="+row+"&col="+col+"&layername="+(this.get("mobileCacheName")||"");
對在線URL進行編碼(可將URL中的特殊符號轉換),便於手機程序獲取raw參數對應的值。優化
public static int getXTileIndex(double x,double originx,double resolution,double size) { double d = (x - originx) / (resolution * size); int index = (int)Math.Floor(Math.Abs(d)); return index; } public static int getYTileIndex(double y, double originy, double resolution, double size) { double d = (y - originy) / (resolution * size); int index = (int)Math.Floor(Math.Abs(d)); return index; } public static String calcPath(String dir,int level,int yindex,int xindex) { StringBuilder sb = new StringBuilder(dir).Append("\\").Append("L"); sb.Append(padLeft(Convert.ToString(level, 16), 2, '0')); sb.Append("\\").Append("R").Append(padLeft(Convert.ToString(yindex, 16), 8, '0')); sb.Append("\\").Append("C").Append(padLeft(Convert.ToString(xindex, 16), 8, '0')); sb.Append(".png"); return sb.ToString(); } private static String padLeft(String str, int size, char symbol) { if (str == null) str = ""; int str_size = str.Length; int pad_len = size - str_size; StringBuilder retvalue = new StringBuilder(); for (int i = 0; i < pad_len; i++) { retvalue.Append(symbol); } return retvalue.Append(str).ToString(); }
單元網格的切片組織以下:
即:網格編碼_alllayers\level\row\col.png
因此,服務端進行責任網格瓦片合併方法以下:ui
服務端修改更新配置,當移動端再次啓動時,依據不一樣移動端所屬的責任網格區域進行對應的瓦片下載和解壓。this
因爲瓦片是規則四邊形,而區域是不規則多邊形,因此全圖瀏覽時會出現太多不在區域範圍內的數據。 這裏可使用遮罩的思想進行處理:製做一個很大的四邊形,而後以區邊界要素爲內環,二者結合構成一個環狀要素。疊加在地圖上時,把多邊形環要素設置爲背景色,這能夠變相實現遮罩效果。編碼
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^