1

如何根据在 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;

}
4

1 回答 1

0

纬度θ和经度φ球极坐标中的两个分量(另一个是行星的半径r,您还必须指定)。

在此处输入图像描述

对于高程坐标h,只需替换 在此处输入图像描述

于 2016-06-29T08:38:21.533 回答