Omitempty does exactly that, omits the tag when "empty".
If Position: 0 is valid, then it would actually be omitted if it was defined as Position int.  So by defining it as a pointer, we can now omit the position tag when needed but also have a representation of 0.
The same is true for the boolean.  A false value would never be sent which isn't what we want.

However for Strings, in this use case, the empty string isn't valid so only having strings with real content is appropriate.