Я пишу приложение для Windows Phone 7, которое должно учитывать местоположение. В частности, я хочу, чтобы некоторый (c #) код запускался, когда телефон находится в (фиксированном) диапазоне определенного местоположения, скажем, 0,5 мили. У меня есть все данные широты и долготы для физических мест в памяти. Я буду использовать класс Geo Coordinate Watcher , чтобы получить текущие координаты устройств. Теперь единственный трюк - вычислить, находится ли пользователь в пределах досягаемости какого-либо из местоположений.
Спасибо!
Обновление : как и было обещано, вот небольшая функция C #, которая использует метод сферического закона косинусов для вычисления расстояний. Надеюсь, это поможет кому-то другому. Примечание. Я пишу приложение для Windows Phone 7, поэтому использовал класс GeoLocation. Если вы используете "обычный" C #, вы можете изменить функцию, чтобы она принимала две пары координат, которые необходимы функции.
internal const double EarthsRadiusInKilometers = 6371;
///
/// The simple spherical law of cosines formula
/// gives well-conditioned results down to
/// distances as small as around 1 metre.
///
/// Distance between points "as the crow flies" in kilometers
///
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();
}
///
/// To a radian double
///
public static double ToRadians(this double d)
{
return (Math.PI / 180) * d;
}