11.26 Python 與開源 GIS : 數據處理、空間分析與地圖製圖

在知識經濟與經濟全球化的時代,地理空間信息是現代社會的戰略性信息資源,地理空間信息產業已成為現代知識經濟的重要組成部分。

因此,充分利用國際開源地理空間信息技術與資源,從底層入手,面向行業應用需求,則有可能實現我國地理信息系統( geographic information system , GIS )技術的跨越發展,突破核心關鍵技術的封鎖,推進我國地理空間信息產業的新發展。開源 GIS 的發展較早,現在技術體系也已經比較完善,在數據處理、製圖、 Web應用中都有所發展,在國外的學校、科研機構以及商業中都有應用。但是在國內,由於宣傳力度不夠,以及國人版權意識淡薄的原因,從學校到企業,對開源 GIS的瞭解都相對較少。國際開源地理空間基金會( Open Source Geospatial founda-tion ,OSGeo )中國中心作為國內開源 GIS 的推廣組織,現在也只是由幾名技術愛好者在推動。

GIS 業界已逐漸認識到數據採集和生產是建立 GIS 的一項最大的投資。從國內的現狀來看, GIS 的數據處理還是採用人工處理方式,但是在處理過程中使用編程方式已經越來越普遍了。

在編程方面, Python 現在比較熱, 《Python與開源 GIS : 數據處理、空間分析與地圖製圖》是國內第一本"Python+地理信息開發" 方面(不限於開源)的圖書。

Python 与开源 GIS : 数据处理、空间分析与地图制图

目前國內可見的Python翻譯類相關圖書

在開源GIS方面,目前國內的書有限, 有 《GDAL源碼剖析與開發指南 》,《開源GIS與空間數據庫實戰教程》, 以及與 WebGIS相關的 OpenLayers 幾本書。

作為國內首本"Python+地理信息開發"的圖書,非常值得期待。

Python 与开源 GIS : 数据处理、空间分析与地图制图

王卷樂研究員為本書作序

“夫地形者,兵之助也。”這是《孫子兵法·地形篇》中的一句話。自古以來,地理信息就是一國重要的信息資源。如何處理這些信息資源,需要科學技術的支持。從早期的計裡畫方製圖,到後來的手扶跟蹤數字化處理,再到後來的地理信息系統,都是在解決地理信息的數據處理問題。大數據時代的到來,既提供了海量地理信息數據獲取和使用的機會,更是提出了技術處理能力的需求。

引進與使用開源GIS軟件是一種可以快速實現地理信息數據處理技術突破的開放的、有效的的方法,而且開源軟件的開發沒有商業公司的生存壓力,在很多方面有先進的理論與實現,非常有利於學生與技術人員掌握與使用。

卜坤博士多年來致力於推廣開源GIS應用,開展了許多實踐研究和應用。在此過程中,我也與他有一些實際合作,學到許多知識。據我的一些瞭解,他先後參加和承擔了國際科聯世界數據系統(WDS)-中國中心門戶和WDS可再資源與環境世界數據中心網絡平臺建設、聯合國教科文組織(UNESCO)-國際工程科技術知識中心防災減災知識服務系統網站平臺建設、中國科學院大數據驅動的資源學科領域創新示範平臺網站建設、一帶一路國際科學家聯盟平臺網站建設等。這些平臺建設和應用集中體現了開源GIS在數據管理、處理、分析、可視化等方面的技術。

除此之外,卜坤博士還積極參加許多相關的公益性工作,包括OSGeo 中國中心網站維護、開源GIS文檔翻譯和編寫等,為國內開源GIS社區的發展做出自己的努力和貢獻。

本書正是結合他這些年的實踐開發工作而著,內容涉及開源GIS應用、WebGIS開發、地理信息科學數據共享等。非常值得一讀!也值得操作實踐!特此給大家推薦以為序。

中國科學院地理科學與資源研究所 王卷樂 研究員

-----

Python 与开源 GIS : 数据处理、空间分析与地图制图

-----

作者有話說

終於出版了,但終歸是不完美的。我想,大多數的作者在自己寫的書出版之後,都會有這樣的感覺吧。寫一本書會很難,但是時間之久,修改之多,還是遠遠超出了自己的預計。自2006年OSGeo中國中心成立之初我就開始瞭解並在學習工作中開始使用Python與開源GIS相關技術,逐漸的積累、歸納,形成一些技術文檔的積累。到2013年左右,漸漸地梳理出框架, 與科學出版社進行聯繫,並大致取得出版的意向;後面經過選題等流程,到2014年基本確定下來;中間由於一些變動,到2017年10月份才簽訂了合同;而最終出版,則已經到了2019年11月份。

