2010-08-17 6 views
2

J'essaie de générer une carte Google Map à partir des résultats d'une base de données. Je peux obtenir les adresses géocodées et les afficher sur la carte, mais je ne suis pas capable de le faire très rapidement. J'ai une fonction setTimeout pour aider au chargement des marqueurs; Si je ne l'inclue pas, tous les marqueurs ne seront pas chargés.Chargement dynamique des marqueurs Google Maps

Y a-t-il un moyen pour moi de sortir les marqueurs rapidement? Les marqueurs auront aussi éventuellement des InfoWindows sur eux. Note: J'utilise ColdFusion et SQL. Here is what happens. Voici mon code à ce jour:

<body onLoad="initialize()"> 

    <div id="map_canvas" class="grid_12"> 
    </div> 

</div> 
<!end .container_12> 

</body> 

<script type="text/javascript"> 

function initialize(){ 
    // Prepare the array from ColdFusion and database 
    var locations = [ 
    <cfset locationArray=ArrayNew(1)> 
     <cfloop query="GetLocations"> 
      <cfscript> 
       ArrayAppend(locationArray, #Client_Address# & ' ' & #Client_City# & ' ' & #Client_State# & ' ' & #Client_Company#); 
      </cfscript> 
      '<cfoutput>#Client_Address# #Client_City# #Client_State#</cfoutput>', 
     </cfloop> 

    ]; 

    //Set options of the google map 
    var mapOpt = { 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: new google.maps.LatLng(42.48019996901214, -90.670166015625), 
     zoom: 8 
    }; 

    //Create new map 
    var map = new google.maps.Map(document.getElementById("map_canvas"), mapOpt); 

    var geocoder = new google.maps.Geocoder(); 
    var index = 0; 

    //Begin geocoding function converting addresses to LatLng 
    var geocoderFunction = function() { 
     geocoder.geocode({ 'address': locations[index] }, function (results, status) { 

      if (status == google.maps.GeocoderStatus.OK) { 

      new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location, 
       title: '' 
      }); 

      } 

     // Call the geocoder with a 150ms delay 
      index++; 
      if (locations.length > index) { 
      setTimeout(geocoderFunction, 150); 

      } 

     }); 

    } 

    // Launch the geocoding process 
    geocoderFunction(); 

} 
</script> 
</html> 

Je suis assez novice en la matière, de sorte que toute aide serait appréciée!

+0

Voici comment je l'ai fait: http://anglerweb.com/fishingreports/Create Cette page est utilisée pour ajouter un rapport de pêche à un lieu de pêche. Fondamentalement, vous aurez besoin de trouver un lieu de pêche et cliquez dessus pour le sélectionner. Lorsque vous naviguez sur la carte, il affiche des points de pêche en tant que marqueurs après un délai. mais il montre tous les marqueurs rapidement. – akonsu

+0

Lors du chargement de la page, le document parent se charge rapidement. La carte prend une seconde, puis les marqueurs apparaissent. Cependant, au moment où le document parent a été chargé et le chargement de la carte commence, CF a terminé son travail. La partie lente est ce qui exécute * après * le chargement du parent. @LarsH a souligné ce qui serait probablement ma première étape pour essayer d'optimiser cela. –

Répondre

3

Le géocodage est probablement la partie lente. Pouvez-vous faire le géocodage à l'avance, stocker lat & longtemps dans la base de données, puis au moment de la cartographie il suffit de pousser les marqueurs sur la carte avec lat & longtemps?

+0

merci LarsH, je vais essayer de le faire aujourd'hui! – knawlejj

Questions connexes