2015-11-07 2 views
1

J'ai un point exprimé en lat/longVérifiez si le point est à l'intérieur d'un cercle

Position louvreMuseum = new Position(48.861622, 2.337474); 

et j'ai une valeur de rayon exprimée en mètres. J'ai besoin de vérifier si un autre point, également exprimé en lat/long, est à l'intérieur du cercle.

Si je sur une surface plane, je peux simplement utiliser la formule

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

aussi profondément expliqué dans ces SO answer. Cependant, selon l'utilisation de la latitude et de la longitude, je ne peux pas utiliser cette formule en raison de la nature sphérique de la planète.

Comment puis-je calculer une distance entre un point donné et le centre à comparer avec le rayon?

+0

ressemble à une question mathématique, pas une question de programmation – Jonesopolis

+0

@Jonesopolis: Droit. Est-ce une question mathématique qui doit être correctement codée dans un programme? – Lorenzo

+0

J'ai parcouru la distance * en utilisant les coordonnées terrestres * et j'ai trouvé tellement de réponses –

Répondre

4

fonction pour calculer la distance entre deux coordonnées (converties en C# de ce 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); 
} 

Si la distance entre les deux points est inférieur au rayon, il est alors dans le cercle.