Как я могу устранить эту ошибку Checkin/Checkout MarkerCluster (продавцы листовок)?

Проблема в том, что когда я проверяю наложение и после повторной регистрации я получаю эту ошибку:

Uncaught TypeError: Не удается прочитать свойство "x" неопределенных бросков в dist/leaflet.markercluster.js:1:25696 TypeError: Невозможно прочитать свойство "x" неопределенного в L.DistanceGrid._sqDist (DistanceGrid.js:114)
в L.DistanceGrid.getNearObject (DistanceGrid.js:94) в e._addLayer (MarkerClusterGroup.js:974) в eval (MarkerClusterGroup.js:249)
в e.addLayers (MarkerClusterGroup.js:283) в e. addLayers (layersupport.js:99) в e.onAdd (layersupport.js:517) в e._layerAdd (leaflet.js:5) в e.whenReady (leaflet.js:5) в e.addLayer (leaflet.js: 5)

I saw that this function from DistanceGrid(is in leaflet library) which is called when i check in on the overlay 

_sqDist: function (p, p2) {
      var dx = p2.x - p.x,
          dy = p2.y - p.y;
      return dx * dx + dy * dy;
  }

И когда я зарегистрировался, p как-то не определено. Я уже давно борюсь с этой ошибкой. Может быть, у вас есть какое-то предложение

Маркеры определены для групп, и они правильно отображаются, проблема только с регистрацией на выходе. Как только я проверяю их, кластеры исчезают, как и должны, и как только я регистрируюсь, я получаю эту ошибку, упомянутую ранее, вместо того, чтобы снова показывать кластеры на карте.

Вот код контроллера:

JS controller: 
var map = L.map('map', {zoomControl: true, tap: false, preferCanvas:true})
var group1,group2,group3,group4;
var myRenderer = L.canvas({ padding: 0.5 });
 var markers = L.markerClusterGroup.layerSupport( { 
        chunkedLoading: true,
        renderer: myRenderer,
        iconCreateFunction: function  (cluster) {
        var childCount = cluster.getChildCount();

        var c = ' marker-cluster-';
        if (childCount < 10) {
            c += 'small';
        } 
        else if (childCount < 100) {
            c += 'medium';
        } 
        else {
                c += 'large';
        }

        return new L.DivIcon({ html: '<div><span>' + childCount + '</span> 
</div>', 
                              className: 'marker-cluster' + c, iconSize: 
 new L.Point(40, 40) });
            }
});

 group1 = L.layerGroup(),
       group2 = L.layerGroup(),
      group3 = L.layerGroup(),
       group4 = L.layerGroup(),

    markers.checkIn([group1, group2, group3, group4]);

    var overlayMaps = {
        "g1": group1,
        "g2": group2,
        "g3":group3,
        "g4":group4
    };
    var control = L.control.layers(null, overlayMaps, { collapsed: true });


    control.addTo(map);

    group1.addTo(map); // Adding to map or to AutoMCG are now equivalent.
    group2.addTo(map);
    group3.addTo(map);
    group4.addTo(map);

 markers.addTo(map);

PS: я не знаю, как дать работоспособную версию, так как это приложение для продаж


person cUser    schedule 22.04.2019    source источник
comment
Предоставьте для этого работоспособный MCVE.   -  person IvanSanchez    schedule 22.04.2019


Ответы (1)


Возможно, плагин Leaflet.markercluster.layerSupport плохо обрабатывает параметр chunkedLoading.

Я не уверен, почему вам нужно регулярно «оформлять заказ» и «проверять»? Вы скорее имеете в виду использование управления слоями для удаления/добавления вашего наложения?

В противном случае, если вам «только» нужно решение для использования Leaflet.markercluster с элементом управления слоями, вы можете попробовать более простой плагин Leaflet.FeatureGroup.SubGroup, хотя, если причиной проблемы является chunkedLoading, вероятно, то же самое будет и с этим плагином.

person ghybs    schedule 24.04.2019
comment
Я решил это с подгруппой. Одна вещь, которую я понял, используя это, это то, что если вы создаете новую подгруппу, вам всегда нужно указывать массив маркеров при создании, иначе при проверке при проверке ничего не будет отображаться EX: var group1 = L.featureGroup.subGroup (родительский, массив group1); . Также нет необходимости в поддержке макета в этом случае. И да, я удаляю и добавляю слои @ghybs. Спасибо всем за помощь в разъяснении информации и предоставлении хорошего решения. - person cUser; 24.04.2019