2010-09-14 19 views
7

मुझे यह पता लगाना प्रतीत नहीं होता है कि getProjection() द्वारा लौटाई गई वस्तु को अपरिभाषित क्यों किया गया है।Google मानचित्र v3 OverlayView.getProjection()

// Handles the completion of the rectangle 
    var ne = recBounds.getNorthEast(); 
    var sw = recBounds.getSouthWest(); 
    $("#map_tools_selat").attr('value', sw.lat()); 
    $("#map_tools_nwlat").attr('value', ne.lat()); 
    $("#map_tools_selng").attr('value', ne.lng()); 
    $("#map_tools_nwlng").attr('value', sw.lng()); 

    // Set Zoom Level 
    $("#map_tools_zoomlevel").attr('value', HAR.map.getZoom()+1); 
    document.getElementById("map_tools_centerLat").value = HAR.map.getCenter().lat(); 
    document.getElementById("map_tools_centerLong").value = HAR.map.getCenter().lng(); 

    // All this junk below is for getting pixel coordinates for a lat/lng =/ 
    MyOverlay.prototype = new google.maps.OverlayView(); 
    MyOverlay.prototype.onAdd = function() { } 
    MyOverlay.prototype.onRemove = function() { } 
    MyOverlay.prototype.draw = function() { } 
    function MyOverlay(map) { this.setMap(map); } 
    var overlay = new MyOverlay(HAR.map); 
    var projection = overlay.getProjection(); 
    // END - all the junk 
    var p = projection.fromLatLngToContainerPixel(recBounds.getCenter()); 
    alert(p.x+", "+p.y); 

मेरे त्रुटि है: कॉल नहीं कर सकता विधि अपरिभाषित

+0

:: तो, एक बेहतर समाधान, निष्क्रियgoogle.maps.Map वस्तु की स्थिति पर सुनने और वहाँ प्रक्षेपण के लिए एक संदर्भ पाने के लिए है मुझे लगता है कि दिखाने के लिए jQuery भाग चिपकाया मेरा नक्शा ऑब्जेक्ट (HAR.map) काम करता है। मैंने कई बार पुष्टि की है कि getCenter() और getZoom() फ़ंक्शन वास्तव में उचित मान लौट रहे हैं। तो HAR.map ऑब्जेक्ट कानूनी है। –

उत्तर

26

असल में, ऐसा कारण है कि ऐसा क्यों होता है क्योंकि पैनिंग/ज़ूमिंग के बाद मानचित्र निष्क्रिय होने के बाद प्रोजेक्शन ऑब्जेक्ट बनाया जाता है। BTW

// Create your map and overlay 
var map; 
MyOverlay.prototype = new google.maps.OverlayView(); 
MyOverlay.prototype.onAdd = function() { } 
MyOverlay.prototype.onRemove = function() { } 
MyOverlay.prototype.draw = function() { } 
function MyOverlay(map) { this.setMap(map); } 

var overlay = new MyOverlay(map); 
var projection; 

// Wait for idle map 
google.maps.event.addListener(map, 'idle', function() { 
    // Get projection 
    projection = overlay.getProjection(); 
}) 
+0

बहुत बढ़िया! मुझे यह कोशिश करने की ज़रूरत है। –

+0

बस मेरे दिन बचाया –

2

की 'fromLatLngToContainerPixel' मैं एक तरह से पता लगा कि क्या हो रहा था यहाँ मेरी कोड है। भले ही यह अभी भी क्रिस्टल स्पष्ट नहीं है कि ऐसा क्यों होता है, मुझे पता है कि मुझे अपने Google मानचित्र (HAR.map) को तुरंत चालू करने के बाद चर "ओवरले" को तुरंत चालू करना पड़ा। तो मैं व्यावहारिक रूप से मेरी HAR वर्ग में उस कोड स्निपेट चले गए और अब मैं का उपयोग करें:

HAR.canvassOverlay.getProjection().fromLatLngToContainerPixel(recBounds.getCenter()); 

तो अब, हर बार जब मैं अपने वर्ग "HAR" के माध्यम से एक नक्शा बना मैं अपने वर्ग के भीतर एक समानांतर OverlayView वस्तु है।

त्रुटि मेरी कक्षा वस्तु के दायरे को खोने के साथ हो सकती है, लेकिन मुझे लगता है कि यह नक्शा घटना "projection_changed" से अधिक नहीं निकाला जा रहा था। मैं नक्शा वर्ग के लिए मानचित्र एपीआई डॉक्स से एक संकेत मिला है, विधि getProjection() के तहत:

"Returns the current Projection. If the map is not yet initialized (i.e. the mapType is still null) then the result is null. Listen to projection_changed and check its value to ensure it is not null."

आप वही समस्या हो रही है, तो सुनिश्चित करें कि आप अपने overlayView.setMAP आवंटित कर (YOUR_MAP_OBJECT) मानचित्र वस्तु को तुरंत चालू करने के बाद बारीकी से।

+0

मुझे यह समस्या भी थी, और ऐसा इसलिए था क्योंकि मेरे पास यह कोई नहीं था .setMap() बिल्कुल। धन्यवाद। – danludwig

+0

एनपी। खुशी हुई यह मदद की। –

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