public static Vector3 GetPositionDiff(SLocationInfo locationRef, SLocationInfo location) { float latitudeDiff = location.latitude - locationRef.latitude; float latitudeDistance = latitudeDiff * Mathf.Deg2Rad * (earthRadius + locationRef.altitude); float longitudeRadius = (earthRadius + locationRef.altitude) * Mathf.Sin(Mathf.Abs(locationRef.latitude) * Mathf.Deg2Rad); float longitudeDiff = location.longitude - locationRef.longitude; float longitudeDistance = longitudeDiff * Mathf.Deg2Rad * longitudeRadius; float altitudeDistance = location.altitude - locationRef.altitude; return(new Vector3(longitudeDistance, altitudeDistance, latitudeDistance)); }
/// <summary> /// /// </summary> /// <param name="locationRef"></param> /// <param name="offset">(longitudeDistance, altitudeDistance, latitudeDistance) /// (eastDirection, verticalDirection, northDirection)</param> /// <returns></returns> public static SLocationInfo GetLocalization(SLocationInfo locationRef, Vector3 offset) { float altitudeDistance = offset.y; float altitude = locationRef.altitude + altitudeDistance; float latitudeDistance = offset.z; float latitudeDiff = latitudeDistance / (Mathf.Deg2Rad * (earthRadius + locationRef.altitude)); float latitude = latitudeDiff + locationRef.latitude; float longitudeRadius = (earthRadius + locationRef.altitude) * Mathf.Sin(Mathf.Abs(locationRef.latitude) * Mathf.Deg2Rad); float longitudeDistance = offset.x; float longitudeDiff = longitudeDistance / (Mathf.Deg2Rad * longitudeRadius); float longitude = longitudeDiff + locationRef.longitude; return(new SLocationInfo(altitude, longitude, latitude)); }