Я знаю, что это старый вопрос, но я только что искал, как это сделать в C #, и нашел эту недавно опубликованную статью здесь .
Автор написал библиотеку C #, доступную в nuget, под названием GeoUK.
Install-Package GeoUK
С этой установленной библиотекой, чтобы преобразовать восток / север в long / lat, вы бы написали такую функцию:
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;
}
}
Это работает для меня и дает результат .
Статья, о которой я упоминал ранее, объясняет более подробно. Это может помочь кому-то еще в дальнейшем.