1

如何將經度和緯度轉換爲統一的基於經度和緯度爲0,0的Unity 3D座標?給定折線的經緯度,轉換爲笛卡爾座標,並將結果參考到另一個已知的經度和緯度

關於如何做到這一點有很多建議,但我還沒有看到這個問題的完整和簡潔的答案。

我需要在Unity 3D中繪製一系列代表在地圖上繪製的線條的多段線。多段線中的每個點都由經度和緯度表示。座標表示爲EPSG:4269 NAD83。

當用戶的經度和緯度作爲空間查詢發送到MongoDB服務器時,服務器響應一個包含表示折線中每個點的座標數組的geojson提要。

Unity3D中的用戶直接位於地圖的中心(0,0)。用戶設備內的指南針將Z軸指向北方。 X軸代表東/西。 Y軸表示高度。

目標是在屏幕上繪製表示參考用戶的地理空間對象的線條。該程序能夠正確提出請求,解析geojson提要,並繪製線條,但如果沒有經緯度到Unity3D笛卡爾的正確轉換,線條顯然定位不正確。

這個公式基本上是拼圖的最後一塊。我正在使用C#編寫Unity3D程序。

下面是在線地圖中線條外觀的表示。藍色管腳代表用戶的位置:

enter image description here

這裏是什麼樣的UI看起來像是用戶的移動設備上的表示(線沒有正確繪製):

enter image description here

代碼示例我試圖完成所有工作,但仍未成功完成代碼示例:

// 
// Longitude and Latitude to Unity 
// 
public Vector3 LatLonUnity(double longitude, float elevation, double latitude){ 
    // code based on http://stackoverflow.com/questions/32311647/converting-gps-coordinates-to-x-y-z-coordinates 

    float u_lat = Convert.ToSingle ((latitude - DrawLines.user_latitude)/0.00001 * 0.12179047095976932582726898256213); 

    float u_lon = Convert.ToSingle ((longitude - DrawLines.user_longitude)/0.000001 * 0.00728553580298947812081345114627); 

    Vector3 geo_unity = new Vector3 (-u_lon, elevation, -u_lat); 

    return geo_unity; 

} 
+0

嗯哦,這聽起來像一個提示問題並不清楚。我是否過度解釋了這個解釋? – Twitch

+0

對不起,這只是一個動機的笑話。 :)我認爲詳細明智這是非常好的,但我認爲你需要多說一些你需要幫助解決的問題。關於線條的東西不是正確的?任何代碼顯示?祝你好運 – MickyD

+0

@mickyd謝謝:o)添加了一個代碼示例 - 希望它仍然有意義;我一遍又一遍地調整它,試圖弄清楚爲什麼Unity結果看起來不像地圖結果。 – Twitch

回答

0

緯度θ和經度φ是兩個球面極座標(另一個是地球r,你還必須指定的半徑)的組件。

enter image description here

對於在海拔h座標,只需更換enter image description here