编辑所以我在 VBforums 从 Jenner 发布的解决方案显然是在 VB 中,我使用在线转换器将其移植到 C#。翻译中丢失了一些东西,这就是为什么它在 10 英里之外。
我猜我只是误解了 Proj.Net 讨论板上的算法的用途,这就是为什么他们没有按照我的意愿去做。
除非有人提供了很棒的东西,否则我会在两天内标记我的答案时结束这个问题。
我在将 UTM 转换为纬度和经度时遇到问题。例如,我有以下 NAD83 UTM 坐标:
东区: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
我在同一线程中使用 D_Guidi 提供的 Proj.Net 解决方案得到了类似的结果。
使用在线转换器,我能够得到更接近我期望的东西:
纬度:32.35238307052292
长:-91.0230710652583
谁能阐明我做错了什么?
编辑 - 更喜欢 .NET 解决方案或易于转换的东西