1. 程式人生 > >GIS歷史概述與WebGis應用開發技術淺解

GIS歷史概述與WebGis應用開發技術淺解

宣告:本篇在李曉暉的《雜談WebGIS》,補充更多的資料說明。基於地圖二次開發一直斷斷續續在做,這裡算是補充一下基本功把。其實對於前端,WebGis開發都是api,抄demo,改。GIS深入似大海,雜魚湯來一碗

GIS是什麼?

GIS(Geographic Information System),它是在計算機硬、軟體系統支援下,對整個或部分地球表層(包括大氣層)空間中的有關地理分佈資料進行採集、儲存、管理、運算、分析、顯示和描述的技術系統。

因為它可以對空間資訊進行分析和處理(簡而言之,是對地球上存在的現象和發生的事件進行成圖和分析)。 GIS 技術把地圖這種獨特的視覺化效果和地理分析功能與一般的資料庫操作(例如查詢和統計分析等)整合在一起。

結合地理學與地圖學以及遙感和電腦科學,已經廣泛的應用在不同的領域,主要用於輸入、儲存、查詢、分析和顯示地理資料。

什麼是GIS學科

談GIS,得先回顧地理科學的發展

地圖繪製的發展歷史與地圖功能的演變史

人類使用地圖的歷史大約有3000年。地圖是早期人類探索世界時發明的一種工具。推薦閱讀 西蒙·加菲爾德的《地圖之上:追溯世界的原貌》

現存最古老的地圖,是古巴比倫的世界地圖,約公元前700年~公元前500年間在美索不達米亞製成,刻在一塊泥板上。地圖把古巴比倫描繪成圓環形狀,處在地圖中心位置,國土被幼發拉底河一分為二,外圍被海洋環繞。地圖的真正作用,不是用來導航出行,而是讓地圖持有者(帝國皇帝)認識整個世界,當然前提是以自己為中心。這是地圖最原始的作用。

古羅馬製作了一幅高約0.3米,寬達數米長,可以捲起來的大地圖。羅馬帝國廣袤的疆域就畫在這幅卷軸上,顯然它不適合出行攜帶,作用只是彰顯帝國領地的一種藝術表現形式。那時地圖的作用也基本如此。

公元2世紀,古羅馬帝國天文學家托勒密,也是占星家,為了製作星相占卜圖,把羅馬帝國許多城鎮的位置進行了精確標註(出生地位置是星相占卜的一大因素)。托勒密收集了大量檔案、故事等各種資訊,並設計一套經緯線系統,覆蓋了西歐、亞洲、北非等各地。他還設計了使大地的三維球面投影在二維平面上的方法(當時人們已相信大地是球形的),並稱之為“地理”。由此托勒密開創了人類史上兩個第一:第一份具備實際導航意義的地圖,第一次涉及到了新的地理學科。然而它曇花一現,西羅馬帝國滅亡後,托勒密地圖隨即消失。

公元4世紀開始,基督教得到合法地位,並向歐洲各地傳播,基督教的特色也隨之附著在地圖上。地圖重在彰顯基督福音在世上的傳播。當時人們認為東方是神聖的方向,因為上帝最初創造的伊甸園位於東方。地圖頂端就朝向東方,還配了幾幅圖畫,即亞當夏娃被逐出伊甸園,及世界末日基督再臨。設計地圖,根本不是為了人在地上出行找路,而是為了引導人進入天國。

真正幫助人出行的地圖,直到文藝復興才發展起來。商業貿易迅速發展,尤其是遠洋貿易,特別需要地圖指導。人們重新挖掘古代遺產,找到了托勒密的地圖和製圖法。再加上科技進步以及羅盤使用,人們又重新繪製了新地圖,這就是“波多蘭航海圖”。它是大航海時代的產物,上面都是大海和港口,海面上航道密佈,縱橫交錯,連線各個港口城市。

