开发者问题收集

OpenLayers 中的 Mapbox WMTS 支持

2018-11-30
914

我已经使用 Mapbox Studio 创建了 Mapbox 样式并将其设置为在 WMTS 上使用。样式的 URL 为:

https://api.mapbox.com/styles/v1/username/styleId/wmts?access_token=token

其中 styleIdusernametoken 是变量字段。

当我尝试使用上述 URL 在 OpenLayers 中创建 WMTS 图层时,使用 createFromCapabilitiesMatrixSet 成功创建了 tileGrid ,但我从 Mapbox 收到响应错误 Invalid query param layer

经过一番调查,我注意到:

  1. 响应错误对于从OpenLayers 在创建图块加载函数时。看起来 Mapbox 无法正确识别它们。
  2. OpenLayers 网站和 Mapbox 还提供了使用 XYZ 图层在它们之间进行集成的示例。

那么,这是 OpenLayers 某种不受支持的功能吗?还是我在创建 WMTS OpenLayers 时需要配置其他任何内容?

1个回答

使用

  url: 'https://api.mapbox.com/styles/v1/username/styleId/tiles/{z}/{x}/{y}?access_token=token'

设置为标准 OpenLayers XYZ 图层要简单得多,如示例中所示。

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 没有任何优势。

Mike
2018-12-01