2011-09-22 109 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。