2012-11-17 11 views
6

काम नहीं कर रहा गूगल मैप्स एपीआई V3 में, मैं एक नक्शा वस्तु बना लिया है बाद में मूल दृश्य पर, मैं ज़ूम स्तर और मानचित्र के केंद्र को सहेजना चाहता हूं। मैं निम्नलिखित कोशिश करता हूं:मानचित्र API v3:</p> <pre><code>map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); </code></pre> <p>मैं ज़ूम होगा और पैन है कि नक्शे पर और जाने के लिए: getCenter() और getZoom()

oldCenter = map.getCenter(); 
oldZoom = map.getZoom(); 

लेकिन चर 'अपरिभाषित' रहते हैं। जब मैं कंसोल में एक ही काम करता हूं, तो मुझे सही प्रतिक्रिया मिलती है।

मैं क्या गलत कर रहा हूं? अगर उत्तर खोजने के लिए और यदि यह एक स्पष्ट समस्या है तो कृपया मुझे बताएं।

धन्यवाद!

पूर्ण कोड:

function initialize() { 

    // CUSTOM PLACES 
    var latlng = new google.maps.LatLng(51, 10); 
    var germany = new google.maps.LatLng(51, 10); 
    var myLatlng = new google.maps.LatLng(49,12); 

    // DEFINE STYLE 
    var styles = [ 
    { 
     "stylers": [ 
     { "invert_lightness": true } 
     ] 
    } 
    ]; 

    // MARKER STYLES 
    var coin_image = 'coin.png'; 
    var merch_image = 'merch.png'; 

    // DEFINE OPTIONS FOR MAP 
    var myOptions = { 
    panControl: false, 
    zoomControl: true, 
    zoomControlOptions: { 
     style: google.maps.ZoomControlStyle.SMALL, 
     position: google.maps.ControlPosition.LEFT_TOP 
    }, 
    mapTypeControl: false, 
    scaleControl: false, 
    streetViewControl: false, 
    overviewMapControl: false, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 


    // CREATE MAP OBJECT 
    map = new google.maps.Map(document.getElementById("map_canvas"), 
     myOptions); 

    map.setOptions({styles: styles}); 

    // select zoom, etc by defining 2 points 
    var southWest = new google.maps.LatLng(45,-10); 
    var northEast = new google.maps.LatLng(55,15); 
    var bounds = new google.maps.LatLngBounds(southWest,northEast); 
    map.fitBounds(bounds); 

    placeMarker(southWest); 
    placeMarker(northEast); 

    // Place Random Markers 
    var lngSpan = northEast.lng() - southWest.lng(); 
    var latSpan = northEast.lat() - southWest.lat(); 
    for (var i = 0; i < 50; i++) { 
    var location = new google.maps.LatLng(southWest.lat() + latSpan * Math.random(), 
     southWest.lng() + lngSpan * Math.random()); 
    var marker = new google.maps.Marker({ 
     position: location, 
     map: map, 
     icon: merch_image 
    }); 
    var j = i + 1; 
    marker.setTitle(j.toString()); 
    } 


    // TRANSACTION MARKERS 

    // ONE FULL CYCLE 
    // set marker 

    var trans_marker = new google.maps.LatLng(52.31799,13.241904); 
    var marker = new google.maps.Marker({ 
     position: trans_marker, 
     map: map, 
     animation: google.maps.Animation.DROP, 
     title:"Hello World!", 
     icon: coin_image 
    }); 

     // HERE'S THE PROBLEM 
    // var oldCenter = map.getCenter(); 
    // var oldZoom = map.getZoom(); 

    console.log(map); 
    oldMap = map; 
    console.log(oldMap); 
    // console.log(oldZoom); 
    // console.log(oldCenter.toString()); 

    // pan to marker 
    setTimeout(function() {map.panTo(trans_marker)}, startDelayed(3000)); 

    // zoom in on marker 
    setTimeout(function() {zoomIn(ENDZOOM)}, startDelayed(1000)); 

    // show info window 
    var contentString = "<h3>Döner @ Coco Banh</h3>"; 
    contentString += ("<p>SumUp was used to pay for a Döner at Coco Banh in Berlin, Germany</p>"); 
    var infowindow = new google.maps.InfoWindow({ 
    content: contentString 
    }); 

    setTimeout(function() {infowindow.open(map,marker)}, startDelayed(8000)); 
    setTimeout(function() {infowindow.close()}, startDelayed(5000)); 

    // zoom out again 
    setTimeout(function() {zoomOut(oldZoom)}, startDelayed(2000)); 

    // center again 
    setTimeout(function() {map.panTo(oldCenter)}, startDelayed(8000)); 

} 
    infowindow = new google.maps.InfoWindow({ 
    content: contentString 
}); 


} 
+1

पर्याप्त संदर्भ। नक्शा वैरिएबल वैश्विक है? आप इसे कैसे शुरू कर रहे हैं? GetCenter और getZoom कॉल कहां उपयोग किए जा रहे हैं? – geocodezip

+0

धन्यवाद, बस प्रश्नों में अधिक कोड जोड़ा – tomburger

+0

यह वहाँ तल पर एक अतिरिक्त घुंघराले ब्रेस है प्रकट होता है। क्या यहां और संदर्भ है? iirc, infowindow असाइन करना प्रारंभिक विधि के बाहर हो रहा है। fwiw, सामान्य विचार हालांकि काम करना चाहिए। मैंने पहले कुछ ऐसा किया है। –

उत्तर

11

समस्या यह है कि सीमा और केंद्र अभी तक सेट नहीं कर रहे हैं। उन्हें प्राप्त करने के लिए आपको zoom_changed (ज़ूम के लिए) पर श्रोता में ऐसा करने की आवश्यकता है; center_changed (केंद्र के लिए)। उपलब्ध मानचित्र घटनाओं को घटनाओं के तहत documentation में सूचीबद्ध किया गया है। आप का उपयोग addListenerOnce केवल एक बार (पहली बार) करने के लिए कर सकते हैं।

कुछ इस तरह काम करना चाहिए (परीक्षण नहीं):

var oldZoom = null; 
var oldCenter = null; 
google.maps.event.addListenerOnce(map, "zoom_changed", function() { oldZoom = map.getZoom(); }); 
google.maps.event.addListenerOnce(map, "center_changed", function() { oldCenter = map.getCenter(); }); 

आप जब तक के बाद उन घटनाओं सक्रिय नहीं हो जाते उन्हें इस्तेमाल करने में सक्षम नहीं होगा।

+0

मैं देखता हूं। तो जब मैं मानचित्र को "map.fitBounds (सीमाओं) के साथ स्थिति देता हूं;" - जो ज़ूम और केंद्र सेट नहीं करता है हालांकि नक्शा केंद्रित है और ज़ूम किया गया है? – tomburger

+0

यह उन्हें सेट करता है, लेकिन वे 'उन घटनाओं आग जब तक "मिल" तरीकों के साथ उपलब्ध हैं। एपीआई का वी 3 घटना आधारित है। – geocodezip

+0

वहाँ भी एक 'idle' घटना है, जो उपयोगी है क्योंकि' center_changed' सक्रिय कर सकता है ** एक बहुत ** ... 'google.maps.event.addListenerOnce (नक्शा," निष्क्रिय "समारोह() {}) है,' –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^