16世紀德國製圖學家墨卡託發明了一種新的製圖法,開創了墨卡託投影法。我們現在所用的世界地圖,就是以這種方法設計的。為了能在平面地圖上完整顯現三維球體表面,墨卡託把北方和南方遠處的陸地、海洋麵積逐步擴大,投射下來。這種設計第一次把全球繪製在一張地圖上。

雖然其有如下缺點:它輕微地扭曲了人們對世界的看法。靠近北極的國家,其國土面積被人為擴大,如加拿大和俄羅斯,而赤道地區則人為地縮小了,如非洲。但是它既對航海幫助很大,也對國王們爭奪殖民地“幫助不小”——宣示主權

數學推理和測量技術大幅進步,世界地圖越來越精確,地方的區域性地圖也是如此,至此,地圖的發展也就是查漏補缺,精度提高。地圖的主要用途便是給人們的行軍、航海等做嚮導,而這同樣也是現代GIS學科裡GIS最基本的功能之一。

GIS的發展

19世紀時,現代GIS學科開始慢慢萌芽。這裡有一個很有名的例子。1854年倫敦發生霍亂,10天就死了500人。居民大多懷疑瘟疫是由於地下的墓穴引起的,引起了極大的社會恐慌。當時有個有名的醫生叫Snow博士,他不信這個原因,為了查出真正的霍亂源頭,他首先繪出了倫敦地圖,然後將所有霍亂病人的所在地標出來,然後他發現了一個有趣的現象,在倫敦的一個居民飲水井附近出現的霍亂病人最多,並且最開始出現的霍亂病人也是在那裡發現的。最後Snow博士對那口井進行檢查,確定了霍亂髮生的源頭。從這個例子中我們可以看出,地圖的應用已經不再侷限於導航了,而開始慢慢利用其得天獨厚的時間空間優勢與其他學科開始進行結合。

到了20世紀電腦的出現,人造衛星的昇天等技術的突破,GIS這個學科也相應的開始走向成熟以及開始普及。20世紀60年代,加拿大科學家首先提出了GIS這個學科。到了20世紀末,一大批優秀的GIS軟體已經出現,比如Esri公司的ArcGIS系列,MapInfo公司的MapInfo。國內的GIS從上世紀80年代才開始起步,不過到上世紀末時,也出現了自己的GIS公司,比較有名的有GeoStar、MapGIS等。

而此時的GIS已不再是侷限紙上的地圖了,它已經成為了一個計算機技術和多種學科相交叉的新型學科了。它涉及到測量學——地理資訊的採集和地圖的製作等,電腦科學——電子地圖的製作和展現以及各種GIS功能的實現,物理學——對感測器的研究以及光譜和影像的研究,氣象學——大氣層等對衛星影像的影響等,生物學、醫學、犯罪學等——研究地理等各時間空間因素對這些學科的影響。

所以GIS是什麼呢?說的最通熟易懂的就是,GIS是利用測繪生成紙製地圖或者航拍以及衛星等生成影像後,將這些資料儲存在計算機中,以地圖或圖片的形式表現出來,然後根據實際生產生活以及科研中的各種需求,進而提供具體的經過處理後的資料。

什麼是WebGIS

WebGIS就是展現於網路上的GIS。在上世紀八十年開始,出現的大量GIS軟體,基本上都是C/S架構的,也就是首先需要在本機上裝有專業的GIS軟體,然後使用者根據需求使用這些GIS軟體。當然這種桌面端的GIS軟體有其天然的優勢,比如開發相對簡單,不需要Internet支援,以及可以做更多的複雜功能、響應相對迅速等優勢。但是同時,其缺點更是不容忽視。首當其衝的便是不便於推廣,而不便於推廣的原因在於C/S系統其本身的天然的劣勢:不便於更新,不便於跨平臺,不便於使用者在不安裝指定客戶端的情況下使用。

