public virtual GeoPoint Project(Distance distance, Bearing bearing)
 {
     return(new Projection(this, distance, bearing).Project());
 }
 public virtual Bearing FinalBearingTo(GeoPoint that)
 {
     return(Bearing.DecimalDegrees((Bearing.Between(that, this).DecimalDegrees() + 180) % 360));
 }
 public virtual Bearing BearingTo(GeoPoint that)
 {
     return(Bearing.Between(this, that));
 }
 public Projection(GeoPoint from, Distance distance, Bearing heading)
 {
     this.from     = from;
     this.distance = distance;
     this.bearing  = heading;
 }
 public virtual GeoPoint Project(Distance distance, Bearing bearing)
 {
     return new Projection(this, distance, bearing).Project();
 }
 public Projection(GeoPoint from, Distance distance, Bearing heading)
 {
     this.from = from;
     this.distance = distance;
     this.bearing = heading;
 }