Update:
I have modified my attempts to finally meet success. I feel this is still wasteful as I am snaping to east south up and then reapplying my attitude rotations, but it works. I did have something downstream that was messing with rotations in my earlier picture. The C++ function for collecting data was messing around with rotations.
Anyway, cut that out and just send everything to the one spawn function to rule them all:
Here is the pertinent part.
Short description:
move the actor to the position desired by lat,lon,h.
snap the actor to southeastup
Make a quaternion rotation from euler values.
Get the new southeastuprotation (this will be “straight and level”)
Add the converted euler rotation to the new southeastup (by add we mean multiply because that’s how you add quaternions)
Stuff that new rotation into the component’s seteastsouthuprotation().
I’m fairly sure there is a way to maybe determine a difference in angles rather than normalize everything to straight and level and then apply the full rotation, but I don’t know what that is right now.
Doing this in C++ would be much the same as the function names are the same or very similar to the blueprint node names.
