《開源GIS與空間資料庫實戰教程》是2016年3月清華大學出版社出版的圖書,作者是陳永剛。
基本介紹
- 書名:開源GIS與空間資料庫實戰教程
- 作者:陳永剛
- ISBN:9787302428725
- 定價:29元
- 出版社:清華大學出版社
- 出版時間:2016年3月
內容簡介,圖書目錄,
內容簡介
本書以開源GIS軟體和開源空間資料庫PostgreSQL為主要內容,特別是以空間資料庫PostgreSQL為中心,以OGC標準為主線,詳細介PostgreSQL、QGIS、GeoServer等開源軟體及其套用案例。全書分為8章,第1章對空間資料庫的發展狀況進行介紹和分析;第2章簡單介紹開源GIS軟體和空間資料庫PostgreSQL的初步使用;第3章介紹空間資料庫的SQL Geometry數據類型;第4章介紹矢量數據空間SQL查詢與分析操作;第5章介紹柵格數據空間SQL查詢與分析操作;第6章介紹利用QGIS、ArcMap對空間資料庫進行管理以及利用GeoServer發布空間信息;第7章分別介紹利用Java和C#對空間資料庫進行管理和操作;第8章以案例的方式介紹利用開源軟體和開源空間資料庫在“智慧林業”中的套用。
本書主要針對於教學科研和工程套用,特別對開源GIS和空間資料庫的理論推廣和工程項目套用具有重要的套用價值;本書主要適合於地理信息系統、林業、交通套用、測繪等與地學相關領域的從業人員。
圖書目錄
第1章初識空間資料庫1
1.1回顧資料庫的相關基礎知識1
1.1.1資料庫的基本概念1
1.1.2結構化查詢語言1
1.1.3資料庫訪問技術2
1.1.4資料庫的標準3
1.2認識空間資料庫4
1.2.1空間資料庫4
1.2.2空間資料庫標準簡介5
1.2.3空間數據模型6
1.3空間資料庫產品8
1.3.1常見的商業空間資料庫8
1.3.2開源空間資料庫8
1.3.3PostGIS簡介11
第2章開源GIS軟體和空間資料庫使用初步14
2.1PostgreSQL的安裝與PostGIS空間引擎配置14
2.1.1PostgreSQL的安裝14
2.1.2PostGIS空間引擎配置18
2.2QGIS與uDig的安裝與配置24
2.2.1QGIS的安裝與配置24
2.2.2uDig的安裝與配置26
2.3GeoServer的安裝與配置28
2.4pgAdmin Ⅲ的基本操作35
2.4.1主窗體35
2.4.2導航選單功能36
2.4.3工具列的介紹37
2.4.4資料庫與表的創建37
2.4.5資料庫的備份與恢復42
2.5利用QGIS將shp數據導入PostgreSQL空間資料庫43
2.5.1利用QGIS連線PostgreSQL空間資料庫43
2.5.2導入導出shp數據45
開源GIS與空間資料庫實戰教程第3章空間資料庫的SQL Geometry數據類型48
3.1空間數據類型繼承關係UML圖48
3.2空間數據的WKT和WKB表現形式48
3.3空間數據的坐標系統SRID50
3.4在PostgreSQL中直接利用SQL建立空間資料庫51
3.4.1利用SQL語句在PostgreSQL空間資料庫中建立空間數據表51
3.4.2利用SQL語句在PostgreSQL空間數據表中插入空間數據51
第4章矢量數據空間SQL查詢與分析操作53
4.1PostGIS基本類型53
4.2管理函式UpdateGeometrySRID53
4.3幾何構造函式55
4.3.1ST_GeomFromText55
4.3.2ST_MakePolygon56
4.4幾何讀寫函式58
4.4.1ST_IsClosed、ST_IsRing和ST_IsSimple58
4.4.2ST_EndPoint與ST_StartPoint60
4.5幾何編輯函式62
4.5.1ST_AddPoint62
4.5.2ST_RemovePoint63
4.6幾何輸出函式ST_AsText65
4.7運算符函式&&66
4.8空間關係與量測67
4.8.1ST_Centroid67
4.8.2ST_ClosestPoint68
4.8.3ST_Intersects70
4.8.4ST_Relate71
4.9幾何處理函式73
4.9.1ST_Buffer73
4.9.2ST_Intersection75
4.9.3ST_Union76
4.10線性參考函式ST_LineInterpolatePoint78
4.11雜類函式ST_Point_Inside_Circle79
4.12特殊函式PostGIS_AddBBox81
第5章柵格數據空間SQL查詢與分析操作82
5.1柵格數據管理82
5.1.1新建柵格數據82
5.1.2導出柵格數據檔案83
5.1.3導入空間資料庫83
5.2柵格數據屬性查詢86
5.2.1ST_MetaData86
5.2.2ST_BandMetaData86
5.2.3ST_Histogram 87
5.2.4ST_Value88
5.2.5ST_Resize89
5.3柵格數據間的空間關係91
5.3.1ST_Intersects91
5.3.2ST_Contains91
5.4柵格數據處理與分析92
5.4.1ST_Clip92
5.4.2ST_Union93
5.4.3ST_HillShade、 ST_Slope和ST_Aspect95
第6章利用QGIS、ArcMap和GeoServer對空間資料庫進行管理、操作和發布97
6.1利用QGIS對PostgreSQL空間資料庫進行空間數據管理97
6.1.1在QGIS中載入PostgreSQL空間資料庫數據97
6.1.2編輯導入的空間數據,並保存在資料庫中99
6.2利用ArcMap對PostgreSQL空間資料庫進行空間數據管理101
6.2.1在ArcGIS和PostgreSQL中配置相關檔案101
6.2.2在ArcMap設定到PostgreSQL的連線103
6.3利用GeoServer發布PostgreSQL中的空間數據105
6.3.1發布空間數據105
6.3.2預覽發布的空間數據110
6.4利用Udig修飾PostgreSQL中的空間數據111
6.4.1利用Udig美化地圖111
6.4.2在GeoServer中為發布地圖添加地圖樣式115
第7章利用Java和C#對空間資料庫進行管理和操作120
7.1Geotools、JTS地理信息系統Java開源庫簡介120
7.1.1Geotools簡介120
7.1.2JTS簡介120
7.2利用Geotools和JTS對PostgreSQL空間資料庫進行空間數據分析120
7.2.1新建Java項目121
7.2.2代碼實現122
7.3NetTopologySuite地理信息系統C#開源庫簡介127
7.4利用NetTopologySuite對PostgreSQL空間資料庫進行
空間數據分析127
7.4.1新建控制台應用程式127
7.4.2代碼實現127
7.4.3在QGIS中查看生成的Shape檔案128
7.5SharpMap地理信息系統C#開源庫簡介129
7.6利用SharpMap對PostgreSQL空間資料庫進行
空間數據分析130
7.6.1新建WinFrom程式,並進行簡單布局130
7.6.2代碼實現132
7.6.3實現效果134
第8章面向“智慧林業”的生態公益林開源套用136
8.1數據概況與開源解決方案136
8.1.1生態公益林數據136
8.1.2開源解決方案的總體思路136
8.2QGIS對公益林數據的管理與操作137
8.3PostGIS對公益林數據的管理與操作139
8.4QGIS專題地圖的製作139
8.5快速發布網路地圖142
8.5.1安裝qgis2web外掛程式142
8.5.2qgis2web的參數設定144
8.5.3Apache Server發布地圖並在不同移動終端查看145
附錄A兩大標準幾何對象對比表147
附錄BGeometry與ST_Geometry定義的空間操作對比表148
附錄C函式匯總表151
1.1回顧資料庫的相關基礎知識1
1.1.1資料庫的基本概念1
1.1.2結構化查詢語言1
1.1.3資料庫訪問技術2
1.1.4資料庫的標準3
1.2認識空間資料庫3
1.2.1空間資料庫3
1.2.2空間資料庫標準簡介5
1.2.3空間數據模型6
1.3空間資料庫產品7
1.3.1常見的商業空間資料庫7
1.3.2開源空間資料庫8
1.3.3PostGIS簡介11
第2章開源GIS軟體和空間資料庫使用初步14
2.1PostgreSQL的安裝與PostGIS空間引擎配置14
2.1.1PostgreSQL的安裝14
2.1.2PostGIS空間引擎配置19
2.2QGIS與uDig的安裝與配置26
2.2.1QGIS的安裝與配置26
2.2.2uDig的安裝與配置29
2.3GeoServer的安裝與配置32
2.4pgAdminⅢ的基本操作40
2.4.1主窗體40
2.4.2導航選單功能41
2.4.3工具列的介紹42
2.4.4資料庫與表的創建43
2.4.5資料庫的備份與恢復47
2.5利用QGIS將Shp數據導入PostgreSQL空間資料庫49
2.5.1利用QGIS連線PostgreSQL空間資料庫49
2.5.2導入導出shp數據52
第1章初識空間資料庫〖1〗1.1回顧資料庫的相關基礎知識〖*4/5〗1.1.1資料庫的基本概念
1. 什麼是資料庫
資料庫是由一批數據構成有序的集合,這些數據被存放在結構化的數據表中。數據表之間相互關聯,反映了客觀事物之間的本質聯繫。資料庫系統提供數據安全控制和完整性控制。
資料庫發展階段大致劃分為如下幾個階段:人工管理階段、檔案系統階段、資料庫系統階段、高級資料庫階段。其種類大概有3種:層次式資料庫、網路式資料庫和關係式資料庫。
對於資料庫的明確定義並不固定,隨著資料庫歷史的發展,定義的內容也有很大的不同,其中一種比較普遍的觀點認為:資料庫(Database,DB)是一個長期存儲在計算機內的、有組織的、有共享的、統一管理的數據集合。
2. 表
在關係資料庫中,資料庫表是一系列二維數組的集合,用來存儲數據和運算元據的邏輯結構。它由縱向的列和橫向的行組成,行被稱為記錄,是組織數據的單位;列被稱為欄位,每一列表示記錄的一個屬性,都有相應的描述信息,如數據類型、數據寬度等。
3. 數據類型
數據類型決定了數據在計算機中的存儲格式,代表不同的信息類型。常用的數據類型有:整數數據類型、浮點數數據類型、精確小數類型、二進制數據類型、日期時間數據類型、字元串數據類型。表中的每一個欄位都有某種指定的數據類型。
1.1.2結構化查詢語言
結構化查詢語言(Structured Query Language)簡稱SQL,SQL語言的主要功能就是同各種資料庫建立聯繫,進行溝通。SQL語句可以用來執行各種各樣的操作,例如更新資料庫中的數據,從資料庫中提取數據等。目前,絕大多數流行的關係型資料庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都採用了SQL語言標準。雖然很多資料庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的資料庫操作。
開源GIS與空間資料庫實戰教程第1章初識空間資料庫SQL語言包含4個部分。
數據定義語言(DDL):DROP、CREATE、ALTER等語句。
數據操作語言(DML):INSERT、UPDATE、DELETE語句。
數據查詢語言(DQL):SELECT語句。
數據控制語言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK語句。
下面是一條SQL語句,該語句聲明創建了一個students表:CREATE TABLE students
(
student_id INT,
name VARCHAR(30),
sex CHAR(1),
PRIMARY KEY (student_id)
);該語句創建一張表,該表包含4個欄位,分別為student_id、name、sex、birth。其中student_id被定義為表的主鍵。
現在只是定義了一張表,表中沒有任何數據,接下來這條SQL聲明語句,將在student表中插入一條數據記錄:INSERT INTO students (student_id,name,sex,birth)
VALUES (41048101,'Leo Keith','1','1990-07-25');執行完該SQL語句之後,students表中就會增加一行新記錄,該記錄中欄位student_id的值為41048101,name欄位的值為Leo Keith,sex欄位值為1,birth欄位值為1990\|07\|25。
再使用SELECT查詢語句獲取剛才插入的數據,語句如下:SELECT name FROM students WHERE student_id =41048101;上面簡單的列舉了常用的資料庫操作語句,目的是幫助讀者回顧資料庫的基礎知識,接下來會更進一步學習資料庫的其他技術。
1.1.3資料庫訪問技術
不同的程式設計語言會有各自不同的資料庫訪問技術,程式語言通過這些技術,執行SQL語句,進行資料庫管理,主要的資料庫訪問技術如下。
1. ODBC
Open Database Connectivity(開放資料庫互連)技術為訪問不同的SQL資料庫提供了一個共同的接口。ODBC使用SQL作為訪問數據的標準。這個接口提供了最大限度的互操作性:一個應用程式可以通過一組共同的代碼訪問不通過的SQL資料庫管理系統(DBMS)。
一個基於ODBC的應用程式對資料庫的操作不依賴於任何DBMS,不直接和DBMS打交道,所有的資料庫操作有對應的DBMS的ODBC驅動程式完成。也就是說,不論是Access、PostgreSQL還是Oracle資料庫,均可使用ODBC API進行訪問。由此可見,ODBC的最大優點是能以統一的方式處理所有的資料庫。
2. JDBC
Java Data Base Connectivity(Java資料庫連線)是Java應用程式連線資料庫的標準方法,是一種用於執行SQL語句的Java API,可以多種關係資料庫提供統一訪問,它由一組使用Java語言編寫的類和接口組成。
3. ADO.NET
ADO.NET是微軟在.NET框架下開發設計的一組用於和數據源進行互動的面向對象類庫。它提供了關係數據、XML和應用程式數據的訪問,允許和不同類型的數據源以及資料庫進行互動。
1.1.4資料庫的標準
在1.2和1.3節中介紹了SQL的基本使用,我們可以體會到SQL的簡潔與強大,但是SQL的這些優秀特性並不是一蹴而就的,它的發展和資料庫發展有著密切的聯繫,SQL之所以強大和為制定的SQL標準有直接的關係。
隨著資料庫技術的發展和信息化水平的提高,出現了很多資料庫廠商和產品,為了在各個資料庫廠商之間取得更大的統一性,美國國家標準學會(American NationalStandards Institute,ANSI)於1986年發布了第一個SQL標準,並於1989年發布了第二個版本,該版本已經被廣泛地採用。ANSI在1992年更新了SQL標準的版本,即SQL92和SQL2,並於1999年再次更新為SQL99和SQL3標準。在每一次更新中,ANSI都在SQL中添加了新特性,並在語言中集成了新的命令和功能。
對於各種資料庫產品,ANSI標準規範化了很多SQL行為和語法結構。隨著開源資料庫產品(例如MySQL和PostgreSQL)日漸流行並由虛擬團隊而不是大型公司開發,這些標準變得更加重要。這些開源資料庫作為資料庫產品占有著重要的地位,我們將在後面的章節對它們做更進一步的介紹。
現在,SQL標準由ANSI和國際標準化組織(International Standards Organization,ISO)作為ISO/IEC 9075標準維護。最新發布的SQL標準是SQL:2008,下一版本的發布工作已經在進行之中,它將包含RDBMS在收集或分發數據方式上的新發展。
1.2認識空間資料庫〖*4/5〗1.2.1空間資料庫〖*2〗1. 資料庫與空間資料庫歷經50多年的發展,資料庫技術依然成為對海量數據管理的一種重要手段。那么,空間資料庫作為資料庫的一個分支,利用空間資料庫來存儲和管理非結構化的空間數據。隨著對地觀測技術的迅速發展和社會需求的不斷增大,基於空間數據的套用領域(如電子地圖、導航服務等)也在不斷地擴大,空間數據的管理將成為今後信息管理的重要組成部分。此外,空間資料庫在整個地理信息系統中占有極其重要的地位,主要體現在:用戶在決策中通過訪問空間資料庫獲得空間數據,在決策過程完成後在將決策結果存儲到空間資料庫中。
空間資料庫與一般資料庫相比,具有數據量大、數據套用廣泛和屬性數據空間數據並存的特點,尤以第三點最為突出,空間資料庫不僅有地理要素的屬性數據(與一般資料庫中的數據性質相似),還有大量的空間數據,它們描述地理要素的空間分布位置,並且這兩種數據有著不可分割的關係。
2. 空間資料庫的發展歷程
空間數據管理技術經歷了多年的發展和演變,大體經歷了檔案系統、檔案關係混合系統和對象關係型空間資料庫管理系統等三個階段。伴隨著每一次空間資料庫管理方式的變革,GIS軟體的體系結構也在發生著革命性的變化。如圖1\|1是空間資料庫體系架構的演變圖。
圖1\|1空間資料庫體系架構演變圖
對於傳統的第一代空間數據管理系統,空間數據主要採用檔案管理系統,即將空間數據存儲在自行定義的不同格式檔案中。在這種管理方式下,檔案管理系統仍然是作業系統的一部分,所有的空間數據要用特殊的地理信息系統軟體進行解釋和處理。
隨著關係型數據管理技術的發展與成熟,第二代空間數據管理系統將數據存儲在關係資料庫中,通常將數據分為屬性數據或者說非空間部分和空間數據兩個部分。但是這種方式一直缺乏靈活地整合屬性數據和空間數據。
真正的空間資料庫起始於空間要素地位的變化,人們開始嘗試把空間要素看作是資料庫最重要的對象,空間資料庫中的空間數據與對象關係資料庫進行全面整合。這也完成了以GIS為核心的技術轉變為以資料庫為核心的導向性轉變。就此第三代空間資料庫誕生。
1.2.2空間資料庫標準簡介〖*2〗1. 空間資料庫標準的存在意義和資料庫的標準一樣,隨著GIS和數據廠商逐步推出了自己的空間資料庫產品,為了避免出現大量的空間資料庫分散在不同的商業組織、政府部門和企業中,從而導致這些空間資料庫處於封閉的狀態,為了增強空間數據在管理管理上的統一性以適應空間數據管理的需要,許多標準化組織開發並完善空間數據存儲和SQL語言的規範。比較典型的兩個代表分別是開放地理空間信息協會(Open Geospatial Consortium,OGC)推出的地理信息簡單要素的SQL實現規範(Simple Feature Access SQL, SFA SQL)和國際標準化組織/國際電工委員會第一聯合技術委員會(ISO/IEC JTC1 SC32)發布的SQL多媒體及套用包的第三部分(SQL Multimedia Part3:Spatial,SQL/MM)。一方面,空間資料庫標準可以提高空間信息的共享。另一方面,由於標準包含了一些空間資料庫相關的明確概念和框架,可作為空間資料庫實現的參考。
圖1\|2開放式地理信息系統
聯合會標誌2. OGC地理信息實現標準——簡單要素訪問
1994年開放式地理信息系統聯合會成立,全稱Open Geospatial Consortium,他自稱是一個非盈利的、國際化的、自願協商的標準化組織,它的主要目的就是制定空間信息和基於位置服務相關的標準。其標誌如圖所示,這些標準都是OGC的""產品"",而這些標準的用處就在於使不同產品、不同廠商之間可以通過統一的接口進行數據互操作。
在地理信息領域,OGC已經是一個類似於""官方""的標準化機構,它不但吸納了ESRI、Google、Oracle等業界主要企業作為其成員,同時還和W3C、ISO、IEEE等協會組織結成合作夥伴關係。因此,OGC的標準雖然並沒有強制性,但是因為其背景和歷史的原因,它所制定的標準天然地具有一定的權威性。OGC推出的SFA定義了函式的訪問接口,依據地理幾何對象模型,提供在不同平台下(OLE/COM, SQL, CORBA)對簡單要素(點、線、面)的發布、存儲、讀取和操作的接口規範說明。目前,已被ISO TC211吸納成為ISO 19125標準。SFA的通用體系架構規範,基於分散式環境描述了通用的簡單要素地理幾何對象模型,以及地理幾何對象的不同表達方式和空間參考系統的表達方式。
這個規範不是針對某個特定平台定義的,具有平台獨立性。SFA SQL定義了基於SQL平台實現幾何對象模型及訪問接口函式。目前,它有3個版本,分別是1999年推出的SFSQL1.1版(Simple Feature Specification for SQL Version 1.1),2005年修訂為SFA SQL1.1.0版和最新的SFA SQL1.2.0版。
3. ISO/IEO SQL/MM空間數據標準
SQL99具有支持觸發器、集合和抽象數據類型等新特徵,其中抽象數據類型提供對象擴展的能力,如繼承、多態、封裝等。隨著SQL99對抽象數據類型定義的支持,以及用戶對新的數據類型(如全文、空間、圖像等)的巨大需求,ISO/IEC開始考慮把這些數據類型作為標準數據類型,並進行相關的定義,因此,開發了SQL多媒體和應用程式包(SQL/MM)標準。
SQL/MM根據套用領域的不同,分為多個部分:第一部分架構(Frame\|work)提出了在各章中出現的公共概念,並簡要地說明了其他各個部分中的定義方法;第二部分全文(Full Text)定義了眾多結構化用戶自定義類型,以支持文本數據的存儲(一般在對象關係資料庫);第三部分空間(Spatial)定義了空間矢量數據存儲與檢索的有關標準;第四部分通用工具(General Purpose Facilities)指定一些在不同領域類可以通用抽象數據類型和操作,該部分已經被撤銷;第五部分靜態圖像(Still Image)定義了靜態圖像數據存儲與檢索的相關標準;第六部分數據挖掘(Data Mining)定義了有關數據挖掘的標準;第七部分歷史(History)擴展SQL支持歷史數據,這樣有利於更新。第三部分Spatial定義了空間基本數據類型和空間操作,主要是為了解決如何使用存儲和處理這些數據類型的空間數據。(註:本書主要介紹SQL/MM的第三部分,如果沒有特別指出,文中的SQL/MM均指代SQL/MM Part3:Spatial)。
1.2.3空間數據模型
空間數據模型是對現實世界地理現象、實體以及它們之間相互關係的認識和理解,用一定的方案建立起數據組織方式實現計算機對現實世界的抽象與表達。空間數據模型的三要素是:空間數據結構、空間數據操作和空間完整性約束。其中,空間數據類型與空間操作是空間數據模型主要組成部分,空間數據模型的設計、空間資料庫系統的性能與查詢語言的效率都和它們密切相關。為了規範空間數據模型及其空間操作,OGC和ISO/IEC國際標準化組織制定了空間數據類型標準以及每一種空間數據類型擁有的空間操作子標準。
目前,SFA SQL和SQL/MM這兩個標準公共部分的接口已經相互兼容,但是在這兩個標準無論是從內容覆蓋面,還是從某些概念的界定上都有一定的差別。這些差別都會在空間數據模型這一節中得到體現,如圖1\|3和1\|4分別是SFA SQL對象模型圖和SQL/MM對象類型圖,這兩幅重要的圖主要說明了在OGC和ISO/IEC下幾何對象模型之間的層次關係。在以後的學習中體會到兩套標準的差別,同時我們將會提供兩份表格來具體說明這兩套標準中空間數據模型表達上的具體差別,主要從兩套標準幾何對象和空間操作兩個方面進行比較。(詳見附錄A和附錄B)
圖1-3 SFA SQL對象模型圖
圖1-4 SQL/MM對象類型圖
3 空間資料庫產品
3.1 常見的商業空間資料庫
1.Oracle Spatial
Oracle是最早實現空間數據管理的資料庫管理系統。Oracle早在7.2版本就引入了內嵌式空間擴展技術--MultiDimension(MD);其後,在Oracle 8中該產品名稱先後被修改為Spatial Data Cartridge和Spatial Data Option(SDO)。由於早期的版本不支持對象的定義,空間幾何對象的坐標串主要依靠關聯表來存儲,故空間數據的管理效率較低。從Oracle 8i起直到目前的Oracle版本,Oracle使用新的SDO_GEOMETRY數據類型存儲空間數據。截止目前,Oracle Spatial針對存儲在Oracle資料庫的空間要素,提供了一種SQL模式和便於存儲、檢索、更新、查詢的函式集,主要包括:一種描述幾何數據存儲、語法、語義的模式MDSYS,一種空間索引機制,一組實現感興趣區域查詢和空間聯合查詢的運算元和函式,一組處理結點、邊和表的拓撲數據模型,一組網路數據模型以及一個存儲、檢索、查詢、分析柵格數據的工具包(GeoRaster)。
2.SQL Server Spatial 2008
Microsoft SQL Server於2008年提供了對空間數據無縫的支持和整合,支持空間數據標準。其在資料庫中整合了地理坐標系和平面坐標係數據模型及其針對該類型的相關操作,同時針對新的空間數據類型提供存儲新的操作分析能力,並提供了針對多級網路索引結構來加速查詢檢索功能。同時為了直觀的展示空間數據,可以將查詢結果使用管理控制台和相關的前端工具直觀的加以顯示。
3.2開源空間資料庫
3.2.1開源軟體
(1)開源軟體的概念
開源軟體的詳細定義比較複雜,簡單來說,就是一種原始碼可以任意獲取的計算機軟體,這種軟體的著作權持有人在軟體協定的規定之下保留一部分權利並允許用戶學習、修改、增進提高這款軟體的質量。並非公開了原始碼就算是開源,公開原始碼和開放原始碼是兩回事。
開放源碼軟體主要被散布在全世界的編程者隊伍所開發,但是同時一些大學,政府機構承包商,協會和商業公司也開發它。原始碼開放是信息技術發展引發網路革命所帶來的面向未來以開放創新、共同創新為特點的、以人為本的創新2.0模式在軟體行業的典型體現和生動註解。開放源碼軟體在歷史上曾經與UNIX,Internet聯繫的非常緊密。在這些系統中許多不同的硬體需要支持,而且源碼分發是實現交叉平台可移植性的唯一實際可行的辦法。在DOS,Windows,Macintosh平台上僅僅有很少的用戶有可用的編譯器,開放源碼軟體更加不普遍。對開放源碼開發模式的更詳細的討論可以補充閱讀看Eric Raymond寫的""The Cathedral and the Bazaar"",該書的中文譯本叫做《大教堂與市集》。
(2)開源GIS軟體
GIS社會化和大眾化需要實現地理數據共享和互操作,儘可能降低地理數據採集處理成本和軟體開發套用成本。目前的地理信息系統大多是基於具體的、相互獨立和封閉的平台開發的,它們採用不同的開發方式和數據格式,對地理數據的組織也有很大的差異,壟斷和高額的費用在一定程度上限制了GIS的普及和推廣。
上世紀90年代,開源思想廣泛滲透到GIS領域,國內外許多科研院所相繼開發出開源GIS,2006年初,國際地理空間開源基金會(OpenSouce Geospatial Foundation , OSGeo)成立,基金會的項目已從最初的8個,發展為滿足B/S架構的前端地理信息渲染平台、各種地理空間中間件、涵蓋企業級地理空間計算平台等數十個門類的開源地理空間項目。開源GIS優勢不僅僅是免費,而在於其Free和Open的真正含義,前者代表自由與免費,後者代表開放與擴展,與商業GIS產品不同,由於開源GIS軟體的Free和Open,用戶可以根據需要增加功能,當所有人都這樣做的時候,開源產品的性能與功能也就超過了很多商業產品,因而也造就了開源的優勢和活力。
此外,和一般的商業GIS平台相比,開源GIS產品大多都具有跨平台的能力,可以運行於Linux, Windows等系統,開源GIS軟體得到學術界和GI5平台廠商越來越多的重視,成為GIS研究和套用創新的一個重要領域。
圖1-5 開源GIS軟體熱力圖(Stefan Steiniger,2013)
如圖1-5,是開源GIS軟體截止2012年的匯總熱力圖,從圖可以看出開源GIS貼心地滲透到了行業內的方方面面,桌面GIS程式和地圖伺服器是開源GIS軟體最為重要的兩大類產品,用戶數量和影響力也最大。空間資料庫管理系統一類的開源產品也在開源GIS領域占有重要一席。下面我們簡單介紹一下開源世界的重要保障--著作權許可制度,開源軟體著作權的管理與商業軟體有巨大的不同。
3.2.2開源GIS的著作權許可制度
雖然開源軟體有好的自由度,但是開源軟體並非完全沒有限制。最基本的限制,就是開源軟體強迫任何使用和修改該軟體的人承認發起人的著作權和所有參與人的貢獻。任何人擁有可以自由複製、修改、使用這些原始碼的權利,不得設定針對任何人或團體領域的限制。不得限制開源軟體的商業使用等。而許可證就是這樣一個保證這些限制的法律檔案。基於開源軟體定義中的""散布授權條款(Distribution of License):若軟體再散布,必需以同一條款散布之。""這一條,開源軟體必須附加一個法律檔案,並且在任何修改後的開源或發行版本中附帶同一條款。
對於開源GIS軟體的著作權許可制度,仍舊採用開源軟體許可制度。經Open Source Initiative組織通過批准的開源協定目前有58種,其中最著名的許可制度有BSD(the Berkley Software Distribution license family)、GPL(the GNU General Public License ) 、LGPL ( the GNU Lesser General Public License )和MIT ( Massachusetts Institute of Technology)四種。
1) BSD是一個給予使用者很大自由的代碼共享協定,不過需要使用者尊重代碼作者的著作權。BSD允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上進行商業軟體開發、發布和銷售。
2 ) GPL協定和BSD許可不一樣。GPL不允許修改後和衍生的代碼作為閉源商業軟體發布和銷售。GPL協定的主要內容是只要在一個軟體中使用(""使用""指類庫引用,修改後的代碼或者衍生代碼)GPL協定的產品,則該軟體產品必須也採用GPL協定,即必須也是開源和免費。這就是所謂的""傳染性"",由於GPL嚴格要求使用了GPL類庫的軟體產品必須使用GPL協定,對於使用GPL協定的開原始碼,商業軟體或者對代碼有保密要求的部門就不適合集成/採用作為類庫和二次開發的基礎。
3 ) LGPL是GPL的一個主要為類庫使用設計的開源協定。和GPL要求任何使用/修改/衍生之GPL類庫的軟體必須採用GPL協定不同,LGPL允許商業軟體通過類庫引用(link)方式使用LGPL類庫而不需要開源商業軟體代碼,這使得採用LGPL協定的開原始碼可以被商業軟體作為類庫引用並發布和銷售。
4 ) MIT是和BSD一樣寬泛的許可協定,作者只保留著作權而無任何其他限制。即必須基於開源的發行版里包含原許可協定的聲明,無論你是以二進制發布的還是以原始碼發布的。
GPL與Linux類似,由於能夠保護開源機構的利益,比較適合開源GIS軟體的市場推廣和研發支持,因此被許多開源GIS平台採用,如GRASS , QGIS , uDig。但也有一些非政府機構支持的基於MIT .LGPL的開源項目,如SAGA . MapWindow。
3.2.3 常見的開源空間資料庫
1. MySQL Spatial
MySQL Spatial是MySQL資料庫為支持空間數據的存儲和查詢而加入的一種擴展功能。MySQL遵從OGC的規範,實施了一系列的空間擴展。MySQL Spatial的功能還不夠完全。目前,它只支持了 OpenGIS(-個標準)的一個子集,包涵有限的幾種空間數據類型,MySQL具有與OpenGIS類對應的數據類型。目前已定義的數據類型有:GEOMETRY(幾何類型),POINT(點),LINESTRING(線),POLYGON(面)。GEOMETRY能夠保存任何類型的幾何值,而其他的單值類型POINT、LINESTRING以及POLYGON只能保存特定幾何類型的值。
2. SpatiaLite
SpatiaLite 空間資料庫是一個簡單、實用的輕量級資料庫,只有幾百KB,是在SQLite 空間資料庫基礎上的擴展。它遵守OGC標準,支持SQL 語言對幾何類型欄位的操作。同時它也集成了其他開源類庫:①GEOS庫,用於進行空間分析;②PROJ.4庫,用於實現不同坐標參考系統間坐標的轉換;③LIBICONV庫,用於支持多種語言;④SQLite庫,用於實現SQL 數據引擎。Spatialite+SQLite 資料庫操作簡單,易於管理GIS 環境下中小型的GIS 數據,且資料庫檔案可移植性好,支持跨平台操作。此外,Spatialite還支持R-tree的數據檢索,以及存儲器存儲,這極大地加快了用戶訪問資料庫的速度。
3.3 PostGIS簡介
3.3.1 什麼是PostgreSQL
PostgreSQL是一個包含關係模型和支持SQL標準查詢語言的資料庫管理系統,支持豐富的數據類型(如JSON和JSONB類型,數組類型)和自定義類型。而且它提供了豐富的接口,可以很容易地擴展它的功能,3.3.2章節中將會重點介紹PostgreSQL的一個重要擴展PostGIS。
圖1-6 PostgreSQL開源資料庫Logo
PostgreSQL資料庫的優勢如下:
PostgreSQL資料庫是目前功能最強大的開源資料庫,它是最接近工業標準SQL92的查詢語言,並且正在實現的新功能已兼容最新的SQL標準:SQL2003.
PostgreSQL資料庫是開源的、免費的,而且是BSD協定,在使用和二次開發上基本沒有限制。
POstgreSQL資料庫支持大量的主流開發語言,包括C、C++、Perl、Python、Java以及PHP等。
3.3.2 什麼是PostGIS
圖1-7 PostgreSQL開源資料庫Logo
如圖1-7,前面我們已經簡單介紹了PostgreSQL,PostgreSQL資料庫加上空間特性就是變成了PostGIS擴展。PostGIS的標誌就是一直可愛的大象拖著一個地球。
在地理數據處理方面,讓 PostgreSQL 更加強大的一面是其空間數據擴展 PostGIS 的支持。由於有 PostGIS的支持,可以將 PostgreSQL 優良的特性和強大的功能充分的發揮在海量空間數據的存儲與管理中,為空間資料庫的實現提供又一優良的解決方案,並且其開源和免費的特性更是能夠滿足許多低成本套用的需求。
PostGIS 是對象關係型資料庫系統 PostgreSQL 的一個空間擴展組件,為 PostgreSQL提供如下空間信息服務功能:空間數據對象、空間索引、空間操作函式和空間操作符。PostGIS 同樣也一款開源軟體,源自著名的空間信息研究協會 Refractions,是目前最強大的開源空間數據引擎,發展非常迅速,在國外許多成功的套用案例。
PostGIS 具有如下主要特徵:
支持 OGC 的空間數據標準,如簡單要素規範的空間數據模型,WKT(Well-Known Text)、WKB(Well-Known Binary)以及空間數據表的 SQL 查詢規範。
通過空間數據操作符與空間操作函式提供強大的幾何要素編輯功能與空間分析功能。
基於成熟的開源項目 PROJ4 提供地圖投影坐標系的支持和 GEOS 提供空間地理要素類型的支持。
支持多種開發語言。
同樣,PostGIS套用廣泛,本書後面大部分章節都會以PostGIS為實驗環境講解空間資料庫的操作,在本章的最後,我們來看看有應用程式支持PostGIS(表1-1)。
表1-1目前支持PostGIS的應用程式列舉
開源軟體 商業軟體
工具擴展
Shp2Pgsql
ogr2ogr
Dxf2PostGIS
網路服務
Mapserver
GeoServer
SharpMap SDK
MapGuide Open Source (using FDO)
桌面應用程式
uDig
QGIS
mezoGIS
OpenJUMP
OpenEV
SharpMap
ZigGIS for ArcGIS/ArcObjects.NET
GvSIG
GRASS 工具擴展
Safe FME Desktop Translator/Converter
網路服務
Ionic Red Spider (now ERDAS)
Cadcorp GeognoSIS
Iwan Mapserver
MapDotNet Server
MapGuide Enterprise (using FDO)
ESRI ArcGIS Server 9.3+
桌面應用程式
Cadcorp SIS
Microimages TNTmips GIS
ESRI ArcGIS 9.3+
Manifold
GeoConcept
MapInfo (v10)
AutoCAD Map 3D (using FDO)