天天看點

聊聊GIS資料的四個分層與GIS服務

GIS資料的一些實踐經驗總結!

本篇不讨論矢量栅格資料的結構,也不讨論矢量與栅格的差別(即設定讀者有這方面的基礎)。

版權聲明:原創。部落格園/B站/小專欄/知乎/CSDN @秋意正寒

轉載請标注原位址并聲明轉載: https://www.cnblogs.com/onsummer/p/12082568.html

本文系概念性很強的部落格,但對GIS項目有幫助,對在讀的學生也有一定幫助。

盡管從實體的角度,隻有獨立資料檔案(shp、geojson、tif等)或者資料庫(esri geodatabase的gdb、geopackage等)這兩種

但是,從學科角度,即從GIS的視角看,地理資料并沒有那麼簡單。

為解釋簡便,使用shapefile、geojson、tif栅格和gdb、postgis,輔助ArcMap/QGIS 3.10做解說。

1. 術語及概念定義

① 地理資料

地理資料=空間資料+非空間資料;也叫地理資訊。例如:一座醫院;一所學校;一條道路;一條河流

② 空間資料

即幾何資料,描述坐标、形狀的資料;也叫空間資訊。例如:形狀、坐标

③ 非空間資料

即屬性資料,描述與空間位置無關的一類資料。例如:成績單、醫院名稱清單

這類資料的特點是,如果脫離了地理位置也有它本身自己的含義。

2. 矢量資料的四個分層

聊聊GIS資料的四個分層與GIS服務

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

2.1. 幾何/屬性層

這是矢量資料的最底層,有兩個類别:幾何層或者屬性層。

前陣子寫了一系列坐标系有關的部落格,我們假定在某個坐标系下,存在某個點P(x0,y0),這個點在這個确定的坐标系下,就是獨一無二的。

那麼,如果這個點代表的是一個咖啡店,僅僅知道這個點的坐标(x0,y0)是不夠的。

不同的使用者關心不同的資訊,有人關心這個店的電話号碼,有的人關心它所在的城市和行政區,有的人關心它的位址,有的人關心它的人均消費。

這個時候,資訊就可以分化成兩個種屬:幾何的,屬性的。

  • 我們說表征位置資訊的坐标資料(或者多個坐标構成的線、面),叫幾何資料。
  • 除了幾何資料,都叫屬性資料。

上大學的時候,系主任說:地理資料差別于其他行業的資料,最大的差別是它具有空間資料!

我們剛明确了幾何資料是什麼,屬性資料是什麼,那麼多出來的一系列名詞又是什麼?

做以下規定:

  • 地理資料=幾何資料+屬性資料=空間資料+非空間資料
  • 幾何資料=空間資料
  • 屬性資料=非空間資料

這樣就不亂了。預設使用“地理資料=幾何資料+屬性資料”這個表達。

2.1.1. 案例講解--geojson

現在講概念其實很枯燥,那麼一個具體的矢量資料檔案,比如geojson或者shp,如何判斷哪些是幾何資料,哪些是屬性資料呢?

我們取一個geojson檔案,隻有一個點,沒有屬性資料。它在QGIS裡長得像這樣:

它資料長這樣:

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

我們可以很快聚焦到"geometry"這個鍵上,它下列有兩個子鍵"type"和"coordinate",這兩個子鍵的值就是這個geojson矢量資料的幾何資訊。

讀者可以想象得到,如果type是“LineString(即多折線)”,那麼coordinate将是一堆折線段的集合。

如果是Polygon:

 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檔案加多少個點,它的值在ArcMap屬性表裡的都是一個漢字“點”。

而且,FID和Shape屬性是無法在屬性表裡編輯的。

實際上,這個Shape屬性列,就是幾何資料,ArcMap把它“寫”在了屬性表而已。我們編輯它還是得靠編輯工具。

