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));
    }