public static IEnumerable <GeoPoint> SplitIntoGeoPoints(GeoPoint startLocation, GeoPoint endLocation, int stepCount) { var dist = startLocation.DistanceTo(endLocation) / stepCount; var vAlt = (endLocation.Altitude - startLocation.Altitude) / stepCount ?? 0; var a = Azimuth(startLocation, endLocation); vAlt /= stepCount; for (var i = 0; i <= stepCount; i++) { yield return(RadialPoint(startLocation, i * dist, a).AddAltitude(vAlt * i)); } }
public static IEnumerable <GeoPoint> SplitIntoGeoPoints(GeoPoint startLocation, GeoPoint endLocation, int stepCount) { var dist = startLocation.DistanceTo(endLocation) / stepCount; stepCount = stepCount == 0 ? 1 : Math.Abs(stepCount); var vAlt = 0.0; if (startLocation.Altitude.HasValue && endLocation.Altitude.HasValue) { vAlt = (double)((endLocation.Altitude - startLocation.Altitude) / stepCount); } var a = startLocation.Azimuth(endLocation); for (var i = 0; i <= stepCount; i++) { yield return(startLocation.RadialPoint(i * dist, a).AddAltitude(vAlt * i)); } }