0

我正在为 Google 地图使用 jQuery 插件http://googlemaps.mayzes.org/,但在添加标记时遇到了麻烦。

当前设置:

在加载地图的厚框中显示 AJAX 内容。地图加载良好,并以地理编码地址正确居中。

但是,如果您添加带有地理编码地址的标记,Google Maps API 会出现“a is undefined”错误

(来自插件的相关代码)

  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)。如果我关闭厚框并使用不同的地址/国家再次加载它,地图将正常加载,使用 UI 并以新位置为中心,并在旧地址/国家中带有标记

在此之后多次关闭和打开厚盒将移动居中,但标记将始终停留在第一个地址/国家。

有任何想法吗?

4

1 回答 1

1

我有一个修复,不一定是解决方案。迭代器过去了markers.length。我不知道为什么并且基于循环定义它不应该。如果iterator==markers.lengthI 从迭代器中减去markers.length以将其重置0为重新循环标记。

我将覆盖调用移动到纬度/经度和地理编码 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() );
                }
            }

        }
    },
于 2010-12-07T17:03:34.397 回答