2008-11-02 7 views
1

Je souhaite implémenter mon propre algorithme de cluster à l'aide de cette API javascript Virtual Earth: http://msdn.microsoft.com/en-us/library/cc966716.aspx Cependant, le moteur VE appelle ma fonction de cluster une fois pour chaque forme de la couche. Cela le rend très lent! Il me semble que VE devrait mettre toutes les formes dans une couche, puis demander à ma fonction de les regrouper. Ne pas appeler à plusieurs reprises le cluster!Clustering Virtual Earth personnalisé

Pourquoi le moteur VE fait-il cela? Existe-t-il un autre moyen de faire du clustering côté client avec cette API?

Plus d'informations: Je charge les formes à partir d'un flux GeoRSS.

Répondre

1

La méthode de l'algorithme de clustering personnalisé ne sera appelée qu'une seule fois pour ce VEShapeLayer. Il n'y a pas beaucoup de différence entre l'utilisation de la méthode VEMap.AddShape et l'ajout d'un VEShapeLayer à la carte avec toutes les formes à l'intérieur. La méthode AddShape ajoute la Shape à la ShapeLayer "par défaut", qui est la ShapeLayer avec 0 (zéro) index, et l'ajout d'un VEShapeLayer ajoute un nouveau calque en plus du calque "default" existant.

Il est probable que si vous utilisez VEMap.AddShape pour ajouter l'objet VEShape à la carte, il appelle votre méthode d'algorithme de clustage à chaque fois qu'un VEShape est ajouté à la carte. Ce comportement serait correct car il faudra recalculer le cluster à chaque fois qu'une forme est ajoutée.

Pour améliorer les performances globales lors de l'ajout de toutes les formes à la carte, et pour que VE n'appelle votre méthode d'algorithme personnalisée qu'une seule fois lors de l'ajout de toutes les formes; vous pouvez créer un VEShapeLayer, y ajouter toutes les formes, puis ajouter ce calque de forme à la carte. Ceci fera que VE ne fera le rendu de toutes les Formes qu'une seule fois (au moment de les charger toutes) au lieu de chaque fois que vous ajouterez un seul VEShape.

1

Il ne devrait appeler votre code qu'une seule fois par VEShapeLayer - sinon, le clustering est inutile car vous ne pouvez pas regrouper une seule forme. Utilisez-vous VEMap.AddShape au lieu d'ajouter des objets VEShape à un VEShapeLayer? Si c'est le cas, essayez de créer un seul VEShapeLayer, ajoutez-le à VEMap, puis ajoutez tous les objets VEShape au calque de forme au lieu de la carte.

Questions connexes