我是OpenLayers的新手,並且試圖找出如何限制用戶可以平移和向外縮放的量。對於此應用程序,用戶在地圖中選擇一個本地區域,然後單擊一個按鈕說明使用該區域,我們希望它們不能在該範圍外移動或縮小。單擊按鈕時,我使用map.GetExtent()將maxRestrictedExtent和maxExtent設置爲當前範圍。我也通過調用map.getResolution()將maxResolution設置爲當前分辨率。平移完美運行,但縮放不能。用戶仍然能夠縮小通過給定的分辨率。OpenLayer Map限制平移和縮放
我已經添加了代碼,每當範圍發生變化時,都會打印出當前的範圍和分辨率。在第6個區域更改中,我設置了上面列出的三個地圖屬性並打印出設置。這使我可以從完整的世界視圖放大到足夠的本地化區域進行測試。在第6次更改範圍時,我用鼠標滾輪縮小並查看選定的範圍和分辨率。在單擊鼠標滾輪縮小圖像時,下一個打印輸出清楚地顯示分辨率確實比map.maxResolution設置大,我可以看到可視區域大於所選區域。我已經嘗試了很多東西,包括設置maxExtent,但似乎沒有任何東西導致最大可縮放範圍受到限制。如果我喜歡的話,我可以再一次放大到全屏視圖。
下面您可以看到我已經編寫的測試代碼,該代碼通過導航控件和OSM圖層實例化地圖,然後註冊地圖的moveend事件,創建一個回調函數,完成我所描述的操作,最後最大程度地放大。
有沒有人有一個想法,我應該做什麼不同,以限制縮小到最大程度上選擇的能力?我希望我不必手動將範圍手動調整回最大範圍內,但如果是這種情況,至少知道這將有所幫助。
P.S. - 不幸的是,整個HTML並沒有顯示,因爲從剛纔風格,並從最終被處理爲HTML之後。唯一真正缺少的是我在主體的onload事件中調用init()。
<style type="text/css">
html, body {
width: 100%;
height: 100%;
margin: 0;
}
#map {
width: 100%;
height: 100%;
margin: 0;
}
</style>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
var map;
var num;
function init(){
map = new OpenLayers.Map('map', { controls: [] });
map.addControl(new OpenLayers.Control.Navigation());
map.addLayer(new OpenLayers.Layer.OSM());
map.events.register("moveend", this, function (e) {
if (num == 5)
{
map.maxExtent = map.getExtent();
map.restrictedExtent = map.maxExtent;
map.maxResolution = map.getResolution();
console.log(num++ + ": Setting maxExtent/restrictedExtent: " + map.maxExtent + "; resolution: " + map.maxResolution);
}
else
{
console.log(num++ + ": Changed to extent: " + map.getExtent() + "; resolution: " + map.getResolution());
}
});
num = 0;
map.zoomToMaxExtent();
}
</script>
我可以看到有很多東西要學。新的地理以及。根據您的最小/最大分辨率,我可以看到您將您的分鐘設置爲比您的最大分辨率更大的數字。這有點令人困惑,因爲當我第一次帶着控制檯運行我的頁面時,我得到了19567.87923828125的分辨率,當我最終達到第六個範圍的改變時,我約在4.x左右。地圖似乎告訴我,我越接近分辨率越低。 – bmahf 2013-03-22 16:07:08
剛剛談到一位地理學同事說,分辨率通常以米/像素爲單位來衡量,這意味着當我非常接近時,我將一個像素中顯示的米數少一些,甚至小於1,而且非常小遠非如此,我將在一個像素中顯示更多數量的米,這是我所看到的。所以我不明白爲什麼minResolution會被設置爲比maxResolution更大的數字。 – bmahf 2013-03-22 16:19:05
分辨率是以像素爲單位的地圖單位的寬度/高度 - 例如,如果將150英里劃分爲 乘以512像素,則分辨率爲0.29296875。如果您使用的是平鋪緩存服務器,則需要指定緩存平鋪的分辨率(以及設置 serverResolutions屬性,該屬性指定在服務器上將分片緩存爲 的分辨率)。否則,您通常只需定義numZoomLevels即可指定 您想要的縮放級別。 – 2013-03-22 17:15:59