I'm using GPS values to make an object exist in a certain Lat Lng. To put it into Unity coordinates, I'm using this function: Code (CSharp): /// <param name="lat">Latitude</param> /// <param name="lon">Longitude</param> /// <param name="h">height.</param> Vector3 WGS84ToCartesian(float lat, float lon, float h) { float cosLat = Mathf.Cos(lat * Mathf.PI / 180.0f); float sinLat = Mathf.Sin(lat * Mathf.PI / 180.0f); float cosLon = Mathf.Cos(lon * Mathf.PI / 180.0f); float sinLon = Mathf.Sin(lon * Mathf.PI / 180.0f); float f = 1.0f / 298.257224f; float C = 1.0f / Mathf.Sqrt(cosLat * cosLat + (1 - f) * (1 - f) * sinLat * sinLat); float S = (1.0f - f) * (1.0f - f) * C; float earthRadius = 6378137.0f; float x = (earthRadius * C + h) * cosLat * cosLon; float y = (earthRadius * C + h) * cosLat * sinLon; float z = (earthRadius * S + h) * sinLat; return new Vector3 (x, y, z); } } The problem is, it seems to be almost at a rotation. When I move away from the object, rather than seeming to move backward in the z direction, it seems to go up in the y as well, making it climb into the sky. Is this because of the curvature of the earth? Btw, I'm also using altitude for height.