C# 将NAD83 UTM转换为lat和long时出现问题

C# 将NAD83 UTM转换为lat和long时出现问题,c#,vb.net,google-maps,gis,utm,C#,Vb.net,Google Maps,Gis,Utm,编辑因此,我在VBforums上从Jenner发布的解决方案显然是在VB中,我使用了一个在线转换器将其移植到C#。有些东西在翻译中丢失了,这就是为什么它在10英里之外 我猜我只是误解了Proj.Net讨论板上的算法是用来做什么的,这就是为什么他们没有做我想让他们做的事情 我将在两天后结束这个问题,那时我可以标记我的答案,除非有人提供一些很棒的东西 我在将UTM转换为lat和long时遇到问题。例如,我有以下NAD83 UTM坐标: 东距:686029.702258 北行:3581213.621

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

我猜我只是误解了Proj.Net讨论板上的算法是用来做什么的,这就是为什么他们没有做我想让他们做的事情

我将在两天后结束这个问题,那时我可以标记我的答案,除非有人提供一些很棒的东西


我在将UTM转换为lat和long时遇到问题。例如,我有以下NAD83 UTM坐标:

东距:686029.702258

北行:3581213.621173

分区:15

我不久前发现的一个解决方案给了我一个点,在我预期的位置以南大约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解决方案或易于转换的解决方案


您是否尝试过“proj”(投影)中包含的cs2cs二进制文件?我相信这将非常准确地将UTM转换为东/北和lat/lon。问题是简单的数学公式不能足够准确地解释地球的形状。

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


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

我会检查一下-我本来应该指定它是一个.Net项目,但我会看看我是否可以让这个工作我相信Proj可以为Windows编译。将其作为外部可执行文件调用很容易,尽管有点笨拙。祝你好运