• 沒有找到結果。

第三章    GeoJSON 資料壓縮

3.3  資料壓縮技術

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

23

業活動位置分佈資料原本即PostgreSQL 資料庫匯出,在這邊可直接透過資料庫的 回存功能匯入。

3. 空間資料庫:

PostgreSQL 之所以作為本研究實驗的主要資料庫,主要因為 PostgreSQL 除了具有 一般商業資料庫的功能外,更含括幾何空間(geometry)及使用者自定資料型態,讓 使用者可以方便的對資料進行處理與儲存,另外為使空間資料可以符合OGC 制定 的規格,另外附加了PostGIS (Geographic Object for PostgreSQL) 自由軟體套件,可 以輸出如GeoJSON、GML、KML 等 Web GIS 使用的空間資料格式。

4. GeoJSON 產生:

在GeoJSON 輸出階段,可以直接以「ST_AsGeoJSON」資料庫函式語法,產生 GeoJSON 格式,其格式範例如下:

SELECT ST_AsGeoJSON(1,(the_geom)) FROM TABLE;

其語法代表從資料庫中選擇資料所屬的資料表,並將資料表中存放空間資料物件欄 位「the_geom」,用 ST_AsGeoJSON 轉換成 GeoJSON 格式,而 ST_AsGeoJSON (1,(the_geom),5)中的 1 代表 GeoJSON 版本(目前皆為 1)。最後當 PHP 程式接收到 GeoJSON 格式,篩選出座標物件中的座標陣列,即可進行下一步驟的 GeoJSON 資 料壓縮技術套用。

5. 擷取座標內容:

GeoJSON 中含有大量的座標資料,也是本研究的壓縮重點,因此先將格式中過濾 出座標集,以方便壓縮方法的套用流程。

3.3 資料壓縮技術

從文獻回顧以及3.1 的 GeoJSON 格式輸出範例,可以直接辨識出 GeoJSON 格式中,

座標資料佔有相當大的比例、由於鄰近座標數值相近故差異值較小。基於以上發現可以 歸納兩點方向,一為縮減座標資料量;二為利用座標值相近與差異小的特性。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

24

在資料壓縮方法設計過程,參考相關處理序列資料的壓縮技術,以「差分編碼」演 算法最接近本研究的需求,差分編碼簡單來說即兩值相減所得到的「差異值」,因此假 設僅儲存差異值,則資料大小就會減少。

然而,座標資料經由差分編碼後,發現壓縮成效不彰,原因在於座標的浮點數格式 相減後,小數點與尾數間許多值為零的結果,如圖3.3 所示,在這邊本研究將小數點與 尾數間的值為零現象稱之為「前置零」。另外,前置零的存在影響字串長度,因此本研 究提出一個可以去除前置零字元的方法-浮點式編碼,並於下文作詳細的介紹。

120.57425 , 0.00037 , 0.0001

前置零

原始資料 :120.57425 , 120.57462 , 120.57472 差分編碼

圖3.3:差分編碼產生的前置零

另一個探討的議題是HTTP 壓縮技術,從文獻中得知,所有經伺服器傳遞的資訊,

都需要經過HTTP 層解析在回應至用戶端。換句話說,資料內容愈多,花費的解析時間 與頻寬使用率就愈高。參考減少頻寬與提昇效能的方法研究中,最普遍的方法為GZIP 壓縮演算法,因此本研究採用GZIP 壓縮演算法進行 HTTP 壓縮,以輔助減少 GeoJSON 資料的解析時間。

綜合以上說明,本節可以歸納二個部份,分別為GeoJSON 壓縮技術與 HTTP 壓縮技術。

1. GeoJSON 壓縮技術:

由差分編碼與浮點式編碼函式組成,差分編碼方法是儲存座標間的差異值,使得差 異值為小於零的浮點數;而浮點式編碼是為了改善差分編碼壓縮後前置零的問題。

第一部份先介紹差分編碼對座標的壓縮流程,第二部份介紹浮點式編碼如何改善差 分編碼,最後在第四章對兩大部份實驗,觀察本研究提出的浮點式編碼對差分編碼 的影響與改善程度。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

25

(1) 差分編碼函式:

參考差分編碼技術,本研究整理的差分編碼公式如下。p 代表i (x , y ) 座標,Pi i 為座標集合,差分編碼為Δp ,因此我們僅儲存i Δp 即可達到壓縮的目的,其i 表示式如下:

下圖3.4 為座標經差分編碼示意圖,圖片中的代號分別表示將 p 表示成原始座 標值、Δp 為差分編碼值,差分解碼值即為原始座標值,因此同樣以 p 表示。

