井燕武+曾新超+蔣前凱
[摘要]本論文在WebGIS原理和Web關(guān)鍵技術(shù)的基礎(chǔ)上,研究了基于Google地圖的空間數(shù)據(jù)采集與建庫的方法。綜合利用Google Map API和Apache、PHP、MySQL等軟件,設(shè)計了一個基于Google地圖進行矢量數(shù)據(jù)在線采集的WebGIS信息系統(tǒng)。實現(xiàn)了矢量數(shù)據(jù)的在線獲取、空間數(shù)據(jù)存儲、在線顯示和數(shù)據(jù)庫訪問服務(wù)接口等功能。
[關(guān)鍵詞] WebGIS;空間數(shù)據(jù);在線采集
前言
GIS技術(shù)的使用已經(jīng)越來越廣泛,如今有大量的商業(yè)GIS軟件可以提供GIS技術(shù)支持,但成熟的GIS商業(yè)軟件的使用不僅技術(shù)門檻較高,而且經(jīng)濟成本也比較高,制約了GIS技術(shù)的推廣和發(fā)展。使用WebGIS可以使更多的普通用戶能夠使用和學習GIS技術(shù),以Google地圖為主的大量的網(wǎng)絡(luò)地圖的出現(xiàn)給GIS的發(fā)展作出了巨大的貢獻。目前大部分的網(wǎng)絡(luò)地圖中的數(shù)據(jù)主要以柵格形式提供給用戶,在某些使用環(huán)境下不能滿足要求,也沒有充分的利用地圖資源[1]。但是,利用Google地圖提供的API開發(fā)接口,通過開發(fā)接口進行二次開發(fā),使得通過Google地圖在線采集和顯示矢量數(shù)據(jù)成為可能,增強了網(wǎng)絡(luò)地圖的功能,同時也使得普通用戶從單純的數(shù)據(jù)使用者變成數(shù)據(jù)提供著,豐富了GIS數(shù)據(jù)的來源。為了充分利用Google地圖的資源,以在線方式獲取矢量空間數(shù)據(jù),本論文在分析WEBGIS關(guān)鍵技術(shù)的基礎(chǔ)上,設(shè)計了一個基于Google地圖進行矢量數(shù)據(jù)采集的WebGIS信息系統(tǒng),實現(xiàn)了矢量數(shù)據(jù)的在線獲取、空間數(shù)據(jù)存儲和在線顯示等功能。本論文參考OGC中的相關(guān)標準,研究了基于Google地圖的數(shù)據(jù)采集與建庫方法,設(shè)計了空間數(shù)據(jù)的存儲模型,實現(xiàn)了空間數(shù)據(jù)的MYSQL關(guān)系數(shù)據(jù)庫存儲與管理。重點研究了WebGIS信息系統(tǒng)的建立方法,利用Google Maps API和Ajax技術(shù)編寫Web前端應(yīng)用程序,使用Apache網(wǎng)絡(luò)服務(wù)器和PHP語言設(shè)計服務(wù)器端程序。用戶可以通過瀏覽器基于Google地圖進行矢量數(shù)據(jù)采集,并能將采集的空間數(shù)據(jù)上傳至服務(wù)器端,在服務(wù)器端處理后將其存儲至空間數(shù)據(jù)庫中,為了檢驗采集存儲矢量數(shù)據(jù)的正確性,還研究了在Google地圖中加載顯示空間數(shù)據(jù)庫中的矢量數(shù)據(jù)的方法和技術(shù)。
1 系統(tǒng)設(shè)計
1.1 設(shè)計目標
(1)通過WebGIS技術(shù),在Web前端與Google地圖交互采集空間數(shù)據(jù),再將采集的數(shù)據(jù)上傳到Web服務(wù)器端,并在Web服務(wù)器端對數(shù)據(jù)進行必要的處理;
(2)根據(jù)空間數(shù)據(jù)數(shù)據(jù)量大和空間數(shù)據(jù)記錄的變長性等特點,對在線采集的數(shù)據(jù)使用專門的空間數(shù)據(jù)庫來進行管理,本設(shè)計中的空間數(shù)據(jù)庫將基于MYSQL關(guān)系數(shù)據(jù)庫實現(xiàn),數(shù)據(jù)模型將參照OGC的相關(guān)標準;
(3)通過Web客戶端對采集的空間數(shù)據(jù)進行加載并可視化,同時提供空間數(shù)據(jù)接口用來查詢圖層信息以及幾何對象信息。
1.2 設(shè)計原則
(1)系統(tǒng)結(jié)構(gòu)合理,對系統(tǒng)功能模塊進行構(gòu)件化處理,便于系統(tǒng)功能的擴展與更新,同時也便于系統(tǒng)的維護;
(2)系統(tǒng)人機交互性強,擁有簡介的操作界面,具有良好的操作性;
(3)系統(tǒng)自身帶有自檢功能,當操作出現(xiàn)錯誤后,對錯誤的操作進行提示;
(4)對系統(tǒng)數(shù)據(jù)結(jié)構(gòu)進行優(yōu)化,確保程序的流暢運行以及較少的空間占用。
2 系統(tǒng)功能結(jié)構(gòu)設(shè)計
2.1 系統(tǒng)功能結(jié)構(gòu)劃分
基于WebGIS的空間數(shù)據(jù)在線采集系統(tǒng)主要由四個功能模塊組成,包括:地圖交互、數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)訪問。
其中,地圖交互模塊功能包括:地圖基本操作、圖層選擇、空間信息查詢;數(shù)據(jù)采集模塊功能包括:空間信息采集、屬性信息采集;數(shù)據(jù)儲存模塊功能包括:對象圖層創(chuàng)建、圖層的插入;數(shù)據(jù)訪問模塊功能:集合信息儲存表達式的獲取、在Google地圖上的加載,圖1為功能結(jié)構(gòu)圖:
2.2 系統(tǒng)架構(gòu)
本系統(tǒng)利用B/S模式與GIS相結(jié)合,將系統(tǒng)架構(gòu)分為三層:瀏覽器客戶端層、服務(wù)器端層、數(shù)據(jù)層。
瀏覽器客戶端層:由于本系統(tǒng)是瘦客戶端模式,因此客戶端層只需要安裝一個瀏覽器就能夠其進行操作,免去了系統(tǒng)配置的繁雜[2]。對于開發(fā)而言,客戶端層分為普通業(yè)務(wù)框架以及GIS地圖框架。其中普通業(yè)務(wù)框架的開發(fā)使用HTML、CSS、JavaScript完成,對應(yīng)的GIS地圖類型框架采用Google Maps API進行開發(fā)。
服務(wù)端層是業(yè)務(wù)邏輯實現(xiàn)的主要層,數(shù)據(jù)采集以及數(shù)據(jù)的儲存都需要經(jīng)過服務(wù)端層的邏輯調(diào)控,由于系統(tǒng)是基于Web架構(gòu)的,因此需要采用網(wǎng)絡(luò)服務(wù)器,本系統(tǒng)使用的是Apache服務(wù)端軟件,而服務(wù)端業(yè)務(wù)邏輯的實現(xiàn)采用PHP進行編寫實現(xiàn)。
數(shù)據(jù)層是系統(tǒng)模塊的支撐,本系統(tǒng)數(shù)據(jù)庫采用MYSQL進行數(shù)據(jù)的存儲。同時,集合對象的儲存采用WKB儲存模式,同時空間數(shù)據(jù)庫的儲存遵循OGC標準。圖2為系統(tǒng)架構(gòu)圖:
3 系統(tǒng)關(guān)鍵技術(shù)
3.1 空間數(shù)據(jù)庫技術(shù)
本系統(tǒng)是以關(guān)系數(shù)據(jù)庫存儲模型實現(xiàn)空間數(shù)據(jù)的存儲??臻g數(shù)據(jù)庫的幾何信息的存儲模式通常有WKT(Well-known Text)和WKB(Well-known Binary)兩種[3]。
WKT方式基于一套標準語法,使用括號及其他符號將文本和坐標值組織起來,從而重構(gòu)幾何。其中文本信息是大小寫不敏感的,表1描述了使用WKT表達的簡單幾何:
WKB方式使用連續(xù)的二進制字符串描述幾何。二進制字符串的組織通常遵循一定的標準,以實現(xiàn)數(shù)據(jù)的規(guī)范化和可訪問性。本設(shè)計將參照OGC中關(guān)于WKB表達的標準來組織二進制字符串。
同時使用空間數(shù)據(jù)引擎SDE來管理,SDE是一種空間數(shù)據(jù)庫管理系統(tǒng)的實現(xiàn)方法,即在常規(guī)數(shù)據(jù)庫管理系統(tǒng)之上添加一層空間數(shù)據(jù)庫引擎,通過SDE 可以在關(guān)系型數(shù)據(jù)庫系統(tǒng)中存放和管理空間地理數(shù)據(jù),并且將地圖數(shù)據(jù)的空間地理信息與屬性信息聯(lián)系起來,通過該方式,使空間地理數(shù)據(jù)與屬性數(shù)據(jù)保持了同步性。
3.2 Ajax技術(shù)
本系統(tǒng)通過Ajax來完成客戶端與服務(wù)端之間的信息交互,AJAX 是 Asynchronous JavaScript and XML的簡寫,即異步的 JavaScript 和 XML。
Ajax 并不是一種新技術(shù),它實際上是幾種技術(shù)的組合,包括:
o基于 XHTML 和 CSS 標準的表示;
o使用 DOM(Document Object Model)進行動態(tài)顯示和交互;
o使用 XMLHttpRequest 與服務(wù)器進行異步通信;
o使用 JavaScript 操作綁定。
Ajax技術(shù)可以部分更新web 頁面數(shù)據(jù),不用刷新整個頁面,所以使用Ajax技術(shù)可以極大的減小客戶端與服務(wù)器端的通信數(shù)據(jù)量,大約只有原來的5%左右,可以將更多的處理任務(wù)交給客戶機來完成,減小了網(wǎng)絡(luò)服務(wù)器的壓力[4]。
3.3 Google Maps API開發(fā)技術(shù)
Google Maps API是Google自己推出編程API,可以讓全世界對Google Maps有興趣的程序設(shè)計師自行開發(fā)基于Google Maps的服務(wù),建立自己的地圖網(wǎng)站。Google地圖分多個層次,自下到上分為G MAP MAP PANE(最底部的地圖),G MAP MARKER SHADOW PANE(地標的影子),G MAP MARK-ER PANE(地標),G MAP FLOAT SHADOW PANE(信息窗口的影子),G MAP MARKER MOUSE TARGET PANE(捕捉鼠標響應(yīng)層),G MAP FLOAT PANE(信息窗口層)[5]。
本系統(tǒng)所用到的Google Map API 功能有:
(1)Google.maps.Map對象:通過Google.maps.Map對象可以創(chuàng)建一個地圖并插入到Web頁面中;
(2)Google地圖控件:利用Google地圖控件,可以實現(xiàn)對地圖的平移、縮放、比例尺控制等基礎(chǔ)操作;
(3)地理標記:地理標記是Google地圖的一個重要功能,使用地理標記可以在Google地圖中標記點,添加文本注記。標記是通過google.maps.Marker類實現(xiàn)的,實例化一個標記點時需要指定標記點位置和標記所屬的地圖的ID。
(4)InfoWindows對象:通過InfoWindows對象可以在頁面上顯示被標記的地理對面更對的空間信息以及非空間信息。
3.4 MYSQL數(shù)據(jù)庫
本系統(tǒng)以MYSQL5.6關(guān)系數(shù)據(jù)庫為基礎(chǔ),使用phpMyAdmin作為數(shù)據(jù)庫管理軟件,建立空間數(shù)據(jù)庫。
系統(tǒng)中主要用到的MYSQL數(shù)據(jù)類型有INT/DOUBLE/VARCHAR/BLOB等。其中INT數(shù)據(jù)類型占用4字節(jié),取值范圍為(-2 147 483 648,2 147 483 647),用于表達要素標識等整數(shù)值信息;DOUBLE數(shù)據(jù)類型占用8字節(jié),取值范圍為(1.797 693 134 862 315 7E+308,2.225 073 858 507 201 4E-308),0,(2.225 073 858 507201 4 E-308,1.797 693 134 862315 7 E+308),用于記錄坐標值信息;VARCHAR數(shù)據(jù)類型用來記錄文本內(nèi)容,主要是要素的屬性等信息,坐標系統(tǒng)的WKT表達也使用VARCHAR數(shù)據(jù)類型,其大小為0-255個字節(jié),為變長字符串;BLOB數(shù)據(jù)類型為二進制大數(shù)據(jù)塊,存儲二進制形式的長文本數(shù)據(jù),長度為0-65 535個字節(jié),設(shè)計中使用WKB方式存儲的幾何數(shù)據(jù)都是以BLOB數(shù)據(jù)類型存儲的。
4 系統(tǒng)功能的實現(xiàn)
4.1 數(shù)據(jù)采集功能的實現(xiàn)
空間數(shù)據(jù)的采集將在WEB瀏覽器中實現(xiàn)。訪問數(shù)據(jù)采集的Web頁面,底圖直接顯示為Google地圖,點擊添加要素按鈕后,用戶可以在地圖窗口中開始繪制圖形,每繪制一個點,將創(chuàng)建一個該點的地理標記,同時實時的更新地圖視圖,顯示已經(jīng)繪制的軌跡,繪制完成后點擊提交按鈕,便將該要素上傳到服務(wù)器端。用戶也可以在Web頁面上新建圖層,輸入圖層名稱,選擇圖層的幾何類型。實現(xiàn)流程如圖3所示:
4.2 數(shù)據(jù)儲存功能的實現(xiàn)
WEB服務(wù)器端的PHP頁面接到來自網(wǎng)頁的請求后,首先通過應(yīng)用層的代碼將來自Web頁面的數(shù)值類型的數(shù)據(jù)轉(zhuǎn)化為二進制串形式的數(shù)據(jù),然后再連接收據(jù)庫,將得到的數(shù)據(jù)插入到數(shù)據(jù)表中。需要創(chuàng)建圖層時,首先要向幾何列表中添加一條記錄,然后分別創(chuàng)建該圖層的要素表和幾何表。
服務(wù)器端接受到Web前端上傳的矢量數(shù)據(jù)后,需要對數(shù)值坐標進行二進制化處理,并且按照WKB標準對處理后得到的二進制值進行連接,將一個幾何對象的所有信息都表達在二進制字符串中去。同時幾何表中還存儲了幾何對象的最小外接矩形信息,需要在服務(wù)器端對所有的坐標數(shù)值進行判斷,得到最大和最小的坐標值,和二進制字符串一同作為參數(shù)構(gòu)建SQL語句,插入到數(shù)據(jù)庫中去。實現(xiàn)流程如圖4所示:
4.3 數(shù)據(jù)訪問接口的實現(xiàn)
基于MYSQL用戶定義函數(shù)實現(xiàn),調(diào)用該數(shù)據(jù)接口,需要在WEB服務(wù)器語言PHP中調(diào)用MYSQL數(shù)據(jù)庫的用戶定義函數(shù)。暫時提供了2個數(shù)據(jù)接口,一個用來查詢數(shù)據(jù)庫中已有的所有圖層的信息,另一個用來查詢具體的某一個幾何對象的信息,輸入?yún)?shù)為要素的FID。
查詢所有圖層時,調(diào)用數(shù)據(jù)庫中的用戶定義函數(shù)getLayer(),得到的返回值的類型是數(shù)據(jù)表,使用mysql_fetch_row函數(shù)得到數(shù)據(jù)表中的每一行記錄,返回值$row是數(shù)組形式的數(shù)據(jù),可以直接使用數(shù)組索引訪問其中的值。
查詢某一個要素的幾何信息時,調(diào)用要素幾何信息查詢接口,需要的輸入?yún)?shù)為要素的FID,查詢的結(jié)果以數(shù)據(jù)表的形式給出,通常情況下,返回的數(shù)據(jù)表中只有一行記錄,得到數(shù)據(jù)行之后,使用數(shù)據(jù)行的數(shù)組索引便可得到數(shù)據(jù)行中的每一個單元格的值。實現(xiàn)流程如圖5所示:
5 結(jié)束語
空間信息已經(jīng)在日常生活中扮演了越來越重要的角色,人類大部分的活動都與空間信息息息相關(guān),空間信息的采集與存儲對于空間信息的使用來說至關(guān)重要。本系統(tǒng)基于Google地圖進行開發(fā),通過本系統(tǒng),用戶可以更為方便地采集空間數(shù)據(jù),采集的數(shù)據(jù)內(nèi)容也完全由用戶自行決定,增強了空間數(shù)據(jù)的交互性,使普通用戶也可以從數(shù)據(jù)使用者變成數(shù)據(jù)提供者,豐富了空間數(shù)據(jù)的來源。
空間信息通常都具有數(shù)據(jù)量大,數(shù)據(jù)不規(guī)則等特點,本系統(tǒng)實現(xiàn)了基于關(guān)系數(shù)據(jù)庫設(shè)計的空間數(shù)據(jù)庫,使用數(shù)據(jù)庫存儲空間數(shù)據(jù),提高了數(shù)據(jù)存儲和訪問的效率。同時提供了數(shù)據(jù)訪問接口,可以使采集的數(shù)據(jù)被更廣泛的使用。
本系統(tǒng)的很多功能還存在著許多缺陷,例如數(shù)據(jù)的安全性、系統(tǒng)數(shù)據(jù)處理的效率以及人機交互界面的優(yōu)化等,這些都是下一步的研究方向。
參考文獻
[1] Deakin Mark, Al Waer Husam. From intelligent to smart cities. Intelligent Buildings International,2011,Vol.3(3).
[2] 曲鑫,張偉.云服務(wù)平臺下的地理信息系統(tǒng)技術(shù)研究[J].測繪與空間地理信息,2014,37(9) : 113 -115.
[3] 袁一泓,高勇.面向?qū)ο蟮臅r空數(shù)據(jù)模型及其實現(xiàn)技術(shù)[J].地理與地理信息科學,2008,(03)
[4] 陳建平.基于Google Map與Ajax的Web GIS應(yīng)用解決方案研究[D].西北農(nóng)林科技大學,2009.
[5] 王芳.Google地圖開發(fā)研究[J].計算機與數(shù)字工程,2010(3):146-149.