聊聊GIS數據的四個分層與GIS服務

本篇不討論矢量柵格數據的結構,也不討論矢量與柵格的區別(即設定讀者有這方面的基礎)。html

版權聲明:原創。博客園/B站/小專欄/知乎/CSDN @秋意正寒前端

轉載請標註原地址並聲明轉載: http://www.javashuo.com/article/p-trhfcgfu-by.htmlnode

本文系概念性很強的博客,但對GIS項目有幫助,對在讀的學生也有必定幫助。web

儘管從物理的角度,只有獨立數據文件(shp、geojson、tif等)或者數據庫(esri geodatabase的gdb、geopackage等)這兩種數據庫

可是,從學科角度,即從GIS的視角看,地理數據並無那麼簡單。json

爲解釋簡便,使用shapefile、geojson、tif柵格和gdb、postgis,輔助ArcMap/QGIS 3.10作解說。數組

1. 術語及概念定義

① 地理數據

地理數據=空間數據+非空間數據;也叫地理信息。例如:一座醫院;一所學校;一條道路;一條河流緩存

② 空間數據

即幾何數據,描述座標、形狀的數據;也叫空間信息。例如:形狀、座標tomcat

③ 非空間數據

即屬性數據,描述與空間位置無關的一類數據。例如:成績單、醫院名稱列表服務器

這類數據的特色是,若是脫離了地理位置也有它自己本身的含義。

2. 矢量數據的四個分層

[暫空,過年前寫完]

不妨這樣想:每一層均爲子一層的容器。大魚吃小魚,小魚吃蝦米。

2.1. 幾何/屬性層

這是矢量數據的最底層,有兩個類別:幾何層或者屬性層。

前陣子寫了一系列座標系有關的博客,咱們假定在某個座標系下,存在某個點P(x0,y0),這個點在這個肯定的座標系下,就是獨一無二的。

那麼,若是這個點表明的是一個咖啡店,僅僅知道這個點的座標(x0,y0)是不夠的。

不一樣的用戶關心不一樣的信息,有人關心這個店的電話號碼,有的人關心它所在的城市和行政區,有的人關心它的地址,有的人關心它的人均消費。

這個時候,信息就能夠分化成兩個種屬:幾何的,屬性的。

  • 咱們說表徵位置信息的座標數據(或者多個座標構成的線、面),叫幾何數據。
  • 除了幾何數據,都叫屬性數據。

上大學的時候,系主任說:地理數據區別於其餘行業的數據,最大的區別是它具備空間數據!

咱們剛明確了幾何數據是什麼,屬性數據是什麼,那麼多出來的一系列名詞又是什麼?

作如下規定:

  • 地理數據=幾何數據+屬性數據=空間數據+非空間數據
  • 幾何數據=空間數據
  • 屬性數據=非空間數據

這樣就不亂了。

2.1.1. 案例講解--geojson

如今講概念其實很枯燥,那麼一個具體的矢量數據文件,好比geojson或者shp,如何判斷哪些是幾何數據,哪些是屬性數據呢?

咱們取一個geojson文件,只有一個點,沒有屬性數據。它在QGIS里長得像這樣:

它數據長這樣:

 

 

是WGS84下的一個點,在廣州城區。

咱們能夠很快聚焦到"geometry"這個鍵上,它下列有兩個子鍵"type"和"coordinate",這兩個子鍵的值就是這個geojson矢量數據的幾何信息。

讀者能夠想象獲得,若是type是「Polyline」,那麼coordinate將是一堆折線段的集合,type的值還有其餘幾個,點線面都有。

可是,geometry的值的的確確就是上面說起的「表徵位置信息的座標數據」。

我編輯了一下這個geojson,使其擁有三個屬性數據:所在城市是"Guangzhou",編輯者是"秋意正寒",郵政編碼是"510000".

屬性表長這樣:

文本變成了這樣:

 

 

咱們不難看到,和geometry鍵並列的多了一個鍵:"properties"。

它翻譯過來就是屬性的意思,別的數據可能叫「attributes」等。

這就很清晰明瞭的看到了在geojson中,「幾何層」、「屬性層」是如何組織的了。

2.1.2. 案例講解--shapefile

shp文件至少要有3個文件構成,*.shp、*.shx、*.dbf

由於這些是二進制文件,不能用文本格式查看,因此直接給出結論:

*.shp文件記錄的是幾何數據

*.dbf文件記錄的是屬性數據

*.shx連接兩者是索引數據

咱們將2.1.1中的geojson文件在QGIS中導出shp並在ArcMap裏打開其屬性表:

 

 

發現多了兩列屬性,其中Shape屬性不管給這個shp文件加多少個點,它的值寫在屬性表裏的都是一個漢字「點」。

並且,FID和Shape屬性是沒法在屬性表裏編輯的。

