समस्या यह है: हम
var bounds = new google.maps.LatLngBounds();
सेट इतना है कि हम बाद में नक्शे पर एक घिरे क्षेत्र के लिए हमारी मार्करों फिट कर सकते हैं। जीमैप्स हमेशा फिट करने के लिए असीमित रूप से ज़ूम आउट करेगा() तदनुसार, लेकिन इसे प्राप्त करने के लिए ज़ूम इन नहीं करेगा (जैसा कि पहले @broady द्वारा नोट किया गया था)। यह कई अनुप्रयोगों के लिए आदर्श नहीं है जब आप एक बार गए हैं और मानचित्र पर मार्करों की एक श्रृंखला प्रदर्शित की है जिसके कारण मानचित्र ज़ूम आउट हो सकता है (शायद < 10), उपयोगकर्ता मैन्युअल रूप से ऐसा करने के बिना वापस ज़ूम नहीं करेगा।
जीएमएपीएस मार्कर संग्रह स्थिति (क्षमा करें) ज़ूम आउट की बेहतर सीमाओं (बेहतर शब्दों की कमी) की सीमाओं का उपयोग करना जारी रखेगा। नए मार्करों के लिए प्रत्येक कॉल से पहले 'शून्य' पर सेट करना आपको काम करने के लिए एक नया नक्शा देता है।
ऑटो-ज़ूम इन करने के लिए, बस LatLngBounds() सेट करें; 'अशक्त' की तरह तो (इसकी नियुक्ति को देखने के लिए नीचे दिए गए छद्म उदाहरण देखें) करने के लिए:
bounds = new google.maps.LatLngBounds(null);
छद्म उदाहरण:
// map stuff/initiation
...
var bounds = new google.maps.LatLngBounds();
var gmarkers = [];
function CreateMarker (obj) {
myLatLng = new google.maps.LatLng(obj['latitude'], obj['longitude']);
marker = new google.maps.Marker({
position: myLatLng,
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(obj['job']);
infowindow.open(map, marker);
}
})(marker, i));
bounds.extend(myLatLng);
gmarkers.push(marker);
}
....
// here's an AJAX method I use to grab marker coords from a database:
$.ajax({
beforeSend: function() {
clear_markers(gmarkers); // see below for clear_markers() function declaration
},
cache: false,
data: params,
dataType: 'json',
timeout: 0,
type: 'POST',
url: '/map/get_markers.php?_=<?php echo md5(session_id() . time() . mt_rand(1,9999)); ?>',
success: function(data) {
if (data) {
if (data['count'] > 0) {
var obj;
var results = data['results'];
// Plot the markers
for (r in results) {
if (r < (data['count'])) {
CreateMarker(results[r]);
}
}
}
}
},
complete: function() {
map.fitBounds(bounds);
}
});
// clear_markers()
function clear_markers(a) {
if (a) {
for (i in a) {
a[i].setMap(null);
}
a.length = 0;
}
bounds = new google.maps.LatLngBounds(null); // this is where the magic happens; setting LatLngBounds to null resets the current bounds and allows the new call for zoom in/out to be made directly against the latest markers to be plotted on the map
}
स्रोत
2012-04-24 16:13:18
ऐसा लगता है कि यह काम करता है। मुझे आश्चर्य है कि 'पैनबाउंड्स' को 'फिटबाउंड' के बिना क्या करना है। – dbkaplun