2013-02-17 3 views
0

У меня есть функция для вычисления расстояния между двумя наборами координат широты и долготы, я получаю от API Карт GoogleJavascript Расстояние Расчет Возвращает NaN

Вот функция высчитывает расстояние:

function getDistance(lat1, lon1, lat2, lon2) { 

    var lat1p = parseFloat(lat1); 
    var lon1p = parseFloat(lon1); 
    var lat2p = parseFloat(lat2); 
    var lon2p = parseFloat(lon2); 

    var R = 6371; // km (change this constant to get miles) 
    var dLat = (lat2p-lat1p) * Math.PI/180; 
    var dLon = (lon2p-lon1p) * Math.PI/180; 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1 * Math.PI/180) * Math.cos(lat2 * Math.PI/180) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 
    if (d>1) return Math.round(d)+"km"; 
    else if (d<=1) return Math.round(d*1000)+"m"; 

    return d; 
} 

I верю, что все координаты считаются типами Float. Я не уверен на 100%, но когда у меня есть печать или предупреждение, какое расстояние это возвращает NaN .... Есть ли способ сделать это. Я пытаюсь отклониться от API Карт Google, чтобы рассчитать расстояние, потому что это сделает все сложнее, потому что я, по сути, должен начать все сначала.

+0

Вы должны отладить это, проверив результат каждого промежуточного вычисления, чтобы отследить, откуда идет NaN. –

+0

Я обнаружил, что сложные вычисления javascript почти всегда требуют, чтобы вы обернули промежуточные значения в parseFloat (x): var c = 2 * parseFloat (Math.atan2 (...)); Вы просто сохраняете значения для переноса до тех пор, пока не прекратите преобразование в строки – David

+1

'parseFloat' может вернуть' NaN'. Установите контрольную точку и проверите переменные. Узнайте, как отлаживать код: http://www.netmagazine.com/tutorials/javascript-debugging-beginners. –

ответ

1

Извините, я исправил его, я дважды декларировал переменные, а также имел. вместо a, когда я назвал функцию расстояния. Спасибо, ребята, за ваши предложения, которые заставили меня понять это.

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