GIS技術入門---WEB應用篇
發表于:2008-02-02來源:作者:點擊數:
標簽:GIS技術
在開發基于WEB的GIS應用時,我們往往要面對的不僅是軟件開發的問題,還必須要面臨的是涉及到服務器端GIS應用服務的設置問題。對于不同的GIS產品,應用服務的配置也存在著差異。本文以Geomedia5.0為例,討論從零開始建立一個基于WEB的GIS應用過程中值得關注的
在開發基于WEB的GIS應用時,我們往往要面對的不僅是軟件開發的問題,還必須要面臨的是涉及到服務器端GIS應用服務的設置問題。對于不同的GIS產品,應用服務的配置也存在著差異。本文以Geomedia5.0為例,討論從零開始建立一個基于WEB的GIS應用過程中值得關注的幾個關鍵技術環節。
一、 安裝GIS應用服務
開發基于WEB的GIS應用,首先要在服務器端安裝GIS應用服務,安裝不存在什么問題,按部就班進行即可,有兩點值得注意:一是必須以Administrator用戶身份登陸系統進行安裝。二是安裝完成以后,必須保證將licence文件GeoMedia_WebMap.lic復制到安裝目錄的Program子目錄中,否則GIS的Geomedia WebMap服務不能正常啟動。
為確保所開發的WEB應用程序能正確運行,除了必須正常啟動上面所說的Geomedia WebMap服務以外,還需要正常啟動以下兩個服務,IIS Admin Service服務以及World Wide Web Publishing Service服務。
安裝完應用服務以后,接下來要安裝圖形元件。在Geomedia中,該圖形元件的安裝程序位于安裝完成后的GIS系統目錄下的ACGM子目錄中。
二、 服務端配置
下面我們以一個實例來解析配置中的關鍵技術環節。假定我們要將實際目錄D:\tec_ready發布到WEB上,該目錄中包含所有基于WEB的GIS應用設計。我們必須經歷的配置環節如下:
發布實際工作目錄
在服務器的管理工具中,使用Inte
.net服務管理器創建虛擬目錄,將實際目錄D:\tec_ready發布為tec_ready。
緩存虛擬目錄
運行一個含有GIS的WEB頁面,對于服務器端而言必須提供一個緩存區域,針對本例,可在服務器上隨便建立一個目錄,例如創建目錄D:\cache,然后將這個目錄發布到WEB服務器上,虛擬目錄名稱必須為cache。
分布式COM配置
運行DCOMCNFG.EXE管理工具,這個程序位于服務器的WINNT\SYSTEM32目錄下,可以查找到該程序運行,也可以在開始菜單中使用“運行”菜單程序,直接輸入DCOMCNFG即可。
選擇“默認
安全機制”標簽頁,編輯“默認訪問權限”功能項。必須保證如下五個用戶具有允許訪問的權限。才能使Geomedia的COM組件正常運行。這五個用戶分別為:Administrator,INTERACTIVE,SYSTEM,Internet來賓帳號,啟動IIS進程帳號?!澳J啟動權限”功能項也同時保證這五個帳號具有允許調用的權限。
最后拷貝GIS安裝目錄的CFG子目錄下的OOPCOMP.ASP文件到自己的開發目錄中,按照以上例子,則拷貝該文件到D:\tec_ready這個實際目錄中。至此所有的安裝配置工作全部準備就緒。
三、 開發思路
編寫一個B/S結構下在瀏覽器上顯示地理信息系統的應用程序,和編寫一個C/S結構下在客戶端顯示地理信息的應用程序,其思路有很多不同,關于客戶端的編程在我的另一篇文章《GIS技術入門---開發篇》已經介紹過,對基于WEB的GIS開發,樸素的開發過程包括六個步驟:獲得地圖服務對象、指定坐標系統、連接數據源、定義特征類結果集、設置顯示規則、產生地圖。
獲得地圖服務對象(MapServer)
獲得MapServer對象通過兩個步驟實現,首先使用IIS的SERVER對象創建MapServerManager對象,然后通過MapServerManager對象的MapServer方法獲得MapServer對象,代碼描述如下:(ASP程序,
腳本語言為
VBScript)
<HTML><HEAD></HEAD><BODY>
<% Set objSesMgr = Server.CreateObject("GMWebMap.MapServerManager")
Set objMS = objSesMgr.MapServer("")
objMS.Clear %>
</BODY></HTML>
MapServerManager對象管理系統的MapServer進程,如果要成功的獲得一個MapServer對象,系統當時必須有一個空閑的可用的MapServer進程,如果沒有任何可用的進程,MapServerManager對象會等待一個指定的時間段(time out)同時輪詢直到得到可用的MapServer進程。
MapServer對象會緩存通過服務器產生的最后一個地圖的相關信息,這些信息包含連接信息、特征結果集信息等。所以有了上面例程中的objMS.Clear語句。MapServer對象的Clear方法用來清除緩存的特征類信息,如果要清除連接信息,則需要使用DataSource的Remove方法。
指定坐標系統
這一點類似于客戶端的開發,在WEB的開發中一般通過坐標系統文件為MapServer對象指定坐標系統。Geomedia WebMap有專門的實用工具“Define Coordinate System File”來產生坐標系統文件,其后綴名為csf。實現該功能的代碼很簡單,調用SetCoordinateSystem方法即可。
<% objMS.SetCoordinateSystem "D:\tec_ready\myMap.csf" %>
連接數據源
GeoMedia WebMap允許連接多種數據源。通過MapServer的Connect方法進行連接,該方法的描述為:
MapServer.Connect GDOServer, DBName, Source, ConnectionName
其中GDOServer表示目標數據源的類型,DBName表示
數據庫名稱,Source表示連接的屬性信息,ConnectionName表示當前產生的連接的名稱。我們通過介紹最常用的連接SqlServer數據庫的方法進一步了解各個參數的具體含義。
〈% objMS.Connect "
SQLServerRO.GDatabase", "myDB@myServer",_
"Server= myServer;Database= myDB;_
UID=sa;Password=abc123;", "myConnection" %〉
代碼中GDOServer ="
SQLServerRO.GDatabase",這個屬性信息是Geomedia規定的類型信息,在相關幫助中可以查到所有類型。DBName="myDB@myServer"是特定的數據庫描述格式,@符號前為數據庫名稱,@符號后為服務器名稱。連接信息Source的描述形式很常見。最后一個參數為產生的連接的名稱,這個名稱在后續的代碼中是有用處的。
定義特征類結果集
可以通過三種方式產生特征結果集:通過Query對象, QueryScript對象或者 Marker對象。每一種方法都是通過特征類信息表提取圖形信息和屬性信息。這里主要介紹通過通過Query對象獲得特征結果集。MapServer對象提供了一個方法AddQuery(Name,Connection,Table)用來產生特征結果集的Query對象,代碼描述為:
<% Set objQry = objMS.AddQuery("myQuery", _
"myConnection", "tbName") %>其中第一個參數表示當前產生的Query對象名稱,第二個參數表示連接的名稱,也就是上一個環節連接數據源中產生連接時命名的連接名稱。最后一個參數表示存儲特征類的地理信息數據表名。
設置顯示規則
通過FeatureSymbology對象管理尺寸、顏色、字體、大小等屬性信息,從而達到設置Query對象的顯示規則的目的。FeatureSymbology對象是GMWebMap組件中描述的類,設置顯示規則的代碼如下:
' 產生objQry這個Query對象的新顯示規則
Set objDisplayRule = objQry.NewDisplayRule
'產生FeatureSymbology對象,并設置屬性,最后將其應用到顯示規則中
Set objSym = objMS.CreateObject("GMWebMap.GWMFeatureSymbology")
objSym.Color = RGB(0, 0, 0)
objSym.FillColor = RGB(255,255,204)
objSym.Weight = 1
objSym.Style = 0
objDisplayRule.DisplaySymbology = objSym
'指定當鼠標選中特征類時將要顯示的描述信息
objDisplayRule.ToolTip = "單位名稱:<%.Unit_Name%" & ">"
'當鼠標選中特征類時,指定特征類的新顯示規則
Set objSym = objMS.CreateObject("GMWebMap.GWMFeatureSymbology")
objSym.FillColor = RGB(255, 255, 0)
objSym.Weight = 2
objDisplayRule.HotspotSymbology = objSym
如果特征類信息描述的是城市中的所有單位,則上面代碼執行效果為首先顯示城市中所有單位點信息,當鼠標浮在地圖的某個單位上時,系統顯示該單位的名稱信息,同時地圖上代表這個單位的點會變大、變色顯示。
產生地圖
當產生了特征類集合并且設置完顯示規則以后,就可以產生地圖了。這一功能通過MapServer對象的CreateMapByRange方法來實現。
objMS.CreateMapByRange Rng(0),Rng(1),Rng(2),Rng(3),
Width,Height,AutoScale
其中Rng數組是當產生了Query對象以后,由Query對象的Range方法獲得,然后在產生地圖時直接引用,Rng數組代表特征類結果集的矩形顯示范圍。Width和Height這兩個屬性代表即將顯示的地圖大小。AutoScale代表地圖覆蓋范圍的比例因子。
至此,所有工作完成,當然不能忘記程序的最后釋放定義的各種資源。按照上面描述的思路,將例程代碼合在一起,保存為D:\tec_ready目錄下asp文件,就形成一個完整的在WEB上顯示地圖中所有單位信息的應用程序。
四、結束語
B/S和C/S結構下的GIS開發從編程思路上有著一定的差異,從應用開發的角度看,利用Geomedia開發基于WEB的GIS產品難度沒有增大,相對于某些關鍵技術環節變的更加簡潔實用,例如和用戶的交互,響應鼠標事件等情況下,只需一句代碼便可將動作和事件結合起來,這一點也在一定層面上充分體現了兩種結構體系編程思路的區別。
原文轉自:http://www.kjueaiud.com