Учитывая вектор пар Lat / Lon, как я могу создать вектор, чтобы расстояние между точками было меньше или равно некоторой константе? - PullRequest
2 голосов
/ 10 ноября 2009

Предположим, у меня есть массив координат, представляющих маршрут. Я хочу разложить этот маршрут так, чтобы он содержал точку, скажем, каждые 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 ]

1 голос
/ 10 ноября 2009

Найдите угол и расстояние между двумя соседними точками, используя формулы в MathWorld . Теперь выясните, сколько вам нужно разделить расстояние, чтобы получить 5-мильные куски, и разделите угол на ту же величину. Затем переверните формулу под каждым кратным этого угла, чтобы вычислить промежуточные точки.

Это дает вам разделение каждого сегмента на вашем исходном маршруте. Повторите для каждого сегмента.

Есть вырождение, если у вас уже есть три точки подряд на одном и том же большом круге - если вам все равно, вы можете проверять это жадным образом по ходу дела.

1 голос
/ 10 ноября 2009

Первый ответ на в этом посте имеет формулу для расчета углов и расстояний от широт / длинных пар.
Из рассчитанного здесь расстояния и угла должна быть возможность найти точку на указанном расстоянии вдоль этого угла.
При расчете предполагается, что Земля имеет совершенно сферическую форму, поэтому, если ваши данные по долготе / широте взяты из определенной проекции, отличной от сферического меркатора, тогда расчет может дать неточные результаты.

0 голосов
/ 10 ноября 2009

Вы можете использовать Формула Винсента как прямое, так и обратное для ваших нужд. Формула Винсенти дает более точный результат, чем Великий Круг, поскольку учитывает эллипсоидальную форму Земли.

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