рассчитать расстояние с 2 географическими точками - PullRequest
1 голос
/ 21 декабря 2011

Я хочу посчитать расстояние между двумя географическими точками, а пока между моей школой и моим домом.Расстояние должно быть близко 1200 м.

Я получаю эти значения обратно, которые не имеют смысла.

104.247784180256
35.017200205306295 (if I reverse lat and lon)

Google maps говорит:

51.987957 is N
5.911305 is O

- 51,987957лат или долг?Согласно моей документации, откуда я получаю сигнал GPS, это широта, но я сомневаюсь в этом.

float R = 6371; // km

// 104.247784180256

float lat1 = 5.894213; // school 
float lon1 = 51.98381; // school

float lat2 = 5.909912; // keuken
float lon2 = 51.988781; // keuken

// switched > distance = 35.017200205306295
/*
float lon1 = 5.894213; // school 
float lat1 = 51.98381; // school

float lon2 = 5.909912; // keuken
float lat2 = 51.988781; // keuken
*/

void setup() {
  double d = calculateDistance( lon1, lat1, lon2, lat2);
  println(d);
}

double calculateDistance(float lon1, float lat1, float lon2, float lat2) {
  double d = Math.acos(Math.sin(lat1)*Math.sin(lat2) + 
    Math.cos(lat1)*Math.cos(lat2) *
    Math.cos(lon2-lon1)) * R;
  return d;
}

1 Ответ

3 голосов
/ 21 декабря 2011

Вы используете неправильную широту и долготу.Вы можете просто проверить на Google Maps, если вы ищете "@ 51.98381,5.894213", это указывает на вашу школу.И имейте в виду, что это широта, долгота.

Я использую следующий код для расчета (обратите внимание, я делаю это в SQL, но это об идее):

((ACOS(SIN(lat1 * PI() / 180) * SIN(lat2 * PI() / 180) + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) * COS((long1 - long2) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344)

Это возвращаетрасстояние в километрах.Также обратите внимание, что функции используют радианы, а не градусы.

Результат - 1.20877685491371 км, что соответствует ожидаемым 1200 м.

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