777精品久无码人妻蜜桃,国产日本精品视频在线观看 ,国产亚洲99久久精品熟女av,brazzersvideosex欧美最新版,人人爽人人人爽人人爽

分享
Scan me 分享到微信

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

  4.結(jié)束語(yǔ)

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

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

參與評(píng)論

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

  • {{item.username}}

    {{item.content}}

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

更多精選文章推薦