互聯(lián)網(wǎng)與GIS 結(jié)合而形成的Web GIS是GIS軟件發(fā)展的必然趨勢(shì)。本書以循序漸進(jìn)的方式,通過(guò)講解OGC制定的相關(guān)開放Web服務(wù)規(guī)范,介紹了Web GIS的原理;詳解了一整套利用開源軟件與開放數(shù)據(jù)開發(fā)Web GIS的方案,包括空間數(shù)據(jù)庫(kù)存儲(chǔ)軟件PostGIS、數(shù)據(jù)處理客戶端軟件QGIS、服務(wù)器端軟件GeoServer,以及瀏覽器頁(yè)面端開發(fā)JavaScript API庫(kù)OpenLayers,并通過(guò)實(shí)踐的方式,一步一步地介紹這些開源軟件的應(yīng)用,以及如何利用OpenLayers在互聯(lián)網(wǎng)上共享地理信息、開發(fā)Web GIS2.0應(yīng)用;最后,本書還介紹了OpenStreetMap等開放數(shù)據(jù)的下載與使用方法。
本書主要讀者對(duì)象為地理信息系統(tǒng)專業(yè)的本科生與碩士研究生,也適用于政府、企業(yè)相關(guān)部門的GIS研究與開發(fā)人員,還適合作為各種GIS培訓(xùn)班的學(xué)習(xí)教材與參考書。
本書以循序漸進(jìn)的方式,通過(guò)講解OGC制定的相關(guān)開放Web服務(wù)規(guī)范,介紹Web GIS的原理;詳解了一整套利用開源軟件與開放數(shù)據(jù)開發(fā)Web GIS的方案,包括空間數(shù)據(jù)庫(kù)存儲(chǔ)軟件PostGIS、數(shù)據(jù)處理客戶端軟件QGIS、服務(wù)器端軟件GeoServer,以及瀏覽器頁(yè)面端開發(fā)JavaScript API庫(kù)OpenLayers , 并通過(guò)實(shí)踐的方式,逐步介紹這些開源軟件的應(yīng)用,以及如何利用OpenLayers在互聯(lián)網(wǎng)上共享地理信息、開發(fā)Web GIS 2.0應(yīng)用;最后,還介紹了OpenStreetMap等開放數(shù)據(jù)的下載與使用方法。
本書主要讀者對(duì)象為地理信息系統(tǒng)專業(yè)的本科生與碩士研究生、政府、企業(yè)相關(guān)部門的GIS研究與開發(fā)人員,另外還適合作為各種GIS培訓(xùn)班的學(xué)習(xí)教材與參考書。
前 言
計(jì)算機(jī)科學(xué)技術(shù)的飛速發(fā)展為GIS(地理信息系統(tǒng))提供了先進(jìn)的工具和手段,使GIS得到了快速發(fā)展,應(yīng)用日益廣泛。進(jìn)入21世紀(jì)后,互聯(lián)網(wǎng)技術(shù)的普及更使GIS的發(fā)展發(fā)生了質(zhì)的變化,互聯(lián)網(wǎng)已成為GIS新的操作平臺(tái)。互聯(lián)網(wǎng)與GIS的結(jié)合即Web GIS,改變了地理信息的獲取、傳輸、發(fā)布、共享和應(yīng)用的方式。在互聯(lián)網(wǎng)發(fā)布地理信息,為用戶提供空間數(shù)據(jù)瀏覽、查詢、專題圖制作與空間分析功能,從而實(shí)現(xiàn)地理信息的操作與共享,已經(jīng)成為GIS發(fā)展的必然趨勢(shì)。
Web GIS概念的首次提出是在1994年,指在互聯(lián)網(wǎng)上部署GIS,旨在解決冗余數(shù)據(jù)、昂貴數(shù)據(jù)的整合以及分布處理能力,將利用新的技術(shù)、市場(chǎng)和決策系統(tǒng)來(lái)開啟我們的世界。Web GIS是一個(gè)分散式的地理信息網(wǎng)絡(luò)服務(wù),可讓地理信息通過(guò)OGC標(biāo)準(zhǔn)和W3C的界面互相溝通存取,憑借良好的互操作性達(dá)到以往需要龐大數(shù)據(jù)量才能實(shí)現(xiàn)的功能,使用者可以隨意使用在Web GIS里的地理空間數(shù)據(jù)。Web GIS可讓各個(gè)符合國(guó)際標(biāo)準(zhǔn)的地理信息數(shù)據(jù)庫(kù)之間通過(guò)API方式溝通,從而保證數(shù)據(jù)不再局限于單一數(shù)據(jù)庫(kù)中,可形成網(wǎng)格數(shù)據(jù)庫(kù)。Web GIS是人類社會(huì)團(tuán)體、組織和民眾協(xié)同合作所建立的信息架構(gòu),擺脫以往GIS只適用于專業(yè)人士的狀況,真正地讓使用者搜索生活中的各種信息。
早期的Web GIS雖然擁有技術(shù)上的先進(jìn)性,但是推廣至一般用戶較為困難,然而由于近幾年Web 2.0 Mapping系統(tǒng)的發(fā)展,出現(xiàn)了嶄新的應(yīng)用,讓以往需要大量數(shù)據(jù)才能實(shí)現(xiàn)的Web應(yīng)用,現(xiàn)在只需要使用Web 2.0網(wǎng)站提供的API即可實(shí)現(xiàn)。Google、Yahoo!、Microsoft等公司紛紛推出屬于自己的地圖API,大大降低了以往開發(fā)電子地圖的門檻,讓許多以Google Map、Bing Map等電子地圖為顯示底圖的應(yīng)用網(wǎng)站如雨后春筍般地發(fā)展。例如,有顯示性侵害犯罪的MapSexOffenders.com、反映芝加哥犯罪的www.chicagocrime.org;結(jié)合照片與影像的Flickr與Panoramio;讓使用者創(chuàng)造屬于自己的地圖,并讓Google Map和其他網(wǎng)頁(yè)結(jié)合的My Map+;也有提供愛好旅游的使用者通過(guò)系統(tǒng)機(jī)制和blog分享旅游經(jīng)驗(yàn),期望建立旅游社群的MyTripBook;提供飛機(jī)航班及時(shí)信息的fboweb.com;結(jié)合天氣信息的Weather Underground;租房信息的housingmaps.com。這些應(yīng)用都顯示了目前電子地圖正受到大家的重視,相信未來(lái)Web GIS 2.0會(huì)更加蓬勃發(fā)展。
構(gòu)建Web GIS 2.0應(yīng)用是一個(gè)系統(tǒng)工程,包含數(shù)據(jù)加工處理、數(shù)據(jù)存儲(chǔ)管理、地圖制作、地圖服務(wù)發(fā)布、專題數(shù)據(jù)發(fā)布、空間分析功能發(fā)布以及系統(tǒng)開發(fā)。在該過(guò)程中,需要使用多個(gè)軟件與工具。這些軟件與工具既有商業(yè)的,同樣也有免費(fèi)與開源的。利用開源軟件構(gòu)建Web GIS 2.0應(yīng)用就是本書介紹的主要內(nèi)容。
第1章在簡(jiǎn)單回顧GIS發(fā)展歷程之后,著重介紹Web GIS的發(fā)展以及Web服務(wù)的重要性,同時(shí)還將介紹自由及開源軟件以及在使用過(guò)程中存在的優(yōu)缺點(diǎn)。最后將介紹客戶端開源軟件QGIS的安裝與基本使用。
第2章介紹Web GIS的系統(tǒng)架構(gòu)與Web地圖的構(gòu)成。此外,還介紹用于創(chuàng)建地理Web服務(wù)的開源軟件GeoServer的安裝與基本應(yīng)用,包括GeoServer的Web管理頁(yè)面及圖層預(yù)覽等。
第3章介紹了在自由及開源軟件領(lǐng)域存儲(chǔ)與處理空間數(shù)據(jù)的多種選擇,列出了空間數(shù)據(jù)常見的開放格式,各種數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)和格式的優(yōu)點(diǎn)。最后以實(shí)踐的方式介紹了如何使用QGIS與GDAL來(lái)處理GIS數(shù)據(jù),以及如何在PostGIS中創(chuàng)建空間數(shù)據(jù)庫(kù)并導(dǎo)入空間數(shù)據(jù)。
第4章著重介紹了開放地理空間聯(lián)盟制定的WMS規(guī)范。雖然WMS并沒有使用最新的技術(shù),卻是一個(gè)被廣泛使用的規(guī)范,是Web GIS的基礎(chǔ)。此外,還介紹了如何結(jié)合QGIS與GeoServer發(fā)布帶高級(jí)符號(hào)的WMS服務(wù)。
第5章介紹了地圖切片的利弊,以及創(chuàng)建與維護(hù)地圖緩存的策略。最后通過(guò)兩個(gè)實(shí)踐演示如何在實(shí)際工作中創(chuàng)建地圖切片。
第6章介紹了當(dāng)前主流的Web地圖API,并著重介紹了OpenLayers的基本使用方法。
第7章介紹了在客戶端負(fù)責(zé)繪制矢量數(shù)據(jù)的方式與方法。這是當(dāng)前Web GIS的專題圖層普遍采用的方式,將所有復(fù)雜的符號(hào)系統(tǒng)和地圖繪制功能轉(zhuǎn)移到客戶端,使服務(wù)器只需要提供原始的矢量數(shù)據(jù)和屬性數(shù)據(jù)。這意味著地圖引擎可以更有效地響應(yīng),從而增強(qiáng)交互性以及提升性能。
第8章介紹了引入主流JavaScript框架,例如Dojo、jQuery等,以便增強(qiáng)Web地圖的用戶體驗(yàn)。此外,還介紹了如何通過(guò)專題制圖,以更豐富的形式展現(xiàn)空間信息。
第9章介紹了WFS及其服務(wù)的發(fā)布、訪問(wèn)與應(yīng)用,并介紹了如何通過(guò)該服務(wù)實(shí)現(xiàn)基于Web的空間數(shù)據(jù)編輯。
第10章介紹了WCS服務(wù)規(guī)范及其在多維數(shù)據(jù)中的應(yīng)用,以及如何利用GeoServer將帶有時(shí)間與高程信息的多維數(shù)據(jù)發(fā)布為WCS服務(wù)。
第11章介紹了WPS及其服務(wù)的發(fā)布、訪問(wèn)與應(yīng)用,并介紹了如何通過(guò)WPS服務(wù)實(shí)現(xiàn)基于Web的等高線生成以及空間數(shù)據(jù)的處理。
第12章介紹了“開放數(shù)據(jù)”的不同含義,并介紹了開放數(shù)據(jù)OpenStreetMap及其多種數(shù)據(jù)下載方法。此外,還介紹了混搭應(yīng)用及其開發(fā)方法。
本書源代碼的下載地址為:http://pan.baidu.com/s/1pKSLvVP。如果下載有問(wèn)題,請(qǐng)電子郵件聯(lián)系booksaga@126.com,郵件主題為“求Web GIS原理與應(yīng)用開發(fā)源代碼”。
本書除了封面署名作者之外,參與本書編寫的人員還有劉增良、韓光瞬、唐大仕、劉小東、賀小飛、李珍貴、陳艷玲、楊海、唐伯旺、黃澤清、李鳳英、仇詩(shī)良和戴海燕等。
由于編者水平、經(jīng)驗(yàn)有限,書中肯定存在一些疏漏和錯(cuò)誤,希望能得到廣大讀者的批評(píng)和指正。
編 者
2016年6月
第1章 Web GIS概述 1
1.1 GIS的發(fā)展 2
1.2 Web GIS及其發(fā)展 3
1.2.1 傳統(tǒng)Web GIS的不足 3
1.2.2 從Web站點(diǎn)發(fā)展為Web服務(wù) 4
1.2.3 從SOAP發(fā)展為REST 5
1.2.4 從三層架構(gòu)發(fā)展為多層架構(gòu) 6
1.2.5 從Web GIS 1.0到2.0 7
1.3 Web服務(wù) 8
1.3.1 Web服務(wù)的重要性 8
1.3.2 REST及REST風(fēng)格的Web服務(wù) 11
1.3.3 查看在線的Web服務(wù) 13
1.3.4 OGC的Web服務(wù)規(guī)范 15
1.4 自由及開源軟件、開放規(guī)范與開放數(shù)據(jù) 16
1.4.1 自由及開源GIS軟件 17
1.4.2 開放規(guī)范的使用 17
1.4.3 開放數(shù)據(jù)的作用 18
1.5 實(shí)踐1:QGIS的安裝與基本使用 19
1.6 習(xí)題 22
第2章 Web服務(wù)與Web GIS的設(shè)計(jì) 23
2.1 Web GIS的系統(tǒng)架構(gòu) 24
2.2 Web地圖的組成 26
2.2.1 基礎(chǔ)底圖 27
2.2.2 專題圖層 28
2.2.3 交互小組件 29
2.3 實(shí)踐2:GeoServer的安裝與初步使用 29
2.4 習(xí)題 33
第3章 空間數(shù)據(jù)的存儲(chǔ)與處理 34
3.1 空間數(shù)據(jù)常用的開放格式 35
3.1.1 基于文件的數(shù)據(jù) 35
3.1.2 基于空間數(shù)據(jù)庫(kù)的數(shù)據(jù) 38
3.2 Web GIS中的數(shù)據(jù)層 39
3.2.1 服務(wù)器的選擇 39
3.2.2 文件與數(shù)據(jù)庫(kù)方式的選擇 40
3.2.3 開放數(shù)據(jù)格式與專有格式的選擇 40
3.3 處理空間數(shù)據(jù)的開源工具 40
3.3.1 QGIS 41
3.3.2 GDAL與OGR工具 42
3.4 實(shí)踐3:使用QGIS裁剪與投影變換矢量數(shù)據(jù) 43
3.4.1 使用QGIS裁剪數(shù)據(jù)并轉(zhuǎn)換投影 43
3.4.2 使用OGR命令行工具裁剪與投影變換數(shù)據(jù) 45
3.4.3 在批處理中運(yùn)行OGR功能 47
3.4.4 數(shù)據(jù)整合 48
3.5 實(shí)踐4:使用QGIS處理柵格數(shù)據(jù) 48
3.6 實(shí)踐5:PostGIS的安裝與初步使用 52
3.6.1 安裝PostGIS 52
3.6.2 創(chuàng)建空間數(shù)據(jù)庫(kù) 53
3.6.3 導(dǎo)入空間數(shù)據(jù) 54
3.7 習(xí)題 57
第4章 使用WMS在服務(wù)器端繪制與查詢地圖 58
4.1 動(dòng)態(tài)繪制地圖服務(wù) 59
4.1.1 動(dòng)態(tài)繪制地圖的優(yōu)點(diǎn) 59
4.1.2 動(dòng)態(tài)繪制地圖的缺點(diǎn) 59
4.1.3 動(dòng)態(tài)繪制地圖的相關(guān)服務(wù)器軟件 60
4.2 WMS規(guī)范基礎(chǔ) 60
4.2.1 使用GetCapabilities操作請(qǐng)求服務(wù)元數(shù)據(jù) 61
4.2.2 使用GetMap操作請(qǐng)求地圖 64
4.2.3 使用GetFeatureInfo操作請(qǐng)求地圖要素信息 65
4.3 WMS的樣式與符號(hào) 67
4.3.1 使用GetStyles操作請(qǐng)求樣式 67
4.3.2 使用GetLegendGraphic操作請(qǐng)求圖例 68
4.4 實(shí)踐6:使用GeoServer發(fā)布WMS服務(wù) 69
4.4.1 使用默認(rèn)樣式發(fā)布一個(gè)圖層 69
4.4.2 使用樣式化圖層描述符 72
4.4.3 在QGIS中訪問(wèn)WMS 77
4.5 實(shí)踐7:高級(jí)符號(hào)與圖層組 78
4.5.1 使用QGIS創(chuàng)建樣式化圖層描述符 78
4.5.2 將多圖層發(fā)布為WMS服務(wù) 80
4.6 習(xí)題 82
第5章 切片地圖 83
5.1 為什么使用切片地圖 84
5.2 何時(shí)使用地圖切片 86
5.2.1 是否有滿足需求的切片地圖 86
5.2.2 投影 87
5.2.3 比例尺 88
5.3 創(chuàng)建與提供切片地圖服務(wù)的策略 89
5.3.1 創(chuàng)建切片地圖的策略 90
5.3.2 使用開源軟件創(chuàng)建切片 90
5.4 實(shí)踐8:使用GeoWebCache創(chuàng)建切片 91
5.5 實(shí)踐9:使用TileMill創(chuàng)建切片 93
5.5.1 使用TileMill設(shè)計(jì)地圖 93
5.5.2 輸出與提取地圖切片 99
5.5.3 發(fā)布與測(cè)試切片 102
5.6 習(xí)題 104
第6章 使用Web地圖API訪問(wèn)地圖服務(wù) 105
6.1 Web地圖API 106
6.1.1 Web地圖API的選擇 106
6.1.2 主要FOSS類型的Web地圖API 107
6.1.3 主要的商業(yè)Web地圖API 108
6.2 使用Web地圖API的基本步驟 110
6.2.1 引用JavaScript與樣式文件 110
6.2.2 地圖div與對(duì)象 111
6.2.3 Layer對(duì)象 111
6.2.4 圖層樣式化機(jī)制 112
6.2.5 事件與交互元素 113
6.3 查看OpenLayers實(shí)例 115
6.3.1 切片地圖實(shí)例 115
6.3.2 WMS實(shí)例 116
6.3.3 查詢實(shí)例 116
6.4 實(shí)踐10:使用OpenLayers實(shí)現(xiàn)在切片地圖上疊加WMS 119
6.4.1 發(fā)布專題數(shù)據(jù)WMS服務(wù) 120
6.4.2 準(zhǔn)備開發(fā)環(huán)境 121
6.4.3 頁(yè)面設(shè)計(jì)與代碼編寫 122
6.5 習(xí)題 127
第7章 在客戶端繪制矢量數(shù)據(jù) 128
7.1 在客戶端繪制矢量數(shù)據(jù)的優(yōu)勢(shì)與挑戰(zhàn) 129
7.1.1 客戶端繪制矢量數(shù)據(jù)的優(yōu)勢(shì) 129
7.1.2 客戶端繪制矢量數(shù)據(jù)的挑戰(zhàn) 130
7.1.3 客戶端如何繪制矢量數(shù)據(jù) 130
7.1.4 從服務(wù)器獲取數(shù)據(jù)的方法 130
7.2 使用KML矢量數(shù)據(jù) 131
7.2.1 KML簡(jiǎn)介 131
7.2.2 在OpenLayers中使用KML 132
7.3 使用GeoJSON 133
7.3.1 GeoJSON簡(jiǎn)介 133
7.3.2 在OpenLayers中使用GeoJSON 134
7.4 在OpenLayers中符號(hào)化矢量圖層 135
7.5 實(shí)踐11:在OpenLayers使用GeoJSON圖層 137
7.6 實(shí)踐12:訪問(wèn)用戶KML數(shù)據(jù) 142
7.6.1 頁(yè)面設(shè)計(jì) 142
7.6.2 功能實(shí)現(xiàn) 143
7.7 習(xí)題 148
第8章 主流JavaScript框架的使用與專題制圖 149
8.1 主流JavaScript框架 150
8.1.1 jQuery 150
8.1.2 Mootools 151
8.1.3 Ext JS 151
8.1.4 Dojo 152
8.2 OpenLayers的控件 154
8.3 基于屬性值符號(hào)化圖層 156
8.3.1 在OpenLayers中讀取屬性值 157
8.3.2 獨(dú)立值專題圖 158
8.3.3 等級(jí)符號(hào)專題圖 159
8.3.4 范圍專題圖 160
8.3.5 根據(jù)屬性限制要素的顯示 163
8.4 實(shí)踐13:使用OpenLayers與Dojo進(jìn)行專題制圖 165
8.4.1 頁(yè)面布局 165
8.4.2 代碼設(shè)計(jì) 168
8.5 習(xí)題 174
第9章 Web要素服務(wù) 176
9.1 WFS 177
9.1.1 WFS請(qǐng)求與響應(yīng)的格式 177
9.1.2 WFS服務(wù)器與客戶端 179
9.2 事務(wù)性WFS與基于Web的數(shù)據(jù)編輯 180
9.3 實(shí)踐14:基于Web的空間數(shù)據(jù)編輯功能實(shí)現(xiàn) 181
9.3.1 發(fā)布服務(wù) 181
9.3.2 基于Web編輯功能開發(fā) 182
9.4 習(xí)題 190
第10章 WCS及多維數(shù)據(jù) 191
10.1 WCS及其操作 192
10.1.1 GetCapabilities操作 192
10.1.2 DescribeCoverage操作 193
10.1.3 GetCoverage操作 194
10.2 多維數(shù)據(jù)與圖像鑲嵌插件 195
10.2.1 多維數(shù)據(jù) 195
10.2.2 圖像鑲嵌插件 198
10.3 實(shí)踐15:多維數(shù)據(jù)WCS的發(fā)布 198
10.3.1 發(fā)布時(shí)間序列柵格數(shù)據(jù) 198
10.3.2 發(fā)布時(shí)間序列與高程序列柵格數(shù)據(jù) 204
10.4 實(shí)踐16:在OpenLayers中訪問(wèn)WCS 207
10.4.1 頁(yè)面設(shè)計(jì) 207
10.4.2 代碼設(shè)計(jì) 208
10.5 習(xí)題 211
第11章 Web處理服務(wù) 212
11.1 GeoServer中的WPS 213
11.1.1 WPS擴(kuò)展的安裝 213
11.1.2 GeoServer中WPS包含的類型 214
11.2 WPS的操作 215
11.2.1 GetCapabilities操作 215
11.2.2 DescribeProcess操作 216
11.2.3 Execute操作 217
11.3 實(shí)踐17:使用WPS創(chuàng)建等高線地圖 219
11.3.1 創(chuàng)建靜態(tài)等高線地圖 219
11.3.2 動(dòng)態(tài)創(chuàng)建等高線 223
11.4 實(shí)踐18:在OpenLayers中使用WPS 229
11.4.1 頁(yè)面設(shè)計(jì) 230
11.4.2 代碼實(shí)現(xiàn) 230
11.5 習(xí)題 233
第12章 開放數(shù)據(jù)獲取與地圖混搭應(yīng)用 236
12.1 開放數(shù)據(jù)的方式 237
12.1.1 開放數(shù)據(jù)許可 237
12.1.2 商業(yè)軟件與開放數(shù)據(jù) 238
12.2 VGI與眾包項(xiàng)目 239
12.2.1 VGI 239
12.2.2 眾包 240
12.3 OpenStreetMap及其開放數(shù)據(jù)的應(yīng)用 240
12.3.1 OpenStreetMap數(shù)據(jù)模式 241
12.3.2 OpenStreetMap的使用 243
12.4 地圖混搭應(yīng)用 245
12.4.1 混搭應(yīng)用的概念 245
12.4.2 網(wǎng)絡(luò)資源 245
12.5 實(shí)踐19:從OpenStreetMap獲取源數(shù)據(jù) 249
12.5.1 使用QGIS下載數(shù)據(jù) 250
12.5.2 使用OpenStreetMap查詢API下載數(shù)據(jù) 253
12.6 實(shí)踐20:城市天氣預(yù)報(bào)系統(tǒng)開發(fā) 256
12.6.1 服務(wù)準(zhǔn)備與頁(yè)面設(shè)計(jì) 256
12.6.2 代碼實(shí)現(xiàn) 256
12.7 習(xí)題 261