從本世紀開始,internet進入了爆發式增長階段,網路的鋪設以及網速的提升都有了大幅度增加,這為WebGIS的發展提供了堅實的大環境。於是,基於B/S的GIS系統越來越多的開始提供服務,並且在RIA(富客戶端)技術、AJAX(動態網頁)技術的湧現和成熟,WebGIS也基本能展現出與C/S一樣的效果和功能。而WebGIS的大發展,更是使用者的需求,google地圖和百度地圖等服務提供商的大規模擴張便是最好的證明。

什麼是WebGIS,就是將GIS這門學科所能提供的功能,以B/S技術展現給使用者,使使用者只需要在瀏覽器上便能使用這些GIS功能的一個應用方向。

對國內WebGIS行業的理解

目前使用WebGIS技術的公司可以大致分為兩個方向:一個是網際網路方向,一個是行業應用方向。

國內的網際網路方向裡基本可以說已經被百度地圖,搜搜地圖,高德地圖,三個巨頭壟斷。所以對於想從事網際網路方向的WebGIS開發人員,其實可以選擇的大公司並不多。但是,如果你是一個技術足夠好,且技術不侷限於一般的關係資料庫,對大資料和分散式系統感興趣的WebGIS開發人員,強烈建議你去這些網際網路公司,在那裡你能接觸到最新的IT技術以及感受到強大的頭腦風暴。也便是,對新技術,對前沿方向有更多追求的人,去網際網路公司是很好的選擇。

但是我們不得不承認另外一個現實,這些網際網路公司基本集中在北上廣深,並且對GIS研發人員在技術上的需求是,計算機技術的比重要遠大於對GIS學科本身的理論所佔的比重。於是,更多的GIS學科出身的人,最後選擇的是行業應用公司。而投身於這樣的公司,就沒有前途嗎?答案是否定的。

Esri公司作為全球最成功的GIS軟體公司,很好的給出了這個答案。目前Esri的AO庫號稱世界上第二大的庫,除了微軟的Framework,就是它了。它同時也是一個年盈利在8億美元的公司。Esri公司與美國和加拿大政府的合作堪稱行業公司的典範,它為這兩個國家的數字化城市的建設立下了汗馬功勞,做出了很多優秀的作品。說這個例子,只是為了表明,在我們的數字化城市的需求越來越深入,政府的需求越來越實際,整個國家的市場建設越來越合理以及公平公正透明,WebGIS在行業上的應用也將越來越廣泛,並且越來越能夠服務政府、企業和人民,並且更能做出有真實價值的產品。並且,從事行業應用的研發人員,隨著對所從事行業理解的深入,這些理解給未來所帶來的收穫可能比技術單純的提高所帶來的收穫要大得多。要知道,專案需求分析靠的基本是行業理解,當然,對技術的瞭解也給專案可行性分析提供了保障。兩者相輔相成。

每個人追求不一樣,根據自己的需求,根據自己的現狀,做出選擇,堅持下去,不說夢想是否能實現,起碼你不會是一個自己都認為自己活該如此平庸的人。

WebGIS的框架

前面說了太多的非技術類的話,這裡我們開始提一個技術類話題——WebGIS的框架。其實WebGIS的框架跟其他Web專案的框架沒有很多本質上的區別。可能唯一的不同是WebGIS需要提供一些地圖方面的功能服務。這裡我先把這個框架給出,同時每個層面需要的技術我也在其中大致畫出。

                                    

目前很多公司都提供了自己的二次開發包,在前端的有OpenLayers、AGS API for JS、maptalks。在後臺的也有geoTools、AO等。用這些開發包,我們可以很快的實現出圖以及很多GIS功能,基本上不用寫太多的編碼。玩會一種開源的maptalk,ol,mapbox即可。比如ArcGIS Web APIs,SuperMap iClient 等,表示:玩不起!請招或者外包GIS人員來搞

但是,由於封裝的太好,很多WebGIS的原理我們也便忽略而不做了解了。

WebGis前端

首推Open GIS,WebGIS所提出的這些要求正是Open GIS聯盟(OGC)所成立的目的

開源的maptalk,ol,mapbox

