日韩偷拍一区二区,国产香蕉久久精品综合网,亚洲激情五月婷婷,欧美日韩国产不卡

在線客服
Web GIS原理與應用開發圖書
人氣:31

Web GIS原理與應用開發

本書擁有一整套利用開源軟件與開放數據開發Web GIS

內容簡介

互聯網與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專業博士,德國波恩大學波恩-亞琛信息技術國際中心訪問學者,現任職于北京市測繪設計研究院。近期出版了《ArcGIS Server JavaScript API開發GeoWeb 2.0應用》、《Web GIS開發:ArcGIS Server與.NET》、《Visual C .NET應用教程》、《地理信息系統實習教程》、《地理信息系統二次開發教程——組件篇》與《地理信息系統二次開發教程——語言篇》等。主持的工程有北京市房屋全生命周期管理平臺、北京市交通專用地理信息系統、北京市勘察設計與測繪管理信息系統等。

目錄

第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:使用GeoServerWMS服務 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

在線預覽

第5章

切片地圖

從本章可以學習到:

v 為什么使用切片地圖

v 何時使用地圖切片

v 創建與提供切片地圖服務的策略

v 使用GeoWebCache創建切片

v 使用TileMill創建切片

如果要提高Web地圖的訪問速度,使用地圖切片是非常有效的方法。地圖切片就是在多個比例尺下配置地圖,然后提前把每個比例尺下的地圖繪制為小塊圖片,保存在服務器上名為緩存的目錄中。這樣客戶端在訪問地圖時,可以直接獲取需要的小塊圖片拼接成整幅地圖,而不是由服務器動態創建出一幅圖片再送到客戶端,從而極大提高了訪問速度。

本章將介紹地圖切片的利弊,以及創建與維護地圖緩存的策略。并通過兩個實踐演示如何在實際工作中創建地圖切片。及時個實踐演示如何使用GeoServer的GeoWebCache軟件來創建一個簡單的緩存地圖。在第二個實踐中,介紹使用TileMill和CartoCSS標記語言創建比GeoServer更好的地圖切片。

5.1 為什么使用切片地圖

正如在前面內容中所介紹的,最初的Web地圖,無論在地圖中包含了多少個圖層,也無論有多少訪問請求,通常都是由服務器動態繪制。這也就是第4章介紹的使用GeoServer與WMS的方式。但是正如大家注意到的,這類地圖中符號、標注與注記的選擇非常有限而且難以應用。事實上,多年來為了避免妨礙性能,Web制圖者不得不使用最少的圖層與簡單符號來構造地圖。許多情況下,在開發Web GIS應用時,甚至不需要專業制圖人員的參與,而是由服務器管理員通過XML文件來定義圖層順序和符號大小等。這種情況在開放Web服務規范(如WMS)與商業Web服務(如ESRI的ArcIMS)中都存在。

造成使用這種方法的部分原因是為了使Web GIS應用程序看起來就像桌面系統。有時,這些應用被稱為“瑞士軍刀應用程序”,因為它們試圖使用Web GIS來解決一切問題。人們希望在Web GIS中也能隨意切換圖層的可見性、重新排序圖層、動態更改圖層符號,以及其他所有桌面GIS應用程序能做的一切。諷刺的是,當這種心態盛行的時候,網絡技術還遠遠滿足不了這類需求。

在2005年前后,隨著谷歌地圖、微軟虛擬地球(現在稱為Bing地圖)以及其他流行的Web GIS應用的出現,人們開始意識到,也許他們并不需要管理每一個圖層所有屬性的功能。這些互聯網巨頭已經開始將矢量圖層融合為一張柵格化的圖像,這些圖像被切分為256像素×256像素的圖片及切片。這些圖片預先生成并存儲在磁盤上,以便快速分發到客戶端。這樣做可以同時支持成千上萬個并發請求,而這對于動態地圖繪制而言基本是不可能的。

正如圖5.1顯示的,切片地圖采用的是金字塔模型,是一種多分辨率層次模型,從切片金字塔的底層到頂層,比例尺越來越小,分辨率越來越低,但表示的地理范圍不變。切片地圖通常都帶有一個級別、行與列編號方案,以便將來自多個切片地圖服務的切片放置到正確的位置。

圖5.1 切片地圖包含的內容

有了切片地圖,制圖人員再也不用擔心性能問題了,他們可以使用他們所掌握的所有工具,來制作一張美觀Web地圖。一旦創建了地圖切片,這些切片就保存到了服務器上的某個文件夾中,服務器檢索美觀地圖圖片與丑的圖片的速度是一樣的。正由于Web服務器可以快速分發切片地圖圖像,因此我們可以使用AJAX(Asynchronous JavaScript and XML,異步JavaScript和XML)編程技術來從服務器獲取圖片,這樣當用戶漫游時不會出現頁面閃爍的現象。

