假设我有一个坐标数组,代表一条路线。我想分解这条路线,以便它包含一个点,比如说每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);
谢谢!
答案 0 :(得分:1)
this post上的第一个答案具有计算纬度/长对的角度和距离的公式 根据此处计算的距离和角度,应该可以找到沿该角度指定距离的点 计算假定一个完美的球形地球,所以如果您的长/纬度数据来自球形墨卡托以外的特定投影,那么计算可能会得出不准确的结果。
答案 1 :(得分:1)
使用formulae at MathWorld查找两个相邻点之间的角度和距离。现在计算你需要多少分割距离以获得5英里的块,并将角度除以相同的量。然后在该角度的每个倍数处反转公式以计算中间点。
这使您可以划分原始路线上的每个分段。对每个细分重复。
如果你已经在同一个大圆圈上连续得到三分,那就是堕落 - 如果你关心的话,那么你可以随心所欲地检查它。
答案 2 :(得分:0)
您可以根据需要使用Vincenty formula直接和反向。 vincenty公式比Great Circle Distance提供更准确的结果,因为它考虑了地球椭球形状。