地圖方面: Mapbox、ArcGIS、OpenLayers、cesiums、百度地圖BMap、高德地圖AMap、Google Map 等;

整合包有:OpenLayers、AGS API for JS、maptalks  leaflet

Echarts 地圖視覺化,

https://echarts.baidu.com/option.html#geo  

https://echarts.baidu.com/option.html#series-map

可以看看我之前寫的:《echarts向量地圖自定義圖示資料展示—echarts地圖圖表三種方案 》

WEBGIS前端自動生成工具 QGIS,試了一下,我是放棄了。

WebGIS開發API選擇

主流的開發API有:ArcGIS API、SuperMap API 、OpenLayer、LeafLet、百度API、天地圖API等。谷歌和必應的相對用的較少。

GIS開發人員肯定知道地圖伺服器這個東西。API使用是免費的,但是地圖伺服器並不免費,畢竟結合相應的地圖伺服器才能發揮API的功效。國內主要是用ArcGIS Server和SuperMap iServer兩個地圖伺服器,另外還有GeoServer的開源地圖伺服器。

  • ArcGIS API:適合大型的專案開發,ESRI作為最完善的GIS服務商,其API提供的功能也最為強大,支援的資料型別也多,能夠很好地解決資料異構,座標轉換等問題,並提供二三維一體化的服務解決方案,版本的更新迭代也很快,API能夠對相容老版本的功能,實現的GIS功能也更為全面。API分為3.x版本開發2維應用,4.x開發三維版本。但是,其地圖伺服器採購價格接近30w,對於中小專案來說成本也是比較大的。

  • SuperMap API:國內公司,也被譽為國內業內第一的公司,也提供了一整套的資料解決方案,並且更符合國情,一些功能模組主要是面向國內使用者的,三維GIS能夠直接利用傾斜攝影的資料。這個API適合開發大中型專案,實現的功能當然沒有ARCGIS的完善,但對於基本的和稍微複雜的GIS功能來說已經足夠了。(特別不喜歡他的類參考,感覺很雜,三維)。地圖伺服器採購價也差不多是30w,但提供服務就不如ArcGIS的了。

  • OpenLayer 開源地圖伺服器,屬於開源專案,這個主要是能節省成本,適合中小型專案,提供的功能也比較強,常常與其他軟體結合使用(OpenLayer+GeoServer+uDig),提供地圖服務。但是有問題就需要自己解決了,畢竟沒有專門的技術支援人員。感覺更偏向弱或稍強的GIS專案,能夠提供基本的資料服務。

  • LeafLet 主要是移動端的API,輕量級的,提供的功能服務就很弱了,更偏向於資訊展示,在資料展示方面這個API的展示效果是很不錯的,也不需要專業的能力,適應性更好。

  • 百度API、天地圖API:這一類的API功能比較單一,只能使用線上地圖伺服器,可以說是同質化的產品。更適合開發專案中的GIS模組,而不適合開發GIS專案,另外說下,百度的不支援OGC協議(很憎恨這個),如果要使用對平臺的地圖服務,不建議使用百度的API,百度的更偏向於消費的商業市場,所以,鄉鎮資料很少,主要集中於城市資料。天地圖的是由國家推動的,提供的服務某方面不如百度,但支援OGC協議。

總結來說,大專案選擇ArcGIS 或SuperMap,大中型的選擇SuperMap或者OpenLayer,小專案就使用maptalks。GIS模組的話可以考慮百度、天地圖、leaflet、高德等,沒有定數。另外,三維的專案需求也比較多了,特別是二三維一體化的專案,還有個Cesuim、three.js這個用得比較多。以後肯定是毋庸置疑往三維上發展的。

webgl開源三維引擎的選擇

小場景的開源三維js引擎

