Я пишу приложение для Windows Phone 7, которое должно учитывать местоположение.В частности, я хочу, чтобы какой-нибудь (c #) код запускался, когда телефон находится в пределах (фиксированного) диапазона определенного местоположения, скажем, 0,5 мили.У меня есть все данные широты / долготы для физических мест в памяти.Я буду использовать класс Geo Coordinate Watcher для получения текущих координат устройств.Теперь единственная хитрость - вычислить, находится ли пользователь в зоне действия любого из местоположений.
Спасибо!
Обновление : как и обещано, вот небольшая функция C #, которая использует Сферический закон косинусов метод вычисления расстояний.Надеюсь, что это может помочь кому-то еще.Примечание: я пишу приложение для Windows Phone 7, поэтому использовал класс GeoLocation.Если вы используете «обычный» c #, то вы можете изменить функцию так, чтобы она принимала две пары координат, в которых она нуждается.
internal const double EarthsRadiusInKilometers = 6371;
/// <summary>
/// The simple spherical law of cosines formula
/// gives well-conditioned results down to
/// distances as small as around 1 metre.
/// </summary>
/// <returns>Distance between points "as the crow flies" in kilometers</returns>
/// <see cref="http://www.movable-type.co.uk/scripts/latlong.html"/>
private static double SpericalLawOfCosines(GeoCoordinate from, GeoCoordinate to)
{
return ( Math.Acos (
Math.Sin(from.Latitude) * Math.Sin(to.Latitude) +
Math.Cos(from.Latitude) * Math.Cos(to.Latitude) *
Math.Cos(to.Longitude - from.Longitude)
) * EarthsRadiusInKilometers)
.ToRadians();
}
/// <summary>
/// To a radian double
/// </summary>
public static double ToRadians(this double d)
{
return (Math.PI / 180) * d;
}