2016-04-30 3 views
0

Je suis un problème assez étrange avec mon code. J'utilise geoxml3 pour analyser un fichier kml, et il corrige toutes les polylignes ok, mais quand il arrive aux marqueurs, la console dit que c'est undefined. Ce qui est bizarre, c'est que chaque fois que je recharge la page, ça fonctionne bien, mais chaque fois que j'ouvre dans un nouvel onglet, ça se casse de nouveau. Même plus bizarre, quand je mets un console.log juste avant la condition pour vérifier s'il s'agit d'une polyligne ou d'un marqueur, la console du navigateur montre qu'il y a une propriété .Javascript seulement accéder à la propriété de l'objet après le rechargement de la page

Voilà ma fonction useTheData que geoxml3 nécessite:

function useTheData(doc){ 
console.log("Starts Parse"); 
console.log(doc[0].placemarks.length); 
for (var i = 0; i < doc[0].placemarks.length; i++){ 
    console.log("i: "+i+", placemark:");  
    console.log(doc[0].placemarks[i]); //here the .marker property exists in the console 
    console.log(".marker:"); 
    console.log(doc[0].placemarks[i].marker); //here it says it's undefined! 
    if(doc[0].placemarks[i].polyline){ //check if it's a polyline 
     google.maps.event.addListener(doc[0].placemarks[i].polyline, 'click', select_option); 
    } 
    else{ 
     console.log("### i = "+i); 
     console.log("1"); 
     console.log(doc[0].placemarks[i].marker); //here, the exact same object, doesn't have the marker property! 
     console.log("2"); 
     google.maps.event.addListener(doc[0].placemarks[i].marker, 'click', select_option); //Because of that, the first time the page loads, it get's stuck in the function cuz it can't access the .marker 
     console.log("3"); 
     doc[0].placemarks[i].marker.setIcon({ 
      url: "img/bola.png", 
      scaledSize: new google.maps.Size(10, 10), 
      anchor: new google.maps.Point(5, 5) 
     }); 
     console.log("4"); 
    } 
} 
console.log("End Parse"); 
google.maps.event.addListener(map, 'click', select_option); 
} 
+0

Veuillez fournir un exemple [Minimal, Complete, Tested and Readable] (http://stackoverflow.com/help/mcve) qui illustre le problème (et une indication de la version de geoxml3 que vous utilisez). – geocodezip

+0

'Uncaught ReferenceError: select_option n'est pas défini' – geocodezip

+0

J'utilise la toute dernière version du 6 avril téléchargée depuis github. Le problème est que le geoxml obtient un kml à partir d'un serveur local, je vais essayer de publier le code sur un serveur pour être capable de reproduire entièrement l'erreur. Mais toutes les fonctions addListener peuvent être supprimées et l'erreur se produit toujours. – Cesar

Répondre

1

Cela est dû à l'une des différences entre les polys et les branches KMZ de geoxml3.

La branche kmz de geoxml3 dispose d'un gestionnaire d'événements img onload pour les icônes qui peuvent les rendre indisponibles tant que l'opération d'analyse n'est pas terminée. Cela facilite le dimensionnement des icônes, mais peut causer des problèmes comme vous le voyez dans la fonction afterParse.