给定Lat / Lon对的向量,如何创建向量以使点之间的距离小于或等于某个常数?

时间:2009-11-10 01:45:08

标签: c++ c algorithm geometry

假设我有一个坐标数组,代表一条路线。我想分解这条路线,以便它包含一个点,比如说每5英里。我怎么能这样做?

struct Location
{
    double latitude;
    double longitude;
};

vector<Location> route;

vector<Location> computeHigherGranularityRoute(const vector<Location>& oldRoute, double distanceDelta);

基本上我需要两个函数,一个可以计算任意两点之间的过程的函数

// Returns the course from A to B (0 -- 359.9) degrees
double getCourse(const Location& A, const Location& B);

// Returns the Location obtained from traveling from a point for a given distance along a course
Location getLocationOnCourse(const Location& start, double course, double distance);

谢谢!

3 个答案:

答案 0 :(得分:1)

this post上的第一个答案具有计算纬度/长对的角度和距离的公式 根据此处计算的距离和角度,应该可以找到沿该角度指定距离的点 计算假定一个完美的球形地球,所以如果您的长/纬度数据来自球形墨卡托以外的特定投影,那么计算可能会得出不准确的结果。

答案 1 :(得分:1)

使用formulae at MathWorld查找两个相邻点之间的角度和距离。现在计算你需要多少分割距离以获得5英里的块,并将角度除以相同的量。然后在该角度的每个倍数处反转公式以计算中间点。

这使您可以划分原始路线上的每个分段。对每个细分重复。

如果你已经在同一个大圆圈上连续得到三分,那就是堕落 - 如果你关心的话,那么你可以随心所欲地检查它。

答案 2 :(得分:0)

您可以根据需要使用Vincenty formula直接和反向。 vincenty公式比Great Circle Distance提供更准确的结果,因为它考虑了地球椭球形状。