盡管從物理的角度,只有獨立數(shù)據(jù)文件(shp、geojson、tif等)或者數(shù)據(jù)庫(esri geodatabase的gdb、geopackage等)這兩種 但是,從學(xué)科角度,即從GIS的視角看,地理數(shù)據(jù)并沒有那么簡單。 為解釋簡便,使用shapefile、geojson、tif柵格和gdb、postgis,輔助ArcMap/QGIS 3.10做解說。 1. 術(shù)語及概念定義① 地理數(shù)據(jù)地理數(shù)據(jù)=空間數(shù)據(jù)+非空間數(shù)據(jù);也叫地理信息。例如:一座醫(yī)院;一所學(xué)校;一條道路;一條河流 ② 空間數(shù)據(jù)即幾何數(shù)據(jù),描述坐標(biāo)、形狀的數(shù)據(jù);也叫空間信息。例如:形狀、坐標(biāo) ③ 非空間數(shù)據(jù)即屬性數(shù)據(jù),描述與空間位置無關(guān)的一類數(shù)據(jù)。例如:成績單、醫(yī)院名稱列表 這類數(shù)據(jù)的特點是,如果脫離了地理位置也有它本身自己的含義。 2. 矢量數(shù)據(jù)的四個分層不妨這樣想:每一層均為子一層的容器。大魚吃小魚,小魚吃蝦米。 2.1. 幾何/屬性層這是矢量數(shù)據(jù)的最底層,有兩個類別:幾何層或者屬性層。 前陣子寫了一系列坐標(biāo)系有關(guān)的博客,我們假定在某個坐標(biāo)系下,存在某個點P(x0,y0),這個點在這個確定的坐標(biāo)系下,就是獨一無二的。 那么,如果這個點代表的是一個咖啡店,僅僅知道這個點的坐標(biāo)(x0,y0)是不夠的。 不同的用戶關(guān)心不同的信息,有人關(guān)心這個店的電話號碼,有的人關(guān)心它所在的城市和行政區(qū),有的人關(guān)心它的地址,有的人關(guān)心它的人均消費。 這個時候,信息就可以分化成兩個種屬:幾何的,屬性的。
上大學(xué)的時候,系主任說:地理數(shù)據(jù)區(qū)別于其他行業(yè)的數(shù)據(jù),最大的區(qū)別是它具有空間數(shù)據(jù)! 我們剛明確了幾何數(shù)據(jù)是什么,屬性數(shù)據(jù)是什么,那么多出來的一系列名詞又是什么? 做以下規(guī)定:
這樣就不亂了。默認(rèn)使用“地理數(shù)據(jù)=幾何數(shù)據(jù)+屬性數(shù)據(jù)”這個表達(dá)。 2.1.1. 案例講解--geojson現(xiàn)在講概念其實很枯燥,那么一個具體的矢量數(shù)據(jù)文件,比如geojson或者shp,如何判斷哪些是幾何數(shù)據(jù),哪些是屬性數(shù)據(jù)呢? 我們?nèi)∫粋€geojson文件,只有一個點,沒有屬性數(shù)據(jù)。它在QGIS里長得像這樣: 它數(shù)據(jù)長這樣: 是WGS84下的一個點,在廣州城區(qū)。 我們可以很快聚焦到"geometry"這個鍵上,它下列有兩個子鍵"type"和"coordinate",這兩個子鍵的值就是這個geojson矢量數(shù)據(jù)的幾何信息。 讀者可以想象得到,如果type是“LineString(即多折線)”,那么coordinate將是一堆折線段的集合。 如果是Polygon: geometry的值的的確確就是上面提及的“表征位置信息的坐標(biāo)數(shù)據(jù)”。 我編輯了一下只有一個點的geojson,使其擁有三個屬性數(shù)據(jù):所在城市是"Guangzhou",編輯者是"秋意正寒",郵政編碼是"510000". 屬性表長這樣: 文本變成了這樣: 我們不難看到,和geometry鍵并列的多了一個鍵:"properties"。 它翻譯過來就是屬性的意思(別的數(shù)據(jù)格式可能叫“attributes”) 我們看到了在geojson中,“幾何層”、“屬性層”是如何組織的。 2.1.2. 案例講解--shapefileshp文件至少要有3個文件構(gòu)成,*.shp、*.shx、*.dbf 因為這些是二進(jìn)制文件,不能用文本格式查看,所以直接給出結(jié)論: *.shp文件記錄的是幾何數(shù)據(jù) *.dbf文件記錄的是屬性數(shù)據(jù) *.shx鏈接二者是索引數(shù)據(jù) 我們將2.1.1中的geojson文件在QGIS中導(dǎo)出shp并在ArcMap里打開其屬性表: 發(fā)現(xiàn)多了兩列屬性,其中Shape屬性無論給這個shp文件加多少個點,它的值在ArcMap屬性表里的都是一個漢字“點”。 而且,F(xiàn)ID和Shape屬性是無法在屬性表里編輯的。 實際上,這個Shape屬性列,就是幾何數(shù)據(jù),ArcMap把它“寫”在了屬性表而已。我們編輯它還是得靠編輯工具。 ArcMap的屬性表通過“顯示”Shape列,告訴用戶幾何數(shù)據(jù)和旁邊city、editor、adcode三列是并排的。 也即“幾何數(shù)據(jù)”、“屬性數(shù)據(jù)”是同級別的數(shù)據(jù),只不過幾何數(shù)據(jù)可能很復(fù)雜,在屬性表上一個格子寫不完,就干脆寫個漢字。
2.2. 要素層要素層很簡單。 先下定義:一個要素表示一個地理實體,一個要素有其自己的幾何數(shù)據(jù)和屬性數(shù)據(jù)。 我們依舊是上面的點json來講解。 不難看到,properties和geometry鍵都是"features"這個數(shù)組的某個元素下的子鍵,這里的某個元素,就是要素。 也即,{"type": “Feature”, ...}就是一個"feature",一個要素。 由于有了幾何和屬性的分割,一個要素當(dāng)然可以有n個屬性,一個要素的幾何也可以是n個點/線/面構(gòu)成的復(fù)雜幾何圖形。 n個屬性好理解,n個點/線/面構(gòu)成的復(fù)雜幾何圖形又是什么意思呢? 這里不再展開描述,有興趣的朋友可以去參考o(jì)gc的Geometry標(biāo)準(zhǔn),它規(guī)定了幾何體的復(fù)雜構(gòu)成。以后有機(jī)會一定會寫一篇ogc標(biāo)準(zhǔn)下的geometry標(biāo)準(zhǔn)。 我們注意到了,"features"下的每個要素的properties的子鍵都是一樣的(名稱、類型)。 2.3. 數(shù)據(jù)層還是以上文的geojson為例。 我們說,
這個矢量數(shù)據(jù)已經(jīng)上升到磁盤文件級別了,我們?yōu)榱藦?fù)用,不可能一個一個要素分別存在獨立的文件里的,因為屬性的數(shù)量、類型一致,所以要素可以存在一個文件(或者容器)里。 我們把這個容器所在的級別,叫做“數(shù)據(jù)層”。 我為什么不說一個矢量數(shù)據(jù)文件(例如一個json文件,一份shp文件)就是一個“數(shù)據(jù)層”的實現(xiàn)呢? 因為,一個矢量數(shù)據(jù)固然可以是一個geojson文件,一個shp文件(由多個同名子文件組成),一個gml文件,一個csv文件...當(dāng)然一個矢量數(shù)據(jù)也可以是數(shù)據(jù)庫里的一個表,或者一個要素類(ArcGIS里的gdb)。 我們討論的是“分層”,而不是物理文件構(gòu)成。 通常來說,我們傳遞的數(shù)據(jù)大多數(shù)處于數(shù)據(jù)層。比如,我們傳遞一個“中國省級行政區(qū)劃”的shp文件,或者傳遞一個“廣州市醫(yī)療機(jī)構(gòu)點位”的geojson文件。 我們很少傳遞一個“要素”,傳遞一個“幾何面”——代碼層面除外。 plus 數(shù)據(jù)層(Data)為什么不叫圖層(Layer)我們把一個矢量數(shù)據(jù)(geojson/shp/數(shù)據(jù)庫里某張地理數(shù)據(jù)表等)拖到任何一個GIS客戶端軟件中,一定能看到它的樣子,軟件會給我們畫出來,它這個時候,叫做“圖層”。 因為數(shù)據(jù)和圖層分擔(dān)著各自不同的任務(wù),圖層負(fù)責(zé)渲染、顯示數(shù)據(jù),數(shù)據(jù)被圖層引用。一個數(shù)據(jù)是可以被多個圖層引用的。 這就好比,賬本專心管理財務(wù)流水,報表ppt專心負(fù)責(zé)回報財務(wù)流水的各種趨勢比例。 我們GIS軟件依靠圖層將數(shù)據(jù)符號化,比如給某個點數(shù)據(jù)設(shè)定了符號是一個尺寸是15的紅色五角星,給某個線數(shù)據(jù)設(shè)定了標(biāo)注是它的“name”字段,通過圖層查看一個數(shù)據(jù)的元數(shù)據(jù)等... 2.4. 地圖層什么是地圖層? 我們有了數(shù)據(jù)層,就可以進(jìn)行地理數(shù)據(jù)的分析、展示、交互了。 我們?yōu)榱私M織起地理數(shù)據(jù),需要將數(shù)據(jù)排列順序,符號化,設(shè)計出一張地圖。 地圖這一層包括了n個數(shù)據(jù)(也即n個圖層,每個圖層引用一份數(shù)據(jù))。 當(dāng)然,我們還可以為數(shù)據(jù)做分組。 我們知道ArcMap中,有個“數(shù)據(jù)框”的概念,其實一個數(shù)據(jù)框就是一個地圖,數(shù)據(jù)框就是地圖層這一級別的容器。 大家可能看中國地圖會觀察到右下方通常會有一個“南海諸島圖”,其實中國大陸主體地區(qū)和右下方的“南海諸島圖”用兩個數(shù)據(jù)框就可以表示了。 事實上,QGIS也有一樣的概念,在布局窗口中,我們可以插入一個地圖: 同樣能做到“南海諸島圖”和大陸圖在同一個布局里顯示的效果。這里插入的“地圖”就是“地圖層”的一個活生生的案例。 plus:GIS客戶端軟件會使用“工程文件”的手段,把n個“地圖”包裹在一起。QGIS使用*.qgz文件,ArcMap使用mxd文檔,ArcGISPro使用arpx文件。 3. 柵格數(shù)據(jù)的四個分層柵格數(shù)據(jù)和矢量數(shù)據(jù)當(dāng)然是有區(qū)別的,但是,在概念上可以歸一。 3.1. 位置/屬性在柵格中,幾何圖形所代表的空間數(shù)據(jù)被像元的中心坐標(biāo)值代替了,該像元的像元值即屬性值。 我們知道,柵格數(shù)據(jù)可以是單波段也可以是多波段,可以是浮點數(shù)柵格也可以是整數(shù)柵格。 柵格數(shù)據(jù)可以代表的地理數(shù)據(jù)種類比較多,以單波段數(shù)據(jù)為例,整數(shù)柵格有屬性表,可以添加多列屬性(即給不同的像元值賦予不同的意義),浮點柵格則不行。 多波段則能實現(xiàn)“同一個像元坐標(biāo)”“n個像元值”,并且每個像元值獨立,不受整數(shù)或者浮點數(shù)影響。 3.2. 像元層像元,包括像元分辨率、像元中心坐標(biāo)和像元值三大主要數(shù)據(jù)。 像元層并不像矢量中的要素層表意那么直接,因為單像元表達(dá)的地理實體不如一個要素強。但是,多個像元是可以做到一個要素的表達(dá)效果的。 比如,在DEM柵格數(shù)據(jù)中,一個像元可以概括表達(dá)這個像元面積這么大的地方的海拔高度。多個連片的像元可以構(gòu)成一塊地區(qū)的地形。 但是,和要素層的核心要義是一樣的,像元層和要素層都能表達(dá)地理實體,把像元的三大主要數(shù)據(jù)孤立討論,是不能表達(dá)地理實體的。 3.3. 數(shù)據(jù)層數(shù)據(jù)層和矢量數(shù)據(jù)的數(shù)據(jù)層類似,為n個呈矩陣排列的像元構(gòu)成的圖像。 這個圖像可以是一層,也可以是多層疊加,只要保證像元中心坐標(biāo)一致、像元分辨率一致即可。 數(shù)據(jù)層的物理形式比較簡單,除了一些元數(shù)據(jù)外(坐標(biāo)系什么的),就是一個體積比較大的數(shù)據(jù)文件,或者在數(shù)據(jù)庫里的一張表或者一個柵格數(shù)據(jù)集(Esri gdb)。 若為一個單文件,常見的GIS數(shù)據(jù)格式為tif,盡管jpg/png/bmp等傳統(tǒng)圖片格式也可以稱作柵格數(shù)據(jù),但是它們設(shè)計的初衷并不是GIS應(yīng)用。 在GIS數(shù)據(jù)服務(wù)中,柵格數(shù)據(jù)切片可以是jpg/png,因為便于網(wǎng)絡(luò)傳輸和顯示。 3.4. 地圖層地圖層與矢量數(shù)據(jù)的地圖層一致,都為n個柵格數(shù)據(jù)按一定順序、符號化構(gòu)成。 4. GIS數(shù)據(jù)服務(wù)是什么4.1. GIS服務(wù)器GIS服務(wù),與普通網(wǎng)絡(luò)服務(wù)是一樣的。
我們常見的Web服務(wù)器軟件,有IIS、Apache、Nginx、tomcat等,也可以用Java/nodejs等工具語言編寫自己的服務(wù)器后臺軟件。 GIS服務(wù)器軟件基于HTTP等協(xié)議(做webgis的,如果連http協(xié)議都不知道,建議先補補課),也有一些受歡迎的:開源的GeoServer、MapServer,商用的Esri的ArcGIS Enterprise套件等。 GIS服務(wù)器可以是獨立的軟件,也可以是某個Web服務(wù)器的一個插件。例如,ArcGIS Enterprise套件就是自成一家,GeoServer就是Tomcat的一個war包插件。
4.2. GIS數(shù)據(jù)服務(wù)扯了半天,那什么是GIS服務(wù)呢? 通常來說,我們說的GIS服務(wù)就是GIS數(shù)據(jù)服務(wù)。但是,其實GIS服務(wù)還可以提供計算服務(wù),也即GIS處理服務(wù),作為4.3的內(nèi)容講解。 OGC中數(shù)據(jù)服務(wù)有很多,只挑一些常見的帶過,具體怎么用還是得靠讀者進(jìn)一步閱讀更多的資料,本文的重點仍舊是上面的四層概念。 GIS服務(wù)扮演的角色,更像是WebGIS中對GIS數(shù)據(jù)和用戶交互之間的一個橋梁,它規(guī)范并限制了請求端的操作。 GIS數(shù)據(jù)服務(wù)應(yīng)該屬于“地圖層”這一層級,因為它可以包括多個數(shù)據(jù)(圖層)。 4.2.1. 提供訪問地理數(shù)據(jù)的網(wǎng)絡(luò)地圖服務(wù)——WMSWMS,Web Map Service,網(wǎng)絡(luò)地圖服務(wù)。 一個WMS是一個“地圖層”的實現(xiàn),只不過限制了網(wǎng)絡(luò)請求的功能。 它允許將n個數(shù)據(jù)發(fā)布成一個“GIS服務(wù)”,1個數(shù)據(jù)被叫做1個圖層,因為要對web提供訪問,所以用圖層這種帶符號化的形式來描述“數(shù)據(jù)層”比較合適。 它提供了以下幾大功能,有興趣的朋友可以參考博客園李曉暉的博客,或者直接查閱OGC官方文檔(列在參考文檔中了):
第一個沒什么好說的。 第二個獲取的是給定參數(shù)(比如范圍、返回圖像的格式等)的地圖圖像,和截圖差不多。 第三個功能,說大白話就是“點擊地圖,根據(jù)點位獲取指定圖層上的要素”。
4.2.2. 提供增刪改查矢量數(shù)據(jù)的網(wǎng)絡(luò)要素服務(wù)——WFSWFS,Web Features Service,網(wǎng)絡(luò)要素服務(wù)。 WFS強化了WMS中關(guān)于矢量數(shù)據(jù)的訪問,提供了增加、修改、刪除、查詢矢量要素的功能。 WMS對矢量數(shù)據(jù)的查詢,局限在了“識別”這一功能上。 我們從功能上就能看出,WMS有一個功能是“getFeaturesInfo”,而WFS直接給出了"getFeature"、“Transaction”等功能。 WFS的主要功能如下:
GetCapabitities和DescribeFeatureType的區(qū)別在于,前者描述整個服務(wù),后者聚焦于矢量數(shù)據(jù)的元數(shù)據(jù)。 GetFeature既可以使用get請求,也可以使用post請求。無論get請求還是post請求,都可以使用過濾條件,過濾一些不滿足給定條件的矢量數(shù)據(jù)。 Transaction使用post請求,將指定格式的xml請求到gis服務(wù)器上。 WFS要求服務(wù)的接口必須由XML描述,另外數(shù)據(jù)交互必須由GML(一個OGC矢量數(shù)據(jù)格式規(guī)范)迚行,數(shù)據(jù)過濾采用CQL語言。 4.2.3. 網(wǎng)絡(luò)覆蓋服務(wù)——WCSWCS標(biāo)準(zhǔn)定義了一些操作,這些操作允許用戶訪問“Coverage”數(shù)據(jù),如衛(wèi)星影像、數(shù)字高程數(shù)據(jù)等,也就是柵格數(shù)據(jù)。 有矢量就有柵格,與WFS形成對比,WCS的C,就是柵格數(shù)據(jù)的意思。 WCS也有幾個功能:
4.2.4. WMS的變種:網(wǎng)絡(luò)地圖切片服務(wù)——WMTSWMS能給前端返回一張位圖,和我們在GIS軟件里對一個地圖直接截個圖(不經(jīng)過制圖)類似。 如果這張位圖體積過大或者網(wǎng)絡(luò)傳輸不好,那么極有可能前端是拿不到的,就渲染不出來。 分治思想刺激WMS演進(jìn),即WMTS,原理很簡單,即把這張位圖實現(xiàn)按網(wǎng)格切好,在不同的分辨率下,把這些切好的圖(都緩存在地理服務(wù)器上)按前端指定的范圍,挨個傳遞。 這樣,一張小圖可能體積并不大,保證了前端的體驗。 4.2.5. 三維場景服務(wù)迄今為止并未有三維地理數(shù)據(jù)服務(wù)標(biāo)準(zhǔn),只有三大地理三維數(shù)據(jù)格式標(biāo)準(zhǔn):
其中,前兩個被ogc承認(rèn),且主推i3s。 i3s由Esri(就arcgis家)主推,以slpk文件為交互文件,在自家的ArcGIS Enterprise服務(wù)器生態(tài)中,已經(jīng)研發(fā)出“SceneService”這種GIS商業(yè)數(shù)據(jù)服務(wù)了。 3dtiles是ogc的一個標(biāo)準(zhǔn),是i3s的主要競爭對手。 gltf,號稱是三維數(shù)據(jù)界的jpg,目前(發(fā)文時間2020年初)開源的商業(yè)的gis服務(wù)器尚未支持三維服務(wù),cesium自己是直接前端調(diào)用gltf文件創(chuàng)建視圖。 s3m是國內(nèi)北京超圖主推的一個標(biāo)準(zhǔn)。 i3s、gltf、s3m三者共同的特點是用樹結(jié)構(gòu)來組織數(shù)據(jù),用json文件描述數(shù)據(jù),用二進(jìn)制文件來存儲具體數(shù)據(jù)。 4.3. GIS處理服務(wù)遵循一種規(guī)范,可以將繁重的處理任務(wù)交由服務(wù)器運行,然后根據(jù)規(guī)范,將處理結(jié)果返回給前端。這在普通的web服務(wù)中是理所當(dāng)然的事情,只不過加上GIS數(shù)據(jù)這個殼兒,事情就變得有點復(fù)雜了起來。 其實OGC組織是有這么一個規(guī)范的,叫WPS——Web Process Service。 Web 處理服務(wù) (WPS) 是用于發(fā)布地理空間過程、算法和計算的 OGC 服務(wù)。 WPS 服務(wù)可作為GIS服務(wù)器的擴(kuò)展,為數(shù)據(jù)處理和地理空間分析提供執(zhí)行操作。 默認(rèn)情況下,WPS 不是 GeoServer 的一部分,但可作為擴(kuò)展提供。 Esri ArcGIS Enterprise中的Server和Portal都原生支持了WPS,并且有比WPS更強大的GP服務(wù)。 有關(guān)WPS在GeoServer上的資料,參考各大博客和文末的參考文檔。
==============分割線============== GIS服務(wù)器有商業(yè)也有開源,對OGC的多個服務(wù)支持也各有千秋,本文僅作簡略介紹,而且有標(biāo)準(zhǔn)文檔、各路案例博客資料,想必可以不再發(fā)文描述。 讀者更應(yīng)該關(guān)注的是本文提出的“四層概念”,多思考多比對。 在本篇中的四層概念合適套用在二維數(shù)據(jù)或者三維數(shù)據(jù)上,至于i3s標(biāo)準(zhǔn)下的slpk和3dtiles、gltf數(shù)據(jù)并不太適用,那些更合適網(wǎng)絡(luò)分發(fā),畢竟官方提及,slpk不適合再進(jìn)行編輯。
參考文檔[1] GeoServer中WMS、WFS的請求規(guī)范 . 李曉暉. https://www.cnblogs.com/naaoveGIS/p/5508882.html [2] OGC標(biāo)準(zhǔn)介紹. 吳泳鋒 [M] warrenwyf@gmail.com [3] GeoServer WPS文檔 https://docs./latest/en/user/services/wps/index.html [4] OGC標(biāo)準(zhǔn)介紹 5 . https://blog.csdn.net/warrenwyf/article/details/5717612 [5] OGC標(biāo)準(zhǔn)介紹. https://blog.csdn.net/lavanana/article/details/93975949 |
|