2017-04-21 67 views
1

如何在较低缩放级别拼贴完全不可用时如何在较低缩放下从较高缩放级别(较低分辨率)加载拼贴?这可能吗 ?例如:我有用于缩放8和更高的拼贴,并需要缩放6上的地图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: [1.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。

回答

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看到它的行动。

如果你不知道的resoloution但你知道你要使用的尺度,以下功能可以帮助你。

/** 
* 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

我有更复杂的情况,因为我有在数'resolutions'定制'ol.source.XYZ'源'ol.tilegrid.TileGrid'选项。它可以正常工作,但是当变焦低于某个值时,没有图块可以获得,并且需要该图使用较高缩放比例的图块(获得更多图块并缩小比例)。 – marioosh

+0

您应该使用额外的分辨率来配置您的地图视图,并保留您在tilegrid中的视图。 Ol3应该进行瓷砖的客户端缩放。我过去也是这样做的,并且工作正常。如果您提供您的代码,我可能会帮助您 – pavlos

+0

我更新了代码为 – marioosh