webGIS開發背景知識索引--瓦片原理與數據規範等

地圖的數據採集處理、服務搭建發佈、前端交互構建,要全講下來其實挺複雜,這裏僅僅簡單介紹一下,並羅列一些資料,如果有興趣,可以按圖索驥,深入瞭解。

 

1.OGC

OGC即爲Open Geospatial Consortium,開放地理信息聯盟,由530多家企業、政府機構、研究組織、大學組成的國際性協會,致力於提供地理信息行業軟件和數據及服務的標準化工作,推動地理空間位置信息和服務的公平性、可查性、訪問性、交互性、複用性。

簡而言之,就是GIS行業,從數據採集製作,到地圖位置服務發佈,都要遵循OGC定義或公佈的規範。

地理信息數據供應商,國外的如TomTom、HERE,國內的如四維圖新、高德,數據規格書,一整就大幾百頁,數據格式也千奇百怪,但其實數據分區與編碼規範都是類似的,都遵循OCG對地理空間數據的定義,核心是,幾何數據與屬性數據分開存儲,以唯一ID做關聯,數據分比例尺層級與圖幅存儲。

 

地圖與位置服務提供商,谷歌、OSM(開源)、高德、騰訊、百度、天地圖等,地圖頁面打開,有細微差別,但長得都挺像。WEB API服務,入參與出參,也沒有太大差異。原因不外乎,對於規範的遵守。

OGC的規範非常多,但很多規範都是現實中沒什麼用的水規範,用的最多應該是WMS。

官方網址:https://www.opengeospatial.org/

2.WMS

web map service,網絡地圖服務。

OGC最重要也最常用的規範就是WMS規範。WMS事無鉅細的爲網絡地圖的數據格式、圖例樣式、地圖發佈、交互設計等等方面定義了一系列的規範細則。原則上,所有地圖數據生產與地圖服務提供企業,都要遵循它。

落在地圖發佈與交互上,WMS=WMTS+WFS。

WMTS就是,web map tile service,網絡地圖瓦片服務,地圖數據量很大,無法直接傳到前端顯示,會先在後端渲染生成柵格圖片,將圖片傳到前端,用以顯示。

瓦片的意思是,後端渲染生成的圖片,是一塊一塊傳到前端的,就跟蓋房子的瓦片一塊一塊壘到房頂一樣。WMTS服務發佈的是柵格圖片,柵格內容無法修改。

WFS就是web feature service,網絡要素服務,這個服務是矢量的。地圖要素即爲feature,feature是一個可被操作的對象。通過WFS服務,可以對數據(幾何+屬性)進行增刪改查等操作。

簡而言之,WMS服務,其中WMTS,是用來看的,沒有辦法對數據進行操作,數據操作要通過WFS服務。

規範下載地址:http://www.opengeospatial.org/standards/wms

3.瓦片地圖

推動滾輪,修改比例尺,可以將地圖放大縮小。因爲電腦屏幕大小是一定的,所以比例尺越大,顯示的地理範圍就越小,而地圖內容就越詳細,比例尺越小,顯示的地理範圍就越大,而地圖內容就越概要。

瓦片地圖就像金字塔一樣,每層由一個個小方塊平鋪而成,以一個小方塊爲例,當地圖被放大的時候,這個小方塊所佔的實際地理空間被分成2×2的4個小方塊,新生成的小方塊像素寬度和長度跟原來的小方塊一樣,原來一個小方塊的內容由4個小方塊來展示,展示空間大了,就變得詳實了,但是電腦屏幕是一定的,之前加載多少小方塊,現在還加載多少。

http://cc.cocimg.com/api/uploads/20160316/1458108488269962.png

這就是瓦片地圖的核心,數據傳輸量是不變的,隨着比例尺的放大縮小,展示的實際地理空間和地圖內容會發生變化。

下面兩張圖,一個是3級比例尺下的內容,一個是13級比例尺下的內容,小方塊的像素大小是一樣的,但後者地圖內容要比前者詳細得多,而實際地理空間要小得多。

 

更多瓦片地圖的介紹,可參見兩篇寫的很清晰的博客:

https://segmentfault.com/a/1190000011276788?utm_source=tag-newest

https://blog.csdn.net/qq_35732147/article/details/81476542

 

 

4.座標系

我們用(x,y)表示二維平面上的一個點,用(x,y,z)表示三維空間中的一個點,這就是數學座標系。

