Проверьте, находится ли точка (широта / лонг) в окружности (центр широта / лонг известна) - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь увидеть, попадет ли данная пара (широта, лонг) в круговую область.Центр круга известен (широта, длинные значения), а также радиус.Я использовал следующие подходы:

  • Рассчитайте расстояние между центром и заданным широтой / долготой, используя формулу Haversines.

Формула:

a = ( sin(delta_lat/2) )^2 + cos (vp_Current.v_Latitude) *
    cos(vp_CentreOfCircle.v_Latitude) *  ( sin(delta_long/2) )^2;
c = 2 * atan2( sqrt(a), sqrt(1-a) );
d = R * c;

где: R = 6371 Km., delta_lat = lat2 - lat1, delta_long = long2 - long1

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

Я написал код на C, но когда я ввожу следующие данные, вывод говорит, что точка находится снаружи, а не внутри круга (точка находится внутри, как я проверял на картах Google).

Centre(lat/long) = (19.228177, 72.685547)
Given point = (18.959999, 72.819999) 
Radius = 30 miles (about 49 Km but entered as 50 in the program).

Странно то, что если я введу радиус как 5000, результат будет внутри, но даже не для 500. Я не знаю, в чем проблема ... Буду очень признателен, если кто-нибудь сможет поделиться некоторыми указателями ... спасибо.

Ответы [ 2 ]

4 голосов
/ 29 сентября 2010

(я нигде не эксперт во всем этом, но было интересно посмотреть на образование)

Поскольку аргумент функции Харвесина указан в радианах, следует ли преобразовывать широту и долготу из градусов в радианы?

0 голосов
/ 29 сентября 2010

Для начала я бы проверил, каково ваше расстояние между двумя точками (центром и заданным). Тогда я бы убедился, что вы используете все правильные единицы измерения (метры против миль, радианы против градусов).

Если вы не найдете там ошибки, я бы начал смотреть на вашу реализацию Haversine против одной из опубликованных в wikipedia .

Надеюсь, это поможет.

...