C# 给定多段线的纬度和经度,将其转换为笛卡尔坐标,并根据另一个已知纬度和经度打印结果

C# 给定多段线的纬度和经度,将其转换为笛卡尔坐标,并根据另一个已知纬度和经度打印结果,c#,unity3d,coordinates,coordinate-transformation,cartesian-coordinates,C#,Unity3d,Coordinates,Coordinate Transformation,Cartesian Coordinates,如何基于在Unity中绘制为0,0的经纬度将经纬度转换为Unity 3D坐标 有很多关于如何做到这一点的建议,但我还没有看到这个问题的完整和简洁的答案 我需要在Unity 3D中绘制一系列多段线,它们表示在地图上绘制的线。多段线中的每个点都由纬度和经度表示。坐标表示为EPSG:4269 NAD83 当用户的经度和纬度作为空间查询发送到MongoDB服务器时,场景就开始了,服务器使用geojson提要进行响应,该提要包含代表多段线中每个点的坐标数组 Unity3D中的用户直接位于地图的中心(0,0

如何基于在Unity中绘制为0,0的经纬度将经纬度转换为Unity 3D坐标

有很多关于如何做到这一点的建议,但我还没有看到这个问题的完整和简洁的答案

我需要在Unity 3D中绘制一系列多段线,它们表示在地图上绘制的线。多段线中的每个点都由纬度和经度表示。坐标表示为EPSG:4269 NAD83

当用户的经度和纬度作为空间查询发送到MongoDB服务器时,场景就开始了,服务器使用geojson提要进行响应,该提要包含代表多段线中每个点的坐标数组

Unity3D中的用户直接位于地图的中心(0,0)。用户设备内的指南针将Z轴指向北方。X轴表示东/西。Y轴表示高度

目标是在屏幕上绘制线,以表示相对于用户的地理空间对象。该程序能够正确地发出请求、解析geojson提要和绘制线条,但如果没有从纬度/经度到Unity3D笛卡尔坐标的正确转换,线条显然无法正确定位

这个公式基本上是拼图的最后一块。我正在用C#为Unity3D编写程序

以下是在线地图中线条外观的表示。蓝色pin代表用户的位置:

//
// 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;

}

以下是用户移动设备上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;

}

代码示例我在尝试使其全部正常工作时,设法吞咽了一口:

//
// 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;

}

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


对于高程
h
处的坐标,只需替换纬度
θ
和经度
φ
是球面极坐标中的两个分量(另一个是行星的半径
r
,您还必须指定)


对于标高
h
处的坐标,只需替换哦,这听起来像是一个提示,问题不清楚。我有没有想过这个解释?对不起,没有,这只是一个激励性的玩笑。:)我认为细节方面很好,但我认为你需要更多地说明你需要帮助解决的问题。有些线条画得不对?有代码显示吗?祝你well@mickyd谢谢:o)添加了一个代码示例-希望它仍然有意义;我一次又一次地调整它,试图弄明白为什么Unity结果看起来与map结果不一样。感谢您添加代码示例。我对地理空间的东西了解不多,但希望其他人能来帮助你编写代码。祝你好运,Unity用户伙伴:)哦,这听起来像是一个暗示,问题不清楚。我有没有想过这个解释?对不起,没有,这只是一个激励性的玩笑。:)我认为细节方面很好,但我认为你需要更多地说明你需要帮助解决的问题。有些线条画得不对?有代码显示吗?祝你well@mickyd谢谢:o)添加了一个代码示例-希望它仍然有意义;我一次又一次地调整它,试图弄明白为什么Unity结果看起来与map结果不一样。感谢您添加代码示例。我对地理空间的东西了解不多,但希望其他人能来帮助你编写代码。祝团结用户好运:)