2015-11-07 5 views
1

я точка выражается в широте/долготаПроверьте, если точка находится внутри круга

Position louvreMuseum = new Position(48.861622, 2.337474); 

и у меня есть значение радиуса, выраженное в метрах. Мне нужно проверить, находится ли внутри круга другой пункт, также выраженный в lat/long.

Если бы я был на ровной поверхности можно просто использовать формулу

(x - center_x)^2 + (y - center_y)^2 <= radius^2 

, как глубоко объяснена в этих SO answer.

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

Как рассчитать расстояние от любой точки до центра, которое нужно сравнить с радиусом?

+0

звучит как математический вопрос, а не вопрос программирования – Jonesopolis

+0

@Jonesopolis: Right. Является математическим вопросом, который должен быть правильно закодирован в программе – Lorenzo

+0

Я googled * расстояние с использованием координат земли * и нашел так много ответов –

ответ

4

Функция для вычисления расстояния между координатам (в пересчете на C# из этого answer):

double GetDistance(double lat1, double lon1, double lat2, double lon2) 
{ 
    var R = 6371; // Radius of the earth in km 
    var dLat = ToRadians(lat2-lat1); // deg2rad below 
    var dLon = ToRadians(lon2-lon1); 
    var a = 
     Math.Sin(dLat/2) * Math.Sin(dLat/2) + 
     Math.Cos(ToRadians(lat1)) * Math.Cos(ToRadians(lat2)) * 
     Math.Sin(dLon/2) * Math.Sin(dLon/2); 

    var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a)); 
    var d = R * c; // Distance in km 
    return d; 
} 

double ToRadians(double deg) 
{ 
    return deg * (Math.PI/180); 
} 

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

Смежные вопросы