GIS 二次開發(fā)概述
地理信息系統(tǒng)根據(jù)其內(nèi)容可分為兩大基本類型:一是應用型地理信息系統(tǒng),以某一專業(yè)、領(lǐng) 域或工作為主要內(nèi)容,包括專題地理信息系統(tǒng)和區(qū)域綜合地理信息系統(tǒng);二是工具型地理信息系統(tǒng),也就是GIS工具軟件包,如ARC/INFO等,具有空間數(shù)據(jù)輸入、存儲、處理、分析和輸出等GIS基本功能。隨著地理信息系統(tǒng)應用領(lǐng)域的擴展,應用型GIS的開發(fā)工作日顯重要。如何針對不同的應用目標,高效地開發(fā)出既合乎需要又具有方便美觀豐富的界面形式的地理信息系統(tǒng),是GIS開發(fā)者非常關(guān)心的問題。
? ? ? 1.1 GIS開發(fā)模式
獨立開發(fā)
指不依賴于任何GIS工具軟件,從空間數(shù)據(jù)的采集、編輯到數(shù)據(jù)的處理分析及結(jié)果輸出,所有的算法都由開發(fā)者獨立設計,然后選用某種程序設計語言,如Visual C++、Delphi等,在一定的操作系統(tǒng)平臺上編程實現(xiàn)。這種方式的好處在于無須依賴任何商業(yè)GIS工具軟件,減少了開發(fā)成本,但一方面對于大多數(shù)開發(fā)者來說,能力、時間、財力方面的限制使其開發(fā)出來的產(chǎn)品很難在功能上與商業(yè)化GIS工具軟件相比,而且在購買GIS工具軟件上省下的錢可能還抵不上開發(fā)者在開發(fā)過程中絞盡腦汁所花的代價。
宿主型二次開發(fā)
指基于GIS平臺軟件上進行應用系統(tǒng)開發(fā)。大多數(shù)GIS平臺軟件都提供了可供用戶進行二次開發(fā)的腳本語言,如ESRI的ArcView提供了Avenue語言,MapInfo公司的MapInfo Professional提供了MapBasic語言等等。用戶可以利用這些腳本語言,以原GIS軟件為開發(fā)平臺,開發(fā)出自己的針對不同應用對象的應用程序。這種方式省時省心,但進行二次開發(fā)的腳本語言,作為編程語言,功能極弱,用它們來開發(fā)應用程序仍然不盡如人意,并且所開發(fā)的系統(tǒng)不能脫離GIS平臺軟件,是解釋執(zhí)行的,效率不高。
基于GIS組件的二次開發(fā)
大多數(shù)GIS軟件產(chǎn)商都提供商業(yè)化的GIS組件,如ESRI 公司的MapObjects、MapInfo公司的MapX等,這些組件都具備GIS的基本功能,開發(fā)人員可以基于通用軟件開發(fā)工具尤其是可視化開發(fā)工具,如Delphi、Visual C++、Visual Basic、Power Builder等為開發(fā)平臺,進行二次開發(fā)。 利用GIS工具軟件生產(chǎn)廠家提供的建立在OCX技術(shù)基礎(chǔ)上的GIS功能控件,如ESRI的MapObjects、MapInfo公司的MapX等,在Delphi等編程工具編制的應用程序中,直接將GIS功能嵌入其中,實現(xiàn)地理信息系統(tǒng)的各種功能
三種實現(xiàn)方式的分析與比較
由于獨立開發(fā)難度太大,單純二次開發(fā)受GIS工具提供的編程語言的限制差強人意,因此結(jié)合GIS工具軟件與當今可視化開發(fā)語言的集成二次開發(fā)方式就成為GIS應用開發(fā)的主流。它的優(yōu)點是既可以充分利用GIS工具軟件對空間數(shù)據(jù)庫的管理、分析功能,又可以利用其它可視化開發(fā)語言具有的高效、方便等編程優(yōu)點,集二者之所長,不僅能大大提高應用系統(tǒng)的開發(fā)效率,而且使用可視化軟件開發(fā)工具開發(fā)出來的應用程序具有更好的外觀效果,更強大的數(shù)據(jù)庫功能,而且
可靠性好、易于移植、便于維護。尤其是使用OCX技術(shù)利用GIS功能組件進行集成開發(fā),更能表現(xiàn)出這些優(yōu)勢。 由于上述優(yōu)點,集成二次開發(fā)正成為應用GIS開發(fā)的主流方向。這種方法唯一的缺點是前期投入比較大,需要同時購買GIS工具軟件和可視化編程軟件,但“工欲善其事,必先利其器”,這種投資值得。 目前許多軟件公司都開發(fā)了很多ActiveX控件,合理選擇和運用現(xiàn)成的控件,減少了開發(fā)者的編程工作量,使開發(fā)者避開某些應用的具體編程,直接調(diào)用控件,實現(xiàn)這些具體應用,不僅可以縮短程序開發(fā)周期,使編程過程更簡潔,用戶界面更友好,可以使程序更加靈活、簡便。
1.2 面向?qū)ο蟮拈_發(fā) (OOP: Object Oriented Programming)
1.2.1 面向?qū)ο蟪绦蛟O計模式
發(fā)明面向?qū)ο蟪绦蛟O計方法的主要出發(fā)點是彌補面向過程程序設計方法中的一些缺點。OOP把數(shù)據(jù)看作程序開發(fā)中的基本元素,并且不允許它們在系統(tǒng)中自由流動。它將數(shù)據(jù)和操作這些數(shù)據(jù)的函數(shù)緊密的連結(jié)在一起,并保護數(shù)據(jù)不會被外界的函數(shù)意外的改變。OOP允許我們將問題分解為一系列實體——這些實體被稱為對象(object),然后圍繞這些實體建立數(shù)據(jù)和函數(shù)。面向?qū)ο蟪绦蛟O計中的數(shù)據(jù)和函數(shù)的組織結(jié)構(gòu)如圖所示。
?
1.2.2 什么是面向?qū)ο蟪绦蛟O計?
? ? ? ?面向?qū)ο蟪绦蛟O計(OOP)技術(shù)汲取了結(jié)構(gòu)化程序設計中好的思想,并將這些思想與一些新的、強大的理念相結(jié)合,從而給你的程序設計工作提供了一種全新的方法。通常,在面向?qū)ο蟮某绦蛟O計風格中,你會將一個問題分解為一些相互關(guān)聯(lián)的子集,每個子集內(nèi)部都包含了相關(guān)的數(shù)據(jù)和函數(shù)。同時,你會以某種方式將這些子集分為不同等級,而一個對象就是已定義的某個類型的變量。當你定義了一個對象,你就隱含的創(chuàng)建了一個新的數(shù)據(jù)類型。 1.2.3 面向?qū)ο蟪绦蛟O計中的基本概念 “面向?qū)ο蟆弊鳛橐粋€術(shù)語,在不同的人群中有著不同的解釋。因此,了解一些在面向?qū)ο蟪绦蛟O計中廣泛應用的概念是必須的。本節(jié)我們討論以下這些內(nèi)容:
1、對象(Object)
2、類(Class)
?3、數(shù)據(jù)抽象(Data abstraction)
4、繼承(Inheritance)
5、動態(tài)綁定(Dynamic binding)
6、數(shù)據(jù)封裝(Data encapsulation)
7、多態(tài)性(Polymorphism)
8、消息傳遞(Message passing)
對象
在一個面向?qū)ο蟮南到y(tǒng)中,對象是運行期的基本實體。它可以用來表示一個人或者說一個銀行帳戶,一張數(shù)據(jù)表格,或者其它什么需要被程序處理的東西。它也可以用來表示用戶定義的數(shù)據(jù),例如一個向量,時間或者列表。在面向?qū)ο蟪绦蛟O計中,問題的分析一般以對象及對象間的自然聯(lián)系為依據(jù)。如前所述,對象在內(nèi)存中占有一定空間,并且具有一個與之關(guān)聯(lián)的地址,就像Pascal中的record和C中的結(jié)構(gòu)一樣。 當一個程序運行時,對象之間通過互發(fā)消息來相互作用。例如,程序中包含一個“customer”對象和一個“account”對象,而customer對象可能會向account對象發(fā)送一個消息,查詢其銀行帳目。每個對象都包含數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼。即使不了解彼此的數(shù)據(jù)和代碼的細節(jié),對象之間依然可以相互作用,所要了解的只是對象能夠接受的消息的類型,以及對象返回的響應的類型,雖然不同的人會以不同的方法實現(xiàn)它們。
類
我們剛才提到,對象包含數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼。一個對象所包含的所有數(shù)據(jù)和代碼可以通過類來構(gòu)成一個用戶定義的數(shù)據(jù)類型。事實上,對象就是類類型(class type)的變量。一旦定義了一個類,我們就可以創(chuàng)建這個類的多個對象,每個對象與一組數(shù)據(jù)相關(guān),而這組數(shù)據(jù)的類型在類中定義。因此,一個類就是具有相同類型的對象的抽象。例如,芒果、蘋果和桔子都是fruit類的對象。類是用戶定義的數(shù)據(jù)類型,但在一個程序設計語言中,它和內(nèi)建的數(shù)據(jù)類型行為相同。比如創(chuàng)建一個類對象的語法和創(chuàng)建一個整數(shù)對象的語法一模一樣。如果fruit被定義為一個
類,那么語句 fruit mango; 就創(chuàng)建了一個fruit類的對象mango。 數(shù)據(jù)抽象和封裝
把數(shù)據(jù)和函數(shù)包裝在一個單獨的單元(稱為類)的行為稱為封裝。數(shù)據(jù)封裝是類的最典型特點。數(shù)據(jù)不能被外界訪問,只能被封裝在同一個類中的函數(shù)訪問。這些函數(shù)提供了對象數(shù)據(jù)和程序之間的接口。避免數(shù)據(jù)被程序直接訪問的概念被稱為“數(shù)據(jù)隱藏”。 抽象指僅表現(xiàn)核心的特性而不描述背景細節(jié)的行為。類使用了抽象的概念,并且被定義為一系列抽象的屬性如尺寸、重量和價格,以及操作這些屬性的函數(shù)。類封裝了將要被創(chuàng)建的對象的所有核心屬性。因為類使用了數(shù)據(jù)抽象的概念,所以它們被稱為抽象數(shù)據(jù)類型(ADT)。
封裝
封裝機制將數(shù)據(jù)和代碼捆綁到一起,避免了外界的干擾和不確定性。它同樣允許創(chuàng)建對象。簡單的說,一個對象就是一個封裝了數(shù)據(jù)和操作這些數(shù)據(jù)的代碼的邏輯實體。 在一個對象內(nèi)部,某些代碼和(或)某些數(shù)據(jù)可以是私有的,不能被外界訪問。通過這種方式,對象對內(nèi)部數(shù)據(jù)提供了不同級別的保護,以防止程序中無關(guān)的部分意外的改變或錯誤的使用了對象的私有部分。
繼承
繼承是可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按級分類的概念。例如,知更鳥屬于飛鳥類,也屬于鳥類。就像圖5中描繪的那樣,這種分類的原則是,每一個子類都具有父類的公共特性。
?
在OOP中,繼承的概念很好的支持了代碼的重用性(reusability),也就是說,我們可以向一個已經(jīng)存在的類中添加新的特性,而不必改變這個類。這可以通過從這個已存在的類派生一個新類來實現(xiàn)。這個新的類將具有原來那個類的特性,以及新的特性。而繼承機制的魅力和強大就在于它允許程序員利用已經(jīng)存在的類(接近需要,而不是完全符合需要的類),并且可以以某種方式修改這個類,而不會影響其它的東西。 注意,每個子類只定義那些這個類所特有的特性。而如果沒有按級分類,每類都必須顯式的定義它所有的特性。
多態(tài)
多態(tài)是OOP的另一個重要概念。多態(tài)的意思是事物具有不同形式的能力。舉個例子,對于不同的實例,某個操作可能會有不同的行為。這個行為依賴于所要操作數(shù)據(jù)的類型。比如說加法操作,如果操作的數(shù)據(jù)是數(shù),它對兩個數(shù)求和。如果操作的數(shù)據(jù)是字符串,則它將連接兩個字符串。 圖6演示了一個函數(shù)處理不同數(shù)量、不同類型的參數(shù)。就像某個單詞在不同的上下文中具有不同的含義
?
多態(tài)機制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口。這意味著,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調(diào)用。多態(tài)在實現(xiàn)繼承的過程中被廣泛應用。 面向?qū)ο蟪绦蛟O計語言支持多態(tài),術(shù)語稱之為“one interface multiple method(一個接口,多個實現(xiàn))”。簡單來說,多態(tài)機制允許通過相同的接口引發(fā)一組相關(guān)但不相同的動作,通過這種方式,可以減少代碼的復雜度。在某個特定的情況下應該作出怎樣的動作,這由編譯器決定,而不需要程序員手工干預。 在多函數(shù)程序中,許多重要的數(shù)據(jù)被聲明為全局變量,這樣它們才可以被所有的函數(shù)訪問。每個函數(shù)又可以具有它自己的局部變量。全局變量很容易被某個函數(shù)不經(jīng)意之間改變。而在一個大程序中,很難分辨每個函數(shù)都使用了哪些變量。如果我們需要修改某個外部數(shù)據(jù)的結(jié)構(gòu),我們就要修改所有訪問這個數(shù)據(jù)的函數(shù)。這很容易導致bug的產(chǎn)生
在結(jié)構(gòu)化程序設計中,另一個嚴重的缺陷是不能很好的模擬真實世界的問題。這是因為函數(shù)都是面向過程的,而不是真正的對應于問題中的各個元素。 面向過程的程序設計的一些特點如下:
?強調(diào)做(算法);
?大程序被分隔為許多小程序,這些小程序稱為函數(shù); ?大多數(shù)函數(shù)共享全局數(shù)據(jù);
?數(shù)據(jù)開放的由一個函數(shù)流向另一個函數(shù)。函數(shù)把數(shù)據(jù)從一種形式轉(zhuǎn)換為另一種形式。 采用由上至下的程序設計方法。
動態(tài)綁定
綁定指的是將一個過程調(diào)用與相應代碼鏈接起來的行為。動態(tài)綁定的意思是,與給定的過程調(diào)用相關(guān)聯(lián)的代碼只有在運行期才可知。它與多態(tài)和繼承的聯(lián)系極為緊密。一個多態(tài)引用的函數(shù)調(diào)用決定于這個引用的動態(tài)類型。 考慮圖6中的“draw”方法。通過繼承,每個對象都具備了這個過程。但是,對于不同的對象它的算法是不同的,因此,draw過程必須在每一個類中重新定義。在運行期,當前引用對象所對應的代碼將被調(diào)用。
消息傳遞
一個面向?qū)ο蟮某绦蛴稍S多對象組成,這些對象之間需要相互溝通。因此,在面向?qū)ο蟪绦蛟O計語言中,程序設計的主要步驟如下: 1、創(chuàng)建類,這些類定義了對象及其行為; 2、由類定義創(chuàng)建對象; 3、建立對象之間的通訊。 對象之間通過收發(fā)信息相互溝通,這一點類似于人與人之間的信息傳遞。信息傳遞的概念使得真實世界的直接模擬更易于和建立系統(tǒng)交流。 對于某個特定對象來說,消息就是請求執(zhí)行某個過程,因此,消息的接收對象會調(diào)用一個函數(shù)(過程),以產(chǎn)生預期的結(jié)果。傳遞的消息的內(nèi)容包括接收消息的對象的名字,需要調(diào)用的函數(shù)的名字,以及必要的信息。 對象就有一個生命周期。它們可以被創(chuàng)建和銷毀。只要對象正處于其生存期,就可以與其進行通訊。
#e#
1.2.4 OOP的優(yōu)點
OOP具有許多優(yōu)點,無論是對于程序設計者或者用戶來說都是如此。面向?qū)ο鬄檐浖a(chǎn)品擴展和質(zhì)量保證中的許多問題提供了解決辦法。這項技術(shù)能夠大大提高程序員的生產(chǎn)力,并可提高軟件的質(zhì)量以及降低其維護費用。其主要的優(yōu)點陳列于下:
1、 通過繼承,我們可以大幅減少多余的代碼,并擴展現(xiàn)有代碼的用途; 2、 我們可以在標準的模塊上(這里所謂的“標準”指程序員之間彼此達成的協(xié)議)構(gòu)建 我們的程序,而不必一切從頭開始。這可以減少軟件開發(fā)時間并提高生產(chǎn)效率;
3、 數(shù)據(jù)隱藏的概念幫助程序員們保護程序免受外部代碼的侵襲;
4、 允許一個對象的多個實例同時存在,而且彼此之間不會相互干擾; 5、 允許將問題空間中的對象直接映射到程序中;
6、 基于對象的工程可以很容易的分割為獨立的部分;
7、 以數(shù)據(jù)為中心的設計方法允許我們抓住可實現(xiàn)模型的更多細節(jié);
8、 面向?qū)ο蟮南到y(tǒng)很容易從小到大逐步升級;
9、 對象間通訊所使用的消息傳遞技術(shù)與外部系統(tǒng)接口部分的描述更簡單;
10、 更便于控制軟件復雜度。
當需要將以上所說的所有特性有機的結(jié)合于一個面向?qū)ο笙到y(tǒng)中,它們之間的相對重要性就取決于工程的類型和程序員的喜好。為了獲得上述的某些優(yōu)勢,必須考慮很多事情。例如,對象庫必須可以被重用。技術(shù)還在不停的發(fā)展,現(xiàn)有的產(chǎn)品也會很快的更新?lián)Q代。如果重用沒有能夠?qū)崿F(xiàn),那么就需要進行嚴格的控制和管理。 易于使用的開發(fā)軟件往往難以編寫。面向?qū)ο蟪绦蛟O計工具有望解決這個問題。
1.3 組件式GIS(ComGIS)
1.3.1 組件技術(shù)
組件技術(shù)的興起
目前,在軟件開發(fā)領(lǐng)域,一場新的革命正在悄悄興起,這是由日趨成熟的組件技術(shù)引發(fā)的。幾年以前,當微軟公司首先使用OLE的時候,其初衷是為了增強軟件的互操作性。然而在使用過程中,人們逐漸認識到這一技術(shù)背后的實質(zhì)性內(nèi)容和它在軟件開發(fā)中所扮演的重要角色。組件技術(shù)以前所未有的方式提高了軟件產(chǎn)業(yè)的生產(chǎn)效率,這一點已逐步成為軟件開發(fā)人員的共識。傳統(tǒng)的C/S結(jié)構(gòu)、群件、中間件等大型軟件系統(tǒng)的構(gòu)成形式,都將在組件的基礎(chǔ)上重新構(gòu)造。 組件技術(shù)使近二十年來興起的面向?qū)ο蠹夹g(shù)進入到成熟的實用化階段。在組件技術(shù)的概念模式下,軟件系統(tǒng)可以被視為相互協(xié)同工作的對象集合,其中每個對象都會提供特定的服務,發(fā)出特定的消息,并且以標準形式公布出來,以便其他對象了解和調(diào)用。組件間的接口通過一種與平臺無關(guān)的語言IDL(InterfaceDefineLanguage)來定義,而且是二進制兼容的,使用者可以直接調(diào)用執(zhí)行模塊來獲得對象提供的服務。早期的類庫,提供的是原代碼級的重用,只適用于比較小規(guī)模的開發(fā)形式;而組件則封裝得更加徹底,更易于使用,并且不限于C++之類的語言,可以在各種開發(fā)語言和開發(fā)環(huán)境中使用。 由于組件技術(shù)的出現(xiàn),軟件產(chǎn)業(yè)的形式也隨之發(fā)生了很大的變化。大量組件生產(chǎn)商涌現(xiàn)出來,并推出各具特色的組件產(chǎn)品;軟件集成商則利用適當?shù)慕M件快速生產(chǎn)出用戶需要的某些應用系統(tǒng);大而全的通用產(chǎn)品逐步減少;很多相對較為專業(yè),但用途廣泛的軟件,如GIS、語音識別系統(tǒng)等,都以組件的形式組裝和擴散到一般的軟件產(chǎn)品中。
0.1.1.1 COM與DCOM
?
COM是組件式對象模型(Component Object Model)的英文縮寫,是組件之間相互接口的規(guī)范,是OLE(Object Linking & Embedding)和ActiveX共同的基礎(chǔ),其作用是使各種軟件構(gòu)件和應用軟件能夠用一種統(tǒng)一的標準方式進行交互。COM不是一種面向?qū)ο蟮恼Z言,而是一種與源代碼無關(guān)的二進制標準。COM所建立的是一個軟件模塊與另一個軟件模塊之間的鏈接,當這種鏈接建立之后,模塊之間就可以通過稱之為“接口”的機制來進行通信。COM標準增加了保障系統(tǒng)和組件完整的安全機制,并擴展到分布式環(huán)境。它定義了軟件組件的接口
COM本質(zhì)上仍然是客戶/服務器模式。客戶(通常是應用程序)請求創(chuàng)建COM對象并通過COM對象的接口操縱COM對象。服務器根據(jù)客戶的請求創(chuàng)建并管理COM對象。客戶和服務器這兩種角色并不是絕對的。
基于分布式環(huán)境下的COM被稱作DCOM(Distribute COM,分布式構(gòu)件對象模型)。 DCOM是ActiveX的基礎(chǔ),它實現(xiàn)了COM對象與遠程計算機上的另一個對象之間直接進行交互。DCOM規(guī)范定義了分散對象創(chuàng)建和對象間通信的機制,規(guī)范本身并不依賴于任何特定的編程語言和操作系統(tǒng),但目前該標準只在Microsoft Windows平臺實現(xiàn),這就意味著其它的操作系統(tǒng)平臺(如UNIX)目前還不支持ActiveX。 DCOM的實現(xiàn)采用了DCOM庫的形式,當DCOM客戶對象需要DCOM服務器對象的服務時,DCOM庫負責生成DCOM服務器對象并在客戶對象和服務器對象之間建立初始連接,一旦返回服務器對象指針,DCOM庫就不再參與客戶對象與服務器對象之間的工作,兩個對象之間可以自由地進行通信。
DCOM接口實際上時邏輯上和語義上相關(guān)聯(lián)的函數(shù)集。服務器對象通過DCOM接口為客戶對象提供服務,客戶對象不需了解服務器對象的內(nèi)部數(shù)據(jù)表示。接口可以看成兩個軟件構(gòu)件之間的一種協(xié)議,協(xié)議表明服務器對象為客戶對象提供一種且僅此一種服務。接口采用全局唯一標識符(GUID)來保證服務的唯一性。通常的DCOM構(gòu)件提供多種服務,那么服務器對象為每一種服務實現(xiàn)一個接口。當客戶對象指針指向相應的服務器對象時,它就激活服務器對象接口的相應函數(shù)。具體過程是:客戶對象通過DCOM對象必須支持的IunKnown接口獲得其它接口的指針。客戶對象也許并不知道服務器對象的每個接口,但這并不妨礙客戶對象對服務器對象的使用,它只
用它知道的接口。當客戶對象用完服務器對象的服務時,它會通知服務器對象,服務器對象就釋放它所占有的內(nèi)存。
DCOM的好處是顯而易見的。由于接口的定義和功能保持不變,DCOM構(gòu)件開發(fā)者可以改變接口功能、為對象增加新功能、用更好的對象來代替原有對象,而建立在構(gòu)件基礎(chǔ)上的應用程序幾乎不用修改,大大提高了代碼的重用性
#e#
1.3.2 組件式GIS
組件式軟件技術(shù)已經(jīng)成為當今軟件技術(shù)的潮流之一,為了適應這種技術(shù)潮流,GIS軟件象其他軟件一樣,已經(jīng)或正在發(fā)生著革命性的變化,即由過去廠家提供了全部系統(tǒng)或者具有二次開發(fā)功能的軟件,過渡到提供組件由用戶自己再開發(fā)的方向上來。無疑,組件式GIS技術(shù)將給整個GIS技術(shù)體系和應用模式帶來巨大影響。
組件式GIS
基本思想是把GIS的各大功能模塊劃分為幾個控件,每個控件完成不同的功能。各個GIS控件之間,以及GIS控件與其它非GIS控件之間,可以方便地通過可視化的軟件開發(fā)工具集成起來,形成最終的GIS應用。控件如同一堆各式各樣的積木,他們分別實現(xiàn)不同的功能(包括GIS和非GIS功能),根據(jù)需要把實現(xiàn)各種功能的 “積木”搭建起來,就構(gòu)成應用系統(tǒng)。
組件式GIS系統(tǒng)的特點
(1) 小巧靈活、價格便宜
(2)無須專門GIS開發(fā)語言,直接嵌入MIS開發(fā)工具
(3) 開發(fā)簡捷
把GIS的功能適當抽象,以組件形式供開發(fā)者使用,將會帶來許多傳統(tǒng)GIS工具無法比擬的優(yōu)點。
(1) 小巧靈活、價格便宜 由于傳統(tǒng)GIS結(jié)構(gòu)的封閉性,往往使得軟件本身變得越來越龐大,不同系統(tǒng)的交互性差,系統(tǒng)的開發(fā)難度大。在組件模型下,各組件都集中地實現(xiàn)與自己最緊密相關(guān)的系統(tǒng)功能,用戶可以根據(jù)實際需要選擇所需控件,最大限度地降低了用戶的經(jīng)濟負擔。。組件化的GIS平臺
集中提供空間數(shù)據(jù)管理能力,并且能以靈活的方式與數(shù)據(jù)庫系統(tǒng)連接。在保證功能的前提下,系統(tǒng)表現(xiàn)得小巧靈活,而其價格僅是傳統(tǒng)GIS開發(fā)工具的十分之一,甚至更少。這樣,用戶便能以較好的性能價格比獲得或開發(fā)GIS應用系統(tǒng)。
(2) 無須專門GIS開發(fā)語言,直接嵌入MIS開發(fā)工具 傳統(tǒng)GIS往往具有獨立的二次開發(fā)語言,對用戶和應用開發(fā)者而言存在學習上的負擔。而且使用系統(tǒng)所提供的二次開發(fā)語言,開發(fā)往往受到限制,難以處理復雜問題。而組件式GIS建立在嚴格的標準之上,不需要額外的GIS二次開發(fā)語言,只需實現(xiàn)GIS的基本功能函數(shù),按照Microsoft的ActiveX控件標準開發(fā)接口。這有利于減輕GIS軟件開發(fā)者的負擔,而且增強了GIS軟件的可擴展性。GIS應用開發(fā)者,不必掌握額外的GIS開發(fā)語言,只需熟悉基于Windows平臺的通用集成開發(fā)環(huán)境,以及GIS各個控件的屬性、方法和事件,就可以完成應用系統(tǒng)的開發(fā)和集成。目前,可供選擇的開發(fā)環(huán)境很多,如Visual C++、Visual Basic、Visual FoxPro、Borland C++、Delphi、C++ Builder以及Power Builder等都可直接成為GIS或GMIS的優(yōu)秀開發(fā)工具,它們各自的優(yōu)點都能夠得到充分發(fā)揮。這與傳統(tǒng)GIS專門性開發(fā)環(huán)境相比,是一種質(zhì)的飛躍。 (3)、 強大的GIS功能
新的GIS組件都是基于32位系統(tǒng)平臺的,采用InProc直接調(diào)用形式,所以無論是管理大數(shù)據(jù)的能力還是處理速度方面均不比傳統(tǒng)GIS軟件遜色。小小的GIS組件完全能提供拼接、裁剪、疊合、緩沖區(qū)等空間處理能力和豐富的空間查詢與分析能力。 (4)、 開發(fā)簡捷 由于GIS組件可以直接嵌入MIS開發(fā)工具中,對于廣大開發(fā)人員來講,就可以自由選用他們熟悉的開發(fā)工具。而且,GIS組件提供的API形式非常接近MIS工具的模式,開發(fā)人員可以像管理數(shù)據(jù)庫表一樣熟練地管理地圖等空間數(shù)據(jù),無須對開發(fā)人員進行特殊的培訓。在GIS或GMIS的開發(fā)過程中,開發(fā)人員的素質(zhì)與熟練程度是十分重要的因素。這將使大量的MIS開發(fā)人員能夠較快地過渡到GIS或GMIS的開發(fā)工作中,從而大大加速GIS的發(fā)展。
(5) 更加大眾化 組件式技術(shù)已經(jīng)成為業(yè)界標準,用戶可以象使用其他ActiveX控件一樣使用GIS控件,使非專業(yè)的普通用戶也能夠開發(fā)和集成GIS應用系統(tǒng),推動了GIS大眾化進程。組件式GIS 的出現(xiàn)使GIS不僅是專家們的專業(yè)分析工具,同時也成為普通用戶對地理相關(guān)數(shù)據(jù)進行管理的的可視化工具。
(6)組件式GIS開發(fā)平臺的結(jié)構(gòu) 組件式GIS開發(fā)平臺通常可設計為三級結(jié)構(gòu):
基礎(chǔ)組件
面向空間數(shù)據(jù)管理,提供基本的交互過程,并能以靈活的方式與數(shù)據(jù)庫系統(tǒng)連接;
高級通用組件
由基礎(chǔ)組件構(gòu)造而成,面向通用功能,簡化用戶開發(fā)過程,如顯示工具組件、選擇工具組件、編輯工具組件、屬性瀏覽器組件等等。它們之間的協(xié)同控制消息都被封裝起來。這級組件經(jīng)過封裝后,使二次開發(fā)更為簡單。如一個編輯查詢系統(tǒng),若用基礎(chǔ)平臺開發(fā),需要編寫大量的代碼,而利用高級通用組件,只需幾句程序就夠了。面向通用功能;
行業(yè)性組件
抽象出行業(yè)應用的特定算法,固化到組件中,進一步加速開發(fā)過程。以GPS監(jiān)控為例。對于GPS應用,除了需要地圖顯示、信息查詢等一般的GIS功能外,還需要特定的應用功能,如動態(tài)目標顯示、目標鎖定、軌跡顯示等。這些GPS行業(yè)性應用功能組件被封裝起來后,開發(fā)者的工作就可簡化為設置顯示目標的圖例、軌跡顯示的顏色、鎖定的目標,以及調(diào)用、接受數(shù)據(jù)的方法等。
GIS組件的構(gòu)成
GIS軟件的模型包含若干功能單元:
空間數(shù)據(jù)獲取
坐標轉(zhuǎn)換
圖形編輯
數(shù)據(jù)存儲
數(shù)據(jù)查詢
數(shù)據(jù)分析
制圖表示 ……
可以想象要把這些所有的功能放在一個控件中幾乎是不可能的,即使實現(xiàn)也會帶來系統(tǒng)效率上的低下。一般可以認為GIS構(gòu)件的設計主要遵循應用領(lǐng)域地需求。例如ESRI地MapObjects就是以空間數(shù)據(jù)訪問、查詢、制圖為主要目標的GIS構(gòu)件。
評論
查看更多