開源GIS軟件初探

談到GIS軟件,首先讓咱們想到的即是GIS界的龍頭大哥ESRI公司旗下的ArcGIS產品,從最初接觸的version 9.2到現在的version 10.1,其發展可謂風生水起。MapInfo軟件也不錯,但是給人的感受是漸漸被淘汰了似的,周圍使用該軟件的人並不算多。而後接觸了一些的是國內的SuperMap軟件,MapGIS軟件等,很遺憾的是做爲武大的學生,居然沒有使用過GeoStar的產品。這些產品在國內GIS中的份額幾乎能夠覆蓋所有。html

介於商業軟件的昂貴,我等無產階級學生天然是消費不起。不過藉助網絡的強大,如何免費地安裝並使用這些商業軟件已成爲公共的祕密。至於版權問題,在學生範圍也沒必要理會,只是在應用到商業開發時纔會有所顧忌。程序員

做爲一個無知的Coder,很好奇這一個個地圖是如何顯示出來的,這一個個投影是如何體現到地圖上的,這一系列數據是如何存儲到Shapefile、存儲到數據庫中的,這一個個分析功能是如何解決的,等等。顯然這些商業軟件不會告訴你答案,他們提供的開發接口都是一個個黑箱。因而將觸角轉向開源軟件界,試圖去尋覓這些問題的答案。web

回想之前作項目,寫代碼都缺乏整理和概括,等到用的時候卻找不到先前的資料,理解也不夠。所以決定經過寫日誌的方式,將這些信息都記錄下來,作一番整理的工做。如下內容是查閱相關資料並結合我的理解總結的。算法

1.GIS開源軟件簡介

GIS的出現是上個世紀60年代的事,在當代衆多IT縮寫詞出現以前,GIS已經在城市規劃、土地管理、軍事等行業獲得了應用。GIS做爲一門交叉學科,它的發展伴隨着計算機技術的發展。隨着軟件的開源化趨勢GIS軟件也開向開源時代邁進。數據庫

不一樣於商業GIS軟件,開源GIS軟件不用揹負數據兼容、易用性等問題的包袱,開發者可以集中精力於功能的開發,所以開源GIS軟件廣泛功能很強,技術也很是先進,其背後是來自技術狂熱者和學院研究生的大力支持。編程

開源GIS軟件目前已經造成了一個比較齊全的產品線。在www.freegis.org網站上,咱們會發現衆多各具特點的GIS軟件。老牌的綜合GIS軟件GRASS,數據轉換庫OGR、GDAL,地圖投影算法庫Proj四、Geotrans,也有比較簡單易用的桌面軟件Quantum GIS,Java平臺上有MapTools,MapServer則是優秀的開源WebGIS軟件。各類空間分析,模型計算尤爲是開源GIS領域的強項。c#

開源GIS世界雖然繁榮,但其影響仍是很小,其身份在外人眼裏看來是高莫測的專業工具,現有的Linux發行版中也沒有哪一個集成了開源GIS工具。開源GIS技術雖然先進,可是缺少良好的可以知足商用的發行版本,所以涉足開源GIS領域的可能是技術愛好者和科學家,而少有商業人士問津。若是能提供一個比較系統的、達到商用要求的開源GIS解決方案,並能得到穩定發行版,如同Linux+Apache+MySQL+PHP那樣,開源GIS前途將是不可限量。瀏覽器

2.當前較爲成熟的GIS開源軟件

2.1從開發結構角度看

一套GIS的完整開發框架,包括四個組成部分:標準層、數據庫層、平臺層和組間層。這四個部分從下到上,從底層到高層,共同構成一個完整的體系。緩存

2.1.1標準層

