0

编辑所以我在 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 解决方案或易于转换的东西

相关线程

4

2 回答 2

1

您是否尝试过“proj”(投影,http ://trac.osgeo.org/proj/ )中包含的 cs2cs 二进制文件?我相信这将准确地将 UTM 转换为东/北和纬度/经度。麻烦的是简单的数学公式不够准确,足以说明地球的形状。

于 2012-02-22T13:47:53.700 回答
0

所以我在 VBforums 从 Jenner 发布的解决方案显然是在 VB 中,我使用了一个在线转换器将它移植到 C#。翻译中丢失了一些东西,这就是为什么它在 10 英里之外。

我猜我只是误解了 Proj.Net 讨论板上的算法的用途,这就是为什么他们没有按照我的意愿去做。

于 2012-02-22T15:21:18.680 回答