[譯] 爲什麼我們需要關注PostGIS? - Part 0

原文鏈接:https://medium.com/@tjukanov/why-should-you-care-about-postgis-a-gentle-introduction-to-spatial-databases-9eccd26bc42b

 

【我的廢話幾句,可以直接略過】技術文章的翻譯是個吃力不討好的事情,大部分技術人員的英語水平都能夠直接吃透原文。況且關於翻譯,有句話深得我心:不能翻譯的部分,既不是最好的,也不是最壞的。那爲什麼還要翻譯這篇博文呢?這段時間查閱PostGIS的資料,發現資料雖多,但很少有行文流暢而且淺顯易懂的。我試圖翻譯的這篇是我看過的質量最高的科普文,值得推薦。

原文標題:Why should you care about PostGIS? — A gentle introduction to spatial databases

 

爲什麼你需要關心PostGIS? —— 空間數據庫的簡介

 

數據庫?木啥興趣。

跟GIS或者數據可視化打交道的人可能這麼想。我必須承認,數據庫不是世界上最性感的玩意(得罪了,DBA們),但是如果你說要(或想要)對(空間)數據正兒八經地做分析或者可視化,你絕對不能忽略數據庫。我希望這篇博文能夠告訴你有效地使用空間數據庫能夠給你帶來什麼好處。

在IT行業,“網紅”術語不停地出現然後消失。幾年前的一個“網紅”叫做“大數據”,但是現在慢慢褪去光環了。數據還是很大,事實上數據比以前更大了。文件尺寸在增長以致於在數據科學和地球科學領域的人們必須處理GB級別的數據。數據越大,我們越是要關心怎麼存儲數據,怎麼分析數據。

 

這是數據庫的用武之處。

在軟件開發中數據庫是必需的技術。但是對於計算機科學的其他子領域(例如GIS),數據庫的必要性可能並不總是那麼明顯。當然,人們傾向於使用他們更熟悉的工具,雖然這不一定是達成目標的最高效方法。但是,有時候邁出你的舒適區能夠給你帶來大的裨益。我就是這般慢慢意識到空間SQL的潛力的。

 

圖片1: https://miro.medium.com/max/1746/1*YIwx2jh66NdWqF-GpBTwCA.gif

【譯註:因爲圖片尺寸問題,CSDN無法上傳。各位同學請到原文圍觀,圖片很靚,非常有看頭】

巴西🇧🇷一週的航班。原始文件是一個包含起點和終點的CSV文件。我將它加載到PostGIS中,根據座標值創建了一些點,然後在這些點之間創建了連線,最後使用QGIS Time Manager插件來可視化它們。

 

這篇博文的目標讀者是那些用過空間數據但是還沒有接觸過PostGIS,或者是根本沒聽過它的人。我不打算講解怎麼安裝PostgreSQL/PostGIS,我要講的是它是什麼和它的優勢之處。

 

我的工作流和例子主要關注QGIS和PostGIS的組合,但是你也可以僅僅使用PostGIS,你的代碼或其他的GIS客戶端。

 

Post… what?

 

在我的GIS學習中我已經多次聽說“PostGIS是Postgres數據庫的一個空間擴展”,這不表示我明白這句話的意思。我不知道什麼是Posggres,也不知道什麼是空間擴展。

讓我們儘量慢慢來,把它們講得簡單明瞭。

一些人可能討厭我作對比,但是我還是得冒這個險:如果你從來沒用過數據庫,你可以認爲數據庫的表是很大很大的Excel文件,它能夠用一毫秒就找到第433285行第3列的值。而且不用在單元格(cell)裏寫函數,你在SQL命令窗口裏寫這些函數。所以說數據庫是一個你能夠高效地存數據取數據的地方。

PostGIS是一個爲PostgreSQL數據庫管理系統開發的,開源的、免費的空間數據庫擴展。也就是說,PostgreSQL (簡寫爲Postgres)是數據庫,PostGIS是這個數據庫的一個擴展插件(add-on)。最新版的PostGIS安裝包裏邊現在帶有PostgreSQL數據庫。【譯註:這句話不一定正確,我在2019年12月下載的最新的PostGIS就沒有帶Postgres】