實際上,這個Shape屬性列,就是幾何數據,ArcMap把它「寫」在了屬性表而已。咱們編輯它仍是得靠編輯工具。

ArcMap的屬性表經過「顯示」Shape列,告訴用戶幾何數據和旁邊city、editor、adcode三列是並排的,也即「幾何數據」、「屬性數據」是同級別的數據,只不過幾何數據可能很複雜,在屬性表上一個格子寫不完就乾脆展現這個幾何信息的類別「點」罷了。

2.2. 要素層

要素層很簡單。

先下定義:一個要素表示一個地理實體,一個要素有其本身的幾何數據和屬性數據。

咱們依舊是上面的點json來說解。

 

 

不難看到,properties和geometry鍵都是"features"這個數組鍵的某個元素下的子鍵。

這意味着,一個{"type": 「Feature」, ...}就是一個"feature",即一個要素。

因爲有了幾何和屬性的分割,一個要素固然能夠有n個屬性,一個要素的幾何也能夠是n個點/線/面構成的複雜幾何圖形。

n個屬性好理解,n個點/線/面構成的複雜幾何圖形又是什麼意思呢?

這裏再也不展開描述,有興趣的朋友能夠去參考ogc的Geometry標準,它規定了幾何體的複雜構成。之後有機會必定會寫一篇ogc標準下的geometry標準。

咱們注意到了,"features"下的每一個要素的properties的子鍵都是同樣的(名稱、類型)。

2.3. 數據層

仍是以上文的geojson爲例。

咱們說,n個具備共同類型和數量屬性的"feature"(即每個feature的"properties"的子鍵名稱一致,類型一致),加上一些元數據(座標系信息,四至等,每種數據格式不太同樣),構成一個矢量數據。

這個矢量數據已經上升到磁盤文件級別了,咱們爲了複用,不可能一個一個要素分別存在獨立的文件裏的,由於屬性的數量、類型一致,因此要素能夠存在一個文件(或者容器)裏。

咱們把這個容器所在的級別,叫作「數據層」。

我爲何不說一個矢量數據文件就是一個「數據層」的實現呢?

由於,一個矢量數據當然能夠是一個geojson文件,一個shp文件(由多個同名子文件組成),一個gml文件,一個csv文件...固然一個矢量數據也能夠是數據庫裏的一個表,或者一個要素類(ArcGIS裏的gdb)。

咱們討論的是「分層」,而不是物理文件構成。

一般來講,咱們傳遞的大多數都是數據層。好比,咱們傳遞一個「中國省級行政區劃」的shp文件,或者傳遞一個「廣州市醫療機構點位」的geojson文件。

咱們不多傳遞一個「要素」,傳遞一個「幾何面」——代碼層面除外。

plus 數據層爲何不叫圖層

咱們把一個矢量數據(geojson/shp/數據庫裏某張地理數據表等)拖到任何一個GIS客戶端軟件中,必定能看到它的樣子,軟件會給咱們畫出來,它這個時候,叫作「圖層」。

由於數據和圖層分擔着各自不一樣的任務,圖層負責渲染、顯示數據,數據被圖層引用。

這就比如,帳本專心管理財務流水,報表ppt專心負責回報財務流水的各類趨勢比例。

咱們GIS軟件依靠圖層將數據符號化,好比給某個點數據設定了符號是一個尺寸是15的紅色五角星,給某個線數據設定了標註是它的「name」字段,經過圖層查看一個數據的元數據等...

2.4. 地圖層

什麼是地圖層?

咱們有了數據層,就能夠進行地理數據的分析、展現、交互了。

咱們爲了組織起地理數據,須要將數據排列順序,符號化,設計出一張地圖。

地圖這一層包括了n個數據(也即n個圖層,每一個圖層引用一份數據)。

固然,咱們還能夠爲數據作分組。

咱們知道ArcMap中,有個「數據框」的概念,其實一個數據框就是一個地圖,數據框就是地圖層這一級別的容器。

 

 

你們可能看中國地圖會觀察到右下方一般會有一個「南海諸島圖」,其實中國大陸主體地區和右下方的「南海諸島圖」用兩個數據框就能夠表示了。

事實上,QGIS也有同樣的概念,在佈局窗口中,咱們能夠插入一個地圖:

 

 

一樣能作到「南海諸島圖」和大陸圖在同一個佈局裏顯示的效果。這裏插入的「地圖」就是「地圖層」的一個活生生的案例。

plus:

GIS客戶端軟件會使用「工程文件」的手段,把n個「地圖」包裹在一塊兒。

3. 柵格數據的四個分層

3.1. 位置/屬性

[暫空,過年前寫完]

3.2. 像元層

[暫空,過年前寫完]

3.3. 數據層

[暫空,過年前寫完]

3.4. 地圖層

地圖層與矢量數據的地圖層一致,都爲n個柵格數據按必定順序、符號化構成。

