यहां एक समाधान है जो कस्टम मार्जिन के बिना जितना संभव हो सके मानचित्र में ज़ूम करेगा। यदि आप चाहते हैं तो आपको कुछ मार्जिन के लिए इसे अनुकूलित करने में सक्षम होना चाहिए।
मेरा समाधान this comment in a Google Groups thread पर आधारित है। दुर्भाग्यवश, helper.getProjection()
पर कॉल हमेशा अपरिभाषित हो गया, इसलिए मैंने उपरोक्त उत्तर को थोड़ा सा अनुकूलित किया और इस कामकाजी कोड के साथ आया।
बस myFitBounds(map, bounds)
साथ map.fitBounds(bounds)
के लिए अपने मौजूदा कॉल की जगह:
function myFitBounds(myMap, bounds) {
myMap.fitBounds(bounds);
var overlayHelper = new google.maps.OverlayView();
overlayHelper.draw = function() {
if (!this.ready) {
var projection = this.getProjection(),
zoom = getExtraZoom(projection, bounds, myMap.getBounds());
if (zoom > 0) {
myMap.setZoom(myMap.getZoom() + zoom);
}
this.ready = true;
google.maps.event.trigger(this, 'ready');
}
};
overlayHelper.setMap(myMap);
}
// LatLngBounds b1, b2 -> zoom increment
function getExtraZoom(projection, expectedBounds, actualBounds) {
var expectedSize = getSizeInPixels(projection, expectedBounds),
actualSize = getSizeInPixels(projection, actualBounds);
if (Math.floor(expectedSize.x) == 0 || Math.floor(expectedSize.y) == 0) {
return 0;
}
var qx = actualSize.x/expectedSize.x;
var qy = actualSize.y/expectedSize.y;
var min = Math.min(qx, qy);
if (min < 1) {
return 0;
}
return Math.floor(Math.log(min)/Math.log(2) /* = log2(min) */);
}
// LatLngBounds bnds -> height and width as a Point
function getSizeInPixels(projection, bounds) {
var sw = projection.fromLatLngToContainerPixel(bounds.getSouthWest());
var ne = projection.fromLatLngToContainerPixel(bounds.getNorthEast());
return new google.maps.Point(Math.abs(sw.y - ne.y), Math.abs(sw.x - ne.x));
}
क्या "अनुग्रह मार्जिन" आपकी वांछित सीमाओं का प्रतिशत हो सकता है? यदि यह मार्जिन तय किया गया है, तो आप फिट करने के लिए एक छोटे, मापा, सीमाओं को इनपुट कर सकते हैं बाउंड्स(), ताकि ग्रेस मार्जिन का अंत आपकी मूल रूप से वांछित सीमाओं से मेल खा सके। उम्मीद है कि यह समझ में आया। –
@ हेइटरचांग, यह वास्तव में हैकी और बेकार समाधान होगा, लेकिन फिर भी यह जानने के बिना कि फिटबॉउंड() द्वारा "कृपा मार्जिन" की गणना कैसे की जाती है, आप ऐसा नहीं कर सकते हैं। – TMS
चारों ओर हैकिंग के बाद, मैंने निष्कर्ष निकाला कि v3 fitBounds() उस ज़ूम स्तर पर, लंबे आयाम पर कम से कम 45 पिक्सेल पैडिंग (आपके सीमाओं द्वारा परिभाषित आयत के दोनों किनारों पर) केवल ज़ूम करेगा। मान लीजिए कि यह एक करीबी कॉल है, नक्शा ज़ूम आउट हो जाएगा, जिससे एक बड़ा मार्जिन निकल जाएगा। मुझे आशा है कि यह आपके लिए उपयोगी हो सकता है। –