编辑因此,我在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解决方案或易于转换的东西
答案 0 :(得分:1)
您是否尝试过“proj”中包含的cs2cs二进制文件(投影,http://trac.osgeo.org/proj/)?我相信这样可以准确地将UTM转换为东/北和纬度/经度。麻烦的是简单的数学公式不准确,足够,占地球的形状。
答案 1 :(得分:0)
因此,我在Jenfor的VBforums上发布的解决方案显然是在VB中,我使用在线转换器将其移植到C#。翻译中丢失了一些东西,这就是为什么它离开了10英里。
我猜我只是误解了Proj.Net讨论区的算法是什么,以及为什么他们没有按照我的意愿行事。