2012-02-22 76 views
0

編輯因此,我在VBforums上發佈Jenner的解決方案顯然是在VB中,我使用在線轉換器將它移植到C#。翻譯中丟失了一些東西,這就是它離開10英里的原因。將NAD83 UTM轉換爲緯度和長度的問題

我在猜測我只是誤解了Proj.Net討論板上的算法是什麼,這就是爲什麼他們沒有做我想做的事情。

我會在兩天內關閉這個問題,當我可以標記我的答案,除非有人提供了令人敬畏的東西。


我在將UTM轉換爲lat和long時出現了問題。舉個例子,我有以下NAD83 UTM座標:

東座標:686029.702258

北向: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); 

我得到以下結果:

緯度:30.602349476368449

長:6.1627096689832594

我得到使用D_Guidi在同一個線程提供的解決方案Proj.Net類似的結果。

使用在線轉換器,我能得到的東西更接近我所期待:

緯度:32.35238307052292

長:-91.0230710652583

任何人都可以擺脫對我是什麼任何光做錯了?

編輯 - 寧願.NET解決方案或東西,將很容易地轉換

Related thread

回答

0

因此,我在VBforums上從Jenner發佈的解決方案顯然是在VB中,我使用在線轉換器將其移植到C#。翻譯中丟失了一些東西,這就是它離開10英里的原因。

我在猜測我只是誤解了Proj.Net討論板上的算法是什麼,這就是爲什麼他們沒有做我想做的事情。

1

你試過二進制包含在 「凸出」 的cs2cs(投影,http://trac.osgeo.org/proj/)?我相信這樣做會將UTM轉換爲東/北和拉特/倫。麻煩的是簡單的數學公式不夠準確,足以說明地球的形狀。

+0

我會檢查出來 - 我本來應該指定它是一個。NET項目,但我會看看我是否可以完成這項工作 – dtryan 2012-02-22 14:03:55

+0

我相信proj可以編譯爲Windows。作爲一個外部的可執行文件,雖然有點笨拙,但很容易就可以調用它。祝你好運。 – 2012-02-22 19:42:12