GoMap с MarkerClusterer не влияет на текущую карту - PullRequest
3 голосов
/ 28 сентября 2011

Я использую плагин jQuery Google Maps v3 , я хочу добавить MarkerClusterer с плагином goMap, однако у меня есть то, что он должен был сделать:

$('#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, хотя кластер маркеров не действует.

1 Ответ

1 голос
/ 04 октября 2011

[Недавно отредактировано]

Самый простой способ решения этой проблемы - взломать исходный код jquery.gomap-1.3.2.js, как показано ниже:

добавить свойство markerCreated для переменной myOptions в функции init

До

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

* После 1019 *

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) {
  ....
},

* После 1035 *

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'
}]

[OLD] Может быть, это поможет:

goMap Markercluster Soluton

Извините, я не могу написать более простое решение, чем это;)

Подсказка: попробуйте посмотреть страницу источника

...