天天看點

Geodatabase設計指導

   一 對象模組化與GeoDatabase 1 用GIS模組化對象 地理資訊系統(GIS)的目标是提供地理架構以支援地球資源智能利用的決策和管理人造環境。大部分時候,一個GIS以地圖和符号的形式提供資訊。觀察提供的地圖,它提供你這樣一些識:事物在那裡,他們是什麼,怎樣通過道路或者其他交通方式到達那兒,以及領接和領近的事物事什麼。GIS也能夠通過與個人電腦上的地圖進行互動對話來傳播資訊。這一互動可以揭示紙質地圖上不明顯的資訊。比如,我們可以查詢一個feature已知的所有屬性,建一個連接配接網絡中兩點所有事物的清單,以及對諸如水流、旅遊時間或污染擴散等測量品質的模拟。顯示和分析用的資訊取決于你如何個世界上的地理物體。 模組化一個系統的諸多途徑 我們與在這個世界上的物體進行的互動是各種各樣的,你可以通過很多途徑為他們模組化。例如:河流。河流的設計就很有趣,因為它們是自然對象,它們為交通而用,它們劃定政治和行政區域,它們是地表重要的特征。可以想到很多種方法來在GIS中模組化河流。 地圖用途指導資料模型 很明顯,即使一個普通的地理物體比如河流也能夠在GIS中通過多種方式表達。沒有一種模型是一定優越的。你想要建立的地圖類型和要解決的問題領域将指導那種模型最佳。 2 地理資料模型進展 地理資料模型是真實世界的抽象,它使用一系列資料對象來支援地圖的顯示、查詢、編輯和分析。ArcInfo 介紹了一種新的面向對象資料模型以及它對于表達自然行為和特征關系的優勢。要了解這種新模型,我們首先回顧一下三代地理資料模型。 (一)CAD資料模型 最早計算機化的地圖系統繪制矢量地圖是使用陰極射線管射出的線,繪制栅格地圖是使用線劃列印機的套印符号。由此起源,60和70年代産生圖形硬體和繪圖軟體的優化,能夠以合理的制圖逼真度渲染地圖。在這個時代,地圖主要由普通的CAD(計算機輔助制圖)軟體繪制。CAD資料模型以二進制檔案格式存儲地理資料,并以點、線劃和面域的形式表達。很少屬性資訊能儲存在這些檔案裡;地圖圖層和注記是主要的屬性表達方式。 (二)Coverage資料模型 1981年,ESRI推出它第一個商業化GIS軟體ArcInfo,它應用了第二代地理資料模型—coverage資料模型(也稱為地理關系資料模型)。這種模型兩個關鍵方面: * 空間資料與屬性資料相結合。空間資料存儲為索引化二進制檔案,它為顯示和存取做了優化。屬性資料存儲在表裡,有一定數量的行,行數等同于二進制檔案中的Feature數量,通過共同的唯一碼組織在一起。 * 能夠存儲矢量feature的拓撲關系。這意味着一個線狀的空間資料紀錄包含了以下資訊:哪些節點界定了這條線,通過推斷可知哪些線相連,還有哪些多邊形在其左邊和右邊。coverage資料模型的主要進步在于給與使用者自定義Feature表的能力;不僅僅可以添加字段,而且相關資料庫可以建立為外部資料庫表。 由于當時計算機硬體和資料庫的限制,空間資料直接存儲入關系資料庫不可行。是以更好的選擇是,coverage資料模型結合了索引化二進制檔案的空間資料和表狀屬性資料。盡管這種空間資料與屬性資料的分割是一種折衷選擇,coverage資料模型仍成為GIS主流資料模型。這是有很好理由的——coverage資料模型使得高性能GIS成為可能,存儲了拓撲關系便于改進地理分析和更加精确的資料錄入。 coverage資料模型的局限: coverage資料模型有一個重要的缺陷——feature由同樣的點、線、多邊形集合聚合而成,它們表達一般的行為。代表一條路的線的行為和代表一條小溪的線的行為是一樣的。coverage資料模型支援的一般行為導緻一個資料集的拓撲完整性。一個例子,如果加一條線穿過一個多邊形,它就會自動分為兩個多邊形。但是也需要支援溪流、道路和其他真實世界物體的特殊行為。例如,一條河流向一個方向流動,當兩條河流段合流時,下遊河段是兩股上遊水流的相加;當兩條道路相交,在兩者接合處應該有一個交通交叉口,除非其中一條道路是立交或隧道。 在coverage中自定義feature 利用coverage資料模型,ArcInfo應用開發者通過AML所寫的宏代碼在為feature加入這類行為方面取得了一些顯著的成功,建立了許多成功的大型産業應用。然而,随着應用變得越來越複雜,很明顯需要更好的方法來結合feature和behavior。其問題是開發者要保持應用代碼與feature類的同步性——這可不是容易的任務。一種新的能夠緊密結合behavior和feature的地理資料模型的時代到來了。 (三)Geodatabase 資料模型 ESRI推出一種新的面向對象資料模型稱為geodatabase資料模型。這種新的資料模型的定義目的在于使得GIS資料集裡的feature更加智能,方法就是通過賦予它們自然行為以及允許feature間任何種類的關系。geodatabase資料模型使得實體資料模型與其邏輯資料模型更加接近。geodatabase中的資料對象最接近于邏輯模型中定義的,比如說所有者、建築物、地塊和道路。進一步,geodatabase資料模型讓使用者不用寫一行代碼就可以實作大部分自定義行為。大部分行為是通過ArcInfo提供的領域、确認規則和其他函數的架構實作的。僅僅在為更專業的feature行為模組化時才需要撰寫代碼。 對象互動情境 為了讓你對面向對象資料模型重要性有一個認識,這裡有舉了一個情境,它表明了通常你需要對feature所作的操作。從這個情境,我們仔細考察面向對象資料模型的長處以及總覽一下geodatabase資料模型的特性。 (1)填加編輯feature 當你為你的GIS資料庫填加地理feature時,你要保證feature根據規則進行正确的布置,就比如: * 你賦予一個屬性的值必須在一個可預測可允許的值的集合内。一個土地地塊隻能賦予一定的土地用途比如“居住”“農業”或者“工業”。 * 一定feature的集合遵從于他們自然的空間組合。一個河流系統應該總是往低處流。彙流點的下遊水流是上遊水流的總和。

