Преобразуйте восток / север в широту / долготу, используя NetTopologySuite - PullRequest
2 голосов
/ 04 февраля 2010

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

Предположительно NetTopologySuite может помочь мне в этом, но я не могу найти много документации по этому вопросу.

У кого-нибудь есть несколько указателей, чтобы начать?

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

Ответы [ 5 ]

7 голосов
/ 21 мая 2013

Это очень старый вопрос, но, поскольку он все еще появлялся в поиске через 2 года, я чувствовал, что все еще стоит дать ответ, который может помочь другим.

Если вы можете использовать его, то в Ordnance Survey теперь есть DLL (и связанный файл данных) или файл NTv2, который можно использовать для более точного преобразования OSTN15. Они доступны под лицензией BSD по адресу: OSTN15 и OSGM15 для разработчиков

Это преобразование преобразует ваши координаты в ETRS89 ( приблизительно эквивалентно WGS84 в Европе ) и будет более точным, чем преобразование Гельмерта параметра OSTN97 / 7, упомянутое в ответе @ codeulike.

3 голосов
/ 09 февраля 2010

Чтобы ответить на мой собственный вопрос, восточные и северные районы оказались Постановлениями о постановках (OS), для которых преобразование в широту и долготу довольно четко определено.

Эта очень хорошая страница Криса Венесса обсуждает основной алгоритм и распространенные ошибки. Он представляет алгоритм Javascript, но я нашел C # эквивалент на этом форуме .

Как указывает Крис Венесс, этот алгоритм возвращает вас к широте и долготе, но на уровне OSGB36. Обычно вам нужно преобразовать это в более часто используемые данные WGS84 / GRS80 (в противном случае вы будете на расстоянии до 120 м для британских локаций). Для этого вам нужно преобразование Гельмерта , как описано Крисом здесь .

edit: код Криса Венесса лицензирован по лицензии GNU LGPL .

3 голосов
/ 09 февраля 2010

Библиотека Proj.Net с большей вероятностью предоставит более простой набор инструментов для ваших нужд.

Вам необходимо спроектировать из UTM (если это действительно UTM - там много картезианскогосистемы там) к географической системе координат.Скорее всего, вам также понадобится выяснить данные ваших данных.Если у вас есть данные в шейп-файле, посмотрите на файл .prj в текстовом редакторе - он будет содержать информацию о проекции.В противном случае вам нужно вернуться к производителю данных и спросить их о прогнозе.

1 голос
/ 29 августа 2017

Я знаю, что это старый вопрос, но я только что искал, как это сделать в 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;
    }
}

Это работает для меня и дает результат .

Статья, о которой я упоминал ранее, объясняет более подробно. Это может помочь кому-то еще в дальнейшем.

0 голосов
/ 09 июля 2018

Проверьте CoordinateSharp на Nuget.Это упрощает преобразование SUPER.

 UniversalTransverseMercator utm = new UniversalTransverseMercator("T", 32, 233434, 234234);
 Coordinate c = UniversalTransverseMercator.ConvertUTMtoLatLong(utm);

Ваши значения широты и долготы хранятся в объекте Coordinate для всех форматов широты и долготы (т. Е. Минут, десятичных минут, секунд и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...