javascript - OpenLayers3 WMTS 内存不足错误

标签 javascript out-of-memory openlayers-3 wms

我正在尝试从 WMST 服务器获取英国的天气雷达数据。

客户端可以获得很好的能力。之后,浏览器(Chrome 和 Firefox)会在一段时间后崩溃,并出现内存不足错误。

与简单的示例相比,我的例子中唯一明显不同的是与服务器的所有交互都需要 API key

  var parser = new ol.format.WMTSCapabilities();
  var map;

  //I pass the API key here
  fetch('http://datapoint.metoffice.gov.uk/public/data/inspire/view/wmts?REQUEST=GetCapabilities&key=my_key_goes_here').then(function(response) {
    return response.text();
  }).then(function(text) {
    console.log('Capabilities found.'); //ok

    var result = parser.read(text);
    var options = ol.source.WMTS.optionsFromCapabilities(result, {
        layer: 'RADAR_UK_Composite_Highres', 
        matrixSet: 'EPSG:4326'
    });

    map = new ol.Map({
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM(),
          opacity: 0.7
        }),
        new ol.layer.Tile({ //fails when this Tile is included
          opacity: 1,
          source: new ol.source.WMTS(options),
          //I set this,  figuring that the API key is still needed
          url: 'http://datapoint.metoffice.gov.uk/public/data/inspire/view/wmts?my_key_goes_here'
        })
      ],
      target: 'mymap',
      view: new ol.View({
        center: ol.proj.fromLonLat([0, 52.0]),   //near London, UK
        zoom: 7
      })
    });
  });

崩溃发生时客户端没有尝试获取图 block (因为我在调试器中看不到任何 HTTP 请求;最后一个是 get-capability 请求)。

任何关于可能导致此问题的原因的提示吗?

最佳答案

首先,请注意 ol.layer.Tile 没有 url 选项。理想情况下,GetCapability 响应将公布已具有 key 的服务 URL。由于您尝试访问的服务器没有该功能,因此您必须调整从 GetCapability 响应中获得的结果:

result.OperationsMetadata.GetTile.DCP.HTTP.Get[0].href += 'key=my_key_goes_here&'

第二个也是更严重的问题是 GetCapability 响应公布了不正确的比例分母和原点。要解决这些问题,您必须再次调整结果:

result.Contents.TileMatrixSet[0].TileMatrix.forEach(function(m) {
  m.ScaleDenominator *= 111319.49079327358;
  m.TopLeftCorner = m.TopLeftCorner.reverse();
});

应用这些调整后,您可以将结果传递给ol.source.WMTS.optionsFromCapability,您将获得正确的 map 。

我强烈建议您联系服务提供商(联系信息也可以在 GetCapability 响应中找到)并让他们知道 GetCapability 响应中存在的问题。

关于javascript - OpenLayers3 WMTS 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41526983/

相关文章:

javascript - 为单个父单击显示/隐藏多个子类(Jquery)

javascript - 为什么我的状态没有在此组件中设置

mysql - SQl 数据库备份显示错误 "Exception of type "System.OutofMemoryException“被抛出。(mscorlib)”

javascript - OpenLayers 3 Polymer 1.0 模块

openlayers-3 - Openlayers 3 自定义多边形符号器

javascript - 如何在 openlayers 3 中将缩放控件放置在另一个 div 内?

javascript - 如何将组件作为 prop 传递给 Vue.js 中的另一个组件

javascript - 在 ajax 请求上保持滚动位置

excel - 使用 Null(或其他东西)来避免 'Out of Memory'

java - 创建异常 : java. lang.OutOfMemoryError