незначительные изменения в длинном лат для вариаций точки с тем же местоположением - PullRequest
1 голос
/ 08 января 2010

Немного странно это. Я отображаю наборы данных на карте, и мне нужно разделить точки, которые имеют одинаковую длину и широту. У меня была идея сгруппировать мой набор данных по long и lat, где они одинаково корректируются, так что они видны как отдельные объекты на карте, а не перекрываются.

Я использую linq, чтобы сгруппировать их, а затем перечисляю свои сгруппированные элементы, и я бы хотел обернуть скорректированные точки вокруг исходной точки (это требование, поскольку у меня может быть несколько сотен точек, которые географически совпадают) так что они расходятся от первоначальной точки.

Кто-нибудь знает простое вычисление, которое я могу добавить в свой цикл, чтобы настроить элементы таким образом.

Спасибо

1 Ответ

0 голосов
/ 08 января 2010

Математика, стоящая за этим, довольно проста. Круг может быть представлен синусоидальной функцией по оси x и косинусоидальной функцией по оси y. Вот некоторый псевдокод:

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));
}

Этот псевдокод, если он правильно реализован, будет рисовать точки по кругу вокруг исходной точки. Измените множитель радиуса на функции синуса и косинуса, если вы хотите увеличить радиус круга. Если вы хотите, чтобы точки располагались по спирали, вместо того чтобы делать круг , выберите число точек на оборот окружности и замените num на это число в функциях sin / cos. Кроме того, увеличивайте радиус после каждой итерации цикла, возможно, используя число и умножая его на индекс цикла. (то есть вы можете изменить radius на 50*i).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...