2010-10-13 25 views
0

我對Google地圖使用jQuery插件http://googlemaps.mayzes.org/,但添加標記時遇到問題。Google Maps API:GClientGeocoder.getLatLng()

當前的設置:在ThickBox,其中地圖加載

展示AJAX內容。地圖加載正常,並正確地居中到一個地理編碼地址。

但是,如果您添加標記與地理編碼地址的谷歌地圖API的錯誤了以「一個是不確定的」

(從插件相關的代碼)

if (markers[i].geocode) { 
    var geocoder = new GClientGeocoder(); 
    geocoder.getLatLng(markers[i].geocode, function(center) {      
     if (!center) 
     alert(address + " not found"); 
     else 
     jQuery.googleMaps.marker[i] = new GMarker(center, {draggable: markers[i].draggable, icon: gIcon}); 
    }); 
    } 

的顯着部分是geocoder.getLatLng(markers[i].geocode, func...因爲這是直接調用地圖API,並經過檢查,markers[i].geocode即將作爲我的測試地址(「澳大利亞」)出現。

我發現的是,如果我第一次加載地圖,它會將地圖居中,但由於標記而導致錯誤(並且不會顯示UI)。如果我關閉thickbox並使用不同的地址/國家/地區重新加載,地圖將會正常加載,界面位於新地址的中心位置,舊地址/國家/地區中有一個標記。

在此之後關閉並打開thickbox多次將移動居中,但標記將始終保留在第一個地址/國家/地區。

任何想法?

回答

1

我有一個修復,不一定是解決方案。迭代器通過markers.length。我不知道爲什麼,根據循環定義,它不應該。如果iterator==markers.length我從迭代器中減去markers.length將其重置爲0以重新遍歷標記。

我將overlay調用移入緯度/經度和地理編碼if語句中。只有當geocoder.getLatLng發現一個地址,它應該添加覆蓋。

我還在清理代碼和測試。希望這有助於。

mapMarkers: function(center, markers) { 
     if (typeof(markers.length) == 'undefined') 
      // One marker only. Parse it into an array for consistency. 
      markers = [markers];   
     var j = 0; 
     for (indx = 0; indx<markers.length; indx++) { 
      var gIcon = null; 
      if (markers[indx].icon) { 
       gIcon = $.googleMaps.mapMarkersOptions(markers[indx].icon); 
      } 

      if (markers[indx].geocode) { 
       var geocoder = new GClientGeocoder(); 
       geocoder.getLatLng(markers[indx].geocode, function(center) {           
        if (!center) 
         alert(address + " not found"); 
        else 
         if(true) //if(indx<markers.length || indx>markers.length) 
          { 
          if(indx==markers.length) 
           indx = indx-markers.length; 

           alert(center); 
           $.googleMaps.marker[indx] = new GMarker(center, {draggable: markers[indx].draggable, icon: gIcon}); 
           $.googleMaps.gMap.addOverlay($.googleMaps.marker[indx]); 
           if (markers[indx].info) { 
            // Hide Div Layer With Info Window HTML 
            $(markers[indx].info.layer).hide(); 
            // Marker Div Layer Exists 
            if (markers[indx].info.popup) 
             // Map Marker Shows an Info Box on Load 
             $.googleMaps.marker[indx].openInfoWindowHtml($(markers[indx].info.layer).html()); 
            else 
             $.googleMaps.marker[indx].bindInfoWindowHtml($(markers[indx].info.layer).html().toString()); 
           } 
          } 
       }); 

      } 
      else if (markers[indx].latitude && markers[indx].longitude) { 
       // Latitude & Longitude Center Point 
       center = $.googleMaps.mapLatLong(markers[indx].latitude, markers[indx].longitude); 
       $.googleMaps.marker[indx] = new GMarker(center, {draggable: markers[indx].draggable, icon: gIcon}); 
       $.googleMaps.gMap.addOverlay($.googleMaps.marker[indx]); 
       if (markers[indx].info) { 
        // Hide Div Layer With Info Window HTML 
        $(markers[indx].info.layer).hide(); 
        // Marker Div Layer Exists 
        if (markers[indx].info.popup) 
         // Map Marker Shows an Info Box on Load 
         $.googleMaps.marker[indx].openInfoWindowHtml($(markers[indx].info.layer).html()); 
        else 
         $.googleMaps.marker[indx].bindInfoWindowHtml($(markers[indx].info.layer).html().toString()); 
       } 
      } 

     } 
    },