2011-08-11 1 views
0

J'ai besoin de tracer des milliers de points, peut-être près de 50 000 avec la bibliothèque de cartographie dojo. Cela fonctionne, mais c'est certainement très lent et retarde le navigateur. Y a-t-il un moyen d'obtenir de meilleures performances?Tracer des milliers de points avec le dojo

EDIT:

I résolu en appliquant un filtre à rendre les données. Essentiellement, j'ai un nouveau paramètre d'élément appelé "render" qui est mis à false par ma source json si le point est censé chevaucher d'autres. Ma DataSeries interroge ensuite tous les points où render: true. De cette façon, toutes les données sont toujours là pour les sources non visuelles qui veulent tous les points, alors que mes graphiques fonctionnent maintenant correctement.

psuedocode:

def is_overlapped(x, y, x_round, y_round) 
    rounded_x = round(x, x_round) 
    rounded_y = round(y, y_round) 
    hash = hash_xy(rounded_x, rounded_y) 

    if(@overlap_filter[hash].nil?) 
     @overlap_filter[hash] = true 
     return false 
    end 

    return true 
end 

x_round et y_round peuvent être déterminées par x et y est comprise, disons par exemple la gamme/100

+0

Probablement pas avec javascript. 50 000 éléments DOM seront lents. Tous les points sont-ils visibles? Voulez-vous que les utilisateurs cliquent, interagissent ou animent les points? – Spacedman

+0

50 000 articles semble être une mauvaise idée - évitez de faire des trucs stupides! – marko

+0

Tous les points ne sont pas visibles, mais je ne sais pas comment supprimer les points qui se chevauchent complètement. Je suppose que si c'était parfaitement efficace, tous les points cachés étaient supprimés alors il ne resterait plus que quelques milliers de points. – WhatAWorld

Répondre

1

Je sais que ce n'est probablement pas exactement la réponse que vous cherchez pour, mais avez-vous envisagé simplement de réduire le nombre de points que vous complotez? Je ne connais pas la fonction spécifique du (des) graphique (s), mais j'imagine que la plupart des graphiques avec autant de points sont inutiles; et aucun observateur ne sera capable de prendre ce niveau de détail.

Votre solution pourrait reposer sur des techniques graphiques plutôt que sur JavaScript. Par exemple. vous pourriez très probablement réduire considérablement le nombre de points et utiliser un graphique linéaire au lieu d'un nuage de points tout en communiquant des niveaux d'informations similaires à votre cible.

+0

Bien sûr, cela pourrait ne pas s'appliquer à vos besoins. Je m'excuse si c'est le cas. – JWeary

+0

J'ai pensé à prendre un sous-ensemble aléatoire des données. Bien que ce ne soit pas une mauvaise idée, cela ne fonctionnerait pas dans ce cas particulier. Bien qu'il soit clair que 50 000 points ne sont pas nécessaires pour un diagramme de dispersion de 500 x 500, ils sont nécessaires lors d'un zoom sur une zone précise. Je suppose que je pourrais utiliser ajax pour tirer dynamiquement des points qui tombent dans la gamme zoomée, mais je voudrais une solution plus propre si possible. – WhatAWorld

+0

Un autre problème est que le but de ce graphique est de trouver une erreur dans un nuage de points. Si je supprime des points au hasard, il est possible que l'erreur soit supprimée et je ne détecterai pas le problème. – WhatAWorld

Questions connexes