उनके उत्तर के लिए जाइल्स गार्डम का धन्यवाद, लेकिन यह केवल देशांतर को संबोधित करता है न कि अक्षांश को। एक पूर्ण समाधान को अक्षांश के लिए आवश्यक ज़ूम स्तर और देशांतर के लिए आवश्यक ज़ूम स्तर की गणना करनी चाहिए, और फिर दोनों के छोटे (आगे बाहर) ले जाना चाहिए।
यहाँ एक फ़ंक्शन है जो अक्षांश और देशांतर दोनों का उपयोग करता है:
function getBoundsZoomLevel(bounds, mapDim) {
var WORLD_DIM = { height: 256, width: 256 };
var ZOOM_MAX = 21;
function latRad(lat) {
var sin = Math.sin(lat * Math.PI / 180);
var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
}
function zoom(mapPx, worldPx, fraction) {
return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);
}
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI;
var lngDiff = ne.lng() - sw.lng();
var lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;
var latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);
var lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);
return Math.min(latZoom, lngZoom, ZOOM_MAX);
}
Demo on jsfiddle
पैरामीटर:
"सीमा" पैरामीटर मान google.maps.LatLngBounds
ऑब्जेक्ट होना चाहिए ।
"मैपडिम" पैरामीटर मान "ऊंचाई" और "चौड़ाई" गुणों के साथ एक ऑब्जेक्ट होना चाहिए जो मानचित्र को प्रदर्शित करने वाले DOM तत्व की ऊंचाई और चौड़ाई का प्रतिनिधित्व करता है। यदि आप पैडिंग सुनिश्चित करना चाहते हैं तो आप इन मूल्यों को कम कर सकते हैं। यही है, हो सकता है कि आप नक्शे के मार्करों को सीमा के भीतर मैप के किनारे के बहुत करीब न चाहें।
यदि आप jQuery लाइब्रेरी का उपयोग कर रहे हैं, तो mapDim
मूल्य निम्नानुसार प्राप्त किया जा सकता है:
var $mapDiv = $('#mapElementId');
var mapDim = { height: $mapDiv.height(), width: $mapDiv.width() };
यदि आप प्रोटोटाइप लाइब्रेरी का उपयोग कर रहे हैं, तो मैपडिम वैल्यू निम्नानुसार प्राप्त की जा सकती है:
var mapDim = $('mapElementId').getDimensions();
प्रतिलाभ की मात्रा:
वापसी मूल्य अधिकतम ज़ूम स्तर है जो अभी भी पूरे सीमा को प्रदर्शित करेगा। यह मान 0
अधिकतम और ज़ूम स्तर के बीच , समावेशी होगा।
अधिकतम ज़ूम स्तर 21 है। (मेरा मानना है कि यह Google मैप्स एपीआई v2 के लिए केवल 19 था।)
स्पष्टीकरण:
Google मानचित्र एक Mercator प्रक्षेपण का उपयोग करता है। एक मर्केटर प्रोजेक्शन में देशांतर की रेखाएँ समान रूप से फैली होती हैं, लेकिन अक्षांश की रेखाएँ नहीं होती हैं। जैसे ही वे भूमध्य रेखा से ध्रुवों तक जाते हैं अक्षांशों की रेखाओं के बीच की दूरी बढ़ जाती है। वास्तव में दूरी अनंत की ओर झुकती है क्योंकि यह ध्रुवों तक पहुंचती है। हालाँकि, Google मैप्स का नक्शा लगभग 85 डिग्री उत्तर से ऊपर या लगभग -85 डिग्री दक्षिण में अक्षांश नहीं दिखाता है। ( संदर्भ ) (मैं वास्तविक कटऑफ की गणना +/- 85.05112877980658 डिग्री पर करता हूं।)
यह देशांतर के लिए अक्षांशों के लिए अंशों की गणना को देशांतर की तुलना में अधिक जटिल बनाता है। मैंने अक्षांश अंश की गणना करने के लिए विकिपीडिया से एक सूत्र का उपयोग किया । मैं Google मानचित्र द्वारा उपयोग किए गए प्रक्षेपण से यह मेल खाता हूं। आखिरकार, मैं ऊपर दिए गए Google मैप्स प्रलेखन पृष्ठ पर उसी विकिपीडिया पृष्ठ का लिंक शामिल करता हूं।
अन्य नोट:
- ज़ूम स्तर 0 से अधिकतम ज़ूम स्तर तक होता है। ज़ूम स्तर 0 मानचित्र पूरी तरह से ज़ूम आउट है। उच्च स्तर नक्शे को और आगे बढ़ाते हैं। ( संदर्भ )
- ज़ूम स्तर 0 पर पूरी दुनिया को एक ऐसे क्षेत्र में प्रदर्शित किया जा सकता है जो 256 x 256 पिक्सेल है। ( संदर्भ )
- प्रत्येक उच्च जूम स्तर के लिए चौड़ाई और ऊंचाई दोनों में समान क्षेत्र को प्रदर्शित करने के लिए आवश्यक पिक्सेल की संख्या। ( संदर्भ )
- मानचित्र अनुदैर्ध्य दिशा में लपेटते हैं, लेकिन अक्षांशीय दिशा में नहीं।