2010-11-21 14 views
19

मैं एक वेब पेज में एक नक्शा प्रदर्शित करने के OpenLayers उपयोग कर रहा हूँ में अधिकतम ज़ूम स्तर। मैं क्लाउडमेड से टाइल्स का उपयोग कर रहा हूं, लेकिन समान समस्याएं OpenStreetMap से मैपनिक टाइल्स के साथ होती हैं।न्यूनतम/OpenLayers

मैं मानचित्र को प्रतिबंधित करने के लिए इतना है कि उपयोगकर्ता दुनिया को देखने के लिए बाहर पूर्णतया ज़ूम नहीं कर सकते हैं कोशिश कर रहा हूँ - मैं उन्हें कम से कम मोटे तौर पर एक शहर के स्तर ज़ूम रहना चाहता हूँ।

मैंने minZoomLevel/maxZoomLevel/numZoomLevels गुणों का उपयोग करने का प्रयास किया है; केवल maxZoomLevel और numZoomLevels गुण काम करते प्रतीत होते हैं, जबकि minZoomLevel संपत्ति को पूरी तरह से अनदेखा किया जाता है।

वहाँ एक और तरीका यह है है?

उत्तर

9

minZoomLevel XYZ परतों के लिए समर्थित नहीं है, जिसमें से ओएसएम एक उप-वर्ग है।

समाधान के लिए निम्नलिखित टिकट देखें:

+2

यह अब ओपनलेयर 3.0 के तहत लागू नहीं होता है। OpenLayers 3.0 के लिए मेरा अद्यतन उत्तर देखें। – jjmontes

11

आप isValidZoomLevel समारोह रद्द कर सकते थे। कुछ इस तरह (परीक्षण नहीं):

OpenLayers.Map.isValidZoomLevel = function(zoomLevel) { 
    return ((zoomLevel != null) && 
     (zoomLevel >= 2) && // set min level here, could read from property 
     (zoomLevel < this.getNumZoomLevels())); 
} 

संपादित

या आप यहाँ उदाहरण देखते हैं, उपलब्ध प्रस्तावों को ओवरराइड करने की आवश्यकता होगी: http://dev.openlayers.org/examples/zoomLevels.html

+0

हालांकि ज़ूम बार को समायोजित नहीं किया जा रहा है। –

+0

डेविड, खेद ने नियंत्रणों को नजरअंदाज कर दिया। मैंने अपना उत्तर और जोड़ा है - संपादित करें देखें। अनिवार्य रूप से आपको उन प्रस्तावों को परिभाषित करने की आवश्यकता होगी जिन्हें आप अनुमति देना चाहते हैं। – Jonathan

+0

हालांकि यह उत्तर नियंत्रणों के लिए काम नहीं करता है, लेकिन इसने मेरी समस्या को ठीक किया है कि मैं बस उपयोगकर्ता को एक निश्चित स्तर (स्क्रॉल व्हील या ज़ूमटोएक्सेंट के माध्यम से) ज़ूम करने से सीमित करना चाहता हूं। धन्यवाद! – SoWeLie

0

प्रस्तावों समस्या हल नहीं होती परिभाषित (यहां तक ​​कि में v2.1) - मुझे इसके लिए कोई आभूषण तय नहीं मिला, इसलिए मैंने जेएस में अपना खुद का ज़ूमबार बनाया - यही वह है जो मैं किसी भी व्यक्ति को अनुशंसा करता हूं जो कस्टम टाइल्स का उपयोग करके ज़ूमबार के साथ मुद्दों का सामना करता है।

map.getNumZoomLevels = function(){ 
     return 10; 
     }; 

यह 10 के स्तर से परे जूमिंग pevents और यह भी सही ढंग से zoomBar नियंत्रण ड्रॉ:

+0

मैंने पाया कि परिभाषित संकल्प सही काम करते थे। हालांकि मुझे कुछ गणित करना पड़ा। – rocketsarefast

6

मैं एक XYZ परत के लिए Maxzoom स्तरों को प्रतिबंधित करने का सबसे सरल तरीका पाया getNumZoomLevels विधि ओवरराइड करने के लिए किया गया था। यह और zoomOffset विकल्प का संयोजन आपको संकल्प या उप-वर्गों के साथ गड़बड़ किए बिना न्यूनतम/अधिकतम ज़ूम को आसानी से नियंत्रित करने की अनुमति दे सकता है।

+0

मेरे लिए चाल थी। यह भयानक है, लेकिन यह काम करता है। धन्यवाद। – Countzero

+0

सहमत - यह बुरा है, लेकिन संकल्पों के साथ घूमने वाले कुछ व्यर्थ घंटों के बाद मुझे वास्तव में परवाह नहीं था .... – Graham

+0

वही है। अजीब चीज़ यह करने के लिए एक और अधिक सरल तरीका नहीं है, लेकिन अच्छी तरह से। वैसे भी फिर से धन्यवाद। – Countzero

0

मैं के रूप में मैं समझ नहीं सकता था मेरे सेटअप में zoomOffset उपयोग करने के लिए कैसे इस समाधान के साथ समाप्त हो गया।

 map.getNumZoomLevels = function(){ 
      return (options.maxzoom-options.minzoom+1); 
     }; 

     map.isValidZoomLevel = function(zoomLevel) { 
      var valid = ((zoomLevel != null) && 
       (zoomLevel >= options.minzoom) && 
       (zoomLevel <= options.maxzoom)); 
      if(!valid && map.getZoom() == 0){ 
       map.zoomTo(options.maxzoom - (options.maxzoom - options.minzoom)/2); 

      } 
      return valid; 
     } 
0

मैं कुछ इस तरह की कोशिश की और यह मेरे लिए काम करता है:

map.newMoveTo = map.moveTo; 
map.moveTo = function(lonlat,zoom,options){ 
    return(zoom>=maxZoom && zoom<=minZoom)?map.newMoveTo(lonlat,zoom,options):false; 
}; 
0

सर्वश्रेष्ठ उत्तर मैं (एक उदाहरण सहित) पाया OpenLayers - limit the number of zoom levels पर था। मैं इसे यहां पेस्ट नहीं करता हूं, कृपया वहां दिए गए निर्देश देखें।

2

अन्य यहाँ जवाब OpenLayers संस्करणों संस्करण 3 से पहले का संदर्भ लें।

OpenLayers 3 के साथ

, आप maxZoom नक्शा विकल्प है जब नक्शा आरंभ, इस प्रकार के रूप में उपयोग कर सकते हैं:

var map = new ol.Map({ 
     target: 'mapcontainer-001', 
     layers: layers, // Layers need to be initialized previously 
     view: new ol.View({ 
      center: ol.proj.transform([-5.12345, 42.12345], 'EPSG:4326', 'EPSG:3857'), 
      zoom: 12, 
      maxZoom: 19 
     }) 
    }); 

अधिक जानकारी OpenLayers प्रलेखन में पाया जा सकता है: http://openlayers.org/en/v3.0.0/doc/tutorials/concepts.html

0

अब मैं में इस का उपयोग "देखें":

view: new ol.View({ 
    center: ol.proj.transform([-3.707524, 40.485644], 'EPSG:4326',EPSG:3857'), 
    zoom: 15, 
    maxZoom: 17, 
    minZoom: 6 
}), 

और यह काम करता है ठीक