One thing to consider here is tradeoff between flexibility and performance.  Flexibility means this representation of Earth locations is in a mutable container (`CartesianPoints`).  The penalty is that if you want to access `longitude, latitude` and `height` you need to repeat the `geodetic` computation 3 times.  If someone was using this not for storing a single observatory location, but instead a million points on the Earth surface, this could get expensive.  

If this was immutable so that the underlying x, y, z locations could not be changed, then you could cache everything in private variables so the computations would only ever be done once.