Le problème de performance est dû au fait que chaque marqueur est un élément DOM individuel. Les navigateurs ont du mal à en rendre des milliers.
Dans votre cas, une solution facile serait au lieu d'utiliser Circle Markers et les ont rendus sur une toile (par exemple en utilisant l'option carte preferCanvas
, ou avec un canvas renderer spécifique que vous passez en option renderer
pour chacun de vos marqueurs Cercle). C'est ainsi que fonctionne Google Maps par défaut: ses marqueurs sont en fait dessinés sur un canevas.
var map = L.map('map', {
preferCanvas: true
});
var circleMarker = L.circleMarker(latLng, {
color: '#3388ff'
}).addTo(map);
ou
var map = L.map('map');
var myRenderer = L.canvas({ padding: 0.5 });
var circleMarker = L.circleMarker(latLng, {
renderer: myRenderer,
color: '#3388ff'
}).addTo(map);
Avec cette solution, chaque marqueur Cercle n'est plus un élément DOM individuel, mais au lieu est dessiné par Dépliant sur un unique toile, ce qui est beaucoup plus facile à gérer pour le navigateur. En outre, Leaflet suit toujours la position de la souris et les événements associés et déclenche les événements correspondants sur vos marqueurs de cercle, de sorte que vous pouvez toujours écouter de tels événements (comme un clic de souris, etc.).
Demo avec 100k points: https://jsfiddle.net/sgu5dc0k/
double possible de [Traçage 140K points dans leafletjs] (http://stackoverflow.com/questions/37043791/plotting-140k-points-in-leafletjs) – ghybs
Je veux vraiment dessiner des points ou des marqueurs avec des caractéristiques différentes. Couleur, forme ... etc. Pas seulement créer une superposition. –
Vous pouvez essayer avec des marqueurs de cercle (vous pouvez ajuster leur couleur) sur un [Canvas] (http://leafletjs.com/reference-1.0.3.html#map-prefercanvas) – ghybs