地理信息系統是我的專業,個人更多的側重於技術方面,總是覺得原理方面的教程在技術方面缺少實際的案例,技術方面的書籍又缺少理論方面的基礎,這樣導致GIS專業的學生動手能力弱,而計算機方面的技術人員做的又不深入。在學習與工作過程中,我發現得益於 Python 優雅的語法與強大的表現力,結合文字說明,可以很好地將技術概念與細節表達出來,非常適合寫成教材。所以想寫一本理論與應用結合的書,通過實際的操作與理論結合起來。這是初衷,但是實際寫的時候,理論方面並不能鋪墊太多,有很多的問題說明的也不算透徹,沒有時間與精力深入下去。實際上到了最後,只能算是咬著牙堅持完成出版的校對了。

寫書,也是一個自我反思的過程。自己的技術水平並沒有多高,只是興趣廣泛,涉獵較多,在開源GIS的體系與結構方面有一些體會。這本書對於開源GIS技術框架的梳理可能會更有用一些,希望能夠幫助到更多的人,使得開源GIS得到更多的應用。

正文搶先看

Python 与开源 GIS : 数据处理、空间分析与地图制图Python 与开源 GIS : 数据处理、空间分析与地图制图
Python 与开源 GIS : 数据处理、空间分析与地图制图Python 与开源 GIS : 数据处理、空间分析与地图制图
Python 与开源 GIS : 数据处理、空间分析与地图制图

相關配套資源

Python 与开源 GIS : 数据处理、空间分析与地图制图網址:https://
www.osgeo.cn/pygis/

本書有專門的配套網站, 網站的開發是為了宣傳Python在開源GIS中的應用,主要作為專著《Python與開源GIS》的補充。在書中用到了一些資源,以及超出內容之外的一些技術,需要進一步說明。

作為應用方面的著作,書中用到一些數據,並有代碼,這些資源都可以從網站上下載,並且在網站上內容也會有相應更新。資源包括源代碼、預覽PDF、配套數據、相關課件、VirtualBox鏡像。

圖書的撰寫與網站中內容的製作是獨立的,由於時間有限,網站的很多內容不能及時更新,也存在有多種問題,閱讀時請多注意。Python 与开源 GIS : 数据处理、空间分析与地图制图

本文摘編自卜坤《Python與開源 GIS : 數據處理、空間分析與地圖製圖》(北京:科學出版社, 2019.11)一書,內容有刪減。

ISBN 978-7-03-062927-2

《Python與開源 GIS : 數據處理、空間分析與地圖製圖》主要以空間數據的處理、分析以及地圖製圖為主線。在選擇內容時,以目前最為經典、常用的類庫為主,目的是為了給初學者對基本的概念進行系統的講解。

本書從應用開發角度,根據作者幾年的工作經驗,介紹 Python 語言在開源 GIS 中的應用。希望能夠籍此機會,使得開源 GIS 能夠得到應用,並進一步推廣開源GIS 的理念與技術。

因為選題時限定了Python,因此,在內容的取捨上,很大程度依賴於已經存在的Python的類庫與程序,這樣會在某種程度上破壞主線的完整性,另外,在介紹不同的類庫與程序時,不可避免地會受到已有知識與術語的左右。

本書內容適合地理信息專業學生、研究人員、開發人員閱讀。書中代碼經過了測試,可以在主流的 Linux 操作系統中運行;在 Windows 系統中大部分也可以運行。

目錄

前言

第1章 引言 1

1.1 GIS與開源GIS的基本概念 1

1.1.1 GIS的概念 1

1.1.2 位置、距離、度量與比例尺 4

1.1.3 地圖投影 7

1.1.4 空間分析的基本概念 11

1.1.5 開源GIS的概念 13

1.1.6 開源空間信息軟件體系與技術概述 16

1.2 GIS中的數據結構與數據類型 17

1.2.1 空間數據模型與數據格式 17

1.2.2 GeoTIFF文件格式與顏色空間 19

1.2.3 常用矢量數據格式與文件格式介紹 20

1.3 軟件安裝與環境配置 22

1.3.1 本書介紹的開源GIS 23

1.3.2 Debian Linux的安裝與配置 23

1.3.3 虛擬機的使用 25

1.4 Python語言基本用法 27

1.4.1 Python基礎用法 28

1.4.2 Python的基本語句代碼結構與數據類型 30

1.4.3 流程控制 33

1.4.4 Python中的列表、元組與字典數據結構 36

1.5 本書的約定與注意事項 40

第2章 使用GDAL操作柵格數據 42

2.1 GDAL簡介 42

2.1.1 GDAL庫簡介 43

2.1.2 GDAL數據模型 44

2.2 使用GDAL獲取柵格數據集信息 48

2.2.1 開始使用GDAL 49

2.2.2 讀取遙感影像的信息 51

