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