開源GIS軟件初探


談到GIS軟件,首先讓我們想到的便是GIS界的龍頭大哥ESRI公司旗下的ArcGIS產品,從最初接觸的version 9.2到如今的version 10.1,其發展可謂風生水起。MapInfo軟件也不錯,可是給人的感覺是漸漸被淘汰了似的,周圍使用該軟件的人並不算多。然后接觸了一些的是國內的SuperMap軟件,MapGIS軟件等,很遺憾的是作為武大的學生,竟然沒有使用過GeoStar的產品。這些產品在國內GIS中的份額幾乎可以覆蓋全部。

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

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

回想以前做項目,寫代碼都缺少整理和歸納,等到用的時候卻找不到先前的資料,理解也不夠。因此決定通過寫日志的方式,將這些信息都記錄下來,做一番整理的工作。以下內容是查閱相關資料並結合個人理解總結的。

1.GIS開源軟件簡介

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

不同於商業GIS軟件,開源GIS軟件不用背負數據兼容、易用性等問題的包袱,開發者能夠集中精力於功能的開發,因此開源GIS軟件普遍功能很強,技術也非常先進,其背后是來自技術狂熱者和學院研究生的大力支持。

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

開源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、VB6、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、Proj4、QGIS、MapWindow4、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的方式。路漫漫其修遠兮,吾將上下而求索~~

 

參考資料:

1.各大項目網站;

2. 王勉,開放框架下GIS開發方式研究[M], 四川師范大學。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM