Je sais que c'est une vieille question mais je viens de regarder comment faire cela en C# et trouvé this recently published article here.
L'auteur a écrit une bibliothèque C# disponible sur nuget appelé GeoUK.
Install-Package GeoUK
Avec cette bibliothèque installée, pour convertir un Abscisse/Ordonnée à une latitude/longitude vous écrire une fonction comme ceci:
static void Main(string[] args)
{
// downing street!
const double easting = 530046;
const double northing = 179914;
var result = ConvertEastNorthToLatLong(easting, northing);
Console.WriteLine("Lat: {0} Long: {1}", result.Latitude, result.Longitude);
var gmaps = string.Format("https://www.google.co.uk/maps/@{0},{1},17z", Math.Round(result.Latitude,6), Math.Round(result.Longitude,6));
}
static LatitudeLongitude ConvertEastNorthToLatLong(double easting, double northing)
{
// Convert to Cartesian
var cartesian = GeoUK.Convert.ToCartesian(new Airy1830(),
new BritishNationalGrid(),
new EastingNorthing(easting, northing));
//ETRS89 is effectively WGS84
var wgsCartesian = Transform.Osgb36ToEtrs89(cartesian);
var wgsLatLong = GeoUK.Convert.ToLatitudeLongitude(new Wgs84(), wgsCartesian);
return wgsLatLong;
}
}
Cela fonctionne pour moi et produit le résultat: https://www.google.co.uk/maps/@51.503207,-0.127723,17z
L'article que j'ai mentionné plus tôt explique plus en profondeur. Cela pourrait aider quelqu'un d'autre plus tard.
Vous devez probablement mentionner que le code est LGPL – MarkJ