同樣爲了抽象表示地球上某個點,還有點與點之間的關係,我們也需要爲地球找一個座標系,這就是大地座標系。

世界上大概有幾千個座標系,因爲地球不是圓的,每個地方最擬合地球表面的橢球肯定也不是同一個,所以各地的座標系也不一樣。

中國最早採用的是蘇聯的克拉索夫斯基橢球,原點在蘇聯的普爾科沃的北京54座標系(1954年規定的)。後來依然採用克拉索夫斯基橢球,但將原點設在了陝西省涇陽縣永樂鎮,因爲這套座標系在西安確定,1980年頒佈,所以叫做西安80座標系。再後來國家爲了發展空間技術,啓用了國家大地2000座標系,這也是北斗系統的座標系。

世界範圍比較常用的座標系是WGS84座標系,不搞高精定位的話,WGS84座標系和CGCS2000座標系差不了多少,一個地球參考極指向曆元1984年,一個指向曆元2000年,它倆的差別主要是地殼運動產生的,地殼運動每年2釐米偏移的話,16年也就三米多。

谷歌地圖和OSM地圖,都是WGS84座標系。

天地圖是CGCS2000座標系。

高德、騰訊是GCJ02座標系,GCJ02座標系是在WGS84基礎上加密而成的。

百度是BD09座標系,是在GCJ02上再次加密而成的。

更多座標系相關的內容,可參見:http://epsg.io/

EPSG是歐洲石油調查組的縮寫,經濟推進科技進步,收納世界全部座標系的組織是開採石油的。

WGS84(CGCS2000)、GCJ02、BD09之間的轉換參見:

https://github.com/wandergis/coordtransform

 

5.投影

地球是個球,電腦屏幕和手機屏幕都是一個面,如何在平面上顯示一個球?

把球拍平了,這就是投影,webGIS最常用的地圖投影就是墨卡託投影,墨卡託投影認爲地球是一個圓球,把它投影到一個方形上,其投影算法簡單高效,適用於平面顯示。

 

更多地圖投影的信息可參看:

https://desktop.arcgis.com/zh-cn/arcmap/10.3/guide-books/map-projections/about-map-projections.htm

6.WKT與WKB

WKT(Well-known text),是一種文本標記語言,用於表示矢量幾何對象、空間參照系統及空間參照系統之間的轉換。它的二進制表示方式,亦即WKB(well-known binary)則在傳輸和數據庫中存儲相同的信息。該格式由開放地理空間聯盟(OGC)制定。

簡而言之,WKT和WKB,就是要素的幾何信息的文本表示。

最常見的要素幾何就是點、線、面。

以下是點線面的WKT文本。

POINT(6 10),一個點。

LINESTRING(3 4,10 50,20 25),一條線。

POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),一個帶孔洞的面。

 

OCG規範與定義下載路徑:https://www.opengeospatial.org/docs/is/

7.geojson

GeoJSON是一種用於編碼各種地理數據結構的格式。GeoJSON對象可以表示幾何圖形,要素或要素集合。GeoJSON支持以下幾何類型:點,線串,多邊形,多點,多線串,多多邊形和幾何集合。GeoJSON中的要素包含幾何對象和其他屬性,要素集合表示要素列表。

簡而言之,geojson就是表示地理數據的json,經常用於webGIS工程的前後端數據傳遞上。

一個簡單的geojson串如下,它能表達一個要素集合。

  { "type": "FeatureCollection",

    "features": [

      { "type": "Feature",

        "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},

        "properties": {"prop0": "value0"}

        },

      { "type": "Feature",

        "geometry": {

          "type": "LineString",

          "coordinates": [

            [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]

            ]

          },

        "properties": {

          "prop0": "value0",

          "prop1": 0.0

          }

        },

      { "type": "Feature",

         "geometry": {

           "type": "Polygon",

           "coordinates": [

             [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],

               [100.0, 1.0], [100.0, 0.0] ]

             ]

         },

         "properties": {

           "prop0": "value0",

           "prop1": {"this": "that"}

           }

         }

       ]

     }

 

geojson介紹官網:https://geojson.org/,geojson定義在2016年有過大更新。

8.geotool

geotool是OGC提供的一套用於GIS數據處理與服務的JAVA開源庫,GDAL是它的python版。

geotool功能強大,涵蓋了GIS領域所有底層算法和服務框架,它能進行空間運算、圖像處理、地圖發佈等。最常用的geotool套件是jts,jts主要運用DE-9IM模型,進行矢量數據的空間運算。