這種變化是革命性的。一類是具有圖層排序與調整符號顏色等功能,但響應非常遲緩的丑陋的地圖應用;一類是沒有圖層控制,但具有驚人美觀并且快速響應的地圖應用。對于這兩類Web GIS應用的選擇,雖然對于一些GIS長期愛好者可能還需要停下來比較一下,但對于普通互聯網用戶來說根本不用思索,他們無疑會選擇后者。

在谷歌地圖了一兩年以后,商業GIS軟件開始提供創建地圖切片的功能。由于可以使用成熟的地圖制作工具ArcMap,很多人選擇使用ArcGIS Server來空間信息Web服務,但是其價格不菲。我國的超圖SuperMap iServer是另一種商業選擇。免費和開源Mapnik庫也可以創建地圖切片,但是直到最近幾年才提供了將Mapnik封裝的用戶友好的應用程序(即TileMill)。

如果一個Web GIS應用有成千上萬用戶并發訪問,那么切片地圖是一個合理的解決方案。然而,切片地圖不提供改變圖層順序與符號的功能。人們開始研究其他改進方案,將通用的基礎底圖圖層為切片,在其上疊加另外的包含專題信息的圖層。通用底圖切片可以用于許多應用。如果專題圖層的變化不頻繁,或者覆蓋區域非常大,則也可以使用切片方式。例如,如果使用Firebug等開發者工具來深入檢查谷歌地圖的話,可以看到其底圖與專題圖層(如Panoramio照片)都是以切片方式獲取的,如圖5.2所示。

圖5.2 Panoramio的照片專題圖也以切片的方式提供

5.2 何時使用地圖切片

如果希望基礎底圖能夠快速漫游,或者同時有幾十個并發用戶,這時應該為底圖創建切片緩存。如果專題圖層中地物要素的空間位置與屬性信息不經常變換,那么也可以創建切片緩存。

但不管是那種情況,必須了解到切片緩存代表著切片創建時該時刻點的地圖快照。說得難聽的話,當后端數據發生變化時,這些切片不會自動更新,是一些“死圖片”。為了更新地圖,切片地圖服務提供者必須定期創建新的切片。對于那些大規模的切片緩存,有時管理員只針對變換領域更新切片,而不是重建整個地圖范圍的所有切片。而這又需要記錄哪些地方進行過編輯,或比較幾個版本的數據。

確定Web GIS系統是否需要創建自己的地圖切片,需要考慮以下幾個方面。

5.2.1 是否有滿足需求的切片地圖

創建切片底圖需要大量豐富的數據、高端的地圖制作軟件和制圖技能,以及潛在的大量時間和磁盤空間。正是由于存在這些挑戰,通用的Web混搭常常使用他人創建的地圖切片。如果想沒有任何限制的自由與免費使用,那么OpenStreetMap是個選擇。而對于谷歌、微軟或ERSRI的切片地圖,則根據你的地圖的性質(商業或不以盈利為目的),以及多少人使用你的應用程序,確定是免費還是付費使用。而其他一些公司,例如CloudMade和MapBox,則以OpenStreetMap數據為基礎提供他們自己版本的切片。

如果決定創建自己的基礎底圖,那么曾經設計過多比例尺地圖的有經驗的制圖人員是必不可少的。在每個比例尺下,地圖都應該有合適的符號、顏色以及相應的詳細程度。僅僅為地圖所有不同的比例尺創建注記就是一項令人望而生畏的任務。此外,如果在底圖中包含衛星或航空影像,那么制圖人員還需要另外再單獨制作一組切片,因為需要不同的顏色與符號。

5.2.2 投影

要創建切片地圖可以使用任何坐標系。但是,如果準備將自己的地圖切片疊加在OpenStreetMap或谷歌、微軟、ERSRI的切片地圖上,則必須將珍貴的GIS數據轉換到Web墨卡托投影。該投影創建的目的僅僅是方便將整個世界鑲嵌為一組正方形切片。GIS純粹主義者拒絕接受該投影方式,并預測這將無法得到大規模認可,但事實與他們的期待大相徑庭。