* feature的幾何形狀遵從它的邏輯布局。構成道路的直線和曲線必須相切。建築物的拐角絕大部分是直角。 (2)feature間的關系 地球上所有物體都與其他物體有關系。從GIS角度看,這些關系可以分為三類:拓撲關系、空間關系和一般關系。 有些例子可以說明這三種關系: * 當你在一個電力事業系統中編輯feature時,你要确定主線和次線的端點正好接上,你就能夠在電力網絡上實施跟蹤分析。當在一個互相連接配接的系統中裝載和編輯feature時,就定義了一系列的拓撲關系。 * 當你操作一幅有建築、街區和學校區的地圖時,你可能想要判斷哪一個地塊有一個特殊的建築,所有包含學校區的建築集合,以及沒有建築的街區。一個GIS的基本功能就是判斷一個feature是否與另一個feature是包含、相接、疊加。空間分析從feature的幾何形體推斷而來。 * 有一些對象之間的關系并不表現在地圖上。一個地塊與一個所有者有關系,但是這個所有者并不是地圖上的feature。一般關系聯接了地塊和所有者。一些地圖上的feature有關系,但是他們的空間關系并不明顯。一個需給電表在一個變壓器附近,但與其沒有接觸。在人口稠密地區電表和變壓器空間上的接近可能不能保證其可靠性,是以一般關系将兩個feature聯接在一起。 (3)制圖顯示 大部分時候,你能夠以預先定義好的符号在地圖上繪制feature,但有時你想要更多地控feature如何被繪制。這裡談一些特殊的繪圖行為。 * 當顯示一條等高線時,你想要它的高程值随等高線平滑段注記,要以一個平均的間

隔比如4英寸注記,以及不要遮掩到其他feature。 * 當你在詳細地圖上繪制道路時,你想道路以平行線繪制,并有着流線型的道路交叉

口。 * 當多種電線布置在同一個公用事業管道時,你想以一列平行線将其延展表達,平行

線要以地圖機關為标準間隔。 (4)互動分析 動态地圖顯示需要使用者觸及feature找到屬性、關系以及進行分析。舉一些範例,這些範例可能是你在選擇feature時想要知道的。 * 觸及地圖上feature,喚起自定義窗體來查詢和更新其屬性。

