2016-07-29 8 views
1

レベル0〜9のタイルを提供しています。ユーザーがズームレベル10以上になると、Open Street Mapのデフォルト値に戻ってURLを変更します。レベル(z値)に基づいてol.source.OSMタイルURLを変更するには

私はこれを試して、ほとんど動作します。レベル10以上を選択すると、ol.source.OSM.setURLs()関数を使用してURLを変更します。しかし、すべてではなく一部の場合でも、画像は引き続きローカルのURLに設定されます。私はこれが何らかのキャッシュ問題であると確信していますが、わかりません。

$scope.tilesource = new ol.source.OSM({ 
    url : '/'+$scope.tileRoot+'/tiles/{z}/{x}/{y}.png', 
    wrapX : false 
}); 

var raster = new ol.layer.Tile({ 
    source : $scope.tilesource 
}); 

$scope.tilesource.on('tileloadstart', function(arg) { 
    //console.log(arg.tile.src_); 
    if ($scope.tileLevelsSupported.search(arg.tile.tileCoord[0]) == -1) { 
     $scope.tilesource.setUrls(["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png", "https://b.tile.openstreetmap.org/{z}/{x}/{y}.png", "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png"]); 
    } else { 
     $scope.tilesource.setUrl('/'+$scope.tileRoot+'/tiles/{z}/{x}/{y}.png'); 
    } 
}); 

私はOSMとTileでいくつかの方法を試しましたが、運がありませんでした。これらの例では、タイルURLが間違っていると、ファイルが見つかりません404エラー(予想)が表示されますが、それ自体が修正され、タイルが読み込まれます。

ありがとうございます。

答えて

1
代わりにURLを変更するので、あなたが minResolutionmaxResolutionオプションで2つの異なる層を使用することができ

:あなたはレベル9から10にズームインすると、ラスタレイヤが見えなくなります

var raster = new ol.layer.Tile({ 
    source : $scope.tilesource, 
    minResolution: 200, 
    maxResolution: 10000000 
}); 

var osmLayer = new ol.layer.Tile({ 
    source: new ol.source.OSM(), 
    minResolution: 0, 
    maxResolution: 200 
}); 

とOSM層現れる。

+0

これらの2つのレイヤーを1つのレイヤーとして扱う必要がある場合は、レイヤーツリーでの可視性を制御するなど、それらを「ol.layer.Group」に追加してグループのみを管理できます。 –

+0

それはうまくいった。ありがとう! –

+0

今後の参考のため、回答が「受け入れられた」と回答しても問題ありません。 –

関連する問題