Вычислить, находится ли одна координата в пределах диапазона другой

Я пишу приложение для 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;
    }

5
задан will 20 September 2010 в 16:25
поделиться