Web墨卡托投影在很長一段時間內并沒有被EPSG的投影數據庫所接納。EPSG認為它不能算作科學意義上的投影,所以只是給了一個EPSG:900913的標號,這個標號游離在EPSG常規標號范圍之外。因此對于一些老的軟件或API,可能使用了該代碼或其他代碼。直到2008年,EPSG才恍然明白:不管橢球體還是球體,其實都是對地球的模擬,只是程度上的差別,沒有本質上的不同。或者是不得不接受廣泛的事實標準,EPSG接納了這個投影,定義投影坐標系PROJCS的名字為“Popular Visualization CRS / Mercator”,SRID為EPSG:3785;地理坐標系GEOGCS的名字為“Popular Visualization CRS”,SRID為EPSG:4055。這些標號已經進入“正常范圍”。

另外要注意的是,即使使用EPSG:3785,即Web墨卡托投影顯示地圖,也不能在該投影下進行量測功能,包括線的長度與多邊形面積的量算。即使在中緯度地區,結果都存在很大的偏差。要執行量測功能,好是將幾何圖形投影到本地坐標系統。

以下鏈接指向一個小型 Web 應用程序,該程序生動展示了Web墨卡托投影如何影響距離和面積計算。

links.esri.com/web_mercator_measurements

圖5.3顯示了如何使用示例 Web 應用程序測量一個小面的面積。在右側面板上,有3個不同的坐標系用于計算此面的面積和周長。State Plane Oregon North的測量最為,其次是UTM Zone 10測量,它們之間只相差很小的百分比。但是,請注意Web墨卡托投影的測量值,長度測量為9600 米,幾乎是State Plane Oregon North值6763的1.5倍。正如所見,Web墨卡托投影不適合用于計算距離和面積。其他坐標系(尤其是大的面積(洲)等角投影)在測量距離和面積時同樣不盡如人意。

圖5.3 使用Web墨卡托投影時多邊形的面積不

ESRI的一篇名為“Measuring distances and areas when your map uses the Mercator projection”的博客文章給出了針對ArcGIS API for JavaScript的解決方案,使用開源軟件的也可以借鑒其思路。該博客文章的地址如下:

blogs.esri.com/esri/arcgis/2010/03/05/measuring-distances-and-areas-when-your-map-uses-the-mercator-projection/

5.2.3 比例尺

要將地圖切片疊加在OpenStreetMap或谷歌、微軟、ERSRI的ArcGIS在線切片地圖上,除了保障使用相同的投影之外,還需要確保比例尺序列一致。不過這些地圖的比例尺序列與我們通常見到的地形圖比例尺序列很不一樣,我國地形圖比例尺一般有1︰10000、1︰50000等。而這些地圖的比例尺是計算出來的,最小比例尺是將整個世界放置在2×2的網格中,每個網格大小是256像素×256像素,因此最小比例尺為1 : 295829355.45,再放大一個級別,那么比例尺在原基礎上乘以2,結果為1 : 147914677.73,以此類推。由于這些比例尺很不好記憶,也很不好用于交流,并且互聯網地圖用戶也沒必要關心這么的數字,因此切片地圖的比例尺通常簡化成為“14級”“15級”“20級”等。用戶只需要大致了解在全國尺度、省一級尺度、城市尺度與社區尺度對應的級別即可。

表5.1列出了微軟必應地圖各比例級別對應的比例尺。該表中的比例尺與地面分辨率是以赤道位置來計算的,根據緯度不同而會有不同。

表5.1 微軟必應地圖各比例級別對應的比例尺

級別 地圖高與寬(像素) 地面分辨率(米/像素) 地圖比例尺(96 dpi)

1 512 78271.5170 1︰295829355.45

2 1024 39135.7585 1︰147914677.73

3 2048 19567.8792 1︰73957338.86

(續表)

級別 地圖高與寬(像素) 地面分辨率(米/像素) 地圖比例尺(96 dpi)

4 4096 9783.9396 1︰36978669.43

5 8192 4891.9698 1︰18489334.72

6 16384 2445.9849 1︰9244667.36

7 32768 1222.9925 1︰4622333.68

8 65536 611.4962 1︰2311166.84

9 131072 305.7481 1︰1155583.42

10 262144 152.8741 1︰577791.71

11 524288 76.4370 1︰288895.85

12 1048576 38.2185 1︰144447.93

13 2097152 19.1093 1︰72223.96

14 4194304 9.5546 1︰36111.98

15 8388608 4.7773 1︰18055.99

16 16777216 2.3887 1︰9028.00

17 33554432 1.1943 1︰4514.00

18 67108864 0.5972 1︰2257.00

19 134217728 0.2986 1︰1128.50

20 268435456 0.1493 1︰564.25

21 536870912 0.0746 1︰282.12

22 1073741824 0.0373 1︰141.06

23 2147483648 0.0187 1︰70.53