1.babylonjs:http://www.babylonjs.com/(當前在用)

    優點:有微軟背景,有不少的demo,有較詳細的api文件,有供測試的平臺,有提供3dsmax轉換模型的外掛,

    缺點:中文資料很少,沒有系統的中文教程,如從入門到精通都可以給你講一遍系統的教程,論壇也會被牆,相關的qq群較少,群裡的人也不多,所以能真正指導我們的大牛也比較少。應該是國內用的 比較少。

2.threejs(當初選擇引擎時關注過,選擇了babylonjs後就沒有去進步瞭解了)

    優點:國內用的比較多,所以中文的資料也會比較多,有比較系統的中文教程如從入門到精通。用的人比較多,所以相關的qq群較多,群裡的人也較多,接觸到的大牛應該也會比較多。

    缺點:沒有提供一些基礎建模軟體的外掛,比如3dsmax的模型匯出外掛,雖然說提供一些讀3ds格式,fbx格式的場景。

大場景基於earth的開源三維js引擎

1.cesiumjs(http://cesiumjs.org/)

優點:有較多的demo,詳細的api文件,有測試平臺,比較豐富的展示特性和擴充套件。

2.webglearth(http://www.webglearth.com/)

demo較少,但一些基本的gis功能都有,簡單實用,好像沒什麼更新過

3.openwebglobe(http://world.openwebglobe.org/)

效果不是很好,載入不流暢,展示的功能也比較少,後面就沒有進步瞭解了

 

WebGis後端

arcgisServer、geoserver、mapserver ……

WebGis中介軟體

開發時,我們要選擇適合自己的中介軟體。不同的中介軟體有其特性,如果是一般專案,tomcat等是很合適的,其使用方便,相關技術支援和資料也很好查詢。但是如果是大型的叢集專案,Weblogic和WebShpere可能是更好的選擇,但是這兩個中介軟體首先配置就是有難度的,同時不同的版本,可能對某些jar包的支援存在問題。如果專案必須使用國產的中介軟體,TongWeb和Apusics是不錯的選擇。

WebGis地圖伺服器

在WebGIS中,與其他一般的Web工程有明顯區別的就體現在地圖伺服器上面。一般的地圖伺服器都由已有的軟體商提供瞭解決方案,比較流行的有AGS、Geoserver、MapServer、SuperServer等。利用這些地圖伺服器我們能很好的實現地圖的釋出以及對一些空間查詢和空間操作的支援。

WebGis業務伺服器

業務伺服器是Web專案裡不可獲取的一環。不管是利用哪些已有框架編寫,比如Spring、Struts、Hibernate等,我們一般還是會將業務伺服器的實現分為三個層次,即有名的MVC模式。而不同的框架裡這三個層次的實現各有差別。

WebGis資料

WebGIS的資料大致可以分為三種,一種是地圖、影像資料,一種是空間屬性資料、一種是業務資料。地圖、影像資料一般是一些png或者其他格式的資料組成。

在GIS中有個很重要的概念,即影像金字塔。這個概念主要是為了加速地圖在前端的顯示。而我們準備地圖、影像資料時,也一般會首先對這些資料進行切圖。

空間屬性資料,是通過一些工具將已經整理好的資料進行入庫。對於AGS,只有連線的是入庫資料的mxd,才能釋出成FeatureServer服務,以供資料的編輯。當然,空間資料入庫後還可以支援業務邏輯的使用。

第三種資料,業務邏輯資料,是每個Web專案必須有的,它根據不同的業務需求將業務所需的資料進行採集和入庫。

最後,《webgis開發資源整理》,對一些開發資料整理彙總。

原文連結:GIS歷史概述與WebGis應用開發技術淺解 - maptalks填坑筆記 - 周陸軍的個人網站

參考文章:

令德國人崇敬的地圖學家——墨卡託 http://www.sohu.com/a/254951691_329538

雜談WebGIS https://www.cnblogs.com/naaoveGIS/p/3887141.html

WebGIS開發進階練手題(二) https://zhuanlan.zhihu.com/p/22424372

關於WebGIS開發API選擇的問題 https://blog.csdn.net/LYQHZ/article/details/80720279

&n