我如何解决此 MarkerCluster 签入/签出错误(传单销售人员)?
How can i resolve this MarkerCluster checkin/ checkout error (leaflet salesforce)?
问题是,当我在叠加层上签出并再次签入后,我收到此错误:
Uncaught TypeError: Cannot read property 'x' of undefined throws at
dist/leaflet.markercluster.js:1:25696 TypeError: Cannot read property
'x' of undefined at L.DistanceGrid._sqDist (DistanceGrid.js:114)
at L.DistanceGrid.getNearObject (DistanceGrid.js:94) at e._addLayer
(MarkerClusterGroup.js:974) at eval (MarkerClusterGroup.js:249)
at e.addLayers (MarkerClusterGroup.js:283) at e.addLayers
(layersupport.js:99) at e.onAdd (layersupport.js:517) at
e._layerAdd (leaflet.js:5) at e.whenReady (leaflet.js:5) at
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:我不知道如何提供一个可行的版本,因为这是一个 salesforce 应用程序
可能 chunkedLoading
选项没有被 Leaflet.markercluster.layerSupport 插件很好地处理。
我不确定您为什么需要定期 "checkout" 和 "checkin"?您是指使用图层控件删除/添加叠加层吗?
否则,如果您 "only" 需要一个解决方案来使用 Leaflet.markercluster 和图层控件,您可以尝试使用更简单的插件 Leaflet.FeatureGroup.SubGroup,尽管如果 chunkedLoading
是问题的原因,它可能与该插件相同。
我通过将所有顶点加在一起解决了这个问题,我创建了一个包含所有顶点的数组,然后使用函数 addLayers
添加它们
const folders = 800;
for (let index = 0; index < folders; index++) {
const folder = this.createFolder();
this.folders.push(folder);
}
this.clustersFeature.addLayers(this.folders);
问题是,当我在叠加层上签出并再次签入后,我收到此错误:
Uncaught TypeError: Cannot read property 'x' of undefined throws at dist/leaflet.markercluster.js:1:25696 TypeError: Cannot read property 'x' of undefined at L.DistanceGrid._sqDist (DistanceGrid.js:114)
at L.DistanceGrid.getNearObject (DistanceGrid.js:94) at e._addLayer (MarkerClusterGroup.js:974) at eval (MarkerClusterGroup.js:249)
at e.addLayers (MarkerClusterGroup.js:283) at e.addLayers (layersupport.js:99) at e.onAdd (layersupport.js:517) at e._layerAdd (leaflet.js:5) at e.whenReady (leaflet.js:5) at 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:我不知道如何提供一个可行的版本,因为这是一个 salesforce 应用程序
可能 chunkedLoading
选项没有被 Leaflet.markercluster.layerSupport 插件很好地处理。
我不确定您为什么需要定期 "checkout" 和 "checkin"?您是指使用图层控件删除/添加叠加层吗?
否则,如果您 "only" 需要一个解决方案来使用 Leaflet.markercluster 和图层控件,您可以尝试使用更简单的插件 Leaflet.FeatureGroup.SubGroup,尽管如果 chunkedLoading
是问题的原因,它可能与该插件相同。
我通过将所有顶点加在一起解决了这个问题,我创建了一个包含所有顶点的数组,然后使用函数 addLayers
添加它们 const folders = 800;
for (let index = 0; index < folders; index++) {
const folder = this.createFolder();
this.folders.push(folder);
}
this.clustersFeature.addLayers(this.folders);