ArcMap的屬性表通過“顯示”Shape列,告訴使用者幾何資料和旁邊city、editor、adcode三列是并排的。

也即“幾何資料”、“屬性資料”是同級别的資料,隻不過幾何資料可能很複雜,在屬性表上一個格子寫不完,就幹脆寫個漢字。

實際在ESRI的體系中,幾何的表達比OGC的表達更為精妙複雜。

因為深入需要研究ArcPy或AO代碼,有一定難度,故不展開。讀者隻要能讀懂“幾何”“屬性”是并列的兩個資料層即可。

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"的子鍵名稱一緻,類型一緻),加上一些中繼資料(坐标系資訊,四至等,每種資料格式不太一樣),構成一個矢量資料。

這個矢量資料已經上升到磁盤檔案級别了,我們為了複用,不可能一個一個要素分别存在獨立的檔案裡的,因為屬性的數量、類型一緻,是以要素可以存在一個檔案(或者容器)裡。

我們把這個容器所在的級别,叫做“資料層”。

我為什麼不說一個矢量資料檔案(例如一個json檔案,一份shp檔案)就是一個“資料層”的實作呢?

因為,一個矢量資料固然可以是一個geojson檔案,一個shp檔案(由多個同名子檔案組成),一個gml檔案,一個csv檔案...當然一個矢量資料也可以是資料庫裡的一個表,或者一個要素類(ArcGIS裡的gdb)。

我們讨論的是“分層”,而不是實體檔案構成。

通常來說,我們傳遞的資料大多數處于資料層。比如,我們傳遞一個“中國省級行政區劃”的shp檔案,或者傳遞一個“廣州市醫療機構點位”的geojson檔案。

我們很少傳遞一個“要素”,傳遞一個“幾何面”——代碼層面除外。

plus 資料層(Data)為什麼不叫圖層(Layer)

我們把一個矢量資料(geojson/shp/資料庫裡某張地理資料表等)拖到任何一個GIS用戶端軟體中,一定能看到它的樣子,軟體會給我們畫出來,它這個時候,叫做“圖層”。

因為資料和圖層分擔着各自不同的任務,圖層負責渲染、顯示資料,資料被圖層引用。一個資料是可以被多個圖層引用的。

這就好比,賬本專心管理财務流水,報表ppt專心負責回報财務流水的各種趨勢比例。

我們GIS軟體依靠圖層将資料符号化,比如給某個點資料設定了符号是一個尺寸是15的紅色五角星,給某個線資料設定了标注是它的“name”字段,通過圖層檢視一個資料的中繼資料等...

2.4. 地圖層

什麼是地圖層?

我們有了資料層,就可以進行地理資料的分析、展示、互動了。

我們為了組織起地理資料,需要将資料排列順序,符号化,設計出一張地圖。

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

當然,我們還可以為資料做分組。

我們知道ArcMap中,有個“資料框”的概念,其實一個資料框就是一個地圖,資料框就是地圖層這一級别的容器。

大家可能看中國地圖會觀察到右下方通常會有一個“南海諸島圖”,其實中國大陸主體地區和右下方的“南海諸島圖”用兩個資料框就可以表示了。

事實上,QGIS也有一樣的概念,在布局視窗中,我們可以插入一個地圖:

同樣能做到“南海諸島圖”和大陸圖在同一個布局裡顯示的效果。這裡插入的“地圖”就是“地圖層”的一個活生生的案例。

plus:

GIS用戶端軟體會使用“工程檔案”的手段,把n個“地圖”包裹在一起。QGIS使用*.qgz檔案,ArcMap使用mxd文檔,ArcGISPro使用arpx檔案。

3. 栅格資料的四個分層

栅格資料和矢量資料當然是有差別的,但是,在概念上可以歸一。

3.1. 位置/屬性

在栅格中,幾何圖形所代表的空間資料被像元的中心坐标值代替了,該像元的像元值即屬性值。

