如何根据在Unity中绘制为0,0的经度和纬度将经度和纬度转换为Unity 3D坐标?
关于如何做到这一点有很多建议,但我还没有看到这个问题的完整而简洁的答案。
我需要在Unity 3D中绘制一系列折线,用于表示在地图上绘制的线条。折线中的每个点由纬度和经度表示。坐标表示为EPSG:4269 NAD83。
当用户的经度和纬度作为空间查询发送到MongoDB服务器时,场景开始,服务器以包含代表折线中每个点的坐标数组的geojson feed进行响应。
Unity3D中的用户直接位于地图的中心(0,0)。用户设备内的指南针将Z轴指向北方。 X轴代表东/西。 Y轴代表高度。
目标是在屏幕上绘制代表用户的地理空间对象的线条。该程序能够正确地发出请求,解析geojson提要,并绘制线条,但如果没有从纬度/经度到Unity3D笛卡儿的正确转换,线条显然没有正确定位。
这个公式基本上是拼图的最后一部分。我正在使用C#编写Unity3D程序。
以下是线条在在线地图中的显示方式。蓝色图钉代表用户的位置:
以下是用户移动设备上用户界面的图示(未正确绘制线条):
代码示例我设法在尝试使其全部工作时成功:
//
// 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;
}