对于具有相同位置的点的变化,长纬度的微小变化

时间:2010-01-08 15:32:34

标签: c# algorithm

这有点奇怪。我在地图上渲染数据集,需要拆分具有完全相同的long和lat的点。我有想法通过long和lat对我的数据集进行分组,并且它们在相同的位置稍微调整,以便它们在地图上作为单独的实体可见 - 而不是重叠。

我正在使用linq对它们进行分组,然后枚举我的分组项目,并且我希望将调整后的点旋转到原点(这是一个要求,因为我可能有几百个地理位置相同的点)这样他们就可以从原点开始分散。

有没有人知道我可以添加到循环中的简单计算,以这种方式调整项目。

谢谢,

1 个答案:

答案 0 :(得分:0)

这背后的数学很简单。圆可以用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));
}

伪代码如果正确实现,将围绕原始点绘制一个圆圈。如果要增加圆的半径,请将半径乘数更改为正弦和余弦函数。 如果您希望点数螺旋而不是制作圆圈,请选择每圈旋转的点数,并在sin / cos函数中将num替换为该数字。此外,在每次循环迭代后增加半径,可能是通过使用数字并将其乘以循环索引。 (即您可以将radius更改为50*i)。

希望这有帮助。