将NAD83 UTM转换为lat和long的问题

时间:2012-02-22 13:40:03

标签: c# vb.net google-maps gis utm

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

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

除非有人提供了很棒的内容,否则我会在两天之内将这个问题关闭,除非有人提供了很棒的内容。


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

Easting:686029.702258

Northing:3581213.621173

区域:15

我前一段时间在vbforums找到的一个解决方案给了我一个大约10英里以外的地方,我期待它。我发现here的简单数学解决方案给了我意想不到的结果。

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);

我得到以下结果:

lat:30.602349476368449

长:6.1627096689832594

我使用D_Guidi在同一个帖子中提供的Proj.Net解决方案获得了类似的结果。

使用在线转换器,我能够得到更接近我期待的东西:

lat:32.35238307052292

长:-91.0230710652583

任何人都可以了解我做错了什么吗?

编辑 - 更喜欢.NET解决方案或易于转换的东西

Related thread

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

我猜我只是误解了Proj.Net讨论区的算法是什么,以及为什么他们没有按照我的意愿行事。