3

我正在使用 jQuery Google Maps v3插件,我想用 goMap 插件添加 MarkerClusterer,但是我有它打算做的事情:

$('#world-map').goMap(
{
    markers: mapMarkers,
    zoom: 2,
    icon: 'http://localhost/eproj/white-marker.png',
    streetViewControl: true,
});

$.goMap.ready(function()
{
    var markers = [];
    for (var i in $.goMap.markers)
    {
        var temp = $($.goMap.mapId).data($.goMap.markers[i]);
        markers.push(temp);
    }
    var markerclusterer = new MarkerClusterer($.goMap.map, markers, clustererOpts);
});

查看地图(目前有 35 个标记)时,我没有看到任何生效,除了所有标记都被绘制出来。在 Firebug 中,我没有看到任何错误被记录,所以我完全不知道为什么这不适用于 goMap。

任何人?甚至没有一个简单的解决方案?

编辑:我不能把它放在 jsFiddle 上,似乎把 JS 资源添加到 jsFiddle 上搞砸了。

这是mapMarkers变量:

[{"id":"9073a1977c8d5d6d7eb1666d03af4a66","address":"3  Essex St,  Jersey City,  Hudson,  United States"},{"id":"f63f77a0b2d0986f1f0e94bde07ff8ef","address":"96  Vesey St,  New York,  New York,  United States"},{"id":"57d5cb180425670f3e9c7b6e62fb88ac","address":"38  E Broadway,  Manhattan,  New York,  United States"},{"id":"bb464b47ca54a23edc3dee4a5f4299ad","address":"322  Tait Ave,  Sanger,  California,  United States"},{"id":"980f9d1e9e466d988f4851117a268e25","address":"1495  Morton Ave,  Parsons,  Kansas,  United States"},{"id":"389888acd972d01783547837841d5294","address":"160  N Washington St,  Clinton,  Missouri,  United States"}]

标记彼此非常接近,在地图缩放为 1 时,即使没有标记聚类器生效。

4

1 回答 1

1

[新编辑]

这个问题最简单的解决方法是破解jquery.gomap-1.3.2.js源代码,如下所示:

在 init 函数的 myOptions 变量上添加 markerCreated 属性

var myOptions = {
  ....
  scrollwheel:          opts.scrollwheel,
  zoom:                 opts.zoom
};

var myOptions = {
  ....
  scrollwheel:          opts.scrollwheel,
  zoom:                 opts.zoom,
  markerCreated:        opts.markerCreated //patched here
};

在 createMarker 函数上更改和添加方法:

createMarker: function(marker) {
  ....
  options.position = marker.position ? marker.position : new   google.maps.LatLng(marker.latitude, marker.longitude);

  var cmarker = new google.maps.Marker(options);
  if (marker.html) {
  ....
},

createMarker: function(marker) {
  ....
  options.position = marker.position ? marker.position : new   google.maps.LatLng(marker.latitude, marker.longitude);

  var goMap = this; //patched here
  var cmarker = new google.maps.Marker(options);
  if(goMap.opts.markerCreated) goMap.opts.markerCreated(cmarker); //patched here
  if (marker.html) {
  ....
},

然后在您自己的代码中更改:

$('#world-map').goMap(
{
    markers: mapMarkers,
    zoom: 2,
    icon: 'http://localhost/eproj/white-marker.png',
    streetViewControl: true,
});

到:

$(function() {

    var markerclusterer;
    var markers = [];
    var mapMarkers = [{"id":"9073a1977c8d5d6d7eb1666d03af4a66","address":"3  Essex St,  Jersey City,  Hudson,  United States"},
        {"id":"f63f77a0b2d0986f1f0e94bde07ff8ef","address":"96  Vesey St,  New York,  New York,  United States"},
        {"id":"57d5cb180425670f3e9c7b6e62fb88ac","address":"38  E Broadway,  Manhattan,  New York,  United States"},
        {"id":"bb464b47ca54a23edc3dee4a5f4299ad","address":"322  Tait Ave,  Sanger,  California,  United States"},
        {"id":"980f9d1e9e466d988f4851117a268e25","address":"1495  Morton Ave,  Parsons,  Kansas,  United States"},
        {"id":"389888acd972d01783547837841d5294","address":"160  N Washington St,  Clinton,  Missouri,  United States"}
    ];
    $("#map").goMap({
        markerCreated: function(marker) {
            markers.push(marker);
            //updated solution for slow MarkerClusterer loading
            if(markers.length == mapMarkers.length) {
                new MarkerClusterer($.goMap.map, markers);
            }
            //prev solution
            //if(!markerclusterer) markerclusterer = new MarkerClusterer($.goMap.map, markers);
            //markerclusterer.addMarker(marker);
        },
        markers: mapMarkers
    });
});

卸下$.goMap.ready零件

如果这个黑客工作/不工作,请让我现在谢谢

[编辑]

我认为这是因为在创建 MarkerCluster 时它没有传递正确的标记对象参数。这是因为您的 mapMarkers 变量在创建标记对象之前需要先进行地理编码,同时在您的代码中,您强制在标记正确地理编码之前创建 MarkerCluster(返回具有位置属性的标记对象)

相信我,当您将 mapMarkers 变量替换为标记对象(我的意思是已知位置)时,您可以看到集群显示正确,试试这个:

[{ 
    latitude: 40.713094,
    longitude: -74.033904,
    id: 'test1',
    title: 'marker title 1'
},{
    latitude: 40.712638,
    longitude: -74.03429,
    id: 'test2',
    title: 'marker title 2'
}]

[旧] 也许这有帮助:

goMap Markercluster 解决方案

抱歉不能写比这个更简单的解决方案;)

提示:尝试查看页面源

于 2011-10-04T09:42:01.377 回答