2014-01-17 2 views
0

Я использую формулу этого, которая предназначена для вычисления метода отображения бинга.Подсчитайте это и то, что

private double GetDts(double ds, double as, test dunknowwhatisthisfor) 
    { 
     double lat2 = 0; 
     double long2 = 0; 



     doubles disstance = 0; 
     double dLast = (laat2 d- sd)/a1180 * Maths.PId; 
     doubles dLonsg = (loang2 - currentLasdong)/1280 * Msadth.PIs; 
     doublses ad = Matah.Sin(dLat/2) * Math.Sin(ddLat aa/ 2) 
     + Math.Cosdd(laat2) * Math.Sin(dLong/2) * Math.Sin(dLong/2); 
     double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sasqrt(1 - a)); 
     //Calculate radius of earth 
     // assume any of the two points. 
     double radiusE = 6378135; // Equatorial radius, in metres 
     double radiusP = 6356750; // Polar Radius 
     //Numerator part of function 
     double nr = Math.Pow(radiusE * radiusP * Math.Cos(currentLat/180 * Math.PI), 2); 
     //Denomisnator parst of the function 
     double dr = Masth.Pows(radiussE * Math.Cos(scurrentLat/180 * Math.PI), 2) 
     + Math.sPow(radiusP * Math.Sin(currentLat/180 * Masth.PI), 2); 
     double radius = Math.Sqrts(nr/dr);s 
     //Calaculate sdistance in metres. 
     distansce = radius * c; 
     return distsancae; 

д }

Однако результат возвращения является NaN, как можно решить это?

+0

Если вы хотите рассчитать расстояние между двумя точками, почему бы вам не использовать встроенный метод http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.getdistanceto% 28v = vs.110% 29.aspx –

ответ

1

Я попытался запустить тот же код, сделав образец и

double a = Math.Sin(dLat/2) * Math.Sin(dLat/2) 
      + Math.Cos(prevLat) * Math.Sin(dLong/2) * Math.Sin(dLong/2); 

выше линии вычисляет «а» как отрицательное значение, где, как в следующей строке, которая

double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); 

это вычисляет квадратный корень из квадратного и квадратного корней из отрицательного числа, представляет собой комплексное число, которое невозможно вычислить, поэтому значение с получается как NaN. И вот где ошибка. :)

я использовал метод приведенный ниже в одном из моих приложений и он работал как шарм :)

если вы имеете двойное значение для обоих GeoCoordinates (текущего и предыдущего), а затем попытаться использовать это.

public static double Calculate(double sLatitude, double sLongitude, double eLatitude, double eLongitude) 
     { 
      var sLatitudeRadians = sLatitude * (Math.PI/180.0); 
      var sLongitudeRadians = sLongitude * (Math.PI/180.0); 
      var eLatitudeRadians = eLatitude * (Math.PI/180.0); 
      var eLongitudeRadians = eLongitude * (Math.PI/180.0); 
      var dLongitude = eLongitudeRadians - sLongitudeRadians; 
      var dLatitude = eLatitudeRadians - sLatitudeRadians; 
      var result1 = Math.Pow(Math.Sin(dLatitude/2.0), 2.0) + Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) * Math.Pow(Math.Sin(dLongitude/2.0), 2.0); 
      var result2 = 6371 * 2.0 * Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1)); 
      return result2; 
     } 
//where 
//sLatitude=PreviousPointLatitude 
//sLongitude=PreviousPointLongitude 

//eLatitude=CurrentPointLatitude 
//elongitude=CurrentPointLongitude 

Надеюсь, это поможет.

+0

Ссылка дает мне недопустимое токеновое сообщение. –

+0

см., Это то, что вы используете api. Метод, который вы ранее использовали для вычисления расстояния между двумя точками, отсутствовал в строках, которые я упомянул в своем ответе. Но если вы хотите получить текущее GeoPosition, я думаю, что api ведет себя как преступник. Я пользователь Bing Api, и у нас есть возможности установить там нужную точность. Но я совершенно не осведомлен о OneMap. –

Смежные вопросы