J'ai dû passer environ deux heures pour trouver la solution de @nibot, j'avais simplement besoin d'une méthode pour créer une boîte de délimitation à partir de son point central et de sa largeur/hauteur (ou rayon) en kilomètres :
Je ne comprends pas bien la solution d'un point de vue mathématique/géographique. J'ai modifié la solution (par essais et erreurs) pour obtenir les quatre coordonnées. Distances en km, étant donné la position actuelle et la distance à laquelle nous nous déplaçons vers la nouvelle position dans les quatre coordonnées :
Nord :
private static Position ToNorthPosition(Position center, double northDistance)
{
double r_earth = 6378;
var pi = Math.PI;
var new_latitude = center.Lat + (northDistance / r_earth) * (180 / pi);
return new Position(new_latitude, center.Long);
}
Est :
private static Position ToEastPosition(Position center, double eastDistance)
{
double r_earth = 6378;
var pi = Math.PI;
var new_longitude = center.Long + (eastDistance / r_earth) * (180 / pi) / Math.Cos(center.Lat * pi / 180);
return new Position(center.Lat, new_longitude);
}
Sud :
private static Position ToSouthPosition(Position center, double southDistance)
{
double r_earth = 6378;
var pi = Math.PI;
var new_latitude = center.Lat - (southDistance / r_earth) * (180 / pi);
return new Position(new_latitude, center.Long);
}
Ouest :
private static Position ToWestPosition(Position center, double westDistance)
{
double r_earth = 6378;
var pi = Math.PI;
var new_longitude = center.Long - (westDistance / r_earth) * (180 / pi) / Math.Cos(center.Lat * pi / 180);
return new Position(center.Lat, new_longitude);
}