2.2.3 使用GDAL獲取柵格數據波段信息 54

2.3 訪問柵格數據中的像元 55

2.3.1 GDAL中的柵格數據類型 55

2.3.2 訪問數據集的數據 56

2.3.3 讀取波段中的數據 58

2.4 創建與保存柵格數據集 59

2.4.1 使用CreateCopy方法創建影像 60

2.4.2 使用Create方法創建影像 61

2.4.3 創建多波段影像 62

2.4.4 GDAL寫操作時的空間投影處理 63

2.4.5 建立影像金字塔 64

2.5 GDAL的其他問題 64

2.5.1 GDAL和Pillow的互操作 64

2.5.2 GDAL工具集介紹 67

2.5.3 訪問索引圖像中的數據 73

2.5.4 地圖代計算 77

2.5.5 GDAL中使用仿射地理變換進行空間定位 78

第3章 使用OGR庫操作矢量數據 81

3.1 OGR簡介 81

3.1.1 OGR的命令行工具 82

3.1.2 在Python中的OGR基本類 83

3.2 使用OGR獲取Shapefile信息 83

3.2.1 導入OGR庫 83

3.2.2 讀取矢量數據 84

3.2.3 獲取圖層信息 85

3.2.4 獲取要素信息 87

3.2.5 矢量數據的空間參考 90

3.3 使用OGR創建矢量數據 91

3.3.1 使用OGR創建Shapefile 91

3.3.2 使用OGR創建要素幾何形狀 92

3.3.3 使用WKT創建數據集的幾何形狀 96

3.3.4 使用OGR複製方法創建新的Shapefile 99

3.3.5 OGR屬性字段的定義與使用 100

3.3.6 OGR中投影的處理方法 102

3.4 根據條件選擇數據 104

3.4.1 根據屬性條件選擇與生成要素 104

3.4.2 空間擇舍器 106

3.4.3 在OGR中使用SQL語句進行查詢 108

3.5 使用Fiona進行矢量數據讀寫與處理 109

3.5.1 Fiona簡介 110

3.5.2 讀取矢量數據 111

3.5.3 Fiona的數據模型 114

第4章 空間參考與座標轉換 118

4.1 空間參考與座標轉換原理 118

4.1.1 大地水準面、地球橢球體與基準面 118

4.1.2 PROJ.4、osgeo.osr模塊及投影表示方法簡介 120

4.1.3 在PROJ.4 中瞭解橢球體與基準面 121

4.2 PROJ.4 命令行工具的使用 124

4.2.1 proj命令的用法 124

4.2.2 地圖投影設置 127

4.2.3 cs2cs程序的用法 130

4.2.4 geod程序的用法 131

4.3 在Python中使用PROJ.4的功能 133

4.3.1 Proj類 134

4.3.2 投影變換 136

4.3.3 Geod類的使用 137

4.4 osgeo.osr的使用方法 139

4.4.1 osr簡介 139

4.4.2 定義空間參考系統 139

4.4.3 空間參考對象的使用 142

4.4.4 從文件中獲取投影信息 143

4.4.5 不同座標系統之間轉換座標 145

第5章 矢量數據的空間分析:使用Shapely 147

5.1 Shapely介紹 147

5.1.1 JTS、GEOS與Shapely

148

5.1.2 Shapely中的空間數據模型 148

5.1.3 Shapely的基本使用方法 150

5.2 Shapely中的幾何對象 151

5.2.1 通用屬性與方法 151

5.2.2 Shapely中的幾何要素 152

5.2.3 Shapely中的幾何集合 156

5.3 Shapely中謂詞與關係 160

5.3.1 一元謂詞 160

5.3.2 二元謂詞 162

5.3.3 DE九交模型關係 164

5.4 使用Shapely空間分析方法構建新對象 165

5.4.1 基於集合論方法構建新的幾何對象 166

5.4.2 構建新對象的方法 168

5.5 Shapely中其他操作 173

5.5.1 合併線狀要素 173

5.5.2 級聯合並 175

5.5.3 製備幾何操作 175

5.6 Shapely互操作的接口與使用 176

5.6.1 WKT格式 176

5.6.2 NumPy與Python列表 177

5.6.3 geo-interface接口與Shapely中的實現 178

第6章 使用SpatiaLite空間數據庫 181

6.1 開源空間數據庫的概念 182

6.1.1 SQLite與SpatiaLite介紹

182

6.1.2 安裝與基本使用 184

6.2 在命令行中使用SpatiaLiteShell 185

6.2.1 開始運行SpatiaLite命令行 185

6.2.2 SpatiaLite中的基本SQL數據庫查詢用法 188

6.2.3 導出GIS數據 190

6.2.4 創建SpatiaLite數據庫 191

6.2.5 SpatiaLite中管理空間表 193

