【问题标题】:Mapbox WMTS support in OpenLayersOpenLayers 中的 Mapbox WMTS 支持
【发布时间】:2018-11-30 13:21:04
【问题描述】:

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

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

其中styleIdusernametoken 是变量字段。

当我尝试使用上面的 url 在 OpenLayers 中创建 WMTS 图层时,tileGrid 已使用 createFromCapabilitiesMatrixSet 成功创建,但我收到来自 Mapbox 的响应错误 Invalid query param layer

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

  1. 在创建切片加载函数时,对于从 OpenLayers 附加的所有查询参数,响应错误仍然存​​在。 Mapbox 似乎无法正确识别它们。
  2. OpenLayers 网站和 Mapbox 还提供了使用 XYZ 图层在它们之间进行集成的示例。

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

【问题讨论】:

    标签: mapbox openlayers


    【解决方案1】:

    使用标准 OpenLayers XYZ 图层设置要简单得多

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

    【讨论】:

    • 我已经在使用 optionsFromCapabilities 方法来创建 WMTS 选项并将它们传递给 WMTS 构造函数 ol.source.WMTS,但是对 Mapbox API 的请求失败并出现我上面描述的错误消息。跨度>
    • 它对我有用。 layer 是调用中的必需选项,唯一有效的值是您的 mapbox styleId。
    • 这是一个演示,使用我设置的样式在 OSM mikenunn.16mb.com/demo/mapbox-wmts.htm 顶部显示 Mapbox 地形的轮廓@
    • 感谢您的帮助@Mike。您的样品确实有效!我可以看到您正在动态询问选项。就我而言,我将图层的选项保留在本地,而不是每次都从 URL 请求它。那就是我有一个包含formatlayermatrixSetprojectionstyletileMatrixSet 的对象,该对象用于提供ol.source.WMTS 构造函数。顺便说一句,我注意到在演示中,OpenLayers 在内部发出了 XYZ 源请求。
    • 这是因为 mapbox wmtsGetCapabilities 响应将瓦片 url 定义为 .../tiles/{TileMatrix}/{TileCol}/{TileRow} 所以他们的 WMTS 服务只是 XYZ 的“包装器”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多