Openlayers 如何强制加载分幅以降低分辨率
当较低缩放级别的平铺根本不可用时,如何在较低缩放级别上从较高缩放级别(较低分辨率)加载平铺?这可能吗?例如:我有缩放8和更高的瓷砖,需要缩放6,7上的贴图从缩放8加载瓷砖并在浏览器中缩放Openlayers 如何强制加载分幅以降低分辨率,openlayers,openlayers-3,Openlayers,Openlayers 3,当较低缩放级别的平铺根本不可用时,如何在较低缩放级别上从较高缩放级别(较低分辨率)加载平铺?这可能吗?例如:我有缩放8和更高的瓷砖,需要缩放6,7上的贴图从缩放8加载瓷砖并在浏览器中缩放 var countedResoultions = [650251.6299617786, 325125.8149808893, 162562.90749044466, 81281.45374522233, 40640.726872611165, 20320.363436305583, 10160.181
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
(我在更改时注册了侦听器)与tileUrlFunction
中的缩放值(coord[0]
)不同。对于viewZoom=6->gridZoom=9、viewZoom=7->gridZoom=10、viewZoom=8->gridZoom=11,这是可能的。你所需要做的就是找出你需要使用的解决方案。
所以,假设您想以所有可用的分辨率显示OSM平铺,并且希望添加更多缩放级别,以便用户可以放大更多
以下是OSM的默认分辨率:
var osmRes=[156543.033978271.5169539135.75847519567.8792375、9783.93961875、4891.96980975、2445.9849046875、1222.99245234375、611.496226171875、305.7481130859375、152.87405654296876、76.43702827148438、38.21851413574219、19.109257067871095、9.55462853335547、4.77747、4.777314266777774、2.388341947、2839717];代码
以下是同样的决议,还有一些:
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.279998488000817,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
})
});
下面是一个例子,看看它的实际效果
如果您不确定重新着色,但知道要使用的刻度,以下功能可能会对您有所帮助
/**
* 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;
}
我想你可以使用图层的预加载选项
我有更复杂的情况,因为我有自定义ol.source.XYZ
源,在ol.tilegrid.tilegrid
选项中有计数的分辨率
。它工作正常,但当缩放低于某个值时,没有要获取的平铺,需要贴图使用更高缩放比例的平铺(获取更多平铺并将其缩小)。您应该使用额外的分辨率配置地图视图,并将这些分辨率保留在tilegrid中。Ol3应该执行客户端的瓷砖缩放。我过去也做过同样的操作,效果很好。如果您提供了代码,我可能会帮到您,您可能缺少矩阵。请检查此小提琴-->我已将ol.tilegrid.tilegrid
替换为>ol.tilegrid.WMTS
和set选项matrixIds
,但没有任何更改。不幸的是,我无法测试您的代码,因为您的磁贴url缺失。但我提供的示例使用了非标准的磁贴服务,因此它应该像在我的小提琴上一样工作。地图视图中的maxZoom:14
是什么,可能是这导致了您的故障。