一、SQL/Oracle數據庫是怎樣與GIS的應用相聯系起來的
當年oracle和ESRI共同開發了一個擴展,也就是今天的oracle spatial,空間數據的存儲問題本質上是空間數據的組織和解釋,ora spatial就是對關系型的一個擴展,也就是說將地理對象作為一個字段,類型是geometry(可以看一下對象關系型數據庫),與一般sql的char的表達的型的思想概念都是一樣的(數據庫中術語叫做啥來著?值域?)反正就是一個型的概念。那么剩下的問題就是一個型到底提供什么功能?空間中的矢量分為點,線,面,多線多面等等基本的一些類型。將這些類型對應的數據轉換為字符串,寫入數據庫的一個字段中,比方說一個點數據,就是一個字符串1,30000,40000。這個1就表示這是一個點,30000,40000就是實際的坐標。同時,空間數據庫提供一個底層支持,負責對其作出解釋,并給用戶提供一個api,例如存儲過程和函數。當需要取數據的時候,就用SQL語錄從表中將數據取出來,前面講的數據庫提供的api負責作出解釋和計算。ArcSDE扮演的角色就是不斷的對數據庫進行存取和取出。你可以找數據試試,在arcgis中存到oracle中,然后用sql developer打開看一下,也可以看一下這個geometry類型提供的各種存儲過程和函數,用起來太爽了。總之,數據庫扮演的角色就是存取數據和對存取的數據作出司法解釋的過程。
網絡的本質就是傳輸數據; 網絡的本質就是傳輸數據; 網絡的本質就是傳輸數據;重要的事情說三遍。至于通過網絡傳輸的數據是什么內容,怎么解釋那就由客戶端和服務端說了算了。簡單地來講就是借助于網絡底層支持,各個軟件產品來制定自己的游戲規則。
記得好像看過早期的空間數據在數據庫中采用直接存文件或者用關系表來存儲坐標啥的,我沒有用過,就不班門弄斧了。在oracle 官網的幫助文檔中有專門對spatial模塊,強烈推薦感興趣的翻一翻,絕對是詳細到哭啊。
再說說應用的問題,假如有這么一個場景,某某市政是你的甲方爸爸,你要做一個城市管網信息管理系統,有各種各種的管線圖,包括道路啊,路燈啊,雜七雜八的東西,這些數據就可以存儲在數據庫中,存儲的部分解決了,剩下的就是一般的Web開發了,包括一般的GIS系統,WebGIS開發。其實做開發還是一件很有意思的事情,從事計算機的人大部分不會GIS開發,會GIS開發的一般也不會接觸空間數據庫,如果這三個都能用熟練運用,在GIS開發這個行業怎么的也屬于上流社會的人吧,
延伸閱讀:
二、空間數據引擎
關系型數據庫無法存儲、管理復雜的地理空間框架數據以支持空間關系運算和空間分析等GIS功能。因此,GIS軟件廠商在純關系數據庫管理系統基礎上,開發空間數據管理的引擎。空間數據引擎(Spatial Database Engine,簡稱SDE)是用來解決如何在關系數據庫中存儲空間數據,使空間數據實現真正的數據庫方式管理,建立空間數據服務器的方法。空間數據引擎是用戶和異種空間數據庫之間一個開放的接口,它是一種處于應用程序和數據庫管理系統之間的中間件技術。用戶可通過空間數據引擎將不同形式的空間數據提交給數據庫管理系統,由數據庫管理系統統一管理,同樣,用戶也可以通過空間數據引擎從數據庫管理系統中獲取空間類型的數據滿足客戶端操作需求。目前GIS軟件與大型商用關系型數據庫管理系統(RDBMS)的集成大多采用空間數據引擎來實現。使用不同GIS廠商數據的客戶可以通過空間數據引擎將自身的數據提交給大型關系型DBMS,由DBMS統一管理。同樣,客戶也可以通過空間數據引擎提供的用戶和異構數據庫之間的數據接口,從關系型DBMS中獲取其它類型的GIS數據,并轉化成客戶可以使用的方式。空間數據引擎就成為各種格式的空間數據出入大型關系型DBMS的轉換通道。