* 當規劃需要維護的線路時,選擇電力網絡的一部分,找到受影響的下遊客戶,郵寄通知他們。 Geodatabase資料模型的優勢 貫穿這些情境的主線就是将面向對象模組化方法應用到feature中去是非常有用的。面向對象模組化方法讓你能夠更自然的描繪feature,其途徑就是讓你定義自己的對象類型,定義拓撲、空間和一般關系,以及緊抓住這些對象如何與其它對象互相作用。這是應用geodatabase資料模型的一些優勢: * 資料錄入和編輯更加精确。由于對資料的錄入和編輯大多數能被智能的檢測行為所保護 ,是以幾乎不會犯什麼錯誤。對于很多使用者來說,光是這一點就可以成為接受geodatabase資料模型的原因了。 * 使用者操作更直覺的對象。經過适當的設計,一個geodatabase包含的資料對象與使用者資料的模型是一緻的。使用者操作的是他們感興趣的對象諸如變壓器、道路和湖泊,代替了通用的點、線和面。 * feature擁有更加豐富的上下文關系(context)。有了拓撲關聯、空間表達和一般關系,你不僅定義了一個feature的特性,而且還有它與其他feature的context。這樣就在其他相關feature動、改變或删除時,有助于說明整個feature集合到底發生了什麼。這種context也讓你可以定位或查找到與一個feature相關的另一個feature。 * 可以制作更優質的地圖。能更多的控制feature的繪制 ,也能增加智能的繪圖行為。能把複雜的繪圖方法直接應用到ArcInfo的繪圖應用程式中,而且通過編寫軟體代碼還能執行高度專業化的繪圖方法。 * 在地圖上顯示的特征是動态的。當在ArcInfo中對feature進行處理時 ,這些feature能對鄰接feature的改變做出相應的反應。你也能使feature與定制的查詢或分析工具發生聯系。 * 定義了更好的feature外形。geodatabase資料模型用直線、圓弧、橢圓弧和貝齊而(Bezier)曲線來定義feature的外形。 * feature集合是連續的。通過設計,geodatabase資料模型能容納非常巨大的feature集合而不需要其他的空間分區或塊 (title)。 * 許多使用者能同時編輯地理資料。geodatabase資料模型支援許多人能在本地編輯feature ,然後對出現的任何差異進行處理使之達成一緻。當然,你也可以不用面向對象模型實作上述一些優點,但你可能要面對這樣一個缺憾: ——你需要寫外部代碼,這些外部代碼與feature松散地相聯,而且可能複雜和錯誤geodatabase資料模型一個基本的優點在于你擁有一個架構,在這個架構裡你可以盡可能容易地建立與真實世界對象互動和行為更加接近的智能feauter。 3 Geodatabase,地理資料的存儲 一個geodatabase能夠容納四種地理資料表示: * 矢量資料表示feature * 栅格資料表示圖像、網格化(gridded)專題資料和表面(surface) * 不規則三角網(TIN)表示表面 * 定位器(locator)和位址用來根據位址查找一個地理地點。一個geodatabase可以在任一個商用關系資料庫裡存儲所有這幾種地理資料表示。這就使得地理資訊主要由資訊技術專業人員管理,也就讓ArcInfo跟上了資料庫技術的發展。 (1)用矢量資料表示feature 世界上很多feature都有很好的外形定義。矢量資料用一組帶有關聯屬性的有序坐标精确簡潔地表示了這些feature的外形。這種表示支援幾何運算,例如,計算長度和面積,識别重疊和交叉,找到相鄰的或附近的其他的feature。矢量資料可以用維數進行分類 * 點是零維的,它表示地理特征太小而不能用線或面來描述。點是用單個x,y坐标值來存儲的。 * 線是一維的 ,它表示地理特征太狹窄而不能用面來描述。線是用一組有序的x,y坐标值來存儲的。一條線段可以是直的、圓的、橢圓的或曲線的。 * 面是二維的,它表示寬闊的地理特征。面用一組圍繞面的線段來存儲,這些線段構成一個封閉的面。另外一種矢量資料類型是标注。這些标注是用于顯示相關feature的名字和屬性的描述性符号。 在geodatabase中,矢量資料有一個利用維數和關系直接存儲feature的結構。一個feature資料集(dataset)是存儲空間實體(feature)、非空間實體(對象)和它們之間關系的容器。拓樸關系用幾何網絡和平面圖表示。geodatabase也存儲一些有效的規則和域,當feature被建立或更新時用來確定它們的屬性在與它們相關聯的feature和對象的上下文關系(context)中繼續有效。 (2)用栅格表示網格化(gridded)資料。 收集在geodatabse中的許多資料都是栅格型的,這是因為攝影機和成像系統是以像素值的形式将資料記錄在二維的網格(grid)或光栅中的。像素是組成栅格的基本單元,它的值能描述多種資料。像素能夠為一部分光譜存儲光的反射,為圖像存儲顔色值,以及存儲專題屬性,比如植物類型,或表面值,或海拔高度。 (3) 用TIN表示表面 一個不規則三角網(TIN)就是一個表面模型。一個geodatabase在存儲TINs時,将其作為一個帶有高程值的節點和帶有邊(edge)的三角形的整體來對待。通過三角形的邊,TIN的地理擴充能夠插入任何有高程值(或z值)的點。TIN支援表面分析,比如:流域研究;在一個觀測點能看到表面的哪些區域;表面特征的描述(如山脈、河流和山峰)。TIN還能描述自然地形的起伏。 (4) 用定位器(locator)查找位址 或許最普通的地理工作就是通過位址定位一個地方了。geodatabase能存儲定位器和位址。定位器是一種利用全國郵政協定将一個位址轉換成地理位置的方法。你可以找到任意這些點在地圖上相對應的點feature。 4 面向對象資料模型中的feature ArcInfo與前面版本不同之處在于将面向對象方法學應用于地理資料模組化。開發者通過稱為“geodatabase資料擷取對象”(geodatabase data access objects)的面向對象軟體類架構來操作資料對象。 面向對象有三個關鍵特點:多态(polymorphism)、封裝(encapsulation)和繼承(inheritance)。 * 多态是指一個對象類的行為(或方法)能夠适應類的變化。舉一個例子,不管是geodatabase、coverage還是shapefile裡,feature的核心行為比如繪制、添加和删除操作絕大部分是一樣的。* 封裝是指類隻能通過定義好的軟體方法集才能擷取,并組織成軟體接口。geodatabase資料擷取對象掩蓋了資料對象内部細節并提供一個标準的程式設計接口。 * 繼承是指對象類的定義能夠包含其他對象類的行為和新增的行為。你可以在ArcInfo裡建立一個自定義的feature類型,并繼承标準feature的行為。比如,一個變壓器對象可以從一個标準的ArcInfo feature類型比如簡單的交叉點(junction)feature擴充(也稱sub-type)而來。 統一資料模型 geodatabase資料擷取對象是一種軟體技術,它提供對各種資料源(比如geodatabase、coverage和shapfile)的地理資料的統一擷取。ArcInfo開發者通過一系列資料對象,比如datasets、tables、feature classes、rows、objects和features,來操作地理資料。這些對象都包含了一個共用一緻的地理資料視圖。由于有了這種統一資料模型,ArcInfo使用者能夠最大程度以同樣的方式操作geodatabase、coverage和shapefile。統一資料模型通過強調資料的共有特性來簡化了資料的操作。 可擴充feature geodatabase一個重要的方面就是你可以有選擇地建立自定義feature,比如變壓器、道路,進而代替了點和線。對于ArcInfo的使用者來說,這就意味着變壓器或者道路不僅擁有标準點feature和線feature的标準繪制、查詢和編輯行為,而且還有附加的行為。你可以規定變壓器必須接觸到一個電線杆以及必須通過這個電線杆垂直于電力線。或者,當編輯一條道路時,所有它的分段必須相切。資料模組化者能夠使用标準的feature類型來實作豐富的資料模型。對于進階應用來說,開發者能夠擴充标準的feature類型,使用面向對象的類型繼承技術來建立自定義feature。任一個你建立的自定義feature擁有同樣的性能和功能,就像ArcInfo提供的标準feature類型那樣。這就為複雜應用的開發提供了無限的機會。 feature和面向對象 geodatabase中得feature實作為一組相關聯的表。其中一些表表達了feature的集合。其他表表示了feature間關系、有效性規則和值域。ArcInfo管理這一結構和這些表的整合,并通過地理資料擷取對象提供了面向對象的地理資料。所有的使用者和絕大部分開發者可以不用了解也無需關心geodatabase的内部結構細節。ArcCatalog是一個用來建立、修改和精化geoudatabase結構的使用者接口應用。資料的對象視圖隐藏了geodatabase大部分資料庫實體結構,使你隻需關注如何建立一個地理資料模型。 5 提供(serving)地理資料 ArcInfo通過ArcSDE(Arc空間資料庫引擎)的服務來存取地理資料。ArcSDE是一種軟體技術,它讓你能夠建立geodatabase,範圍從小規模到很大規模的空間資料集合。它還提供與你選擇的關系資料庫的開放接口。 個人型和多使用者型geodatabase ArcSDE有兩種:個人型和多使用者型。 個人型ArcSDE建構在ArcInfo中,适合面向項目型的GIS。個人型ArcSDE提供的geodatabase以Microsoft Access來實作。當你安裝了ArcInfo,也就安裝上了Microsoft Jet,它為ArcSDE提供服務以建立和更新Access資料庫。你不需要單獨安裝Microsoft Access軟體産品。 對于大型企業來說,ArcSDE是一種對于ArcInfo的多使用者資料存取擴充。ArcSDE安裝在一個資料伺服器上,這個伺服器用來管理你機關的關系資料庫。通過TCO/IP網絡,ArcSDE提供geodatabase給運作在個人電腦上的ArcInfo應用系統。ArcSDE可以配置在Windows NT或者UNIX上。個人型ArcSDE使得地理資料能夠在本地存取。它無需系統管理,并且對ArcInfo使用者是不可見的。ArcSDE允許地理資料的遠端存取,也允許多個使用者浏覽編輯同樣的地理資料。ArcSDE由你的資料庫管理者集中調控和管理。 開放和可更新的資料服務 ArcSDE允許你設定和配置從小規模到很大規模的geodatabase。如果你操作中等規模的資料集,你可以配置你自己的Access資料庫,這一資料庫是通過ArcCatalog裡的個人型ArcSDE建立的。這種配置使得一些優良性能受到限制,資料集上限大約為100,000個對象,而且隻支援一個編輯使用者和幾個同時的浏覽使用者。如果需要更多需求的資料集或者要支援更多即時編輯使用者,你可以在關系資料庫裡配置對于ArcInfo的ArcSDE擴充,這對于你的機構來說是再适合不過了。 ArcSDE是一個開放的體系,有這樣一些自由: * 在選擇資料庫級别方面你有無限自由度 * 可以為不同部門配置不同資料庫 * 可以從UNIX或Windows NT裡得到資料 * 可以集中管理geodatabase * 可以從其他應用系統中得到資料,諸如MapObject、ArcView和CAD應用系統 * 可以建構符合開放GIS協會(OGC)規定的應用系統 * 可以建立SQL應用來存取geodatabase中的表和列 6 擷取地理資料 在geodatabase裡開發者能夠以三個基本級别擷取資料:

