如何根据在 Unity 中绘制为 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;
}