欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Unity 世界位置经纬度 转为Unity坐标

Unity 世界位置经纬度 转为Unity坐标

2025/2/5 15:47:23 来源:https://blog.csdn.net/weixin_44347839/article/details/141560125  浏览:    关键词:Unity 世界位置经纬度 转为Unity坐标

参考:
https://github.com/MichaelTaylor3D/UnityGPSConverter/blob/master/GPSEncoder.cs
参考方法里使用了单例,实际上没有必要。
修改后的静态类

    public static class GPSTool{public static Vector2 USCToGPS(Vector3 position, Vector2 localOrigin){FindMetersPerLat(localOrigin.x, out float metersPerLat, out float metersPerLon);Vector2 geoLocation = new Vector2(0, 0);geoLocation.x = (localOrigin.x + (position.z) / metersPerLat);geoLocation.y = (localOrigin.y + (position.x) / metersPerLon); return geoLocation;}public static Vector3 GPStoUCS(Vector2 gps, Vector2 localOrigin){FindMetersPerLat(localOrigin.x, out float metersPerLat, out float metersPerLon);float zPosition = metersPerLat * (gps.x - localOrigin.x); float xPosition = metersPerLon * (gps.y - localOrigin.y); return new Vector3((float)xPosition, 0, (float)zPosition);}private static void FindMetersPerLat(float lat, out float metersPerLat, out float metersPerLon) // Compute lengths of degrees{float m1 = 111132.92f; float m2 = -559.82f;     float m3 = 1.175f;     float m4 = -0.0023f;    float p1 = 111412.84f;  float p2 = -93.5f;     float p3 = 0.118f;   lat = lat * Mathf.Deg2Rad;metersPerLat = m1 + (m2 * Mathf.Cos(2 * (float)lat)) + (m3 * Mathf.Cos(4 * (float)lat)) + (m4 * Mathf.Cos(6 * (float)lat));metersPerLon = (p1 * Mathf.Cos((float)lat)) + (p2 * Mathf.Cos(3 * (float)lat)) + (p3 * Mathf.Cos(5 * (float)lat));}}

使用方法

private const float CKlatitude;//参考坐标的纬度常量
private const float CKlongitude;//参考坐标的经度常量
public float ScaleCoe;public void SetLocalPos(float latitude,float longitude){
Vector3 pos = GPSTool.GPStoUCS(new Vector2(latitude, longitude), new Vector2(CKlatitude, CKlongitude));
go.transform.localPosition = pos * ScaleCoe;
}

在同一个场景中,参考坐标的常量是唯一的,这样经纬度转化的坐标相对位置才是正确的。ScaleCoe是一个缩放系数,取决于Unity中位置的相对位置大小,可以将这些坐标的节点放到一个父级下方,通过移动父级的坐标,使位置对应。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com