2016-08-01 43 views
-1

是否可以從TileImage源加載Tile圖層,並將瓷磚以其最高分辨率(縮放)的圖塊加載到特定範圍,並將這些圖塊顯示爲所有縮放級別。我希望將高分辨率圖像顯示爲另一個Tile層(如Bing或OSM)上方的圖層。openlayers 3 - 加載具有最高縮放級別tile的TileLayer,但在所有縮放級別都顯示

實施例源

var source = new ol.source.TileImage({ 
projection: 'EPSG:900913', 
tileGrid: new ol.tilegrid.TileGrid({ 
projection: 'EPSG:900913', 
extent: projectionExtent, 
//extent: ol.proj.transformExtent([-83.7893967, 42.851353, -83.7855987, 42.849371], "EPSG:4326", "EPSG:900913"), 
resolutions: resolutions, 
tileSize:[pictometryImageSize, pictometryImageSize] 
}), 
tileUrlFunction: function(tileCoord, pixelRatio, projection){ 
var zoom = tileCoord[0]; 

console.log(zoom) 

if(zoom == 21){ 
    var tileGrid = this.getTileGrid(); 
    var center = ol.proj.transform(ol.extent.getCenter(tileGrid.getTileCoordExtent(tileCoord)),"EPSG:900913", "EPSG:4326"); 
    return 'www.myrealtileurl; 
} 
//return undefined; 
//return 'https://dummy.com'; 
}, 
minZoom: 0, 
maxZoom: 21 

});

回答

1

我希望我能正確理解你。首先,您可以使用extent限制圖層範圍。其次,您可以使用maxZoomminZoom屬性鎖定縮放。 OpenLayers將自己調整拼貼大小。下面是一個示例,其中ArcGIS磁貼層被鎖定在範圍和縮放範圍內:

var map = new ol.Map({ 
    target: 'map', 
    layers: [ 
    new ol.layer.Tile({ source: new ol.source.OSM() }), 
    new ol.layer.Tile({ 
     extent: ol.proj.transformExtent([-110, 42, -100, 48], "EPSG:4326", "EPSG:3857"), 
     source: new ol.source.XYZ({ 
      maxZoom: 6, 
      minZoom: 6, 
      url: 'http://server.arcgisonline.com/ArcGIS/rest/services/' + 
      'World_Topo_Map/MapServer/tile/{z}/{y}/{x}' 
     }) 
    }) 
    ], 
    view: new ol.View({ 
     center: ol.proj.fromLonLat([-105.89, 45.09]), 
     zoom: 6 
    }) 
}); 
+0

如果我在提供的URL中使用XYZ源,則會看到此行爲。當我嘗試使用tileImage函數對tileImage函數進行同樣的處理時,使用tileUrlFunction函數,當縮小到20時,縮放圖塊21消失。我認爲這是因爲調用了所有縮放級別的函數,強制我返回未定義的級別小於21. –

+0

可能是'ol.source.XYZ'會對你有好處嗎?它擴展了TileImage並具有包括tileUrlFunction在內的所有功能。 –

+0

試過了,沒有區別。我注意到,如果我返回一個錯誤的URL而不是未定義的,瓷磚會在消失之前向後保持1個縮放級別。如果我使用註釋範圍,則tileUrlFunction停止在縮放= 19時被調用。 –