因爲geotool涵蓋太多,jts涉及很多GIS算法,此處就不展開贅述了,有需要的可以去官網瞻仰學習。

geotool的官網是:https://www.geotools.org/

GDAL的官網是:https://gdal.org/

9.geoserver

因爲geotool發佈WMS服務難度高(地圖渲染、瓦片裁切等都要從最底層開始寫,還會遇到JVM、JAI性能問題),故geoserver應運而生。

geoserver底層用的也是java+geotool,它構建了一個jetty的web工程。

有了geoserver,我們不用寫代碼,啓動一個頁面工具,就能發佈地圖了。

geoserver官網是:http://geoserver.org/

10.openlayer

openlayer是一個專爲webGIS開發提供的JavaScript庫包,用以實現標準格式發佈的地圖數據訪問。openlayer是完全依照WMS標準來的,與geoserver有很好的兼容性。

除了openlayer外,各圖商也提供基於自身地圖的前端腳本,如果僅僅是簡單的地圖展示與操作,可以使用谷歌、高德、騰訊、百度等地圖的JavaScript API。

除了openlayer外,還有比較火的開源JavaScript庫包,就是leaflet了,相對來說,leaflet更輕量,使用羣體更廣,且官方網站提供全部的交互源碼的下載,它的開發文檔更易讀,對非專業人士更友好,上手更快。

但leaflet並沒有完全依照WMS規範,不支持單瓦片加載(多瓦片,面註記會冗餘),座標系轉換等功能,且繪製功能較弱。

不過實話實說,openlayer比leaflet複雜,且使用人羣沒有leaflet多,參考資料較少,故如果對GIS和OGC規範,包括座標系定義、投影定義、GML(帶地理空間信息的XML語言)數據格式定義、地圖瓦片原理、圖層概念、製圖風格等,不太瞭解的話,建議使用leaflet,因爲openlayer的交互都是基於wms服務來的。

且leaflet維護的人多,各種插件也很多,做熱力圖和軌跡圖等展示用的demo更多更炫。

openlayer官方網站:https://openlayers.org

leaflet官方網站:https://leafletjs.com

 

11.postgresql

常用的開源數據庫非常多,但對於webGIS來說,postgresql應該是最好的選擇。

首先,geoserver與postgresql兼容,其次postgresql有很多很有用的插件,例如空間計算插件postgis、基於postgis的拓撲套件postgis_topology、路徑規劃插件pgrouting、文本模糊匹配fuzzystrmatch、tiger英文地址編碼postgis_tiger_geocoder、地址標準化插件address_standardizer、時空檢索插件pg-trajectory等。

依託於這麼豐富的擴展性,除了webGIS,postgresql還可以應用在時空數據處理、路徑規劃、地理編碼上,有可能數據庫插件自帶的成熟算法,要比自己寫的好很多。

postgresql官方網站:https://www.postgresql.org/

postgis官方網站:http://www.postgis.org/

 

12.總結

背景知識講了很多,但其實還是很少,都是稍稍提了一些,沒有詳細展開。

我們需要知道有OGC,OGC的WMS規範,地圖發佈都是依據這個規範來的,遵循地圖瓦片的原理。不過各圖商在發佈的時候,瓦片尺寸、起始座標、地圖風格,會有細微不同。

爲什麼要發佈瓦片地圖?就是因爲內容多、數據量大,不發佈成柵格瓦片,根本沒有辦法傳到前端並渲染。

因爲要發佈地圖,所以我們需要了解geotool和geoserver、發佈完成後,要有展示,所以需要知道openlayer前端腳本庫,數據是要交互的,所以要了解WKT和WKB、geojson。

數據存在哪裏?postgresql。

這是一個全流程,且是需要進行知識擴展的全流程。

要想對一個專業、一項技術,有深入瞭解,單單看簡介是不夠的。

買一本書,張康聰老師的《地理信息系統導論》,從頭到尾看一遍,看懂50%即可,把原理了解一下。

webGIS沒什麼太好的書,這個主要靠實踐,遇到問題,不斷的去查找資料就行,總有一天會達到閉環。

在互聯網行業,GIS是很小衆的一個方向,主要用於行業交叉應用,它有一定的專業性,但在實踐中,更多的是交叉學科的融合。多學點總歸沒壞處,但是否接觸,或者是深耕,還要看個人的職業規劃。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章