2017-01-07 15 views
0

WMSTサーバーから英国の気象レーダーデータを取得しようとしています。OpenLayers3 WMTSメモリ不足エラー

クライアントはCapabilitiesを正常に取得できます。その後、ブラウザ(ChromeとFirefox)がしばらくしてクラッシュし、メモリ不足エラーが発生します。

私の場合は、単純な例と比較して明らかに異なるのは、APIキーが、サーバーとのすべての対話に必要であることです。 (私は、デバッガで任意のHTTPリクエストを見ることができないので、最後の1がget-機能要求である)

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 
     }) 
    }); 
    }); 

クラッシュがタイルをフェッチしようとしているクライアントなしを発生します。

これを引き起こしている可能性のあるヒントはありますか?

答えて

1

まず、ol.layer.Tileにはurlオプションがありません。理想的には、GetCapabilitiesレスポンスは、すでにキーを持つサービスURLを宣言します。 GetCapabilities応答が正しくないスケールの分母をアドバタイズすることを第二およびより深刻な問題がある

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

:アクセスしようとしているサーバーはそれを持っていないので、あなたはは、GetCapabilities応答から取得resultを微調整する必要がありますと起源。これらの問題を解決するには、あなたが再び結果を微調整する必要があります。

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

をこれらの調整を適用した後、あなたはol.source.WMTS.optionsFromCapabilitiesresultを渡すことができ、あなたは正しいマップを取得します。

サービスプロバイダに連絡することを強くお勧めします(連絡先情報はGetCapabilitiesレスポンスにも記載されています)。GetCapabilitiesレスポンスの問題について知らせてください。

+0

私はそれを追加することができますが、クライアントが私のケースでタイルをフェッチしようとしていないので、メモリ不足の失敗は解決しません。 –

+0

問題を示すJSFiddleを提供することはできますか? – ahocevar

+0

良いアイデア。 http://johnohanley.ca/sky/astro/today/tiling/test5.html –