6.3 空間索引的概念與使用 196

6.3.1 空間索引的概念 196

6.3.2 空間索引:在SQLite中使用R-Tree 197

6.3.3 空間索引:使用MbrCache 201

6.4 在Python中使用SpatiaLite進行數據管理 203

6.4.1 在Python中使用SpatiaLite 203

6.4.2 導入Shapefile 206

6.4.3 在表中進行空間查詢查找 207

6.5 SpatiaLite幾何類型的定義與使用 208

6.5.1 熟悉Geometry 208

6.5.2 幾何要素 210

6.5.3 最小外包矩形(MBR)214

6.5.4 創建與更新數據表 214

6.5.5 Python中SQLite的事務操作 217

6.5.6 管理座標參考與座標轉換 218

6.6 使用虛擬錶鏈接其他格式數據執行SQL語句 221

6.6.1 在CSV與帶分隔符的TXT文件上進行SQL查詢 221

6.6.2 在Shapefile上執行SQL查詢 223

6.7 SpatiaLite中空間關係比較與空間運算 225

6.7.1 評價MBR關係 226

6.7.2 評價幾何對象之間的關係 228

6.7.3 幾何對象之間空間運算 231

第7章 GIS製圖:使用Mapnik進行地圖製圖 232

7.1 Mapnik地圖製圖基本概念與技術框架 233

7.1.1 Mapnik簡介 233

7.1.2 地圖製圖的背景知識 233

7.1.3 Mapnik製圖的工作流程 235

7.1.4 使用XML渲染地圖 239

7.2 Mapnik製圖的技術細節 240

7.2.1 地圖和圖層 240

7.2.2 地圖及圖層對象的屬性和方法 242

7.2.3 地圖暈渲與保存 244

7.2.4 渲染結果輸出 246

7.2.5 Mapnik製圖中的地圖投影 247

7.3 數據的讀取與設置 248

7.3.1 數據源 248

7.3.2 常用數據格式的讀取 248

7.3.3 使用GDAL/OGR包進行數據的讀取 249

7.3.4 使用文本數據源 250

7.4 繪製不同的要素 251

7.4.1 繪製柵格影像 251

7.4.2 繪製線 252

7.4.3 繪製多邊形 257

7.4.4 繪製標註 259

7.4.5 繪製點狀要素 264

7.5 數據顯示的規則 267

7.5.1 數據顯示的規則 267

7.5.2 按比例尺顯示要素 270

第8章 使用Basemap進行地圖可視化 272

8.1 Basemap簡介與基本使用方法 272

8.1.1 簡介 272

8.1.2 Basemap使用簡介 273

8.1.3 設置地圖投影 275

8.1.4 繪製地圖背景 279

8.1.5 控制製圖中的數據細節 282

8.2 在Basemap中添加Matplotlib繪製功能 284

8.2.1 使用annotate方法繪製標註 284

8.2.2 使用plot函數繪圖

286

8.2.3 使用text方法繪製文本 288

8.2.4 混合使用plot方法與text方法 289

8.3 在Basemap中使用GIS數據 291

8.3.1 使用Shapefile 291

8.3.2 在Basemap中繪製DEM數據等高線 292

8.3.3 在Basemap中使用顏色對渲染DEM數據 294

8.4 USGS地震數據可視化實例 297

8.4.1 全球地震數據集讀取 297

8.4.2 繪製地震數據集 298

第9章 Python下面其他開源GIS庫使用 302

9.1 使用PyShp讀寫Shapefile 302

9.1.1 PyShp的介紹與安裝 302

9.1.2 讀取Shapefile 303

9.1.3 創建Shapefile 309

9.2 使用geojson庫處理GeoJSON數據 313

9.2.1 geojson模塊的安裝 313

9.2.2 geojson中的幾何對象、要素與要素集合 313

9.2.3 geojson中的方法 317

9.3 使用Descartes進行繪圖 318

9.3.1 Descartes的安裝與使用 319

9.3.2 使用Descartes繪製Shapefile的實例 320

9.4 數據分析與可視化庫GeoPandas的基本用法 322

9.4.1 數據結構:GeoSeries 322

9.4.2 數據結構:GeoDataFrame 323

9.4.3 地圖工具 325

9.4.4 幾何圖形的疊加 328

9.4.5 幾何操作 331

9.4.6 管理投影 334

9.5 使用Folium進行WebGIS應用 336

9.5.1 Folium的基本用法 337

9.5.2 在Folium中添加用戶數據 340

彩圖

Python 与开源 GIS : 数据处理、空间分析与地图制图

一起閱讀科學!

科學出版社│微信ID:sciencepress-cspm

專業品質 學術價值

Python 与开源 GIS : 数据处理、空间分析与地图制图


分享到:


相關文章: