OpenLayers中的Mapbox WMTS支持

OpenLayers中的Mapbox WMTS支持,mapbox,openlayers,Mapbox,Openlayers,我使用Mapbox Studio创建了一个Mapbox样式,并将其设置为在WMT上使用。样式的URL为: 其中,styleId、username和token是变量字段 当我尝试使用上面的url在OpenLayers中创建WMTS层时,使用CreateFromCapabilitiesMatrix集成功创建了tileGrid,但我从Mapbox中得到了一个响应错误无效查询参数层 经过调查,我注意到: 对于创建平铺加载函数时从OpenLayers追加的所有查询参数,响应错误仍然存在。看起来Mapbo

我使用Mapbox Studio创建了一个Mapbox样式,并将其设置为在WMT上使用。样式的URL为:

其中,
styleId
username
token
是变量字段

当我尝试使用上面的url在OpenLayers中创建WMTS层时,使用
CreateFromCapabilitiesMatrix集
成功创建了tileGrid,但我从Mapbox中得到了一个响应错误
无效查询参数层

经过调查,我注意到:

  • 对于创建平铺加载函数时从OpenLayers追加的所有查询参数,响应错误仍然存在。看起来Mapbox无法正确识别它们
  • OpenLayers网站和Mapbox还提供了使用XYZ层进行集成的示例

  • 那么,这是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的“包装器”。