我們知道,栅格資料可以是單波段也可以是多波段,可以是浮點數栅格也可以是整數栅格。

栅格資料可以代表的地理資料種類比較多,以單波段資料為例,整數栅格有屬性表,可以添加多列屬性(即給不同的像元值賦予不同的意義),浮點栅格則不行。

多波段則能實作“同一個像元坐标”“n個像元值”,并且每個像元值獨立,不受整數或者浮點數影響。

3.2. 像元層

像元,包括像元分辨率、像元中心坐标和像元值三大主要資料。

像元層并不像矢量中的要素層表意那麼直接,因為單像元表達的地理實體不如一個要素強。但是,多個像元是可以做到一個要素的表達效果的。

比如,在DEM栅格資料中,一個像元可以概括表達這個像元面積這麼大的地方的海拔高度。多個連片的像元可以構成一塊地區的地形。

但是,和要素層的核心要義是一樣的,像元層和要素層都能表達地理實體,把像元的三大主要資料孤立讨論,是不能表達地理實體的。

3.3. 資料層

資料層和矢量資料的資料層類似,為n個呈矩陣排列的像元構成的圖像。

這個圖像可以是一層,也可以是多層疊加,隻要保證像元中心坐标一緻、像元分辨率一緻即可。

資料層的實體形式比較簡單,除了一些中繼資料外(坐标系什麼的),就是一個體積比較大的資料檔案,或者在資料庫裡的一張表或者一個栅格資料集(Esri gdb)。

若為一個單檔案,常見的GIS資料格式為tif,盡管jpg/png/bmp等傳統圖檔格式也可以稱作栅格資料,但是它們設計的初衷并不是GIS應用。

在GIS資料服務中,栅格資料切片可以是jpg/png,因為便于網絡傳輸和顯示。

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的内容講解。

OGC中資料服務有很多,隻挑一些常見的帶過,具體怎麼用還是得靠讀者進一步閱讀更多的資料,本文的重點仍舊是上面的四層概念。

GIS服務扮演的角色,更像是WebGIS中對GIS資料和使用者互動之間的一個橋梁,它規範并限制了請求端的操作。

GIS資料服務應該屬于“地圖層”這一層級,因為它可以包括多個資料(圖層)。

4.2.1. 提供通路地理資料的網絡地圖服務——WMS

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

一個WMS是一個“地圖層”的實作,隻不過限制了網絡請求的功能。

它允許将n個資料釋出成一個“GIS服務”,1個資料被叫做1個圖層,因為要對web提供通路,是以用圖層這種帶符号化的形式來描述“資料層”比較合适。

它提供了以下幾大功能,有興趣的朋友可以參考部落格園李曉晖的部落格,或者直接查閱OGC官方文檔(列在參考文檔中了):

  • GetCapabitities(傳回服務級中繼資料)
  • GetMap(擷取地圖圖像)
  • GetFeatureInfo(傳回識别的要素資訊)

第一個沒什麼好說的。

第二個擷取的是給定參數(比如範圍、傳回圖像的格式等)的地圖圖像,和截圖差不多。

第三個功能,說大白話就是“點選地圖,根據點位擷取指定圖層上的要素”。

4.2.2. 提供增删改查矢量資料的網絡要素服務——WFS

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

WFS強化了WMS中關于矢量資料的通路,提供了增加、修改、删除、查詢矢量要素的功能。

WMS對矢量資料的查詢,局限在了“識别”這一功能上。

我們從功能上就能看出,WMS有一個功能是“getFeaturesInfo”,而WFS直接給出了"getFeature"、“Transaction”等功能。

WFS的主要功能如下:

  • GetCapabitities(擷取這個服務的中繼資料)
  • DescribeFeatureType(擷取這個服務上要素的中繼資料)
  • GetFeature(擷取要素)
  • Transaction(對要素進行增删改)

GetCapabitities和DescribeFeatureType的差別在于,前者描述整個服務,後者聚焦于矢量資料的中繼資料。

