GPS와 좌표계를 사용하는 Unity3D로 앱을 만들고 있습니다. 3D 세계에 "물건"을 배치 할 수 있습니다. 당신은 그것이 가까워지고있는 것을 발견 할 것이다. 좀 비슷해 PokemonGO유니티 GPS 좌표가 (X, Y, Z)로 북쪽으로 회전합니다.
그래서 문제는 다음과 같습니다. 2 차원 좌표 사이의 거리를 미터로 표시하는 함수 dist (lat1, lon1, lat2, lon2)를 사용하여 올바른 위치와 거리에 객체를 배치했습니다. (아래 참조).
내가 다음에하고 싶은 것은 북쪽으로 향하기 위해 Y 축을 중심으로 장면을 회전시키는 것입니다 (Z 축 +가 북쪽을 가리켜 야 함). 어떻게해야합니까?
float xx = dist (0, Tlon, 0, lon), zz = dist (Tlat, 0, lat, 0);
Vector3 position = new Vector3 (xx, 0, zz);
position.Normalize();
float beta = Mathf.Acos(position.z) * Mathf.Rad2Deg;
position = Quaternion.Euler (0,beta-Input.compass.trueHeading,0)*position;
transform.position = position;
하지만, "올바른"위치는 왼쪽 내 오른쪽에 내에서 모두 이상한 물건입니다 않는 (? 이유는 나도 몰라)
{DIST 기능을 : 내가 무슨 짓을
이 있었다 }이 작업을 수행하는
float dist(float lat1, float lon1, float lat2, float lon2){ // generally used geo measurement function
var R = 6378.137; // Radius of earth in KM
var dLat = (lat2 - lat1) * Mathf.PI/180;
var dLon = (lon2 - lon1) * Mathf.PI/180;
var a = Mathf.Sin(dLat/2) * Mathf.Sin(dLat/2) +
Mathf.Cos(lat1 * Mathf.PI/180) * Mathf.Cos(lat2 * Mathf.PI/180) *
Mathf.Sin(dLon/2) * Mathf.Sin(dLon/2);
var c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1-a));
var d = R * c;
return (float)(d * 1000); // meters
}