2017-07-04 16 views
1

私は現在Open Layers 4.2.0にMapbox VectorTileのセリフを追加しています。ただし、問題が発生します。私が遠くにズームアウトすると、私の全体の地図は灰色に変わり、コンソールのネットワークタブはマップボックス側に見つからないタイルがあることを説明する404で埋められます。 Mapboxのすべてのタイルがロードされているわけではないので、このことは意味があります。OpenLayers 4.2.0でエクステントをVectorTileレイヤに設定する方法は?

Mapbox層がロードされている場所です::

var source = new ol.source.VectorTile({ 
    format: new ol.format.MVT(), 
    tilePixelRatio: 16, 
    url: 'https://{a-d}.tiles.mapbox.com/v4/' + layer.id + '/{z}/{x}/{y}.vector.pbf?access_token=' + this.mapboxGlToken 
}); 

return new ol.layer.VectorTile({ 
    source:  source, 
    minResolution: layer.minres, 
    maxResolution: layer.maxres, 
    style:   this.styles.normal, 
    filter:  layer.filter, 
    name:   layer.name 
}); 

これは実際に赤いボーダーあるマップ(+ベクトルタイルを、表示されたコードの少しで詳しく説明し

オランダの地方の):

enter image description here

万歳!私はFirefoxのネットワークタブで見ればしかし、:

enter image description here

多くのMapboxから404エラーのがあります。最初は、私はこれらを無視できると思っていましたが、私のアプリケーション全体が、それ以上のタイルをレンダリングするのを止める原因になりました。これはかなり面倒です。これは、Open LayersがMapboxレイヤーの境界の外側にあるタイルをロードしようとしているためです。

私はたくさんのグーグルで試してみました。ここで私が試したことは次のとおりです。

Open layers 4.2.0のVectorTileについてのドキュメントでは、TileGrid()というオプションが指定されています。私はこの機能の多くのスピンオフを試みましたが、これは私の問題を解決しません。それはもう何もレンダリングしない、私のブラウザを元の問題を凍結します。私はまた、どのように動作するのか分かりませんが、エクステントオプションを持っていたと言いました。

レイヤーのエクステントを設定するにはどうすればよいですか? {x1,y1}から{x2,y2}にタイルをロードするようにレイヤに指示するにはどうすればよいですか?私は正直に分かりませんし、どんな助けもありがたいです。

+1

は、あなたがこれを理解しましたか? – fuzz

答えて

0

ol.source.VectorTileol.layer.VectorTile(ソースまたはレイヤー)を混同していることが判明しました。 ol.layer.VectorTile 'クラス'にはextentオプションがありました。これは正しい方法です。

エクステントの設定にはいくつかの違いがあります。 (それが呼び出されたとして、あるいは境界)すべてのmapboxタイルセットは、それ自身の広がりを持っています

bounds of mapbox

境界はピクセル(私はここで間違っているなら、私を修正)にlat1, lng1, lat2, lng2から変換する必要があります。これを行う方法は、Webコンソールから実行することです。

ol.proj.fromLonLat([lat1, lng1]).concat(ol.proj.fromLonLat([lat2, lng2])) 

これで正しいエクステントが得られます。

この範囲は、次のような実装する必要があります

new ol.layer.VectorTile({ 
    source:  source, 
    extent:  [convertedlat1, convertedLng1, convertedLat2, convertedLng2], // <--- 
    minResolution: layer.minres, 
    maxResolution: layer.maxres, 
    style:   this.styles.normal, 
    filter:  layer.filter, 
    name:   layer.name 
}); 
関連する問題