Calculer des distances sur terre

Comment peut on calculer une distance sur une surface non plane? Et comment déterminer la distance la plus courte entre deux points situés à sa surface?