当较低的缩放级别图块根本不可用时,如何在较低的缩放比例下从较高的缩放级别(较低的分辨率)加载图块?这可能吗 ?例如:我有缩放8及更高的图块,需要缩放图6,7从缩放8加载图块并在浏览器中缩放。
var countedResoultions = [650251.6299617786, 325125.8149808893, 162562.90749044466, 81281.45374522233, 40640.726872611165, 20320.363436305583, 10160.181718152791, 5080.090859076396, 2540.045429538198, 1270.022714769099, 635.0113573845495, 317.5056786922747];
var customExtent = [-491187.1897463986, -53831.96192823257, 890456.9786693857, 877455.310353267];
var layers = [new ol.layer.Tile({
source: new ol.source.XYZ({
projection: 'EPSG:2180',
tileGrid: new ol.tilegrid.TileGrid({
origin: [101235.72703025967, 781405.7611248483],
extent: customExtent,
resolutions: countedResolutions,
}),
tileUrlFunction: function(coord){
console.log('gridZoom' coord[0]);
// not standard OSM url
// ...
}
})
})];
var map = new ol.Map({
layers: layers,
target: 'map',
view: new ol.View({
center: ol.proj.transform([20.92,52.23], 'EPSG:4326', 'EPSG:3857'),
zoom: 6,
maxZoom: 14
})
});
对我来说有点奇怪,放大ol.View
(我已经注册的听众改变)与coord[0]
中的缩放值(tileUrlFunction
)不同。对于viewZoom = 6 - > gridZoom = 9,viewZoom = 7 - > gridZoom = 10,viewZoom = 8 - > gridZoom = 11
答案 0 :(得分:1)
是的,这是可能的。您需要做的就是找出您需要使用的分辨率。 因此,假设您希望以所有可用分辨率显示OSM图块,并且您希望添加更多缩放级别,以便用户可以放大更多。
这是OSM的默认分辨率:
var osmRes = [156543.0339, 78271.51695, 39135.758475, 19567.8792375, 9783.93961875, 4891.969809375, 2445.9849046875, 1222.99245234375, 611.496226171875, 305.7481130859375, 152.87405654296876, 76.43702827148438, 38.21851413574219, 19.109257067871095, 9.554628533935547, 4.777314266967774, 2.388657133483887, 1.1943285667419434, 0.5971642833709717];
这是相同的决议+更多:
var customRes = [156543.0339, 78271.51695, 39135.758475, 19567.8792375, 9783.93961875, 4891.969809375, 2445.9849046875, 1222.99245234375, 611.496226171875, 305.7481130859375, 152.87405654296876, 76.43702827148438, 38.21851413574219, 19.109257067871095, 9.554628533935547, 4.777314266967774, 2.388657133483887, 1.1943285667419434, 0.5971642833709717,0.41999977320012255, 0.2799998488000817,0.13999992440004086, 0.08399995464002451, 0.05599996976001634, 0.02799998488000817]
现在您需要做的就是将所需的分辨率传递给地图视图,如下所示:
var raster = new ol.layer.Tile({
source: new ol.source.OSM()
});
var map = new ol.Map({
layers: [raster],
target: 'map',
view: new ol.View({
resolutions : customRes,
center: [-11000000, 4600000],
resolution : 156543.0339
})
});
这是一个fiddle,可以看到它的实际效果。
如果您不确定拆分但是您知道要使用的秤,以下功能可能会对您有所帮助。
/**
* get the resolution out of scale
* @param {number} scale as declared in the config eg 50000
* @returns {window.webGisApp.main.resolutions}
*/
function getResolutionFromScale(scale){
var dpi = 25.4 / 0.28;
var mpu = ol.proj.METERS_PER_UNIT['m'];
var res = scale / (mpu * 39.37 * dpi);
return res;
}
/**
* get the resolution out of scale
* @param {number} res the resolution
* @returns {webGisApp.main.resolutions}
*/
function getScaleFromResolution(res){
var dpi = 25.4 / 0.28;
var mpu = ol.proj.METERS_PER_UNIT['m'];
var scale = res * mpu * 39.37 * dpi;
return scale;
}
答案 1 :(得分:0)