如何將經度和緯度轉換爲統一的基於經度和緯度爲0,0的Unity 3D座標?給定折線的經緯度,轉換爲笛卡爾座標,並將結果參考到另一個已知的經度和緯度
關於如何做到這一點有很多建議,但我還沒有看到這個問題的完整和簡潔的答案。
我需要在Unity 3D中繪製一系列代表在地圖上繪製的線條的多段線。多段線中的每個點都由經度和緯度表示。座標表示爲EPSG:4269 NAD83。
當用戶的經度和緯度作爲空間查詢發送到MongoDB服務器時,服務器響應一個包含表示折線中每個點的座標數組的geojson提要。
Unity3D中的用戶直接位於地圖的中心(0,0)。用戶設備內的指南針將Z軸指向北方。 X軸代表東/西。 Y軸表示高度。
目標是在屏幕上繪製表示參考用戶的地理空間對象的線條。該程序能夠正確提出請求,解析geojson提要,並繪製線條,但如果沒有經緯度到Unity3D笛卡爾的正確轉換,線條顯然定位不正確。
這個公式基本上是拼圖的最後一塊。我正在使用C#編寫Unity3D程序。
下面是在線地圖中線條外觀的表示。藍色管腳代表用戶的位置:
這裏是什麼樣的UI看起來像是用戶的移動設備上的表示(線沒有正確繪製):
代碼示例我試圖完成所有工作,但仍未成功完成代碼示例:
//
// 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;
}
嗯哦,這聽起來像一個提示問題並不清楚。我是否過度解釋了這個解釋? – Twitch
對不起,這只是一個動機的笑話。 :)我認爲詳細明智這是非常好的,但我認爲你需要多說一些你需要幫助解決的問題。關於線條的東西不是正確的?任何代碼顯示?祝你好運 – MickyD
@mickyd謝謝:o)添加了一個代碼示例 - 希望它仍然有意義;我一遍又一遍地調整它,試圖弄清楚爲什麼Unity結果看起來不像地圖結果。 – Twitch