2010-08-17 3 views
2

Я пытаюсь создать Google Map на основе результатов из базы данных. Я могу получить адреса, геокодированные и выведенные на карту, но я не могу сделать это очень быстро. У меня есть функция setTimeout, которая помогает с загрузкой маркеров; если я не включу его, то не все маркеры будут загружаться.Загрузка динамиков карт google динамически динамически

Есть ли способ, чтобы я быстро вывел маркеры? Кроме того, маркеры также будут иметь InfoWindows. Примечание. Я использую ColdFusion и SQL. Here is what happens. Вот мой код до сих пор:

<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> 

Я довольно новичок в этом, так что любая помощь будет оценен по достоинству!

+0

вот как я это сделал: http://anglerweb.com/fishingreports/Create Эта страница используется, чтобы добавить отчет о промысле в место рыбалки. в основном, вам нужно найти место для рыбалки и нажать на него, чтобы выбрать. когда вы перемещаетесь по карте, она отображает пятна промысла в качестве маркеров после задержки. но он показывает все маркеры быстро. – akonsu

+0

При загрузке страницы родительский документ загружается быстро. Карта занимает секунду, затем появляются маркеры. Однако, к моменту загрузки родительского документа и загрузки карты, CF завершил работу. Медленная часть - это то, что выполняется * после * родительских нагрузок. @LarsH указал, что, вероятно, станет моим первым шагом в попытке оптимизировать это. –

ответ

3

Геокодирование, вероятно, является медленной частью. Можете ли вы сделать геокодирование раньше времени, храните lat & long в базе данных, а затем во время отображения просто нажмите маркеры на карту с помощью lat & long?

+0

спасибо LarsH, я собираюсь сделать это сегодня! – knawlejj

Смежные вопросы