aralığında olup olmadığını hesaplayın Konum farkında olması gereken bir Windows Phone 7 uygulaması yazıyorum. Özellikle, telefonun belirli bir konumdaki (sabit) bir menzil dahilinde (0,5 mil) geldiğinde bazı (C#) kodlarının çalışmasını istiyorum. Bellekteki fiziksel konumlar için tüm lat/long verilere sahibim. Cihazların mevcut koordinatlarını almak için Geo Coordinate Watcher class kullanıyorum. Şimdi tek numara, kullanıcının herhangi bir konumun aralığında olup olmadığını hesaplamaktır.Bir koordinatın başka bir
Teşekkürler!
Güncelleme: Burada söz verdiği gibi mesafeleri hesaplamak Spherical Law of Cosines yöntemini kullanan küçük C# fonksiyondur. Umarım başka birine yardım edebilir. Not: Bir Windows Phone 7 uygulaması yazıyorum, bu yüzden GeoLocation sınıfını kullandım. Eğer "normal" C# kullanıyorsanız, fonksiyonu ihtiyaç duyulan iki koordinat çiftini kabul etmek için işlevi değiştirebilirsiniz.
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;
}
Merak etme, neden haversinin java kaynağına gittiğiniz aynı sayfada sunulan daha basit (ve daha hızlı) spiner kanunu kullanmadınız? Yazar,> 1m mesafeler için tavsiye edildiğini ve doğru olduğunu belirtir. – ctacke
Sadece makaleyi yeniden okuyordum ve haklısınız, Cosines'in Küresel Yasası daha basittir. Aslında nasıl yapıldığını görmek için ikisini de uyguladım - bu kodu da göndereceğim. Teşekkürler ... – will