一、什么是柵格瓦片地圖服務(wù)
這四種地圖服務(wù)都是通過網(wǎng)絡(luò)傳輸?shù)臇鸥裢咂貓D服務(wù),這里有三個(gè)名詞需要解釋:
1、什么是柵格?
遙感影像、Dem等,就是圖片。
2、什么是地圖服務(wù)?
實(shí)際上,地圖服務(wù)就是一個(gè)url,且這個(gè)url滿足一定條件:基于這個(gè)url拼上固定參數(shù)或路由地址可以獲取地圖服務(wù)的元數(shù)據(jù)信息(返回結(jié)果是xml或者json);也能獲得柵格瓦片地圖服務(wù)的瓦片,其實(shí)就是圖片。
以天地圖的wmts服務(wù)為例,一般我們使用時(shí)只需要“http://t0.tianditu.gov.cn/vec_c/wmts?tk=您的密鑰”這個(gè)url即可,但是通過這個(gè)url拼上固定參數(shù)即可獲得這個(gè)地圖服務(wù)的元數(shù)據(jù)信息:http://t0.tianditu.gov.cn/img_w/wmts?request=GetCapabilities&service=wmts,也可以獲得地圖瓦片:http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}
為什么查詢?cè)獢?shù)據(jù)信息的時(shí)候要拼上“request=GetCapabilities&service=wmts”參數(shù)而獲取地圖瓦片的時(shí)候要拼上”SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=您的密鑰“參數(shù),這是OGC的規(guī)定(關(guān)于OGC,后文會(huì)有詳細(xì)解釋),其實(shí)就是大家約定俗稱的一種規(guī)則,所有的wmts服務(wù)都要滿足:查元數(shù)據(jù)信息的時(shí)候就使用”request=GetCapabilities&service=wmts“,獲取地圖瓦片的時(shí)候就使用”SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}“,當(dāng)然你也可以使用不同的參數(shù)名但是實(shí)現(xiàn)相同的功能,但是地圖引擎時(shí)加載不了的(別人實(shí)現(xiàn)的是OGC的規(guī)則,不是你自己定義的規(guī)則),除非你自己改源碼。
同理,xyz、tms也是一樣的。
二、什么是瓦片?為什么使用柵格瓦片地圖服務(wù)?
瓦片這個(gè)詞其實(shí)源自于遙感影像處理或圖像處理的瓦片金字塔,熟悉Arcgis的人應(yīng)該會(huì)知道,當(dāng)使用Arcgis打開遙感影像數(shù)據(jù)時(shí),軟件會(huì)詢問你是否構(gòu)建影像金字塔,那為什么要構(gòu)建影像金字塔呢?要回答這個(gè)問題,首先要理解什么是影像金字塔。影像金字塔實(shí)際上就是將影像數(shù)據(jù)分層分塊,比如我將一個(gè)1tb的影像數(shù)據(jù)分為5層,第一層把原始數(shù)據(jù)分成一塊,這里的塊就是瓦片,其實(shí)就是圖片,只用一張圖片表示整個(gè)影像數(shù)據(jù),但是這張圖片的分辨率遠(yuǎn)低于原始數(shù)據(jù);第二層把原始數(shù)據(jù)分為4塊,用四張圖片表示整個(gè)影像數(shù)據(jù),這4張圖片的分辨率高于第一層的分辨率但是還是低于原始數(shù)據(jù)的分辨率;第二層把原始數(shù)據(jù)分為16塊,用16張圖片表示整個(gè)影像數(shù)據(jù),這16張圖片的分辨率高于第2層的分辨率但是還是低于原始數(shù)據(jù)的分辨率…依次類推,直至到第五層,此時(shí)將原始影像分為1024塊,所有塊組合到一起表示整個(gè)影像數(shù)據(jù),此時(shí)這些塊的分辨率和原始影像分辨率一致。
金字塔技術(shù),預(yù)先在服務(wù)器上生成瓦片金字塔,可以輕松的顯示整個(gè)影像數(shù)據(jù)。(這是使用柵格瓦片地圖服務(wù)的原因之一)。
這種分層分塊思想不僅僅用于柵格瓦片地圖服務(wù),在mapbox的矢量瓦片、cesium的terrain服務(wù)和3dtiles服務(wù)、unreal和unity的HLOD等等,都使用了這種思想。
其實(shí)在柵格瓦片地圖服務(wù)(tms和wmts)之前,為了解決影像數(shù)據(jù)的顯示,大家使用的都是WMS服務(wù)(Web Map Service),在前端渲染地圖時(shí),會(huì)把當(dāng)前顯示的地理范圍傳遞給服務(wù)器,然后服務(wù)器去影像數(shù)據(jù)上搜索這個(gè)范圍并導(dǎo)出為合適分辨率的圖片,然后返回給前端進(jìn)行顯示,但是這種策略耗時(shí)不穩(wěn)定,有時(shí)長(zhǎng)有時(shí)短,因而促生了柵格瓦片地圖服務(wù)。(使用柵格瓦片地圖服務(wù)的另一個(gè)原因)。
三、為什么有三種柵格瓦片地圖服務(wù)?
正如前文所述,wmts是OGC定義的地圖服務(wù)標(biāo)準(zhǔn),tms是OSGeo定義的。
1)OGC中文名為開放地理空間信息聯(lián)盟,這個(gè)組織就和前端的W3C一樣,是一個(gè)標(biāo)準(zhǔn)制定組織。它定義了wmts、wfs、wms、3dtiles等等地圖服務(wù)標(biāo)準(zhǔn),其官網(wǎng)地址:https://www.ogc.org/
OGC的wmts服務(wù)標(biāo)準(zhǔn)地址:https://www.ogc.org/standard/wmts/ (我的評(píng)價(jià)是:垃圾,賊難看,不如百度看網(wǎng)頁(yè)博客)
2)OSGeo中文名為開源空間信息基金會(huì),是一個(gè)全球性非營(yíng)利性組織,目標(biāo)是支持全球性的合作,建立和推廣高品質(zhì)的空間信息開源軟件。GIS領(lǐng)域的許多知名軟件和庫(kù)比如:GDAL、PostGIS、QGIS等等都是這個(gè)組織搞出來(lái)的,其官網(wǎng)地址:https://www.osgeo.org/,那為啥它要定義一個(gè)tms呢,因?yàn)楫?dāng)年還沒有wmts,其實(shí)就和前端一樣,某個(gè)特性或者”標(biāo)準(zhǔn)“大家已經(jīng)約定俗成了,但是標(biāo)準(zhǔn)制定組織還沒想好怎么定義呢或者還沒納入它的標(biāo)準(zhǔn)中呢,標(biāo)準(zhǔn)指定組織落后了拖后腿,那你沒有我就自己定義了,當(dāng)你定義的柵格瓦片地圖服務(wù)標(biāo)準(zhǔn)wmts出現(xiàn)以后,我的標(biāo)準(zhǔn)tms已經(jīng)廣為流傳了,就導(dǎo)致了今天的局面:tms和wmts并存。
OSGeo的tms服務(wù)標(biāo)準(zhǔn)地址:https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification (哎呦,不錯(cuò)哦)
3)XYZ并不是某個(gè)組織定義的,而是大家約定俗成的一種風(fēng)格,像wmts和tms,它們不僅僅提供了地圖瓦片,同時(shí)還提供元數(shù)據(jù)信息等查詢服務(wù),但XYZ不是,它只提供地圖瓦片,實(shí)際上把wmts的地圖瓦片文件拷貝到任何一臺(tái)服務(wù)器上,按照XYZ風(fēng)格給出地圖瓦片的地址,這就是一個(gè)XYZ風(fēng)格的地圖瓦片服務(wù);把TMS的地圖瓦片拷貝到任何一臺(tái)服務(wù)器上,按照XYZ風(fēng)格給出地圖瓦片的地址,這也是一個(gè)XYZ風(fēng)格的地圖瓦片服務(wù)。
四、異同點(diǎn)
1、相同點(diǎn)
1)瓦片尺寸相同
實(shí)際上,WMTS定義的瓦片尺寸是矩形,TMS定義的是正方形,但是絕大多數(shù)的瓦片尺寸都是256x256,少數(shù)是512x512,我沒見過不是正方形的瓦片,我覺得這也是一種約定俗成的標(biāo)準(zhǔn):無(wú)論哪種柵格瓦片地圖服務(wù)都使用正方形瓦片。原因(來(lái)自ChatGPT):
2)兩者的地圖切片原理是相同的(都是瓦片金字塔),下面介紹兩種地圖切片方案:
a)WGS84(4326,經(jīng)緯度坐標(biāo)系)方案(把4490帶入也是一樣的)
坐標(biāo)范圍:經(jīng)度[-180,180],緯度[-90,90]
切片方式:在地理坐標(biāo)系中,瓦片是根據(jù)經(jīng)緯度劃分的,每個(gè)瓦片代表一個(gè)經(jīng)度范圍和緯度范圍,即一個(gè)矩形區(qū)域(正方形是特殊的矩形)。按照四叉樹分割:第一層:切分為兩個(gè)瓦片,經(jīng)度范圍為[-180,0]、經(jīng)度范圍為[-90,90]和經(jīng)度范圍為[0,180]、緯度范圍為[-90,90];第二層:把第一層的瓦片再進(jìn)行切分成八塊,以此類推。
b)Web-Mercator(3857,投影坐標(biāo)系)方案
坐標(biāo)范圍:3857 坐標(biāo)系中的平面直角坐標(biāo)范圍是 x : [-20037508.34 , 20037508.34],y : [-20037508.34 , 20037508.34],對(duì)應(yīng)的經(jīng)緯度范圍:經(jīng)度[-180°,180°],緯度[-85.051129°, 85.051129°]。可以看到這種投影方案并沒有覆蓋全球區(qū)域,這樣設(shè)置有兩個(gè)好處:1、避免將極點(diǎn)投影到無(wú)窮遠(yuǎn),2、將整個(gè)投影地圖變?yōu)檎叫?br> 切片方式:在Web墨卡托投影中,瓦片是根據(jù)平面直角坐標(biāo)系劃分的。同樣是采用四叉樹分割:第一層:切分為一個(gè)瓦片,x范圍為 [-20037508.34 , 20037508.34],y范圍為 [-20037508.34 , 20037508.34];第二層:在第一層的基礎(chǔ)上切分為四塊,以此類推。
這里多說一點(diǎn),天地圖的經(jīng)緯度的柵格瓦片地圖服務(wù)的坐標(biāo)系是4490的,但是很多時(shí)候我們都會(huì)聽到說:啊,4490和4326差不多,可以按照4326加載。可這是為什么呢?原因就是兩者的切片方式和坐標(biāo)范圍是一樣的,所以能加載4326的地圖引擎一般都能加載4490(Cesium不行,是因?yàn)樗虞d的時(shí)候判斷元數(shù)據(jù)信息中坐標(biāo)系是不是4326或者3857,不然不給你加載,自己改源碼一樣可以加載);但是為什么又說差不多呢,4490和4326的參考橢球體的扁率有所差別,我們使用的地圖引擎的地圖引擎的扁率都是按照4326指定的,如果你使用4490的瓦片,肯定會(huì)有偏差(設(shè)想一下:你有個(gè)單位立方體,把它的表面貼圖扒下來(lái)貼在一個(gè)長(zhǎng)寬高為0.9999999的立方體上,你說能不能貼上去,貼肯定能貼,但是和原來(lái)的肯定不一樣)。
3)格式
png或jpeg
2、不同點(diǎn)
1)協(xié)議
XYZ、TMS是Restful風(fēng)格的,而WMTS可以有三種:KVP、SOAP、Restful。
KVP:key-value-pair,查詢字符串風(fēng)格,例如:http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}
SOAP:簡(jiǎn)單對(duì)象訪問協(xié)議,以xml作為數(shù)據(jù)傳送的格式(沒人用了)。
Restful就不說了。
2)原點(diǎn)和軸向
TMS:原點(diǎn)在左下角,Y軸自下向上,X軸自左向右
WMTS:原點(diǎn)在左上角,Y軸自上向下,X軸自左向右
XYZ:原點(diǎn)不固定(可能在左上角也可能在左下角),Y軸方向不固定(取決于原點(diǎn)位置,可能自下而上,也可能自上而下),X軸自左向右
3)url模板
WMTS:http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}
其中,TileMatrixSet代表坐標(biāo)系,TileMatrix代表瓦片層級(jí),TileRow和TileCol代表瓦片在TileMatrix層級(jí)下的行列號(hào)
TMS:https://tile.openstreetmap.org/{z}/{x}/{y}.png
其中,{z}代表瓦片層級(jí),{x}{y}代表瓦片在z層級(jí)下的位置
XYZ:https://ip:port/{z}/{x}/{y}.png
其中,{z}代表瓦片層級(jí),{x}{y}代表瓦片在z層級(jí)下的位置
4)元數(shù)據(jù)
WMTS:GetCapabilities接口,用于獲取元數(shù)據(jù)
TMS:一般來(lái)說,TMS的地址會(huì)指向一個(gè)名稱是tilemapresource.xml的文檔
XYZ:無(wú)
5)要素查詢
WMTS:GetFeatureInfo接口,用于獲取要素位置及屬性信息。
TMS:無(wú)
XYZ:無(wú)
五、個(gè)人觀點(diǎn)
個(gè)人認(rèn)為這三種地圖服務(wù)的主要的不同點(diǎn)就是瓦片編號(hào)的方案不同,主要有以下幾種流派:
1)谷歌XYZ:Z表示縮放層級(jí),Z=zoom;XY的原點(diǎn)在左上角,X從左向右,Y從上向下。
2)TMS:Z的定義與谷歌相同;XY的原點(diǎn)在左下角,X從左向右,Y從下向上。
3)QuadTree:微軟Bing地圖使用的編碼規(guī)范,Z的定義與谷歌相同,同一層級(jí)的瓦片不用XY兩個(gè)維度表示, 而只用一個(gè)整數(shù)表示,該整數(shù)服從四叉樹編碼規(guī)則。(別人都是y軸方向不同,就它特殊,呸)
4)百度XYZ:Z從1開始,在最高級(jí)就把地圖分為四塊瓦片;XY的原點(diǎn)在經(jīng)度為0緯度位0的位置,X從左向右,Y從下向上。
5)天地圖4490的WMTS服務(wù):Z從1開始。(但是它的web墨卡托的wmts服務(wù)的Z是從0開始的)
…
六、各種標(biāo)準(zhǔn)的地圖廠商
1)xyz:osm、mapbox、google maps
2)tms:osm、mapserver、mapnik
3)wmts:arcgis online、osm、google maps文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-833420.html
參考資料:
1、Web地圖服務(wù)規(guī)范(WMS、WMTS、TMS)簡(jiǎn)析
2、幾種互聯(lián)網(wǎng)地圖服務(wù)背后的解讀(WMS,WFS,WMTS,TMS)
3、TMS, XYZ & WMTS的不同
4、WMTS以及TMS地圖切片方案詳述和比對(duì)
5、WMS、WFS、WCS、WPS、WMTS、WMSC、TMS等常見地圖服務(wù)的區(qū)別
6、WMTS服務(wù)及地圖瓦片原理
7、TMS和WMTS大概對(duì)比
8、OGC WebGIS 常用服務(wù)標(biāo)準(zhǔn)(WMS/WMTS/TMS/WFS)速查
9、OGC標(biāo)準(zhǔn)WMTS服務(wù)概念與地圖商的瓦片編號(hào)流派-web地圖切片加載
如有不足之處,歡迎大家批評(píng)指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-833420.html
到了這里,關(guān)于Web地圖服務(wù)規(guī)范之柵格瓦片地圖服務(wù):WMTS(WebMapTileService,網(wǎng)絡(luò)地圖瓦片服務(wù))、TMS(TileMapService,瓦片地圖服務(wù))和XYZ的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!