2011-09-22 108 views
0

是否有可能在谷歌地圖api v2上緩存地理編碼? ,因爲我需要在我的地圖上獲得6.5k的標記,而使用這個腳本需要大約20分鐘來加載它們。如果不需要,我們不想使用lat和lng。 如果這是不可能的,是否有人知道另一種方式來更快地加載它們?我的JavaScript知識不是很好,因爲這是我的第一個腳本。緩存谷歌地圖api v2

這是我的代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <title>Google Maps JavaScript API Example</title> 
    <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjU0EJWnWPMv7oQ-jjS7dYxTPZYElJSBeBUeMSX5xXgq6lLjHthSAk20WnZ_iuuzhMt60X_ukms-AUg" 
    type="text/javascript"></script> 
    <script type="text/javascript"> 
    //<![CDATA[ 

     //load Google Map 
     function load() { 
      if (GBrowserIsCompatible()) { 
       var map = new GMap2(document.getElementById("map")); 
       var geocoder = new GClientGeocoder(); 
       map.addControl(new GLargeMapControl()); 
       map.addControl(new GMapTypeControl()); 

     //hier .xml bestand plaatsen voor de adressen 
     GDownloadUrl("test.xml", function(data, responseCode) { 
     var xml = GXml.parse(data); 

     //store markers in markers array 
     var markers = xml.documentElement.getElementsByTagName("marker"); 

     //loop voor het ophalen van markers 
     function placeMarker(i) { 

     //hier die dingen invullen waar hij naar moet zoeken in het .xml bestand 
     var address = markers[i].getAttribute("address"), 
      html = markers[i].getAttribute("html"); 

     showAddress(map,geocoder,address,html); 

     if (++i <= markers.length) { 

       setTimeout(
        function() { 
         placeMarker(i); 
        }, 
        //snelheid van de loop hoe hoger het getal hoe langer de loop erover doet om rond te gaan (miliseconden) 
        210 
       ); 

      } 

     } 

     placeMarker(0); 


     //Create marker and set up event window 
     function createMarker(point,html){ 
      var marker = new GMarker(point); 
      GEvent.addListener(marker, "click", function() { 
      marker.openInfoWindowHtml(html); 
      }); 
      return marker; 
     } 

     //showAddress zorgt voor het omzetten van de adressen naar lengte en breedte graad 
     function showAddress(map,geocoder,address,html) { 
      geocoder.getLatLng(
      address, 
      function(point) { 
       if (!point) { 
       alert(address + " niet gevonden, laad de pagina aub opnieuw als het adress van toepassing is."); 
       } else { 
       map.setCenter(point, 12); 
       var marker = createMarker(point,html+'<br/><br/>'+address); 
       map.addOverlay(marker); 
       } 
      } 
     ); 
     } 


      } 
     ); //close GDownloadUrl 
    } //close GBrowserIsCompatible 
} //close load 
    //]]> 
    </script> 
    </head> 
    <body onload="load()" onunload="GUnload()"> 
    <div id="map" style="width: 1000px; height: 700px"></div> 
    </body> 
</html> 

回答

0

谷歌的服務條款是相當嚴格的,當涉及到數據緩存:

10.1.3對數據導出或拷貝的限制。

...

(b)不預取,高速緩存或內容的存儲。除非您可以存儲:(i) 有限數量的內容,以便在您的Maps API實施中提高 的性能(如果暫時爲 ),則必須預先獲取,緩存或存儲任何內容,否則您不得使用 並且不允許在服務之外使用內容 ;和(ii)Google Maps API文檔專門允許您存儲的任何內容標識符或密鑰。對於 例如,您不能使用內容,以創建一個獨立的 數據庫的「場所」。

你可能使用一個免費的地理編碼服務,如University of Southern California's WebGIS的服務進行地理編碼所有的標記,並將其儲存。然後,您可以檢索該數據並將其繪製在Google地圖上。

另外,除非使用Google Maps v2的具體原因,否則我會建議切換到Maps v3,因爲不再支持v2。