计算GPS坐标以形成给定大小的半径

我想出了一个方法,它采用坐标和范围(以英里为单位)并返回一个围绕原点形成圆的坐标列表。 我似乎已经取得了一些进展,但我有一个问题,让范围部分下降。

private const Double LAT_MILE = 0.0144839; private const Double LONG_MILE = 0.0190693; public static List GetRadius(Double OriginLatitude, Double OriginLongitude, Double Range, int Points) { List Result = new List(); //insert a new point for (int i = 0; i < Points; i++) { Result.Add(new Gps.Coordinate() { Latitude = ((Range * LAT_MILE) * System.Math.Cos(i)) + OriginLatitude, Longitude = ((Range * LONG_MILE) * System.Math.Sin(i)) + OriginLongitude }); } //sort using nearest neighbor return SortCoords(ref Result); } 

我发现的问题是,我用来表示距离以英里为单位的常数根据位置而变化。有没有人有任何解决这个问题的建议,或者更好的捕鼠器?

编辑:我应该注意,我在数学上很可怕:)

看看这个(包括示例代码): http : //www.movable-type.co.uk/scripts/latlong.html

“余弦球面定律”给出了两个坐标之间的距离。 应该可以修改它以给出围绕指定中心和指定半径(距离)的坐标。

您应该在GetRadius函数中计算它,而不是将LONG_MILE定义为常量: LONG_MILE = LAT_MILE / cos(OriginLatitude*PI/180.0)

而且,你正在使用整数索引i sin()cos()看起来有点奇怪。 如果您的目的是围绕中心点以1弧度间隔生成点,那么它将起作用。 但我怀疑你可能想要更像的东西

 angle_radians = i * 2.0*PI/Points; 

并用sin(angle_radians)代替sin(i)等。

在球面坐标空间中进行计算,然后将它们转换为纬度/经度。