GetFeature既可以使用get請求,也可以使用post請求。無論get請求還是post請求,都可以使用過濾條件,過濾一些不滿足給定條件的矢量資料。

Transaction使用post請求,将指定格式的xml請求到gis伺服器上。

WFS要求服務的接口必須由XML描述,另外資料互動必須由GML(一個OGC矢量資料格式規範)迚行,資料過濾采用CQL語言。

4.2.3. 網絡覆寫服務——WCS

WCS标準定義了一些操作,這些操作允許使用者通路“Coverage”資料,如衛星影像、數字高程資料等,也就是栅格資料。

有矢量就有栅格,與WFS形成對比,WCS的C,就是栅格資料的意思。

WCS也有幾個功能:

  • GetCapabilities(擷取服務的元資訊)
  • DescribeCoverage(擷取Coverage的描述資訊)
  • GetCoverage(擷取Coverage)

4.2.4. WMS的變種:網絡地圖切片服務——WMTS

WMS能給前端傳回一張位圖,和我們在GIS軟體裡對一個地圖直接截個圖(不經過制圖)類似。

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

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

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

4.2.5. 三維場景服務

迄今為止并未有三維地理資料服務标準,隻有三大地理三維資料格式标準:

  • i3s
  • 3dtiles/gltf
  • s3m

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

i3s由Esri(就arcgis家)主推,以slpk檔案為互動檔案,在自家的ArcGIS Enterprise伺服器生态中,已經研發出“SceneService”這種GIS商業資料服務了。

3dtiles是ogc的一個标準,是i3s的主要競争對手。

gltf,号稱是三維資料界的jpg,目前(發文時間2020年初)開源的商業的gis伺服器尚未支援三維服務,cesium自己是直接前端調用gltf檔案建立視圖。

s3m是國内北京超圖主推的一個标準。

i3s、gltf、s3m三者共同的特點是用樹結構來組織資料,用json檔案描述資料,用二進制檔案來存儲具體資料。

4.3. GIS處理服務

遵循一種規範,可以将繁重的處理任務交由伺服器運作,然後根據規範,将處理結果傳回給前端。這在普通的web服務中是理所當然的事情,隻不過加上GIS資料這個殼兒,事情就變得有點複雜了起來。

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

Web 處理服務 (WPS) 是用于釋出地理空間過程、算法和計算的 OGC 服務。

WPS 服務可作為GIS伺服器的擴充,為資料處理和地理空間分析提供執行操作。

預設情況下,WPS 不是 GeoServer 的一部分,但可作為擴充提供。

Esri ArcGIS Enterprise中的Server和Portal都原生支援了WPS,并且有比WPS更強大的GP服務。

有關WPS在GeoServer上的資料,參考各大部落格和文末的參考文檔。

==============分割線==============

GIS伺服器有商業也有開源,對OGC的多個服務支援也各有千秋,本文僅作簡略介紹,而且有标準文檔、各路案例部落格資料,想必可以不再發文描述。

讀者更應該關注的是本文提出的“四層概念”,多思考多比對。

在本篇中的四層概念合适套用在二維資料或者三維資料上,至于i3s标準下的slpk和3dtiles、gltf資料并不太适用,那些更合适網絡分發,畢竟官方提及,slpk不适合再進行編輯。

參考文檔

[1] GeoServer中WMS、WFS的請求規範 . 李曉晖. https://www.cnblogs.com/naaoveGIS/p/5508882.html

[2] OGC标準介紹. 吳泳鋒 [M] [email protected]

[3] GeoServer WPS文檔 https://docs.geoserver.org/latest/en/user/services/wps/index.html

[4] OGC标準介紹 5 . https://blog.csdn.net/warrenwyf/article/details/5717612

[5] OGC标準介紹. https://blog.csdn.net/lavanana/article/details/93975949

繼續閱讀