public GeoPoint Midpoint() { Double bx = Math.Cos(p2.LatitudeRadians) * Math.Cos(GetLongitudeDistance()); Double by = Math.Cos(p2.LatitudeRadians) * Math.Sin(GetLongitudeDistance()); Double latitude = Math.Atan2(Math.Sin(p1.LatitudeRadians) + Math.Sin(p2.LatitudeRadians), Math.Sqrt(Math.Pow(Math.Cos(p1.LatitudeRadians) + bx, 2) + Math.Pow(by, 2))); Double longitude = p1.LongitudeRadians + Math.Atan2(by, Math.Cos(p1.LatitudeRadians) + bx); longitude = (longitude + 3 * Math.PI) % (2 * Math.PI) - Math.PI; return(GeoPoint.Parse(MathUtilities.ToDegrees(latitude), MathUtilities.ToDegrees(longitude), p1.ReferenceEllipsoid)); }
public GeoPoint Project() { Double d = distance.In(MetricUnit.meters); Double dR = d / GeoConstants.EARTH_RADIUS; Double latitude = Math.Asin(Math.Sin(from.LatitudeRadians) * Math.Cos(dR) + Math.Cos(from.LatitudeRadians) * Math.Sin(dR) * Math.Cos(bearing.Radians())); Double longitude = from.LongitudeRadians + Math.Atan2(Math.Sin(bearing.Radians()) * Math.Sin(dR) * Math.Cos(from.LatitudeRadians), Math.Cos(dR) - Math.Sin(from.LatitudeRadians) * Math.Sin(latitude)); longitude = (longitude + 3 * Math.PI) % (2 * Math.PI) - Math.PI; return(GeoPoint.Parse(MathUtilities.ToDegrees(latitude), MathUtilities.ToDegrees(longitude), from.ReferenceEllipsoid)); }