標準層主要是用於制定各種標準。開放的GIS標準主要有兩大致系:OGC(http://www.opengeospatial.org/)、ISO/TC211(www.isotc211.org/)。前者爲那些法律上的國際組織制定的標準添加詳細的實現標準,同時也在市場須要的時候擴展那些法律上的標準,其側重於系統的實現上;後者所制訂的ISO19100系列的地理信息標準,是屬於基礎性的標準,注重概念性規格敘述,獨立於執行平臺外。服務器

其中,WKT(Well-Known Text)與WKB(Well-Known Binary)是OGC制定的空間數據的組織規範,顧名思義,WKT是以文本形式描述空間數據,而WKB是以二進制形式描述空間數據。目前大部分支持空間數據存儲的數據庫構造空間數據都採用這兩種方式。

2.1.2數據庫層

數據庫層主要是採用開源地理信息標準採用開源方式開發的空間數據庫項目,包括POSTGIS、MySQL空間擴展等。

《Simple Features specifications for SQL》是OGC制定的關於在基於SQL的關係數據庫中存儲空間數據標準。這個標準(如圖)定義了數據類型、空間操做符號、輸入和輸出格式、函數以及其餘。大多數SQL數據庫的空間擴展都遵循這個標準,包括PostGIS和MySql空間擴展。

2.1.2.1PostGIS

PostGIS支持全部的空間數據類型,這些類型包括:點(POINT)、線(LINESTRING)、 多邊形(POLYGON)、多點(MULTIPOINT)、 多線(MULTILINESTRING)、 多多邊形(MULTIPOLYGON)和集合對象集(GEOMETRYCOLLECTION)等。PostGIS支持全部的對象表達方法,好比WKT和WKB。PostGIS支持全部的數據存取和構造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。PostGIS提供簡單的空間分析函數(如Area和Length)同時也提供其餘一些具備複雜分析功能的函數,好比Distance。PostGIS提供了對於元數據的支持,如GEOMETRYCOLUMNS和SPATIAL REF SYS,同時,PostGIS也提供了相應的支持函數,如AddGeometryColumn和DropGeometryColumn。PostGIS提供了一系列的二元謂詞(如Contains、Within、Overlaps和Touches)用於檢測空間對象之間的空間關係,同時返回布爾值來表徵對象之間符合這個關係。PostGIS提供了空間操做符(如Union和Difference)用於空間數據操做。好比,Union操做符融合多邊形之間的邊界。兩個交迭的多邊形經過Union運算就會造成一個新的多邊形,這個新的多邊形的邊界爲兩個多邊形中最大邊界。

2.1.2.2MySql空間擴展

MySQL是世界上最流行的開源數據軟件。MySQL從4.1開始引入了空間功能,實現和使用方式基本和POSTGIS相似。

2.1.3組件層

數據庫組件層按照功能可分爲兩類:數據管理組件和分析組件。

2.1.3.1數據管理組件

(1)GDAL

GDAL(http://www.gdal.org/)是一個基於C++的柵格格式的空間數據格式解釋器。做爲一個類庫,對於那些用它所支持的數據類型的應用程序來講它表明一種抽象的數據模型。GDAL持大多數的柵格數據類型。

在開發上GDAL支持多種語言的接口如:Perl、Python、VB六、Java、C#。

(2)OGR

OGR(http://www.gdal.org/ogr/)是C++的簡單要素類庫提供對各類矢量數據文件格式的讀取(某些時候也支持寫)功能。OGR是根據OpenGIS的簡單要素數據模型和Simple features for COM(SFCOM)構建的。OGC也支持大多數的矢量數據類型支持數類型。

(3) GeOxygene

GeOxygene(http://www.oxygene-project.sourceforge.net/)基於Java和開源技術同時提供一個實現OGC規範和ISO標準可擴展的對象數據模型(地理要素、幾何對象、拓撲和元數據)。它支持Java開發接口。數據存儲在關係數據中(RDBMS)保證用戶快速和可靠的訪問數據,但用戶不用擔憂SQL描述語句,他們經過爲應用程序創建UML和Java代碼的模型。在對象和關係數據庫之間使用開源軟件進行映射。到如今可使用OJB同時支持Oracle和PostGIS中的數據。

(4) GML4J

GML4J(http://gml4j.sourceforge.net/)是一個做用於Geography Markup Language(GML)的Java API工具。當前GM4J的做用是一個GML數據的掃描器。經過它能夠讀取和解釋那表明地理要素、幾何對象、它們的幾何、要素的屬性、集合對象的屬性、複雜屬性、座標系統和其餘的GML結構的XML。現階段GML4J只支持GML讀取和訪問,在之後將支持GML數據的修改。

2.1.3.2分析組件

(1)JTS

JTS Topology Suite(http://sourceforge.net/projects/jts-topo-suite/)是一套2維的空間謂詞和函數的應用程序接口。它由Java語言寫成,提供了全的、延續的和健壯的基本的2維空間算法的實現,而且效率很是高。

Net Topology Suite(http;//nts.sourceforge.net/)則是一個.Net的開源項目,該項目的主要目的是將JTS Topology Suite應用程序提供給.Net應用程序使用。

(2) GSLIB

GSLIB(http://www.gslib.com/)是一個提供了空間統計的程序包,它是當前最強大和綜合的一個統計包,而且具備靈活性和開放的接口。其缺點是缺乏用戶支持,用戶界面不友好且缺乏面向對象建模能力。

(3) PROJ.4

PROJ.4(http://trac.osgeo.org/proj/)是一個開源的地圖投影庫,提供對地理信息數據投影以及動態轉換的功能,WMS,WFS或WCS Services也須要它的支持。

(4)GeoTools

GeoTools(http://www.geotools.org/)是也是遵循OGC規範的GIS工具箱。它擁有一個模塊化的體系架構,這保證每一個功能部分能夠很是容易的加入和刪除。 GeoTools目標是支持OGC全部的規範而且各種國際規範和標準。

GeoTools已經在一個統一的框架下開發了一系列的JAVA對象集合,其徹底知足了OGC的服務端的各類服務而且提供了OGC兼容的單獨應用程序。GeoTools項目由一系列的API接口以及這些接口的實現組成。開發一整套產品或應用程序並非GeoTools的目的,可是其鼓勵其餘應用項目使用它以各種工做。

GeoTools.NET(http:// geotoolsnet.sourceforge.net/Index.html)則是與Java對應的.NET版本。

2.1.4平臺層

平臺層主要是構建在標準層、數據庫層、中間件層基礎上的能夠擴展的系統框架。使用平臺層能夠簡化咱們搭建GIS框架的工做量。經過對平臺的二次開發擴展可讓咱們搭建基於GIS開放框架的GIS應用系統。平臺多基於開源的GIS標準,同時兼容開源的空間數據庫,與整個開放框架體有很好的兼容性。平臺層根據應用的不一樣這裏能夠分爲兩大類:桌面平臺、平臺。桌面平臺主要是指用於桌面應用的平臺框架,web平臺主要是指應於web應用的平臺框架。

2.1.4.1桌面平臺

(1)Grass GIS

GRASS(地理資源分析支持系統, http://grass.fbk.eu/)是一個柵格/矢量GIS、圖像處理系統和圖件成圖系統。GRASS包括超過350個程序和工具,實現:1)顯示器和紙質地或圖象的打印顯示;2)操做柵格、矢量或點數據;3)處理多光譜圖像數據;4)建立、管理和存儲空間數據。GRASS支持圖形界面或文字界面。 GRASS能夠與商用打印機、繪圖儀、數字化儀或商用數據庫交互。

GRASS基於GNUGPL協議下發行,有超過100萬行的C源代碼能夠自下載獲得。GRASS提供了一個複雜的GIS庫,可用於開發本身的項目。

(2)OSSIM

OSSIM(http://www.ossim.org/)是一個用於遙感、圖片處理、地理信息系統、照相測量方面的高性能軟件。OSSIM庫主要使用C++完成,支持多種平臺,如今包括Linux、dows、MacOS X和Solaris,而且能夠移植到其餘平臺。因爲OSSIM庫用了模型一控制器一視圖(MCv)的結構,因此算法及實現與GUI是分離的,使得OSSIM能夠支持多種GUI接口。第一個GUI的實現使用了QT,其的GUI框架及接口也在開發計劃中(如Cocoa/Windows等)。

(3)SharpMap

SharpMap(http://www.codeplex.com/SharpMap)是一個基於.net 2.0使用c#開發的Map渲染類庫,能夠渲染各種GIS數據(目前支持ESRIShape和PostGIS格式),可應用於桌面和Web程序。目前穩定版本爲0.9(2.0beta已發佈),代碼行數10000行左右,實現了下功能:

①支持的數據格式:PostGreSQL/PostGIS,ESRI Shapefile,支持WMS layers,支持ECW 和JPEG2000 柵格數據格式; 
②Windows Forms 控件,能夠移動和縮放; 
③經過HttpHandler支持ASP.net程序; 
④點、線、多邊形、多點、多線和多多邊形等幾何類型和幾何集合(GeometryCollections)等OpenGIS Simple Features Specification; 
⑤可經過Data Providers(增長數據類型支持)、Layer Types(增長層類型)和Geometry Types等擴展; 
⑥圖形使用GDI+渲染,支持anti-aliased等; 
⑦專題圖。

SharpMap目前能夠算是一個實現了最基本功能的GIS系統,但一些很重要的功能,例如投影,比例尺,空間分析,圖形的屬性信息,查詢檢索等等,經過同NTS等開源空間類庫的結合能夠在SharpMap中實現的空間變換、緩衝區等功能。

(4) World Wind

World Wind(http://worldwind.arc.nasa.gov/)是個開放軟件,容許用戶修改WorldWind軟件自己。軟件用C#編寫,調用微軟SQLServer影像庫TerrainServer進行全球地形三位顯示,低分辨率的Blne marble數據包含的初始安裝內,當用戶放大到特定區域時,附加的高分辨率數據將會自動從NASA服務器上下載。它經過將遙感影像與RTM高程(航天飛機雷達地形數據庫)疊加生成三位地形。在功能方面,軟件具備長度測量功能(僅能測量兩點間的直線距離)、座標和高程查詢、屏幕截圖、添加標註及三位動態顯示等功能。

(5) MapWindow

MapWindow GIS(http://mapwindow4.codeplex.com/)桌面應用程序是一個免費開源基於標準的地理信息軟件,使用它能夠瀏覽和編輯多種GIS數據格式。這個軟件包括不少地理處理的插件如:緩衝分析、合併處理等,也可使用腳本編輯器編寫VB.NET和C#的腳本。最新版本的MapWindow應用程序徹底基於.NET2.0平臺和C#。如今又開發出了MapWindow.Web可讓用戶更容易開發基於ASP.Net的web應用。這樣MapWindow逐漸造成一個完整的體系,從開發嵌入式系統的MapWinGIS.OCX到應用程序框架的MapWindow應用程序再到發佈web程序的MapWindow.web。

MapWindow 6(http://mapwindow6.codeplex.com/)是在MapWindow 4的基礎上進行改進,整個框架採用C#完成,代碼完整清晰,其優勢是:

①徹底採用.net平臺(不須要COM註冊或DLL加載);

②能夠經過使用Mono運行在Mac或Linux平臺上;

③大量擴展了符號集,點、線、面的符號化更豐富,並且能夠基於屬性內容進行專題化,同時支持矢量化的字體符號;

④面向對象的代碼:直接對各要素進行重疊分析、相交分析等。支持OGC的幾何對象模型,基於System.Data.DataTable的數據集;

⑤可兼容的插件模式:插件的接口就像普通對象的事件對象同樣;

⑥組件模式:全部的組件經過MapWindow.dll提供,可以拖放控件就能夠定製GIS程序。

2.1.4.2 Web平臺

(1)GeoServer

GeoServer(http://geoserver.org/)是一個符合J2EE規範,且實現了WCS、WMS及WFS規格,支持TransactionWFS(WFS-T),其技術核心是整合了享有盛名的JavaGISolkit--GeoTools。對於空間信息存儲,它支持ESRI Shapefile及PostGIS、Oracle、ArcSDE等空間數據庫,輸出的GML檔案知足GML2.1的要求。因爲它是純Java的,因此更適合於複雜的環境要求,並且因爲它的開源,因此開發組織能夠基於GeoServer靈活實現特定的目標要求,而這些都是商業GIS組件所缺少的。

GeoServer做爲一個純粹的Java實現,被部署在應用服務器中,簡單的如Tomcat等;它的WMS和WFS組件響應來自於瀏覽器或uDig的請求,訪問配置的空間數據庫,如PostGIS、OracleSpatial等,產生地圖和GML文檔傳輸至客戶端。

(2)MapServer

MapServer(http://mapserver.org/)基於C語言,利用GEOS、OGR/GDAL對多種失量和柵格數據的支持,經過Proj.4共享庫實時的進行投影變換。同時,還集合PostGIS和開源數據庫PostgreSQL對地理空間數據進行存儲和SQL查詢操做,基於ka.map、MapLab、Cartoweb和Chameleon等一系列客戶端JavaScfiptAPI來支持對地理空間數據的傳輸與表達,而且遵照開放地理空間協會(Open Geospatial Consortium,OGC)制定的WMS、WFS、WCS、WMC、SLD、GML和FilterEncoding等一系列規範。對不一樣項目的借鑑和運用,加強了MapServer的功能,並使開發團隊更多地關注於網絡製圖的核心功能。

MapServer是一套用來構建空間網絡應用的開源開發環境,並非一套全能的GIS系統,它更擅長於在網絡上展現空間數據,在服務器端實時的將地理空間數據處理成地圖發送給客戶端。MapServer擁有一個龐大的社區,並有一個來自全球的近20名核心開發人員以至力於產品的維護和加強。同時還有各類不一樣的組織機構爲MapServer的開發和維護提供資助。

(3) Mapnik

Mapnik(http://mapnik.org/)是一個用於開發地圖應用程序的工具。Mapnik用C++寫同時有Python綁定接口。使用Mapnik能夠很方便的進行桌面和web應用程序開發。

Mapnik主要提供地圖的渲染功能,使用AGC庫同時提供世界級的標註引擎。能夠說Mapnik是如今最強大的開源地圖渲染工具。

(4) OpenLayers

OpenLayers(http://openlayers.org/)是一個開源的jS框架,用於在您的瀏覽器中實現地圖瀏覽的效果和基本的zoom,pan等功能。OpenLayers支持的地圖來源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也能夠用簡單的圖片做爲源,在這一方面OpenLayers提供了很是多的選擇。此外,OpenLayers實現了行業標準的地理數據訪問方法如OGC的Web Mapping Service(WMS)and Web Feature Service(WFS)協議。OpenLayers能夠簡單的在任何頁面中放入動態的地圖。它能夠從多種的數據源加載顯示地圖。MetaCarta公司開始開發了OpenLayers的初始版本同時將它開放給了公衆以做爲之後各類地理信息系統的應用。

(5) TileCache

TileCache(http://tilecache.org/)是一個實現WMS.C的標準的服務器, TileCache提供了一個基於PythonTile的WMS.C/TMS服務器,同時具備開可插入的緩存和後臺渲染機制。在最簡單的應用中,只要求TileCache能夠訪問磁盤能夠運行Python的CGI腳本。同時能夠鏈接須要緩存的WMS服務。使用這些資源,你能夠建立任何WMS服務在你的本地硬盤的緩存,同時使用支持WMS-C標準的客戶端如:OpenLayers或任何支持TMS的客戶端如:OpenLayers和wordKit就能夠訪問這些緩存數據。

2.2從語言派系角度看

從軟件底層的開發語言角度講,開源空間信息軟件能夠被獨立的分爲如下三種技術體系門類,在每種分類體系內部,開發人員每每是基於不一樣的項目交叉工做的,因此這種分法僅僅是方便了熟悉某種開發語言的程序員,對於用戶和應用人員而言, 意義不大。

語言

開源軟件

C/C++

GRASS、GDAL、OGR、GSLIB、OSSIM、Proj四、QGIS、MapWindow四、MapServer、Mapnik等

Java

GeoTools、GeOxygene 、GML4J、MapTools、GeoServer、JTS等

.NET

NetTopologySuite、GeoTools.NET、SharpMap、World Wind、MapWindow6等

腳本

OpenLayers、TileCache等

3. .NET環境下的GIS開源軟件應用

做爲一個一直在Windows環境下開發的C#程序員,對如何利用這些開源資源進行開發頗有興趣。對於一個典型的GIS應用系統,系統的各個層次均可以構建在開放的GIS開發框架之下。而考慮使用.net開發環境,因此係統中的開放資源須要能夠在Windows下面運行同時有.net接口。同時系統須要有桌面應用同時又須要能夠發佈Web應用。

所以,在.NET環境下,利用開源GIS進行項目開發大體可分爲兩種:

(1)Web環境,使用PostGIS+SharpMap/MapWindow6+TileCache+OpenLayers進行開發

在該開發模式下, PostGIS主要用於存放空間數據,同時也用於處理空間查詢以及空間操做。PostGIS基於PostgreSQL實現了OGC的((Simple Features specifications for SQL))標準。PostGIS是當前最早進的開源空間數據庫,功能強大並且也至關穩定。SharpMap/MapWindow6能夠提供WMS服務同時地圖渲染很是美觀,可是WMS自己效率不是很高,每次請求都要到從新動態的渲染生成用戶請求的地圖圖片這樣效率很是低。這裏選擇TileCache做爲WMS的緩存引擎。瓦片緩存TileCache在邏輯上位於OpenLayers與SharpMap/MapWindow6之間,用於管理SharpMap/MapWindow6生成的數據,同時處理前臺OpenLayers傳遞的請求。TileCache將用戶瀏覽過的圖片緩存到緩存服務器本地硬盤,這樣下次用戶請求一樣數據的時候就不用再經過地圖渲染引擎而是直接讀取本地緩存地圖大大的提升的地圖訪問速度。經過OpenLayers做爲客戶端能夠很快速的搭建客戶端系統。OpenLayers能夠讀取經過TileCache提供的緩存數據,同時OpenLayers界面美觀性能優越大大下降了客戶端開發的工做量。

(2)桌面環境,使用PostGIS+NetTopologySuite+SharpMap/MapWindow6進行開發

在該開發模式下,PostGIS做爲數據庫引擎,做爲數據管理和分析工具。NetTopologySuite做爲空間數據操做和管理的中間件。SharpMap/ MapWindow6做爲提供嵌入式GIS開發組件,提供GIS功能。PSN適合用戶微軟.Net開發環境下,小型的嵌入按式GIS系統的開發。PostGIS有.Net的數據訪問組件,NetTopologySuite和SharpMap/MapWindow6徹底是基於C#的開源項目。所以,能夠很方便的集成開發處桌面GIS應用系統。

4.GIS開源項目的學習

對GIS開源項目進行學習,一方面能夠提升本身的編程水平,另外一方面也能在代碼中加強對GIS的理解和認識。相比於對商業軟件的二次開發,基於開源底層GIS的學習更有收穫。

根據我的經驗,像我這種編程能力不強的人,不要一上來就選擇諸如Grass GIS,QGIS這些大型GIS軟件,不然容易陷入局部區域,缺少對總體的瞭解,同時也會因工程量過大難以堅持下來。所以,我推薦選擇較小的但功能齊全的開源軟件進行學習,就.NET陣營的GIS開源軟件而已,較爲適合的開源學習項目有SharpMap和MapWindow6。

這兩個平臺層的開源項目將底層的接口進行整合,實現了基本的數據管理、地圖顯示和基本的分析功能。這兩個項目各有千秋,前者代碼量更少,網上相關的中文資料也相對較多,缺點是開發還不夠完善,幾乎沒有分析功能,缺乏如Legend控件的支持等;然後者更爲專業,實現了不亞於ArcGIS的顯示功能,且項目基於插件式開發,擴展性更佳,分析功能也比較完善,但代碼量相對較多,網上相關的中文資料也很少。(英文不行,真的很鬱悶!!)

目前正在研究MapWindow6,但願有志同道合的同窗能共同交流學習。

5.小結

這一段時間,除了作老闆的項目,也就隨着本身的興趣對開源GIS進行了一些瞭解和學習。經過對GIS開源軟件的瞭解和學習,拓寬了眼界,也找到了進一步學習GIS的方式。路漫漫其修遠兮,吾將上下而求索~~

相關文章
相關標籤/搜索