FDO Provider for SuperMap 的設計與實現(xiàn)

周旭,梁軍,石偉偉

(1. 中國科學院地理科學與資源研究所,北京 100101;2. 中國科學院研究生院,北京 100039;3. 北京超圖軟件股份有限公司,北京 100085)

論文來源:計算機工程

摘要:針對在 CAD 環(huán)境中無法直接訪問和編輯 GIS 系統(tǒng)中空間數(shù)據的問題,研究開源要素數(shù)據對象(FDO)空間數(shù)據訪問引擎中的數(shù)據提供者(PDO Provider)的 4 個關鍵部分的實現(xiàn)技術:數(shù)據連接,數(shù)據模型之間的映射,坐標系統(tǒng)的識別以及數(shù)據的讀寫訪問操作。設計并實現(xiàn) FDO Provider for S…

關鍵詞: 要素數(shù)據對象;空間數(shù)據引擎;超圖;計算機輔助設計

1 概述

要素數(shù)據對象(Feature Data Objects, FDO)空間數(shù)據訪問引擎作為開源地理空間基金會下的一個開源項目[1],已經逐步得到了越來越多的空間信息軟件的支持(支持 FDO 的軟件產品列表詳見文獻[2])。

FDO 包含應用程序接口 FDO API 和用于支持各種具體空間數(shù)據源的數(shù)據提供者(FDO Provider)2 個部分[1,3],其基本思想是通過一套統(tǒng)一和開放的接口 API 以一種公共的方式來獲取、查詢、編輯、分析和存儲隱藏在后臺的各種地理空間數(shù)據[3],而通過不同的數(shù)據提供者來實現(xiàn)針對這些不同數(shù)據格式的具體訪問操作,從而使應用程序能夠通過一套 FDO API 直接訪問各種空間數(shù)據而不受具體存儲格式的束縛。其中,F(xiàn)DO Provider 是 FDO API 的一個具體實現(xiàn),實際上就是一個用于連接和處理特定 GIS 空間數(shù)據源的動態(tài)鏈接庫[3]。例如,本文實現(xiàn)的 FDO Provider for SuperMap,就使應用程序可以通過開源的 FDO API 直接處理 SuperMap 格式的 GIS數(shù)據。

2 FDO API 接口

FDO API 為處理存儲在數(shù)據庫和數(shù)據文件中的地理數(shù)據提供了一個公共的抽象層。從某種意義上說,F(xiàn)DO API 就是這個抽象層的接口規(guī)范[1]。因此,要使應用程序可以通過 FDO API 來連接、識別、讀取、編輯(修改、插入、刪除)SuperMap格式的 GIS 數(shù)據并基于正確的地理坐標位置進行顯示,就必須在 FDO 引擎的 SuperMap Provider 中正確實現(xiàn)對應的 FDO API 接口。

由于本文篇幅有限,僅討論與以上基本的空間數(shù)據訪問功能相對應的 FDO API 接口類,如表 1 所示。FDO API 類的具體函數(shù)接口可參見 FDO 源代碼(http://fdo.osgeo.org)。

3 FDO Provider for SuperMap 的設計與實現(xiàn)

FDO 引擎的 SuperMap 數(shù)據提供者基于 SuperMap 共相式 GIS 內核(Universal GIS Core, UGC)底層開發(fā)庫進行開發(fā)實現(xiàn)。UGC 作為超圖公司新一代基礎類庫,全部采用標準C++開發(fā),具有跨平臺和高性能的特點。FDO 本身也支持Windows 和 Linux 操作系統(tǒng)[4],使用 UGC 來實現(xiàn)該 Provider也能保證其在 FDO 支持的各種操作系統(tǒng)上正確運行。

本文將論述如何在 FDO Provider中設計和實現(xiàn)相關FDO API 接口,使應用程序可以通過開源 FDO 引擎來完成對SuperMap 的 SDB 文件和 SDX+空間數(shù)據庫的基本訪問和處理功能。

3.1 數(shù)據連接的實現(xiàn)

由表 1 可知,實現(xiàn) FDO 對 SuperMap 數(shù)據的連接需要在Provider 中利用 UGC 實現(xiàn) 2 個 FDO API:FDOIConnection和 FDOIConnectionInfo。具體實現(xiàn)過程中主要存在 2 個問題:

(1)由于文件和數(shù)據庫的連接屬性的差異,連接 SDB 文件只需要一個正確的文件全路徑名,而連接 SDX+數(shù)據庫就需要數(shù)據庫引擎類型、服務器地址、數(shù)據庫名、用戶名、密碼等多個連接屬性[5]。因此,必須考慮如何在一個 Provider中以統(tǒng)一的方式來獲取和設置這兩者的連接屬性。

(2)由于文件型數(shù)據源的獨占性,上層軟件通過 FDO 打開多個到同一 SDB 文件的連接時,將只能在第一個連接中對數(shù)據進行編輯,并且關閉其中一個連接會導致其他連接均不可用。通過在 Provider 中利用 Singleton 模式建立連接池的技術可以有效解決這一問題,同時還可以提高對數(shù)據庫訪問的性能。

3.1.1 統(tǒng)一 SDB 文件和 SDX+數(shù)據庫的連接屬性設置

在 FDO API中與連接屬性設置相關的具體函數(shù)接口主要由 2 個:FDOIConnectionInfo:: GetConnectionProperties()和FDOIConnection::Set ConnectionString()(省略返回值和參數(shù))。前者負責告訴 FDO 連接 SuperMap 數(shù)據源需要哪幾個連接屬性,后者設置具體連接參數(shù)。

為了兼容 SDB 文件和 SDX+數(shù)據庫的連接屬性設置,采取只要一個 FDO 連接字符串屬性,然后在 Provider 內部對該字符串進行解析的方法。即在第 1 個接口中告訴 FDO 本Provider 只需要一個連接屬性,在第 2 個接口中再對這一個字符串屬性進行解析。這就需要對連接字符串的格式進行規(guī)定,比如,連接 C 盤根目錄下的 world.sdb 數(shù)據源,連接字符串為 type=sdb;database=c:\\world.sdb;連接一個后臺為 SQL Server 的 SDX+ 空間數(shù)據庫,字符串格式為 type=sql; server=192.168.1.76; database=test;user=sa;password=123。 3.1.2 連接池設計

連接池的設計主要由 2 個目的:(1)避免多次打開同一SDB 文件數(shù)據源引起的并發(fā)問題。(2)提高數(shù)據庫型的 SDX+ 數(shù)據源的連接使用效率,將已經打開過的 SDX+數(shù)據源保存在連接池中,如果用戶需要使用之前已經打開過的數(shù)據源時,直接在連接池中取出返回即可,從而避免網絡傳輸?shù)葞淼男阅軗p耗。

更多內容請查看pdf