隨著3G時代的到來,gis迎來了一個嶄新的時代。Webgis已經為人熟知,wap必將是gis的另一個新紀元。本文主要分析wapgis的整體框架、瓦片的概念以及手機用戶端常見操作的基本算法和實現。
1 wapgis原理
Webgis技術已經十分成熟。而wap2.0協議已經和web2.0協議相差也不大,做webgis的開發人員,很容易轉型做wap-gis。
2空間服務器
現在主流的數據庫有oracle、db2、sqlserver等,這些數據都支持空間數據。根據自己的實際情況可以選擇任何一種空間數據庫。這里我們選擇oracle數據庫。因為一般gis系統數據量非常大,在處理大數據量方面oracle比較出色。再建立空間數據庫的時候,建議使用分區表。這樣可以大大提高數據訪問速度。空間數據服務器建議使用unix操作系統,實踐告訴我們,unix操作系統做數據服務器在性能方面比較高。
3 gis服務器
Gis平臺有很多種選擇,可以選擇國外的arcgis,也可以選擇國內中地數碼的mapgis等。Gis服務器負責處理各種空間數據。
4 web服務器
Web服務器的選擇很寬松,應需要而定。一般的linux+tomcat(java)或者windows+iis(asp.net)等。Web服務器負責處理來自手機端或者pc端的請求和gis服務器數據的交換。
5終端
終端類型有很多手機、pda、pc等。這里我重點講解手機終端。
終端的操作類型主要有全圖、放大、縮小、左移、右移、上移、下移、屬性等。下面我們結合實際來談談這幾種操作的實現。這里web服務器使用的瓦片原理。
手機用戶訪問web服務器的時候,web服務器接受行號、列號、層數等參數。先在web服務器中尋找相應的圖片,如果web服務器里面有相應的圖片,則直接發送給手機端。如果web服務器端沒有相應的圖片,則向gis服務器請求。Gis服務器根據請求條件請求空間數據庫。然后,生成瓦片發送給web服務器。Web服務器再發送給手機端。
瓦片原理:一張地圖可以按照比例尺大小而展現數據精細度不同。比如,一張100100pix的圖片表示100*lOOm的地理范圍,四張100*100p的圖片也來表示100*100m的地理范圍,十六張100*100pix的圖片也來表示100*100m的地理范圍,以此類推。當我們執行上面的操作的時候,是不停的請求不同圖片。所以,只有層數、行號、列號就可以唯一確定圖片。
下面我們來討論一下上面的各種操作:
全圖:手機端使用ajaX技術,把層數=o,行號=0,列號=0發送給web服務器,web服務器再把對應的圖片發送給手機端。手機端再請求期間通過js展現請求界面,這樣給人的視覺效果比較好。當圖片下載完畢后展現出來。用戶基本感覺不到閃爍現象。
放大:手機端使用ajax技術,把當前層數,行號,列號發送給web服務器,web服務器通過換算得到下一層對應的地圖的大小的圖片。這里我們做一下簡化,每次只顯示四張圖片,下面類同。那么他們的對應關系是:
放大公式:xl=2*x0+l yl=2*yO+l layerl=layer0+l
縮小:手機端使用ajax技術,把當前層數,行號,列號發送給web服務器,web服務器通過換算得到上一層對應的地圖的大小的圖片。那么他們的對應關系是:
縮小公式:xl=(x0-1)/2 yl=(yO-1)/2 layerl=layer0.1及放大的反函數
左移:手機端使用ajax技術,把當前層數,行號,列號發送給web服務器,web服務器通過換算得到同層對應的地圖的大小的圖片。那么他們的對應關系是:
左移公式:xl--xO-1 yl=yO layerl=layero
右移:手機端使用ajax技術,把當前層數,行號,列號發送給web服務器,web服務器通過換算得到同層對應的地圖的大小的圖片。那么他們的對應關系是:
右移公式:xl--xO+l yl=yO layerl=layer0
上移:手機端使用ajax技術,把當前層數,行號,列號發送給web服務器,web服務器通過換算得到同層對應的地圖的大小的圖片。那么他們的對應關系是:
上移公式:xl--xO yl=-yO-l layerl=layer0
下移:手機端使用ajax技術,把當前層數,行號,列號發送給web服務器,web服務器通過換算得到同層對應的地圖的大小的圖片。那么他們的對應關系是:
下移公式:xl---xO yl=yO+l layerl=layerO
屬性:屬性的請求比較復雜,首先要把圖片上面的像數坐標發給web服務器,web服務器根據像數坐標、層數、行號、列號等參數,換算成地圖坐標,gis服務器通過地圖坐標換算成地理坐標,請求空間數據服務器,空間數據服務器把查詢的機構反向返回給手機用戶。
6結束語
對wapgis框架以及手機用戶端的實現,我們可以清晰的了解wapgis工作的基本原理和實現方法。當然,基本操作的算法多種多樣,這里只是提供了一個簡化的算法,但基本可以實現常用功能。