亚洲熟妇av一区二区三区,亚洲av中文无码乱人伦在线视色,亚洲人成网站色www,亚洲欧美日韩国产综合在线一区 ,亚洲av之男人的天堂网站

分享
Scan me 分享到微信

基于MapXtreme的BeyonDB空間數(shù)據(jù)庫驅(qū)動實(shí)現(xiàn)研究

本文主要分析了GIS軟件設(shè)計(jì)中針對數(shù)據(jù)源驅(qū)動的通用設(shè)計(jì)框架及MapXtreme 2008的可擴(kuò)展驅(qū)動框架,并基于MapXtreme 2008提供的數(shù)據(jù)源擴(kuò)展框架實(shí)現(xiàn)了MapXtreme對內(nèi)嵌式國產(chǎn)高可信空間數(shù)據(jù)庫BeyonDB數(shù)據(jù)源驅(qū)動的支持。

  1.可擴(kuò)展數(shù)據(jù)源驅(qū)動框架

  GIS軟件的應(yīng)用通常需要面向不同的數(shù)據(jù)格式及數(shù)據(jù)模型,通用的數(shù)據(jù)訪問驅(qū)動往往不能滿足使用中的自定義數(shù)據(jù)模型的需要。因此,GIS組件或者軟件庫的設(shè)計(jì)中一般需要考慮提供多種數(shù)據(jù)源的支持以實(shí)現(xiàn)軟件框架的擴(kuò)展性?,F(xiàn)有優(yōu)秀的開源和商業(yè)GIS組件及GIS庫大多提供了良好的擴(kuò)展框架。

  可擴(kuò)展數(shù)據(jù)驅(qū)動框架一般基于提供者模式(Provider)進(jìn)行設(shè)計(jì),使用抽象的數(shù)據(jù)訪問接口支持第三方的數(shù)據(jù)模型。與Provider設(shè)計(jì)模式類似的有適配器模式(Adapter)和策略模式(Strategy)。Adapter強(qiáng)調(diào)的是對于不同類的抽象接口的兼容和交互,實(shí)現(xiàn)不同的接口之間的兼容轉(zhuǎn)換。Strategy是對不同實(shí)現(xiàn)算法上的封裝,可以實(shí)現(xiàn)算法的獨(dú)立修改,同時對使用者保持其相對的透明性。Provider使用常常使用在具有抽象出的固定方法接口,同時可以實(shí)現(xiàn)包括核心的方法與功能處理邏輯的解決方案的替換與修改。比如,對于不同的數(shù)據(jù)源常常具有固定的打開、關(guān)閉及迭代訪問數(shù)據(jù)等接口,但是由于數(shù)據(jù)源的差異處理的邏輯往往不盡相同,一般會有不同的數(shù)據(jù)源提供方基于固定的接口實(shí)現(xiàn)對應(yīng)數(shù)據(jù)源不同的操作及處理邏輯。Provider模式將方法接口與實(shí)現(xiàn)上的業(yè)務(wù)邏輯層(BLL,Business Logic Layer)及數(shù)據(jù)訪問層(DAL,Data Abstraction Layer)結(jié)合,而方法接口的實(shí)現(xiàn)與接口本身相對獨(dú)立。通常,Provider模式會結(jié)合抽象模板使用,不同Provider的抽象基類ProviderBase定義諸多Provider需要加以實(shí)現(xiàn)的統(tǒng)一的接口。

  在GIS組件和軟件庫的設(shè)計(jì)中,通常首先對數(shù)據(jù)處理中操作數(shù)據(jù)模型加以抽象,比如使用Data Provider抽象表示對數(shù)據(jù)源的訪問相關(guān)的操作,使用Data Source抽象表示單個數(shù)據(jù)源訪問接口(存儲GIS數(shù)據(jù)的單個或者多個文件、空間數(shù)據(jù)庫以及Web Service等數(shù)據(jù)的訪問接口),使用Layer(Table)抽象表示具有相同的模式或者具有相同屬性的要素集合,使用Feature抽象表示空間對象的單個要素(集合對象及屬性集合),Geometry抽象表示空間對象的集合模型(包含幾何操作和空間參考信息),使用Spatial Reference抽象表示投影、橢球等空間參考信息定義。

  大多數(shù)開源GIS組件和軟件庫都采用了可擴(kuò)展的GIS數(shù)據(jù)源驅(qū)動框架加以設(shè)計(jì)。比如,通用開源矢量模型庫OGR、開源.NET地圖組件SharpMap和開源桌面GIS QGIS。通用開源矢量模型及轉(zhuǎn)換庫OGR對多種數(shù)據(jù)格式的支持基于數(shù)據(jù)驅(qū)動的擴(kuò)展框架,通過對不同數(shù)據(jù)驅(qū)動支持驅(qū)動OGRSFDriver、OGRDataSource相關(guān)類的實(shí)現(xiàn)增加多種數(shù)據(jù)格式的支持。開源.NET地圖組件SharpMap通過SharpMap.Data.Providers的IProvider接口中對數(shù)據(jù)源操作的方法的實(shí)現(xiàn)提供了對包括Ogr、ShapeFile及PostGIS等諸多數(shù)據(jù)源格式的支持。對于開源桌面GIS軟件QGIS,Data Provider作為一個特殊的插件加以實(shí)現(xiàn),用于提供多種數(shù)據(jù)源或者針對單個數(shù)據(jù)源不同的訪問能力。QGIS中中通過對QgsDataProvider派生的QgsVectorDataProvider和QgsRasterDataProvider子類的實(shí)現(xiàn),使得我們可以增加QGIS對多種數(shù)據(jù)源格式的支持。圖1-1中描述了QgsVectorDataProvider的繼承關(guān)系。所有的Data Provider由QgsProviderRegistry單例對象加以管理,對符合條件的Provider對象提供元數(shù)據(jù)信息QgsProviderMetadata,當(dāng)需要使用特定的Provider對數(shù)據(jù)加以訪問和操作的時候,通過調(diào)用classFactory方法進(jìn)行創(chuàng)建。

  2.MapXtreme數(shù)據(jù)源驅(qū)動框架 - 模型與接口

  在商業(yè)GIS軟件中,MapXtreme Java已經(jīng)提供了自定義數(shù)據(jù)源的機(jī)制用于支持異構(gòu)的數(shù)據(jù)源驅(qū)動,以方便MapXtreme Java獲取這些異構(gòu)數(shù)據(jù)源中的信息。PBBI的MapXtreme 2008 v7.0產(chǎn)品同樣引入了可擴(kuò)展數(shù)據(jù)驅(qū)動框架的設(shè)計(jì),除了提供常用空間數(shù)據(jù)類型和使用ADO.NET訪問非空間數(shù)據(jù)的能力外,還可以通過擴(kuò)展?jié)M足對開發(fā)中多種數(shù)據(jù)源格式支持的需要,并實(shí)現(xiàn)MapXtreme核心數(shù)據(jù)訪問引擎同樣的功能[5]。比如,我們可以通過擴(kuò)展框架實(shí)現(xiàn)的數(shù)據(jù)驅(qū)動提供與核心數(shù)據(jù)引擎同樣的打開,讀取數(shù)據(jù)源操作,元數(shù)據(jù)檢索及對數(shù)據(jù)源修改等功能。MapXtreme 2008使用TableInfo類支持各種數(shù)據(jù)源,并通過TableInfoAdoNet類支持Microsoft的ADO.NET,用于處理無法直接從TableInfo數(shù)據(jù)源訪問的數(shù)據(jù)。因此,通過可擴(kuò)展的數(shù)據(jù)驅(qū)動框架對數(shù)據(jù)源的擴(kuò)展,我們可以直接利用MapXtreme的核心訪問引擎,而無需再間接通過ADO.NET對數(shù)據(jù)訪問。

  在MapXtreme 2008中,驅(qū)動框架使用的數(shù)據(jù)模型被抽象為幾個重要的類,用以實(shí)現(xiàn)對數(shù)據(jù)訪問和操作的支持。

  1) Data Provider:Data Provider是應(yīng)用程序和數(shù)據(jù)源之間訪問的接口,應(yīng)用程序中通過調(diào)用Data Provider建立驅(qū)動和數(shù)據(jù)源之間的聯(lián)系。實(shí)現(xiàn)了MapXtreme在數(shù)據(jù)源之間的各種操作(比如顯示、查詢、編輯和分析)的交互。MapInfo組件模型中,對于數(shù)據(jù)驅(qū)動存在IDataProvider的接口,實(shí)現(xiàn)了兩種方法OpenDataSource和OpenTable,分別用于操作存在多數(shù)據(jù)集的Data Source對象或者僅存在單數(shù)據(jù)集的Table對象。

  2) Data Source:Data Source表示數(shù)據(jù)源,通常對應(yīng)于DBMS,Web Service或者其他的數(shù)據(jù)引擎或者API,這些對象負(fù)責(zé)存儲數(shù)據(jù)并支持對數(shù)據(jù)的訪問,比如存儲數(shù)據(jù)的元數(shù)據(jù)信息,以及對相關(guān)數(shù)據(jù)的查詢和操作信息。對于數(shù)據(jù)源一般存在數(shù)據(jù)源信息的定義和描述,使用Data Source Definition加以定義。一般情況下,我們需要實(shí)現(xiàn)數(shù)據(jù)源驅(qū)動,但是一些簡單數(shù)據(jù)模型可以直接映射為Table的概念,直接對應(yīng)模式相同的要素集,比如MapInfo的表文件和ESRI的Shape文件。

  3) Table:Table表示要素集合,要素具有同樣的Schema或者屬性集合。Table不需要一定具有g(shù)eometry屬性,但是一般來說Data Provider的一些表是具有空間列的。MapXtreme將geometry數(shù)據(jù)作為Table的屬性列來處理的,就類似與普通的數(shù)據(jù)類型字符串。表的元數(shù)據(jù)描述了table中包含的元數(shù)據(jù)信息,并提供了數(shù)據(jù)訪問,查詢和編輯的功能。但需要注意的是,每一個要素需要一個data provider中唯一標(biāo)識的ID作為key,其用在MapXtreme中實(shí)現(xiàn)選擇,結(jié)果集以及編輯操作。

  4) Cursor:Cursor用于實(shí)現(xiàn)要素集的遍歷,通過調(diào)用Table的search方法,MapXtreme可以獲取數(shù)據(jù)源中某個要素集中的單個要素。表返回的Cursor使MapXtreme可以根據(jù)約束條件,搜索指定的要素。由于Cursor的位置會不斷變化,因此,Cursor僅僅可以訪問當(dāng)前指向的數(shù)據(jù)對象,如果Cursor發(fā)生變化,原先的對象就不能進(jìn)行訪問了,特別是對于FeatureGeometry的對象來說,需要設(shè)計(jì)內(nèi)存重用的策略。FeatureAccessor是一種特殊類型的Cursor,用于實(shí)現(xiàn)通過關(guān)鍵字訪問Feature的邏輯。

  MapXtreme 2008抽象的模型與通用的模型框架如圖2-1所示,通過對MapInfo.Data.Provider命名空間下提供的接口的支持,可以實(shí)現(xiàn)數(shù)據(jù)源的擴(kuò)展。主要的數(shù)據(jù)接口包括:IDataProvider,定義了實(shí)現(xiàn)應(yīng)用程序和數(shù)據(jù)源之間訪問邏輯需要的(打開、關(guān)閉和管理數(shù)據(jù)源)接口;IDataSource,定義數(shù)據(jù)源的接口,實(shí)現(xiàn)對數(shù)據(jù)表訪問實(shí)體;IDataSourceDefinition,定義了IDataSource實(shí)例化所必需的屬性;ITable,定義表的接口,是讀取、查詢和在地圖中顯示的基本信息的容器;ITableDefinition,定義對特定數(shù)據(jù)源的ITable進(jìn)行實(shí)例化所必需的屬性;ITableMetadata,定義了提供表屬性和支持功能的信息;IFeature,定義提供圖元的屬性和方法;ICursor,定義用于重復(fù)查詢返回的圖元列表方法和操作。

  通過這些接口的實(shí)現(xiàn)MapXtreme 2008 可擴(kuò)展數(shù)據(jù)源驅(qū)動可以支持打開表、讀取表內(nèi)容及關(guān)聯(lián)的元數(shù)據(jù)集、使用多個方法搜索表內(nèi)容以及通過插入、更新和刪除操作修改表內(nèi)容。

  3.BeyonDB 數(shù)據(jù)庫驅(qū)動模型的支持

  BeyonDB數(shù)據(jù)庫是面向國家空間信息基礎(chǔ)設(shè)施建設(shè)的重大需求所研發(fā)的具有自主知識產(chǎn)權(quán)、企業(yè)級、跨平臺、分布式、高安全的地理空間數(shù)據(jù)庫管理系統(tǒng)平臺軟件。在空間數(shù)據(jù)管理方面,BeyonDB遵循ISO/IEC 13249-3: SQL/MM Part3: Spatial的設(shè)計(jì)標(biāo)準(zhǔn),設(shè)計(jì)了具備可擴(kuò)展能力的、能夠綜合地理空間實(shí)體及其處理方法的新型地理實(shí)體空間數(shù)據(jù)模型,構(gòu)建了基于UMD-MA(按需分級動態(tài)裝配)機(jī)制的模型與模塊的動態(tài)可伸縮結(jié)構(gòu)體系,實(shí)現(xiàn)了內(nèi)置的抽象空間數(shù)據(jù)類型ST_Geometry、ST_Raster及相應(yīng)的空間操作算子和空間分析函數(shù)。在數(shù)據(jù)庫安全,BeyonDB實(shí)現(xiàn)了可配置內(nèi)核級審計(jì)子系統(tǒng),支持多策略的訪問控制子系統(tǒng)(包括自主訪問控制、強(qiáng)制訪問控制、空間訪問控制等),基于密碼設(shè)備的強(qiáng)身份認(rèn)證子系統(tǒng)和高效數(shù)據(jù)加密存儲中間件等四項(xiàng)安全功能,安全性能已達(dá)到國標(biāo)第三級強(qiáng)度。同時,BeyonDB為數(shù)據(jù)庫管理者提供了空間屬性一體化、矢柵一體化的集成管理,能夠在統(tǒng)一的數(shù)據(jù)庫集成管理平臺上進(jìn)行空間數(shù)據(jù)、屬性數(shù)據(jù)的一體化管理,對矢量數(shù)據(jù)、柵格數(shù)據(jù)進(jìn)行一體化空間展現(xiàn)與處理。

  通過使用BeyonDB .NET Provider和OpenAPI接口,我們基于MapXtreme 2008的可擴(kuò)展驅(qū)動模型實(shí)現(xiàn)了BeyonDB的訪問支持。通過擴(kuò)展BeyonDB相關(guān)定義實(shí)現(xiàn)了IDataProvider的單例接口。通過讀取系統(tǒng)元數(shù)據(jù)表st_geometry_columns和st_spatial_reference_systems獲取了IDataSourceDefinition和ITableMetaData、ITableDefinition接口。由于空間數(shù)據(jù)庫有多空間要素表組成,這通過IDataSource接口加以實(shí)現(xiàn)。另外,通過對ICursor和IFeatureAccessor的訪問獲取BeyonDB數(shù)據(jù)要素的信息。通過實(shí)現(xiàn)可選接口ITableModifyProcessor增加了數(shù)據(jù)要素修改的能力。通過圖3-1中相關(guān)類的定義與實(shí)現(xiàn),實(shí)現(xiàn)了MapXtreme使用核心引擎直接訪問和操作BeyonDB數(shù)據(jù)源的能力。同時,為了讓 MapXtreme 的會話初始化期間使用PersistenceProviderCollection.AddFromFolder 方法將BeyonDB Data Provider作為內(nèi)置數(shù)據(jù)源驅(qū)動加載,實(shí)現(xiàn)對BeyonDB數(shù)據(jù)的原生訪問能力。我們基于AbstractMxpPersistenceProvider實(shí)現(xiàn)了SupportsDataProvider SupportsEntityName SupportsSchemaNamespace方法供MapXtreme識別BeyonDB驅(qū)動識別為內(nèi)置數(shù)據(jù)源驅(qū)動。


  MapXtreme的內(nèi)置BeyonDB空間數(shù)據(jù)庫驅(qū)動支持BeyonDB空間數(shù)據(jù)的高效檢索與修改,數(shù)據(jù)庫中數(shù)據(jù)的組織和MapXtreme中對數(shù)據(jù)的支持如圖3-2和3-3所示,對應(yīng)的同時可以將原有的部分基于MapXtreme的計(jì)算邏輯使用空間數(shù)據(jù)庫服務(wù)端空間分析和處理的能力替換。增加了使用MapXtreme組件在行業(yè)開發(fā)中的與空間數(shù)據(jù)庫的兼容性和擴(kuò)展性。

  4.結(jié)束語

  MapXtreme 2008的可擴(kuò)展數(shù)據(jù)驅(qū)動模型提供了多種數(shù)據(jù)的擴(kuò)展支持,通過對BeyonDB數(shù)據(jù)庫的MapXtreme的驅(qū)動模型的接口類實(shí)現(xiàn),為MapXtreme提供了基于內(nèi)嵌式空間數(shù)據(jù)庫高效可擴(kuò)展的開發(fā)、訪問、管理和操作數(shù)據(jù)的能力,也為基于MapXtreme和空間數(shù)據(jù)庫系統(tǒng)進(jìn)行應(yīng)用開發(fā)提供了更好的擴(kuò)展性與適用性。(作者:顏勛 陳榮國 中國科學(xué)院地理科學(xué)與資源研究所)

喜歡您正在閱讀的內(nèi)容嗎?歡迎免費(fèi)訂閱泰伯每周精選電郵。 立即訂閱

參與評論

【登錄后才能評論哦!點(diǎn)擊

  • {{item.username}}

    {{item.content}}

    {{item.created_at}}
    {{item.support}}
    回復(fù){{item.replynum}}
    {{child.username}} 回復(fù) {{child.to_username}}:{{child.content}}

更多精選文章推薦