2010-01-08 3 views
1

Un peu d'un cela bizarre. Je suis en train de rendre des ensembles de données sur une carte et j'ai besoin de séparer les points qui ont exactement le même long et lat. J'ai eu l'idée de grouper mes données par long et lat et où elles sont les mêmes en ajustant légèrement afin qu'elles soient visibles comme des entités séparées sur la carte - plutôt que de se chevaucher. J'utilise linq pour les regrouper et ensuite énumérer mes items groupés et je voudrais spiraler les points ajustés autour du point original (c'est une exigence car je peux avoir quelques centaines de points qui sont les mêmes géographiquement) afin qu'ils s'étalent du point original.légers changements de lat long pour les varations de point avec le même emplacement

Est-ce que quelqu'un connaît un calcul simple que je peux ajouter à ma boucle pour ajuster les éléments de cette manière.

Merci,

Répondre

0

Les maths derrière cela est assez simple. Un cercle peut être représenté par la fonction sinus dans l'axe des x et la fonction cosinus dans l'axe des ordonnées. Voici quelques pseudo-code:

int num = OverlappingPoints.Length; 
for(int i = 0; i < num; ++i) 
{ 
    int radius = 50; 

    // using 2*pi because most math functions use radians... change 2*pi to 360 if your math library uses 360 degrees instead of 2*pi radians to represent a circle. 
    Map.Plot(OverlappingPoints[i].Latitude + radius*sin(2*pi*i/num), 
     OverlappingPoints[i].Latitude + radius*cos(2*pi*i/num)); 
} 

Ce pseudo-code, si elles sont correctement mis en œuvre, attirera des points dans un cercle autour du point d'origine. Changez le multiplicateur de rayon pour les fonctions sinus et cosinus si vous voulez augmenter le rayon du cercle. Si vous voulez que les points soient en spirale au lieu de faire un cercle, choisissez un nombre de points par tour de cercle et remplacez num par ce nombre dans les fonctions sin/cos. En outre, augmentez le rayon après chaque itération de boucle, probablement en utilisant un nombre et en le multipliant par l'indice de boucle. (c'est-à-dire que vous pouvez remplacer radius par 50*i).

Espérons que cela aide.

Questions connexes