簡而言之,PostGIS給PostgreSQL數據庫添加了一些空間函數,例如distance, area, union, intersection以及特定的幾何數據類型。空間數據庫存儲和操縱空間對象,就像存儲和操縱其他數據庫對象一樣。

在一個普通數據庫裏,你存儲不同類型的數據(數字,文本,時間戳,圖像等等),在需要的時候你可以查詢這些數據回答關於這些數據的問題,例如“有多少人登錄你的網站了?”或者“網店有多少筆交易?”這樣的問題。空間函數能夠回答像“最近的商店有多遠?”,“這個點在這個區域內嗎?或者”這個國家的面積是多大?“這類的問題。

 

數據庫裏,數據存儲爲行和列。因爲PostGIS是關於空間的數據庫,它的數據有一個幾何列,其中存儲着特定座標系下的數據。在PostGIS中,這個座標系被SRID所標識。但是請記住雖然你主要用PostGIS存儲空間數據,它也能存儲非空間的數據,因爲它也是一個完全功能的PostgreSQL數據庫。

 

超讚的 Boundless PostGIS intro,【譯註:該鏈接已經失效。我用最強大的搜索引擎找了一下,最靠譜的應該是這個https://gisforthought.com/projects/postgis_tutorial/】介紹了三個空間數據庫的核心概念。這些核心部分組合起來,爲性能和分析的優化提供了靈活的結構。

  1. 空間數據類型(Spatial Data Types) 例如點(point)、線(line)和多邊形(polygon)。大部分處理空間數據的人都熟悉它們;
  2. 多維空間索引(Spatial Indexing)被用於空間操作的高效處理;
  3. 空間函數(Spatial Functions),承載於SQL,用於空間屬性和關係的查詢。

SQL, 或者”結構化查詢語言“,是一種在關係型數據庫中詢問問題(asking question)或者更新數據的方式。一個select查詢(你用來詢問問題的)通常是下邊形式的命令。

SELECT some_columns FROM some_data_source WHERE some_condition;

PostGIS特有的函數通常有這樣的命名方式:ST_functionName

在登錄你的數據庫之後,或者在你的數據庫圖形工具(例如pgAdmin或者QGIS)中,你在命令行中寫下這些命令。是的,SQL要求你真正地一些東西。用鼠標右鍵點點通常來說是被人低看一眼的,但對於一些不寫代碼的人來說,SQL是一個很好的入門之選,你能夠用SQL寫命令,以後或許用它寫代碼。

除了PostGIS之外還有其他的空間數據庫。微軟的SQL Server Spatial, ESRI的ArcSDE, 甲骨文的Oracle Spatial和GeoMesa是管理和分析空間數據的其他選擇。但是據說PostGIS有着更多的功能,通常有更好的性能。另外一點,除了GeoMesa之外其他的產品都不是開源的。

如果你是小白,你現在可能有點懵逼了:就是說PostGIS是一個存數據的地方,你想要拿點信息你得在命令行上鼓搗點奇怪的東西才行?稍安勿躁。你如果真的想折騰PostGIS,這裏還有一些實打實的好處。

我在推特上爲這篇博文徵求意見,得到了很多寶貴的反饋。有一個建議是將博文分爲兩個部分。在第一部分中我將講述PostGIS能夠給你日常工作帶來的好處。在第二部分我重點講述空間SQL。

【譯註:博文有點長,一個上午才翻譯這麼一點點。姑且稱爲Part 0吧】

Part 1: 待翻譯

Part 2: 待翻譯

 

【廣而告之】對地理信息系統開發感興趣的同學們,歡迎加QQ羣: 開源GIS技術交流羣  羣號:767137544 入羣請註明:CSDN

QQ Group Image

 

發佈了133 篇原創文章 · 獲贊 13 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章