5.3 創建與提供切片地圖服務的策略

地圖切片一般都采用簡單的文件夾結構,以便提供服務。然而,由于切片數量非常多,因此它們的管理變得非常復雜。當前互聯網的切片地圖基本有如下兩種方式組織:

(1)將切片圖像以文件夾的結構放在服務器上,用戶直接請求文件。在這種方法中,只需要將單獨的切片圖像組織在代表比例級別、行和列的文件夾結構中。很多地圖API通過訪問包含代表級別、行和列結構的URL來訪問切片。例如,當使用Leaflet API訪問地圖切片時,必須提供格式為“http://{s}.somedomain.com/blabla/{z}/{x}/{y}.png”的網址,其中z是縮放級別,x和y分別是列和行。例如其中OpenCycleMap一個地圖切片的URL地址如下:

a.tile.opencyclemap.org/cycle/10/265/420.png

(2)將切片以Web服務的方式提供訪問。在這種方法中,雖然Web服務仍然需要用戶提供訪問切片的具體縮放級別、行與列,但是其背后文件的組織形式是看不見的。該方法比直接使用文件夾的方式相對稍微復雜一些,因此同時也會帶來延時。OGC的 Web地圖切片服務(Web Map Tiled Service,WMTS)規范就是按照這種方式來提供切片服務的。如果使用Firebug或其他開發者工具來查看百度地圖的話,就可以看到該模式。例如,百度地圖的URL如下:

online1.map.bdimg.com/tile/?qt=tile&x=793&y=293&z=12&styles=pl&udt=20150305&scaler=1

雖然通過仔細分析,可以看到縮放級別、行與列參數,但并不能知道百度地圖在后臺是如何組織地圖切片的。

5.3.1 創建切片地圖的策略

如果地圖范圍覆蓋廣,例如一個省或國家,那么大比例尺中地圖切片的數量非常巨大。然而具有諷刺意味的是,在大比例尺下,很多地圖切片包含的信息卻非常少。例如在1:2250比例尺下,居民區附近的地圖切片包含了豐富的有用的信息,但是如果漫游到沙漠或海洋地區,那么切片就很可能是空的,沒有任何有用的信息。那么我們是否還有必要花費大量的時間創建并用上千MB的磁盤空間來存儲它們呢?

對于這種情況,我們希望能找到某種按需創建切片的軟件,也就是說,在用戶及時次訪問該區域時創建切片。及時個漫游到該地區的用戶需要等待服務器創建切片,但是接下來的用戶就不需要等待了。這樣一來,那些受歡迎的地區有地圖切片,那些從來沒人訪問的地區就不需要創建與存儲切片。顯然,這種方法的有效性基于服務器的繪制地圖切片的速度。

另一種方案是使用“沒有數據”圖片表明某些地區沒有切片。盡管地圖管理人員常常不愿這么做,但是在實際使用過程中,當用戶看到該圖片時,都只會責怪自己放大太多,而不會埋怨管理員為什么不提供該比例尺下的地圖。

好的方法應當是事先創建最感興趣地區的地圖切片,對于不感興趣的區域,要么按需創建切片,要么提供“沒有數據”圖片。雖然作為一個地理學家,可能不太愿意把一些地方歸為“不感興趣”區域,但嚴酷的事實是,并不是所有的地圖切片都會有均等的訪問量。有研究表明,互聯網地圖用戶的訪問集中在大城市、海邊和交通走廊。近期來自社交媒體的反饋,如地理微博和Flickr照片數據集,更能地揭示了地圖用戶最感興趣地區。不過要說明的是,我們這里討論的是通用用途的基礎底圖,而對于那些專業類型的地圖,例如礦產勘查和野生動物保護,可能有截然不同的使用模式。

上述方式要求切片創建軟件具有允許指定部分區域的能力。大多數軟件僅僅允許指定一個矩形的子區域,但是像海邊、城市等互聯網地圖用戶所感興趣的區域卻通常不是矩形區域。因此有時需要使用一系列的矩形區域。

5.3.2 使用開源軟件創建切片

當前各種FOSS軟件中的一個基本工具就是創建網絡切片地圖工具。其中比較方便的是GeoWebCache,因為它集成在GeoServer中。其他還有TileCache與TileStache等。

Mapnik庫是一個可為Python與其他語言調用的C 編寫的自由及開放源代碼軟件,可用于創建地圖切片。Mapnik是一個高效渲染引擎,其中包含了常用WMS圖層中沒有的高級繪圖選項。雖然Mapnik的使用不太方便,通常需要一些Linux的知識以及一些實驗與犯錯,然而以利為目的Mapbox公司最近了一個名為TileMill開放源碼的程序,可以在Mac和Windows上運行,以Mapnik為底層,提供了一個漂亮的窗口界面,從而簡化了制圖過程。在本章的第2個實踐中,將介紹使用TileMill來創建費城的切片地圖。

