2013-03-24 15 views
0

我正在尋找開發一個使用GTFS靜態數據的交通應用程序。我爲自己設定的一個限制是應用程序應該使用最少的移動數據傳輸。因此,我想將所有數據嵌入到應用程序中。在Android應用中使用壓縮的GTFS數據

我的問題是,GTFS數據集通常很大(例如,悉尼市爲85MB未壓縮)。我在其他應用程序上做了一些逆向工程,發現其中一些已經設法將所有數據壓縮成一個更小的文件(我最多談論幾MB)。

使用7zip,我已經設法將我的85MB數據集壓縮到5MB,這對我來說是可以接受的。下一步是我將這個7z文件用到我的應用程序中,這就是我被卡住的地方。我無法將其解壓縮並將其放入SQL數據庫,因爲這會在手機上佔用太多空間。所以我想知道我的其他選擇是什麼。

感謝

+0

你試過了什麼?在頂層,您是否嘗試過使用包含所有這些提要信息的數據文件,並查看其如何壓縮gzip,bzip2和xz? – 2013-03-25 01:00:07

+0

7zip管理壓縮到5.5MB這是我可以接受的,所以謝謝你的提示,我試過rar和zip,但不知道7zip可以做出這樣的區別。但是,如何在移動應用程序中使用7zip文件?我不能只是解壓縮並寫入SQL數據庫,因爲這會佔用太多空間。 – chopchop 2013-03-25 01:33:24

回答

0

首先,嵌入,我建議使用Embedded XZ library(類似於7zip的)。我已經將它嵌入到一個項目中,並且祝你好運。只要確保使用'xz --check = crc32'來壓縮數據,以便與Embedded XZ兼容,並且記得初始化CRC表。

至於解壓縮策略,您可能需要按照可以按需解壓縮不同部分(即數據庫樹)的方式對數據進行分段。我不熟悉您的數據特徵。用戶是否需要將它全部同時加載?還是可以很容易地劃分?

此外,XZ可能有點慢,甚至解碼。你評估過普通gzip的表現嗎?這往往是A)非常快;和B)可作爲所有嵌入式和移動框架的標準部分。

+0

gzip目前還不夠好,但是如果我深入數據並清理它(很多id是長字符串,我想將它們轉換爲數字,那麼數據中也有一些冗餘) 。你的解決方案似乎可行。你認爲解壓速度足夠快:打開活動,解壓幾kB數據,顯示給用戶。或者這會讓UI延遲? – chopchop 2013-03-26 03:14:25

+0

@chopchop:確切知道的唯一方法是在某些目標Android設備上測試它,看看速度是否可以接受。這看起來像是一種最安全的東西,可以放在自己的線程中,儘管遠離主UI線程。 – 2013-03-26 03:40:28

+0

好的,謝謝,在我看來,目前唯一的辦法就是做到這一點。如果你有興趣,我會讓你知道它是怎麼回事 – chopchop 2013-03-27 00:47:29

-1

使用協議二進制格式(pbf)formely谷歌和現在開源。它緊湊且快速搜索,因此無需在設備上解壓縮並將其加載到該設備的數據庫中,因爲pbf充當數據庫。只需在你的代碼中包含pbf庫來查詢它。當然,在網上發佈數據之前,你必須壓縮一次。