4. GIS數據服務是什麼

4.1. GIS服務器

GIS服務,與普通網絡服務是同樣的。

  • 普通Web服務器提供網絡服務,使得咱們能夠上網衝浪
  • GIS服務器提供GIS數據服務,使得咱們能夠遵循某些規範訪問地理數據或者地理服務

咱們常見的Web服務器軟件,有IIS、Apache、Nginx、tomcat等,也能夠用Java/nodejs等工具語言編寫本身的服務器後臺軟件。

GIS服務器軟件基於HTTP等協議(作webgis的,若是連http協議都不知道,建議先補補課),也有一些受歡迎的:開源的GeoServer、MapServer,商用的Esri的ArcGIS Enterprise套件等。

GIS服務器能夠是獨立的軟件,也能夠是某個Web服務器的一個插件。例如,ArcGIS Enterprise套件就是自成一家,GeoServer就是Tomcat的一個war包插件。

Q:GIS數據必定要放在GIS服務器上嗎?

A:不必定。諸如geojson這樣的文本類型數據,能夠直接放到普通web服務器上,經過http的get或post請求交換數據;諸如gltf這種3dtiles規範的三維數據,開源服務器還沒有支持三維服務,OGC組織也沒有3DGIS服務規範,只好放在普通web服務器上。可是,成熟的二維數據,作成GIS數據服務是有利於前端開發者進行調用、渲染、數據查詢、雲處理的。

4.2. GIS服務

扯了半天,那什麼是GIS服務呢?

一般來講,咱們說的GIS服務就是GIS數據服務。可是,其實GIS服務還能夠提供計算服務,也即GIS處理服務,做爲4.3的內容講解。

4.2.1. 提供訪問地理數據的網絡地圖服務——WMS

WMS,Web Map Service,網絡地圖服務。

一個WMS是一個「地圖層」的實現,只不過限制了網絡請求的功能。

它容許將n個數據發佈成一個「GIS服務」,1個數據被叫作1個圖層,由於要對web提供訪問,因此用圖層這種帶符號化的形式來描述「數據層」比較合適。

它提供瞭如下幾大功能,有興趣的朋友能夠參考博客園李曉輝的博客,或者直接查閱OGC官方文檔(列在參考文檔中了):

[暫空,過年前寫完]

4.2.2. 提供增刪改查矢量數據的網絡要素服務——WFS

WFS,Web Features Service,網絡要素服務。

WFS強化了WMS中關於矢量數據的訪問,提供了增長、修改、刪除、查詢矢量要素的功能。

WMS對矢量數據的查詢,侷限在了「識別」這一功能上。

咱們從功能上就能看出,WMS有一個功能是「getFeaturesInfo」,而WFS直接給出了"getFeature"、「」等功能。

WFS的主要功能以下:

[暫空,過年前寫完]

4.2.3. 網絡覆被服務——WCS

筆者對WCS瞭解很少,以粗鄙的文筆寫寫和WMS、WFS的區別。

[暫空,過年前寫完]

4.2.4. WMS的變種網絡切片/緩存服務——WMTS

WMS能給前端返回一張位圖,和咱們在GIS軟件裏對一個地圖直接截個圖(不通過製圖)相似。

若是這張位圖體積過大或者網絡傳輸很差,那麼極有可能前端是拿不到的,就渲染不出來。

分治思想刺激WMS演進,即WMTS,原理很簡單,即把這張位圖實現按網格切好,在不一樣的分辨率下,把這些切好的圖(都緩存在地理服務器上)按前端指定的範圍,挨個傳遞。

這樣,一張小圖可能體積並不大,保證了前端的體驗。

4.2.5. 三維場景服務

迄今爲止並未有三維地理數據服務標準,只有三大地理三維數據格式標準:

  • i3s
  • 3dtiles
  • s3m

其中,前兩個被ogc認可,且主推i3s。

i3s由Esri(就arcgis家)主推,以slpk文件爲交互文件,在自家的ArcGIS Enterprise服務器生態中,已經研發出「SceneService」這種場景服務了。

3dtiles由開源項目Cesium主推,目前只有數據文件,即gltf文件,號稱是三維數據界的jpg,目前開源的商業的gis服務器還沒有支持三維服務,cesium本身是直接前端調用gltf文件建立視圖。

s3m是國內北京超圖主推的一個標準。

三者共同的特色是用樹結構來組織數據,用json文件描述數據,用二進制文件來存儲具體數據。

4.3. GIS處理服務

遵循一種規範,能夠將繁重的處理任務交由服務器運行,而後根據規範,將處理結果返回給前端。這在普通的web服務中是理所固然的事情,只不過加上GIS數據這個殼兒,事情就變得有點複雜了起來。

其實OGC組織是有這麼一個規範的,叫WPS——Web Process Service。

[暫空,過年前寫完]

相關文章
相關標籤/搜索