1 數據生產
1.1 uDig
uDig(http://udig.refractions.net/)是一個基于Java開源的桌面應用框架,它構建在Eclipse RCP和GeoTools(一個開源的Java GIS包)上。可以進行shp格式地圖文件的編輯和查看;是一個開源空間數據查看器/編輯器,對OpenGIS標準,關于互聯網GIS、網絡地圖服務器和網絡功能服務器有特別的加強。uDig提供一個一般的java平臺來用開源組件建設空間應用。開發者可通過這個平臺來創建新的在uDig 基礎上衍生的應用程序,uDig 是WebGIS 的一個核心組件。Geotools 是一個開源的Java GIS 工具包,可利用它來開發符合標準的地理信息系統。Geotools 提供了OGC( Open Geospatial Consortium) 規范的一個實現來作為他們的開發。
uDig支持WMS,WFS,WPS等GIS服務,同時提供了豐富的地圖數據編輯功能,包括點、線、面和圖片形式的編輯。但實際上應用最多的就是使用uDig編輯shp格式的地圖數據,從中提取作用域地圖發布的樣式文件(*。sld)。通常使用默認文字編碼的地圖數據通過WMS服務顯示處的地圖中文標簽是亂碼。用uDig導出shp格式地圖數據的SLD樣式文件,可以有效的解決中文標簽亂碼問題。
官網:http://udig.refractions.net/
下載地址:http://udig.refractions.net/download/
udig下載、安裝及漢化
1.2 QGIS
QGIS(https://www.qgis.org/zh_CN/site/)全稱Quantum GIS,基于Qt,使用C++開發的開源版桌面地理信息系統。該系統可運行在Linux、Unix、Mac OSX和Window等平臺之上。QGIS最大的特點是它把圖層當做數據處理的最基本單位,實際上它支持的圖層具有很廣泛的來源,主要有矢量文件圖層、CAD圖層、影像數據圖層和WMS圖層。QGIS 支持vector, raster 和database 格。它能夠很好地支持PostGIS。目前最新版本更新到3.10.2。
1.3 QGIS和uDig的比較
2 數據存儲
2.1 PostgreSQL
PostgreSQL(對象-關系數據庫管理系統)是由加州大學伯克利分校計算機系開發的Postgres軟件包發展而來的。PostgreSQL幾乎支持所有SQL構件(包括子查詢,事物和用戶定義類型和函數),并且可以獲得非常廣闊范圍的開發語言綁定(包括C,C++,Java,Perl,tcl,和Python)。在空間數據管理方面, PostgreSQL定義了一系列的幾何數據類型, 包括點(point),線(line),線段(lseg), 方形(box), 閉合和開放路徑(path),多邊形(polygon), 圓(circle)。但是PostgreSQL提供的幾何類型并不支持OpenGIS的SFS規范, 缺乏復雜幾何類型, 沒有提供空間分析和投影變換模塊, 很難達到GIS的應用要求。
2.2 PostGIS
PostGIS(http://www.postgis.org/)是一個功能強大的開源空間數據庫。它是在1986年誕生于加州大學伯克利分校。PostGIS是PostgreSQL(對象-關系型數據庫管理系統)的一個擴展。它支持所有的空間數據類型與一系列重要的GIS 函數,包括完全的OpenGIS 支持、拓撲結構和用于查看、編輯GIS 數據桌面用戶相關工具和基礎網絡訪問工具。作為PostgreSQL對象關系數據庫系統的擴展模塊,PostGIS 支持GIS 空間數據的存儲,PostGIS 遵循OGC 的Simple Feature for SQL。PostGIS在PostgreSQL基礎上增加了存儲空間數據的能力,與Oracle中Spatial相似。PostGIS也具有大型數據庫的特性,如數據備份,數據庫恢復,災難恢復等。
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.3 PostGIS與PostgreSQL的對比
總的來說PostGIS相當于PostgreSQL的升級版,在此基礎上完善了空間分析操作以及更復雜的幾何量算。
2.4 MySQL
MySQL(https://www.mysql.com/)是一種小型關聯數據庫管理系統。這種數據庫的最大特點是,它將數據保存在不同的數據表中,而不是將全部的數據都存放在倉庫中,這樣提高了數據庫的靈活性,增加了查詢的速度。它現在同樣支持空間擴展,該數據庫能夠生成、保存及分析空間特征,它使用了OGC建議的含有Geometry類型的,負荷SQL語句環境的一個自己,提供了一組對空間數據實現很多操作的函數,這些函數可以在各種格式間轉換幾何值,并且訪問幾何值的定性或定量等屬性信息。開發者為瑞典MySQLAB公司。該公司在2008年被Sun公司收購。
MySQL是完全網絡化的跨平臺關系型數據庫,因為其體積小、速度快、總體擁有成本低,且開放源碼,被廣泛的應用于Internet上的中小型網站中。
?MySQL Spatial Extensions 地理信息
?http://mysqlserverteam.com/mysql-5-7-and-gis-an-example/
- MySQL Spatial Extensions(后面簡稱MySQL Spatial)功能不夠完全。至少和PostGIS相比是這樣的,它只支持了openGIS(一個標準)的一個子集,包涵有限的幾種空間數據類型(比如Point,LineString,Polygon等),支持的函數也很少,比如,連計算兩個點的distance函數都沒有...
- ?MySQL Spatial的安裝配置非常的簡單。其實,它根本不需要安裝。默認的MySQL配置就能夠使用這些空間數據類型。這和PostGIS很不一樣,PostGIS是需要在PostgreSQL上再安裝一個擴展包。
- ?不同的存儲引擎有差別。MyISAM和InnoDB都支持spatial extensions,但差別在于:如果使用MyISAM,可以建立spatial index,而InnoDB是不支持的。這點差別在某些場景下很關鍵,后面會再詳細說說spatial index。
2.5 MongoDB
MongoDB(https://www.mongodb.com/)是一個開源面向文檔的NoSQL 數據庫,用C++編寫。它提供一種強大、靈活、可擴展的數據存儲形式。MongoDB功能豐富,內置MapReduce聚合的支持,支持地理空間索引。MongoDb具有弱一致性,保證用戶的訪問速度,文檔結構的訪問方式,能夠更便捷地獲取數據,內置GirdFS 支持大容量的儲存,內置Sharding,第三方支持豐富,性能優越。
MongoDB在存儲空間數據比傳統的關系數據庫如MySQL 和PostgreSQL 更具優勢。MongoDB 對空間數據是原生支持,不需要安裝第三方空間數據庫引擎即可構建空間索引進行進行快速的空間查詢。MongoDB 支持平面( 2d) 和球面( 2dsphere indexes) 兩種空間索引。面向大眾型的GIS 應用會存儲大量的POI 數據或者用戶產生的位置數據,利用MongoDB 儲存可以提高檢索效率。MongoDB 支持MapReduce計算模型,處理海量LBS數據有較高的效率。MongoDB有多種基于的Node.JS的第三方庫實現對MongoDB的操作,這樣使得對數據的操作更加的便捷。
MongoDB 中使用 GeoJSON對象 或 坐標對 描述空間地理數據。MongoDB使用 WGS84 參考系進行地理空間數據查詢。
1、MongoDB支持空間數據的存儲,數據類型需要限制為GeoJSON;
2、MongoDB可以為GeoJSON類型數據建立索引,提升空間查詢的效率;
在高負載的情況下,添加更多的節點,可以保證服務器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
2.6 PostGIS、MySQL和MongoDB的比較
總的來說,PostGIS對GIS原生支持的最多;MySQL勝在速度快,體積小但并不是所有功能都免費;MongoDB處理數據快,適用于大數據級別的數據處理,在弱GIS應用中或簡單的LBS應用中有天然的優勢。
3 GIS服務
3.1 GeoServer
GeoServer(http://geoserver.org/)是一個遵守OGC開放標準的開源地圖服務器,它支持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文檔傳輸至客戶端。
具有以下優點:
1) 用 java 語言編寫、標準的 J2EE 框架、基于 servlet和STRUTS 框架、 支持高效的 Spring 框架開發;
2) 兼容 WMS 和 WFS 特性、支持 WFS-T 規范;
3) 高效的數據庫支持 PostGIS、ShapeFile、ArcSDE,Oracle、MySQL 等;
4) 支持上百種投影;
5) 能夠將網絡地圖輸出為 jpeg、gif、png 、SVG、GML、KML等格式;
6)能夠運行在任何基于J2EE/servle框架之上;
7)嵌入MapBuilder支持AJAX的地圖客戶端
8)實現了在線編輯空間數據、生成專題地圖;
9)地圖發布是用XML文件。
10)支持Goodgle Maps;
11)可發布KML數據,可與GoogleEarth影像疊加。
3.2 MapServer
MapServer(https://mapserver.org/) 源自美國太空總署(NASA)資助的美國明尼蘇達大學(University of Minnesota)ForNet項目,最終衍生為一個WebGIS開源軟件,是一個功能強大的跨平臺的網絡地圖服務軟件包, 可以應用于UNIX/Linux, Windows, MacOSX, Solaris等平臺,支持的語言包括 Python,PHP,Perl,Java,Tcl,C# 等。MapServer使用幾個知名的開放源代碼軟件完成數據格式轉換、地圖投影轉換、空間數據庫的大數據量處理等, 而本身專注于地圖繪制、地圖圖形格式、接口環境、兼容OGC互操作規范等方面。
MapServer具有強大的空間數據的網絡發布功能,支持多種數據格式,使得在WebGIS 中整合空間數據和非空間數據變得更加容易。MapServer是基于胖服務器/瘦客戶端模式開發的 WebGIS 平臺。主要是因為處理空間數據的任務主要在服務器端完成,在通過客戶端發送請求的時候,服務器依據客戶端請求,執行相應的操作并返回數據,客戶端將數據處理顯示返回用戶。它的核心模塊主要是通過C語言編寫完成,提供了兩種開發模式,一種是基于CGI的,另一種是MapScript方式; 在服務器端可以使用任一模塊,編寫WebGIS程序。它遵守OGC制定的WMS、WFS、WCS和GML等一系列規范,支持分布式訪問和互操作。MapServer作為WebGIS解決方案是基于對象的,基本配置文件 MapFile 和 MapScript 模塊的API組織都是基于對象的。
MapServer簡介 — MapServer 7.6.4 documentation
MapServer是一個流行的開源項目,其目的是通過Internet顯示動態空間地圖。它的一些主要功能包括:
??? 支持顯示和查詢數百種柵格、矢量和數據庫格式
??? 能夠在各種操作系統(Windows、Linux、Mac OS X等)上運行。
??? 支持流行的腳本和開發環境(PHP、Python、Perl、Ruby、Java、.NET)
??? 飛行中的投射
??? 高質量渲染
??? 完全可自定義的應用程序輸出
??? 許多現成的開源應用程序環境
在最基本的形式中,mapserver是 CGI 在Web服務器上處于非活動狀態的程序。當請求發送到MapServer時,它使用請求URL中傳遞的信息和 Mapfile 創建所請求地圖的圖像。請求還可以返回圖例、比例尺、參考地圖和作為CGI變量傳遞的值的圖像。
3.3 MapProxy
MapProxy(https://mapproxy.org/)是 WMS 網頁地圖服務與切片服務提供者的瑞士軍刀。它對已有地圖服務的數據服務進行緩存、加速和轉換,服務任何支持 OGC 標準的桌面與網頁客戶端。 MapProxy 開發與部署方式靈活,易于同 Apache/Nginx 環境等集成。MapProxy 也能作為一個獨立服務器使用,這是對于新用戶而言最容易的方式。 MapProxy 的默認示例是一個基本的 WMS 切片客戶端,它顯示了配置的各個圖層;不具備改變投影等復雜功能,但足以驗證服務是否正常運行。
3.4 MapServer和GeoServer的總體對比
先看歷史悠久產品成熟的MapServer。Mapserver在國內用戶廣泛,其內核使用C++編寫,基于CGI腳本實現,頁面調用支持PHP、JSP等多種語言,并且對OGC的WMS和WFS規范提供支持。Map文件是Mapserver工程中關鍵的結構配置文件,定義了地圖范圍、數據源、地圖圖層、投影方式以及符號標記等內容。如果在Linux平臺下快速配置MapServer地圖服務器,使用Maptools發布的 FGS(FOSS GIS Suite)套件無疑是最佳方案,套件集成了整套的MapServer、Apache、PHPMapScript以及GDAL庫等眾多內容,并且提供安裝后就可直接瀏覽的地圖DEMO。
再看GeoServer,基于Java和Geotools庫開發的Geoserver功能全面且遵循OGC開放標準,并由同時擁有PostGIS與uDig的Refractions公司提供支持。GeoServer對發布WFS-T和WMS服務提供便捷的支持,并以XML文件描述所有地圖服務,同時即將加入的FROGS(Framework for Open Geospatial Services)項目將著重提供對WPS規范的支持。GeoServer的開發組很活躍,郵件咨詢的問題很快會得到Jody Garnett和組內其他成員的回復。
比較來說,Mapserver對WMS的支持更為高效,而Geoserver則更擅長于結合WFS規范的屬性查詢。當然,對于使用者來說,最主要的區別還是傳統CGI腳本與J2EE在技術上的分歧。但就發展趨勢來看,J2EE的架構明顯要占據優勢,并且Geoserver擁有基于Eclipse RCP平臺的開源客戶端uDig。隨著Geoserver的版本更新,相信其有實力成為今后開源WebGIS解方案的主流選擇。
總的來說,功能上:MapServer弱于GeoServer。效率上:Mapserver對WMS(Web Map service)的支持更為高效,而Geoserver則更擅長于結合WFS(Web Feature service)規范的屬性查詢。
詳細見下表:
4 Web服務
4.1 Apache
Apache(https://www.apache.org/)是目前世界使用排名第一的Web服務器。根據Web服務器調查公司Netcrafe調查, 全Internet有50%以上的Web服務器都在使用Apache。1995 年4月, 最早的Apache(0.6.2 版)由ApacheGroup公布發行。Apache Group是一個完全通過Internet進行運作的非盈利機構,由它來決定ApacheWeb服務器的標準發行版中應該包含哪些內容。準許任何人修改隱錯, 提供新的特征和將它移植到新的平臺上, 以及其他的工作。Apache的特點是簡單、速度快、性能穩定, 可以運行在幾乎所有廣泛使用的計算機平臺上, 并可做代理服務器來使用。Apache是Linux主流的服務器, 為Linux的迅速繁榮立下了汗馬功勞。
4.2 Node.js
Node.js(https://nodejs.org/) 是一個讓JavaScript 運行在服務端的開發平臺,Node.js基于Chrome的V8引擎,V8引擎是Google公司使用C++開發的高性能JavaScript引擎,可以在多種環境下使用。使用V8引擎的Node.js讓作為前端開發語言的Javascript能夠自由運行在服務器環境下。Node.js借助事件驅動,非阻塞I/O 模型變得輕量和高效,非常適合運行在分布式設備的數據密集的實時應用。Node.js 自2009年出現一直備受關注,開發社區龐大、數以萬計的第三方模塊為構建網絡程序提供了很大便捷。
4.3 Tomcat
Tomcat(http://tomcat.apache.org/) 是Apache 軟件基金會( Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache,Sun和其他一些公司及個人一塊開發而成。由于有了Sun 的參與與支持,最新的Servlet 與JSP 規范總是能在Tomcat中得到完美體現,Tomcat 5 支持最新的Servlet 2.4 與JSP2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的青睞并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。Tomcat 是一個輕量級的服務器,運行時占用的系統資源少,安裝和部署方便,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。
5 前端渲染
5.1 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.2 OpenScales
OpenScales是一個基于Flex的優秀前臺地圖框架,可以用來開發各種網絡版、手機版和桌面版地圖程序。OpenScales是開源的、免費的客戶端開發框架,基于LGPL開源協議,它在FlashPlayer中運行,可以在各個瀏覽器中使用,具有很好的跨平臺特性。鑒于主要對Flash的友好支持,故可不放在第一梯隊考慮。
5.3 Leaflet.JS
Leaflet(https://leafletjs.com/) 是一個為構建交互性好、適用于移動設備地圖應用,而開發的現代的、開源的 JavaScript 庫。 它是由 Vladimir Agafonkin 帶領一個專業貢獻者團隊開發,代碼量很小(僅33Kb),但具有開發人員開發在線地圖的大部分功能。 Leaflet設計堅持簡便、高性能和可用性好的哲學思想,在所有主要桌面和移動平臺能高效運作, 在現代瀏覽器上會利用HTML5和CSS3的優勢,同時也支持舊的瀏覽器訪問。它支持插件擴展,有一個友好、易于使用的API文檔和一個簡單的、可讀的源代碼。
Leaflet 強大的開源庫插件涉及地圖應用的各個方面包括地圖服務、數據提供、數據格式、地理編碼、路線和路線搜索、地圖控件和交互等類型的插件共有140多個。這些控件大大擴展了LeafLet 的功能,同時也可以設計開發自定義的控件,具有良好的可擴展性。其中Esri提供面向ArcGIS Services的leaflet的插件,插件支持Esri底圖服務、要素服務、瓦片和動態圖服務。Leaflet API可以調用各種在線的地圖服務天地圖、Google 地圖、高德地圖可以滿足多種服務的需要。系統外觀UI采用BootStrap 響應式結構設計框架對各種尺寸的屏幕進行優化顯示,開發者只需具有基本的CSS基礎就可以設計適合多終端、多平臺的GIS應用。
5.4 Cesium
Cesium(https://cesium.com/cesiumjs/)基于 WebGL 的前端3D JavaScript 類庫。 Cesium在2016年3月份左右推出3D Tiles數據規范,在gltf基礎上提供了LOD能力, 就是Web環境下海量三維模型數據。