程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> SharpMap深度分析:地圖數據Provider

SharpMap深度分析:地圖數據Provider

編輯:關於.NET

Provider或者Provider模式對於很多人應該都不陌生,在DNN和Asp.net 2.0中都大量應用了Provider 模式。目前主流的GIS平台的數據提供也應該基本上都是基於Provider這樣的模式,大家比較熟悉的應該 是SuperMap提出的多源空間數據引擎的概念。

在SharpMap裡,數據Provider是這樣使用的:

string ConnStr = 

"Server=127.0.0.1;Port=5432;UserId=postgres;Password=password;Database=myGisDb;";

myLayer.DataSource = new SharpMap.Providers.PostGIS(ConnStr, "myTable", "the_geom", 

32632);

而實際上,在Layer類裡,DataSource定義為:

public SharpMap.Data.Providers.IProvider DataSource

{

    ...

}

也就是說,這裡的Provider是針對IProvider接口的,這樣,對於不同的層,你可以指定不同的數據源 (使用不同的數據Provider,而支持不同的數據格式)。下面是Provider接口的類圖,定義了接口的屬性 和操作:

個人認為,Provider的核心思想在於面向接口編程,也就是說通過接口定義需要的服務,至於服務的 實現,可以通過具體的方式來實現。就GIS數據引擎來說,就是定義對空間數據需要的操作,例如打開、 關閉、讀取某個范圍內的數據、檢索、分析等等這些接口,然後通過繼承這個接口來實現對不同的數據的 操作。例如對Shape文件的操作和對PostGIS文件的操作是完全不同的,但其接口一致。而在系統內部,對 數據的操作,例如放大縮小、變換、顯示,只需要針對接口編程,就可以實現支持不同的數據源。

這裡的實現和DNN等的不同在於,DNN是通過配置文件和反射機制,來實現不同的Provider的更換,而 無須更改代碼實現,而SharpMap或其他GIS的類似實現是需要在開發時指定使用的Provider。

Provider的實現還有一個比較重要的問題就是要操作的數據的定義,因為具體的Provider的實現最終 要將數據轉換為系統內部的數據類型和結構,然後返回。

對於具體的Geometry的結構,基本上是在OGC的規范的基礎上實現,對於這部分內容,很多非GIS的面 向對象的書也喜歡用這個來講述類、對象、繼承等概念,大家都很熟悉,這裡就不多說了。對OGC的 Simple Feature實現比較好的一個.net類庫是NTS(JTS的.net移植版本),目前正在看他的源碼,後面會 寫一些自己的筆記。SharpMap的一些代碼,看注釋也是在NTS的基礎上實現的。

SharpMap的Provider沒有定義數據的修改、編輯,從理論上講,完全可以實現任意數據的讀取、修改 ,但實際上,數據的讀取顯示一般來說,實現難度不是很大,因為大家都是點線面及其組合這樣的對象; 但由於內部結構,拓撲關系,修改就比較困難了。例如SuperMap的產品也只是可以只讀讀取一些其他格式 的數據(如MicroStation DGN,AutoCAD數據),而沒有修改功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved