2011-03-29 20 views
9

मैं नक्शा को कुछ केएमएल लोड करने के लिए Google मानचित्र एपीआई v3 का उपयोग कर रहा हूं और उन्हें kml.setMap() विधि के साथ प्रदर्शित/छुपाएं।Google मैप्स एपीआई वी 3 कॉलबैक (केएमएल लोडिंग)

मुझे "लोडिंग" विंडो प्रदर्शित करने की आवश्यकता है जबकि केएमएल लोड होने तक मानचित्र लोड हो रहा है।

मैं कुछ इस तरह का उपयोग करने की कोशिश की:

google.maps.event.addListener(map, 'tilesloaded', function() { 
    var d = new Date(); 
    console.log('Loaded: ' + d); 
}); 

google.maps.event.addListener(map, 'bounds_changed', function() { 
    var d = new Date(); 
    console.log('Started: ' + d); 
}); 

लेकिन यह काम नहीं किया था के रूप में उम्मीद।

"टाइटलस्लोडेड" ईवेंट हमेशा नहीं निकाल दिया जाता है, संभवतः कैश की गई छवियां?

यहाँ मेरी लॉग है:

Started: Tue Mar 29 2011 16:22:03 GMT-0300 (BRT) <-- started loading map 
Loaded: Tue Mar 29 2011 16:22:06 GMT-0300 (BRT) <-- done loading map 
Started: Tue Mar 29 2011 16:22:30 GMT-0300 (BRT) <-- started plotting the KML 
Started: Tue Mar 29 2011 16:22:30 GMT-0300 (BRT) <-- started plotting the KML (again?!) 
Loaded: Tue Mar 29 2011 16:22:32 GMT-0300 (BRT) <-- done plotting the KML 

और जब/छुपा के एम एल फिर

उत्तर

18

मानचित्र के बजाय kmlLayer पर श्रोता पंजीकृत करने का प्रयास करें। मैंने metadata_changed ईवेंट को सुनने के साथ कुछ सरल परीक्षण किए और ऐसा लगता है कि यह ठीक काम करता है।

google.maps.event.addListener(kmlLayer, "metadata_changed", function() { 
    console.debug("metadata_changed"); 
}); 
4

दिखा मुझे लगता है आप के एम एल के लिए अपने स्वयं के कस्टम लोडर लिख सकता है कुछ भी नहीं प्राप्त किया। यहां एक साधारण उदाहरण है जो केवल KMLMetaData ऑब्जेक्ट के रिटर्न मान का परीक्षण करता है। आपको इसे कई केएमएल फाइलों के साथ काम करने के लिए अनुकूलित करना होगा।

<html> 
    <head> 
     <script type="text/javascript" src= "http://maps.google.com/maps/api/js?sensor=false"> 
     </script> 
     <script> 
    var map; 
    var cta_layer; 
    var loader; 
    var loaderId; 

    function initialize() { 
     loader = document.getElementById("loader"); 
     var kmlUrl = 'http://code.google.com/apis/kml/documentation/KML_Samples.kml'; 
     var myLatlng = new google.maps.LatLng(-25.363882,131.044922); 
     var myOptions = { 
      zoom: 4, 
      center: myLatlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     } 
     var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

     cta_layer = new google.maps.KmlLayer(kmlUrl, {suppressInfoWindows: true,preserveViewport:true}); 
     cta_layer.setMap(map); 
     loaderId = setInterval("kmlLoader()", 10) 
    } 

    function kmlLoader() { 

     if (typeof cta_layer.getMetadata() == "object") { 

      loader.style.display = "none"; 
      clearInterval(loaderId); 
      return true; 
     } else { 
      return false; 
     } 
    } 

    function show() { 
     cta_layer.setMap(map) 
    } 

    function hide() { 
     cta_layer.setMap(null) 
    } 
     </script> 
    </head> 
    <body onload="initialize()"> 
     <div id="loader" style="background: red; color:white;display:block;"> 
      Loading.... 
     </div> 
     <div id="map_canvas" style="height: 500px;width: 500px;"> 
     </div> 
     <input type=button onclick="show()" value="Show"> 
     <input type=button onclick="hide()" value="Hide"> 
    </body> 
</html> 
2

यदि मैं वर्तमान संदर्भ (18 नवंबर, 2012 के अनुसार) को देखता हूं, तो आप बस स्थिति_changed ईवेंट को सुन सकते हैं। मैं अब metadata_changed घटना भी नहीं ढूंढ सकता।

+3

metadata_changed अभी भी वहां है और अभी भी अनियंत्रित है! जब आप केएमएल मेटाडेटा को देखना चाहते हैं तो इसकी आवश्यकता होती है, क्योंकि मुझे पता चला है कि यह स्थिति_changed ईवेंट – Doogal

+0

में पॉप्युलेट नहीं है 8 जुलाई, 2015 तक, "मेटाडाटा_changed" अभी भी वहां है और अभी भी अनियंत्रित है। और यह अभी भी "status_changed" घटना में पॉप्युलेट नहीं है! – sntran

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