OpenLayers中的Mapbox WMTS支持
我使用Mapbox Studio创建了一个Mapbox样式,并将其设置为在WMT上使用。样式的URL为: 其中,OpenLayers中的Mapbox WMTS支持,mapbox,openlayers,Mapbox,Openlayers,我使用Mapbox Studio创建了一个Mapbox样式,并将其设置为在WMT上使用。样式的URL为: 其中,styleId、username和token是变量字段 当我尝试使用上面的url在OpenLayers中创建WMTS层时,使用CreateFromCapabilitiesMatrix集成功创建了tileGrid,但我从Mapbox中得到了一个响应错误无效查询参数层 经过调查,我注意到: 对于创建平铺加载函数时从OpenLayers追加的所有查询参数,响应错误仍然存在。看起来Mapbo
styleId
、username
和token
是变量字段
当我尝试使用上面的url在OpenLayers中创建WMTS层时,使用CreateFromCapabilitiesMatrix集
成功创建了tileGrid,但我从Mapbox中得到了一个响应错误无效查询参数层
经过调查,我注意到:
那么,这是OpenLayers的某种不受支持的功能,还是我在创建WMTS OpenLayers时需要配置任何其他功能?使用
url: 'https://api.mapbox.com/styles/v1/username/styleId/tiles/{z}/{x}/{y}?access_token=token'
如示例中所示
Mapbox提供WMTS支持,以与其他一些系统兼容。它也可以在OpenLayers中使用,设置如下
var parser = new ol.format.WMTSCapabilities();
fetch('https://api.mapbox.com/styles/v1/username/styleId/wmts?access_token=token').then(function(response) {
return response.text();
}).then(function(text) {
var layer = new ol.layer.Tile({
source: new ol.source.WMTS(
ol.source.WMTS.optionsFromCapabilities(parser.read(text), {
layer: 'styleId',
matrixSet: 'EPSG:3857'
})
)
});
....
....
....
....
});
这两种方法最终将加载相同的磁贴URL,因此,在支持XYZ的情况下使用WMTS没有任何优势。我已经在使用
options from capabilities
方法创建WMTS选项,并将它们传递给WMTS构造函数ol.source.WMTS
,但是对Mapbox API的请求失败,出现了我上面描述的错误消息。这对我来说是有效的。layer是调用中的一个必需选项,唯一有效的值是mapbox styleId。下面是一个演示,使用我设置的样式在OSM顶部显示mapbox terrain的轮廓,感谢您的帮助@Mike。你的样品确实有效!我可以看出你在动态地要求选择。在我的例子中,我将层的选项保留在本地,而不是每次从URL请求它。也就是说,我有一个包含格式
,层
,矩阵集
,投影
,样式
和tileMatrix集
的对象,这个对象用于为ol.source.WMTS
构造函数提供数据。顺便说一句,我注意到在演示中,OpenLayers在内部发出一个XYZ源代码请求,这是因为mapbox wmtsGetCapabilities响应将tile url定义为…/tiles/{TileMatrix}/{TileCol}/{TileRow},所以他们的WMTS服务只是XYZ的“包装器”。