一、 差分編碼(Delta Encode):

將第一個座標值p0設定為解碼參考的基準值(Reference value),

0 1 0

Δp p p ,即本實驗的差分編碼值,以此類推。

二、 差分解碼(Delta Decode):

從差分編碼結果中,p1Δp0p0即可得到原來的座標值p1

圖3.4:差分編碼示意圖

i i i

0 1 n-1

i i 1 i

p (x , y ) i 0,....n-1

P {p , p , ...p }

Δp p

p

 

 

function delta_encode($coor) {

Return $delta_x.”,”.$delta_y;

}

$coor為矩陣座標物件,共n組 編碼函式名稱:delta_encode

$coorsize為座標矩陣的大小,即n

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

27

乙、 前置零:差分編碼應用在座標壓縮會產生前置零的問題,因此壓縮成效 不彰,因此浮點數的正規化,可以將簡化前置零字元長度。

二、 合併符號與指數:

將座標數值經由正規化取得指數與符號後,兩者合併後使得長度為8 個位元 (bit),即為一個位元組(bytes)大小。

三、 進制轉換:

合併sign 與 exponent 後結構變成二個部份,從以上步驟都仍是數值的階段,

因為若要與GeoJSON 的字串格式整合,所有數值皆需轉成字串型態。因此,

本研究將「sign + exponent」與「magnitude」兩部份,分別透過「進制轉換」

組合成字串。為避免字串在轉換後產生如「引號」、「亂碼(無法辨識字元)」等 特殊符號,而影響JavaScript 錯誤的解讀,因此本研究將字串以 0-9,A-Z,a-z 共 62 個符號作進制的轉換,如下表 4 所示,表 5 則為本研究提出的浮點式編碼 程式與內容說明。

magnitude 讀入Delta

編碼後的浮點數

進制轉換

合併字串

(1)編碼前置處理

(2)合併sign與exponent sign + exponent

(1byte)

sign exponent

(3)進制轉換

圖3.5:浮點式編碼示意圖

function float_encode($delta_coor) { if ($delta_coor<0) {

$sign = 1;

$nosign_coor = substr($delta_coor,1);

} else {

$sign = 0;

$nosign_coor = $delta_coor;

}

$nozero_coor = rtrim($nosign_coor, '0');

$decops=strops($nozero_coor, '.');

$exp = strlen($nozero_coor)-$decpos-1;

$str_before_dot = substr($nozero_coor, 0, $decpos);

$str_after_dot = substr($nozero_coor, intval($decpos+1), $exp);

$magnitude = $str_before_dot.$str_after_dot;

$magnitude1 = ltrim($magnitude, '0');

$result1 =

dec2base( ((int)($sign*$base*0.5)+$exp));

}

過濾尾巴的0,並定義為$ nozero_coor 找出小數點的位置,從前面算起

用小數點的位置,決定exponent,把浮點數 變成整數

取得magnitude,並去掉開頭的"0"

將數值轉換成字元並合併成一個字串

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

29

2. HTTP 壓縮技術應用:

從文獻探討了解HTTP 壓縮可以大幅節省資料解析時間的特性,因此本研究嘗試藉 由HTTP 壓縮技術來輔助 GeoJSON 資料傳輸的效能。HTTP 壓縮技術的執行流程說 明與流程圖如下:

(1) 檢查文件檔頭資訊:

伺服器端接收到文件時,透過檔頭資訊可以初步確認文件是否為壓縮檔案,若 為已壓縮檔案,則直接輸出結果,若為未壓縮檔案,則透過GZIP 壓縮方法進 行文件壓縮。

(2) 使用 GZIP 壓縮與結果輸出:

GZIP 可為 HTTP 解析文件前,進行文件的壓縮。本研究使用 PHP 內建的 gzencode 函式壓縮資料,再重新傳送己壓縮的資訊至 HTTP 檔頭資訊,最後輸 出至用戶端。

接收 來源文件

GZIP壓縮

輸出結果

透過檔頭資訊

確定是否壓縮

圖3.6:HTTP 壓縮流程圖

綜合以上壓縮技術得到下圖完整的資料傳遞與壓縮流程,由上而下為用戶端對資料 請求的流程,當Web 伺服器收到請求便會對資料庫進行查詢以及產生 GeoJSON 格式,

最後在經過GeoJSON 與 HTTP 壓縮技術壓縮並回應至用戶端。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

30

用戶端

HTTP

Web伺服器

資料庫

請求資料

查詢資料

資料輸出

GeoJSON

分析請求

產生GeoJSON

GeoJSON壓縮 HTTP壓縮

圖3.7:資料傳遞與壓縮套用流程