日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ

發布時間:2024/7/23 编程问答 93 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、ol.layer.Tile及數據源類結構

openlayers中,圖層(layer)不可缺少的組成部分是數據源(source),天地圖是切片的數據服務,對應的圖層是ol.layer.Tile,下圖是其數據源對應的類結構圖,紅色部分是重點內容。

從圖可以看到,加載天地圖的數據源,可以是ol.source.WMTS(簡稱WMTS) 和 ol.source.XYZ(簡稱XYZ)。下面首先以實際的代碼對分別使用WMTS和XYZ的方式加載天地圖進行說明,然后總結他們的區別。

2、WMTS的方式加載天地圖

//創建圖層(WMTS方式)

function crtLayerWMTS(type, proj, opacity){

var projection = ol.proj.get(proj);

var projectionExtent = projection.getExtent();

var size = ol.extent.getWidth(projectionExtent) / 256;

var resolutions = new Array(19);

var matrixIds = new Array(19);

for (var z = 1; z < 19; ++z) {

// generate resolutions and matrixIds arrays for this WMTS

resolutions[z] = size / Math.pow(2, z);

matrixIds[z] = z;

}

var layer = new ol.layer.Tile({

opacity: opacity,

source: new ol.source.WMTS({

attributions: 'Tiles ? 天地圖',

url: 'http://t'+Math.round(Math.random()*7)+'.tianditu.com/'+type+'/wmts',

layer: type.substr(0, 3),

matrixSet: type.substring(4),

format: 'tiles',

projection: projection,

tileGrid: new ol.tilegrid.WMTS({

origin: ol.extent.getTopLeft(projectionExtent),

resolutions: resolutions,

matrixIds: matrixIds

}),

style: 'default',

wrapX: true

})

});

layer.id = type;

return layer;

}

重要說明:

(1)天地圖有7個服務節點,代碼中沒有固定使用哪個節點的服務,而是使用 Math.round(Math.random()*7)的方式隨機決定從哪個節點請求服務,避免指定節點因故障等原因停止服務的風險。

(2)天地圖服務分經緯度和墨卡托投影兩種類型,所以url中地圖類型的投影方式應與參數 projection中保持一致(EPSG4326或EPSG3857)。

(3)天地圖切片服務共有18級,在計算分辨率時,最大計算到18級;經實驗發現,若指定到19或更高級別,放大到對應級別后,地圖出現空白。

(4)WMTS方式加載的參數中,layer、matrixSet的可取值見下面【天地圖地圖類型及url】,format的取值固定為tiles, style參數為天地圖服務默認的’style’。

天地圖的地圖類型及url如下所示:

// 全球影像地圖服務(經緯度) http://t0.tianditu.com/img_c/wmts

// 全球影像注記服務(經緯度) http://t0.tianditu.com/cia_c/wmts

// 全球影像地圖服務(墨卡托投影) http://t0.tianditu.com/img_w/wmts

// 全球影像注記服務(墨卡托投影) http://t0.tianditu.com/cia_w/wmts

// 全球矢量地圖服務(經緯度) http://t0.tianditu.com/vec_w/wmts

// 全球矢量注記服務(經緯度) http://t0.tianditu.com/cva_w/wmts

// 全球矢量地圖服務(墨卡托投影) http://t0.tianditu.com/vec_c/wmts

// 全球矢量注記服務(墨卡托投影) http://t0.tianditu.com/cva_c/wmts

// 全球地形暈渲地圖服務(經緯度) http://t0.tianditu.com/ter_c/wmts

// 全球地形暈渲注記服務(經緯度) http://t0.tianditu.com/cta_c/wmts

// 全球地形暈渲地圖服務(墨卡托投影) http://t0.tianditu.com/ter_w/wmts

// 全球地形暈渲注記服務(墨卡托投影) http://t0.tianditu.com/cta_w/wmts

3、XYZ的方式加載天地圖

//創建圖層(xyz方式)

function crtLayerXYZ(type, proj, opacity){

var layer = new ol.layer.Tile({

source: new ol.source.XYZ({

url: 'http://t'+Math.round(Math.random()*7)+'.tianditu.com/DataServer?T='+type+'&x={x}&y={y}&l={z}',

projection: proj

}),

opacity: opacity

});

layer.id = type;

return layer;

}

代碼中應注意問題與上述WMTS加載方式(1)、(2)一致。

4、WMTS與XYZ方式比較

相同點:(1)不管采用哪種方式,顯示的效果是一致的; (2)加載地圖的類型參數應與投影參數保持一致。

不同點:(1)WMTS使用的數據源類型為ol.source.WMTS,XYZ方式使用的數據源類型為ol.source.XYZ;

(2)WMTS方式遵從標準的OGC規范,需要計算、指定分辨率、顯示級別等,根據WMTS服務加載的標準規范加載天地圖,XYZ方式只需根據天地圖規定組裝簡單的url即可;

(3)實際使用中,難度上WMTS更繁瑣,效率上XYZ更優。

結論:推薦使用XYZ的方式加載天地圖服務(同時也是加載Google地圖的首選)。

作者:頑劣的石頭

原文:https://blog.csdn.net/shaxiaozilove/article/details/80371754

總結

以上是生活随笔為你收集整理的ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。