Редактировать Таким образом, решение, которое я разместил у Дженнера на VBforums, было, очевидно, в VB, и я использовал онлайн-конвертер для переноса его на C #. Что-то было потеряно в переводах, и именно поэтому это было в 10 милях.
Полагаю, я просто неправильно понимаю, для чего нужны алгоритмы на форумах Proj.Net, и поэтому они не делали то, что я от них хотел.
Я закрою этот вопрос через два дня, когда смогу пометить свой ответ, если кто-то не предоставит что-то удивительное.
У меня проблемы с преобразованием UTM в lat и long. Например, у меня есть следующая UADM-координата NAD83:
Восток: 686029,702258
на север: 3581213,621173
зона: 15
Решение, которое я нашел на vbforums некоторое время назад, дает мне точку в 10 милях к югу от того места, где я ожидал этого. Простое математическое решение, которое я нашел здесь , дает мне неожиданные результаты.
double[] inverseMercator (double x, double y) {
double lon = (x / 20037508.34) * 180;
double lat = (y / 20037508.34) * 180;
lat = 180/Math.PI * (2 * Math.Atan(Math.Exp(lat * Math.PI / 180)) - Math.PI / 2);
return new double[] {lon, lat};
}
double[] toPoint = inverseMercator (686029.702258, 3581213.621173);
Я получаю следующий результат:
широта: 30.602349476368449
длиной: 6,1627096689832594
Я получаю аналогичные результаты, используя решение Proj.Net, предоставленное D_Guidi в том же потоке.
Используя онлайн-конвертер, я смог приблизиться к тому, что ожидал:
широта: 32,35238307052292
длинный: -91.0230710652583
Может кто-нибудь пролить свет на то, что я делаю неправильно?
Редактировать - предпочел бы решения .NET или что-то, что было бы легко конвертируемым
Похожие темы