android端實(shí)踐openlayers離線地圖

筆者最近實(shí)踐了利用openlayers在android app中實(shí)現(xiàn)離線地圖應(yīng)用饵隙,本文記錄了筆者實(shí)踐的思路撮珠。

android端移動地圖功能設(shè)計(jì):

1、加載本地的地圖瓦片金矛;
2芯急、GPS定位;
3驶俊、疊加部件(矢量)圖層娶耍;

準(zhǔn)備工作

android端用webview加載在線頁面或離線的html頁面都是沒問題的,同時(shí)饼酿,android原生與JS之間可以互相調(diào)用榕酒。這一部分不是本文的重點(diǎn),參考資料如下:

  1. Android與HTML+JS交互入門 android原生與JS之間互相調(diào)用的例子
  2. android 與JS之間的交互 WebView加載本地資源的小結(jié)
  3. Android WebView 與JS的數(shù)據(jù)交互 如何將css js 圖片等靜態(tài)資源部署在APP中
ol如何加載手機(jī)端本地地圖瓦片

筆者想到ol加載地瓦片地圖時(shí)故俐,可以用tileUrlFunction返回一個(gè)瓦片的鏈接想鹰,例如:

        tileUrlFunction: function (tileCoord, pixelRatio, proj) {
                        var z = tileCoord[0] + 11;
                        var x = tileCoord[1];
                        var y = -tileCoord[2] - 1;
                        return "http://www.dzmap.cn/OneMapServer/rest/services/vector_service/MapServer/tile/" + z + "/" + y + "/" + x;
                    }
  • tileUrlFunction返回一個(gè)地圖瓦片的路徑,ol請求瓦片并渲染药版。如果在此步驟將請求服務(wù)端的瓦片改為請求Android本地的資源辑舷,是否可行?
  • android端本地?zé)o法提供一個(gè)http路徑槽片,我想到了用base64將圖片編碼的方式返回給ol何缓,測試證明這是可行的。
  • 那么加載本地瓦片就簡單了还栓,下載地圖瓦片并組織好存儲路徑碌廓,tileUrlFunction中調(diào)用android原生的方法獲取對應(yīng)xyz的瓦片,然后用base64編碼后剩盒,返回給ol谷婆。
  • 進(jìn)一步改進(jìn),用文件方式存儲地圖瓦片比較浪費(fèi),就想到了用sqlite mbtile方式存儲瓦片波材。筆者在之前的地圖瓦片下載工具基礎(chǔ)上股淡,增加了輸出sqlite mbtile的功能,點(diǎn)擊下載廷区。
  • MBTile相關(guān)介紹:
    官方介紹
    MBTiles移動存儲簡介
  • 通過測試唯灵,發(fā)現(xiàn)用base64編碼后的瓦片,ol的緩存功能貌似不好使了隙轻,查了一些資料埠帕,提到用base64編碼后,就無法用到瀏覽器緩存了玖绿。沒關(guān)系敛瓷,在android端用Lrucache做緩存,也能很好的解決此問題斑匪。

實(shí)現(xiàn)GPS定位功能

  • JS調(diào)用android原生獲取GPS定位坐標(biāo)呐籽,android端可以用原生的GPS定位,或使用baidu sdk蚀瘸,返回當(dāng)前位置坐標(biāo)狡蝶。
  • 為防止獲取GPS位置時(shí)有較長的等待,筆者推薦用異步的方式贮勃。即贪惹,由JS調(diào)用Android端獲取GPS位置,android啟用異步方式獲取當(dāng)前位置寂嘉,并立即返回奏瞬;當(dāng)Android端獲取到位置后,回調(diào)JS端泉孩,傳遞當(dāng)前位置給OL硼端,ol標(biāo)注當(dāng)前位置。

疊加部件(矢量)圖層

  • 與上述加載本地瓦片類似棵譬,事先預(yù)處理好矢量圖層显蝌,用spatialite(基于sqlite的空間數(shù)據(jù)庫)存儲矢量部件圖層预伺,建好空間索引订咸;
  • ol注冊map.moveend事件,請求當(dāng)前可視范圍的矢量數(shù)據(jù)酬诀;
  • 這里應(yīng)該還可以用矢量瓦片來替代脏嚷,還沒來及實(shí)踐。

本文獻(xiàn)給大連機(jī)場瞒御,感謝您延誤航班父叙,使我有時(shí)間有耐心寫完本文,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趾唱,一起剝皮案震驚了整個(gè)濱河市涌乳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甜癞,老刑警劉巖夕晓,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悠咱,居然都是意外死亡蒸辆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門析既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躬贡,“玉大人,你說我怎么就攤上這事眼坏》鞑#” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵宰译,是天一觀的道長纺讲。 經(jīng)常有香客問我,道長囤屹,這世上最難降的妖魔是什么熬甚? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮肋坚,結(jié)果婚禮上乡括,老公的妹妹穿的比我還像新娘。我一直安慰自己智厌,他們只是感情好诲泌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铣鹏,像睡著了一般敷扫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诚卸,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天葵第,我揣著相機(jī)與錄音,去河邊找鬼合溺。 笑死卒密,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棠赛。 我是一名探鬼主播哮奇,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼膛腐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鼎俘?” 一聲冷哼從身側(cè)響起哲身,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贸伐,沒想到半個(gè)月后律罢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棍丐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年误辑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歌逢。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巾钉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秘案,到底是詐尸還是另有隱情砰苍,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布阱高,位于F島的核電站赚导,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赤惊。R本人自食惡果不足惜吼旧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望未舟。 院中可真熱鬧圈暗,春花似錦、人聲如沸裕膀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昼扛。三九已至寸齐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抄谐,已是汗流浹背渺鹦。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斯稳,地道東北人海铆。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像挣惰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容