In Windows Phone 8 there seems to be method
GeoCoordinate.GetDistanceTo()
for calculating distances between two locations. (Even if the reference page for the method is not found.)
But where is the equivalent in the whole Windows Phone 8.1 Geolocation namespace?
I can't find a method to calculate distance between two locations at all.
How to calculate distance between two locations in WP8.1?
GeoCoordinate.GetDistanceTo()
is found in System.Device.Location
namespace. But windows 8.1 (Runtime apps) apps use Windows.Devices.Geolocation
namespace where GetDistanceTo()
method is not present.
So you can calculate the distance yourself by using the Haversine formula. Here is the wikipedia Haversine page, you can know about the formula from there.
You can use the below C# code which uses Haversine formula to calculate the distance between two coordinates.
using System;
namespace HaversineFormula
{
/// <summary>
/// The distance type to return the results in.
/// </summary>
public enum DistanceType { Miles, Kilometers };
/// <summary>
/// Specifies a Latitude / Longitude point.
/// </summary>
public struct Position
{
public double Latitude;
public double Longitude;
}
class Haversine
{
/// <summary>
/// Returns the distance in miles or kilometers of any two
/// latitude / longitude points.
/// </summary>
public double Distance(Position pos1, Position pos2, DistanceType type)
{
double R = (type == DistanceType.Miles) ? 3960 : 6371;
double dLat = this.toRadian(pos2.Latitude - pos1.Latitude);
double dLon = this.toRadian(pos2.Longitude - pos1.Longitude);
double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
Math.Cos(this.toRadian(pos1.Latitude)) * Math.Cos(this.toRadian(pos2.Latitude)) *
Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
double c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));
double d = R * c;
return d;
}
/// <summary>
/// Convert to Radians.
/// </summary>
private double toRadian(double val)
{
return (Math.PI / 180) * val;
}
}