5.4 實踐8:使用GeoWebCache創建切片

如果對于在WMS中設置的圖層與符號均感到滿意,但希望提供響應速度,以及支持更多的并發用戶,那么則可以考慮使用GeoWebCache來創建地圖切片。主要是因為GeoWebCache集成在GeoServer中。在本實踐中,將介紹如何使用GeoWebCache來為實踐7中的NeighborhoodMap圖層組WMS服務創建切片地圖服務。

(1)準備工作。

啟動GeoServer,并打開GeoServer的Web管理頁面。

使用OpenLayer預覽webgis: NeighborhoodMap圖層組,進行放大、縮小以及漫游等地圖操作,注意觀察性能以及地圖的顯示。可以觀察到每次漫游時,標注都存在重新定位的現象,表明沒有使用地圖切片。

(2)創建地圖切片。

在GeoServer的Web管理頁面窗口的左邊單擊“Tile Caching”中的“Tile Layers”連接,在右邊窗口進入Tile Layers頁面。

在Tile Layers頁面中,單擊“webgis:NeighborhoodMap”連接,進入“圖層組”頁面。

在“圖層組”頁面中滾動鼠標,定位到“Tile cache configuration”部分。通過該部分的參數配置圖層的緩存。由于是從“Tile Layers”連接進來的,因此自動選擇為圖層組創建緩沖切片。如果不進行進一步的操作,那么GeoServer將按需創建緩存切片。但是我們需要的不是按需創建,而是預先創建。

在GeoServer的Web管理頁面窗口的左邊,再次單擊“Tile Caching”中的“Tile Layers”連接,然后在右邊窗口Tile Layers頁面中的webgis:NeighborhoodMap行單擊“Seed/Truncate”連接,將打開一個新的窗口。

在新窗口中,按圖5.4設置“Create a new task”表單。

然后選擇底部的“Submit”,頁面將進入執行任務監控頁面,而GeoServer則在后臺針對不同比例尺繪制地圖。

等待大約30秒鐘以后,單擊“Refresh list”連接,可以看到圖5.5所示的進度顯示,告訴已進行多長時間,估計還需要多長時間。當單擊“Refresh list”連接后,該進度統計列表消失時,表示地圖切片已經創建完成。

圖5.4 填寫創建地圖切片的參數

圖5.5 地圖切片任務執行統計列表

(3)預覽切片地圖。

在GeoServer的Web管理頁面窗口中單擊“Tile Layers”連接,進入Tile Layers頁面。然后從webgis:NeighborhoodMap行的預覽下拉列表框中選擇“EPSG:900913 / png”,如圖5.6所示。

圖5.6 使用“EPSG:900913 / png”方式預覽地圖

在新的地圖預覽窗口中,對地圖進行放大、縮小與漫游等操作,可以發現無須等待而地圖立即顯示,而且當漫游時標注并沒有改變位置,表明已經利用切片緩存。

請注意,確保使用的是“Tile Layers”預覽,而不是“Layer Preview”預覽。切片圖層預覽使用的URL稍微有些不同,以表明需要使用切片緩存。

雖然使用切片緩存改善了性能,但是也正如大家注意到的,地圖中存在重復標注的現象。因為每個地圖切片并不清楚相鄰切片中的標注,因此在生成地圖切片時很難避免重復標注。要緩解該問題,切片生成軟件通常在比切片更大的范圍內繪制地圖,然后再將其切開為單獨的切片。GeoWebCache將該較大區域稱為“metatile(元切片)”,而ESRI稱為“supertile(超級切片)”。可以在GeoWebCache調整元切片的大小進行試驗,可以看到,

網友評論(不代表本站觀點)

免責聲明

更多出版社
主站蜘蛛池模板: 亚东县| 左贡县| 静乐县| 教育| 中卫市| 光泽县| 三江| 焉耆| 古丈县| 溧阳市| 得荣县| 佛山市| 如皋市| 龙州县| 玛多县| 长宁区| 宜昌市| 土默特左旗| 定州市| 浦江县| 凌云县| 扶沟县| 安顺市| 县级市| 滦平县| 汉阴县| 平塘县| 文昌市| 平定县| 东阳市| 和田县| 湟中县| 香港 | 雷波县| 大同县| 兴文县| 札达县| 冀州市| 中宁县| SHOW| 大渡口区|