* 通過geodatabase資料擷取對象,它是一個ArcObject的子集,也是作為桌面ArcInfo應用建構基礎的軟體元件。 * 作為簡單的非拓撲feature,可以通過ArcSDE API,它遵從開放GIS協會的簡單feature規範。 * 作為單純的行、列和表格,可以通過關系資料庫原有的SQL接口。 通過ArcObject擷取資料 擷取地理資料最豐富的級别就是通過geodatabase資料擷取對象。在這個級别,顯示geadatabase全部的結構:拓撲、關系、完整性規則、行為,還有栅格表示、表面表示和位置表示。你可以在ArcInfo内使用VBA擷取資料,也可以使用Visual C++或任何其他遵從COM規範的開發環境程式設計來擷取資料。這是一個簡化的UML圖,它是ArcObject中geodatabase資料擷取對象的一部分。這個模型将在第四章——地理資料結構——深入探讨。 擷取簡單feature資料 對于許多空間應用系統來說,擷取以簡單無拓撲feature形式存在的地理資料就足夠了。這一方法特别适合建立整套應用系統—系統中地理資料是關鍵的組成部分,但不是系統關注的焦點。其例子包括裝置管理和交通分析。 ArcSDE提供了一個簡單的feature應用程式設計接口(API),它遵從開發GIS協會(OGC)的簡單feature規範。OGC是一個是一個包含了所有主流空間資料提供商的組織,它的目标在于為異構地理資訊系統間空間資訊的自由交換發展标準的軟體結構。網絡中擁有不同格式地理資料的組織能夠建立一個以簡單feature形式整合了這些資料的應用系統。 ESRI是OGC技術規範的主要貢獻者,而且做到了地理資料的開放交換。 通過SQL擷取資料 地理資訊系統是一個豐富的資料寶庫,這些資料是自然features和facilities,比如交通和公用事業網絡。當這些資料以geodatabase收集和管理時,如果不為了地理用途,外部的資料庫應用系統也可以有效地擷取和共享這些資料。通過使用你的關系資料庫原有的SQL接口,你可以建立應用系統從你的geodatabase中挖掘資料,并應用這些資料完成一些任務,比如管理倉庫貨物、處理工作訂單和統計分析。在這種視圖下,geodatabase就是一系列的表格、行和列。通過SQL接口,你能夠看到geodatabase内部的資料庫結構,它包含了對象的中繼資料表比如網絡。這一結構在ArcInfo裡不是直接可見的,并且是通過ArcCatalog的使用者界面管理的。你可以有選擇地更新行的屬性,一行代表一個feature。但是你一定要小心以免破壞geodatabase的結構。