// /// <summary> // /// Returns an estimate of the distance between the given sequence of coordinates. // /// </summary> // public static double DistanceEstimateInMeter(System.Collections.Generic.List<Coordinate> coordinates) // { // var length = 0.0; // for(var i = 1; i < coordinates.Count; i++) // { // length += Coordinate.DistanceEstimateInMeter(coordinates[i - 1].Latitude, coordinates[i - 1].Longitude, // coordinates[i].Latitude, coordinates[i].Longitude); // } // return length; // } /// <summary> /// Offsets this coordinate with a given distance. /// </summary> public Coordinate OffsetWithDistances(double meter) { var offsetLat = new Coordinate(this.Longitude, this.Latitude + 0.1); var offsetLon = new Coordinate(this.Longitude + 0.1, this.Latitude); var latDistance = Coordinate.DistanceEstimateInMeter(offsetLat, this); var lonDistance = Coordinate.DistanceEstimateInMeter(offsetLon, this); return(new Coordinate(this.Longitude + (meter / lonDistance) * 0.1, this.Latitude + (meter / latDistance) * 0.1)); }
/// <summary> /// Returns an estimate of the distance between the given sequence of coordinates. /// </summary> public static float DistanceEstimateInMeter(System.Collections.Generic.List <Coordinate> coordinates) { var length = 0f; for (var i = 1; i < coordinates.Count; i++) { length += Coordinate.DistanceEstimateInMeter(coordinates[i - 1].Latitude, coordinates[i - 1].Longitude, coordinates[i].Latitude, coordinates[i].Longitude); } return(length); }
/// <summary> /// Creates a box around this coordinate with width/height approximately the given size in meter. /// </summary> /// <param name="size">The size in meter.</param> /// <returns>The size in meter.</returns> public Box BoxAround(double size) { var offsetLat = new Coordinate(this.Longitude, this.Latitude + 0.1); var offsetLon = new Coordinate(this.Longitude + 0.1, this.Latitude); var latDistance = Coordinate.DistanceEstimateInMeter(offsetLat, this); var lonDistance = Coordinate.DistanceEstimateInMeter(offsetLon, this); return(new Box(this.Longitude - (size / lonDistance) * 0.1, this.Latitude - (size / latDistance) * 0.1, this.Longitude + (size / lonDistance) * 0.1, this.Latitude + (size / latDistance) * 0.1)); }
/// <summary> /// Returns an estimate of the distance between the two given coordinates. /// </summary> /// <remarks>Accuraccy decreases with distance.</remarks> public static float DistanceEstimateInMeter(Coordinate coordinate1, Coordinate coordinate2) { return(Coordinate.DistanceEstimateInMeter(coordinate1.Latitude, coordinate1.Longitude, coordinate2.Latitude, coordinate2.Longitude)); }
/// <summary> /// Returns the location between the two coordinates at the given offset distance in meter. /// </summary> /// <param name="coordinate1">The first coordinate.</param> /// <param name="coordinate2">The second coordinate.</param> /// <param name="offset">The offset in meter starting at coordinate1.</param> /// <returns></returns> public static Coordinate LocationAfterDistance(Coordinate coordinate1, Coordinate coordinate2, float offset) { return(LocationAfterDistance(coordinate1, coordinate2, Coordinate.DistanceEstimateInMeter(coordinate1, coordinate2), offset)); }