2016-05-26 4 views
1

привет, ребята, я разрабатываю скрипт, чтобы показать текущую скорость на платформе, которая имеет свою собственную функцию, но я всегда получаю 0 для текущей скорости, а первая долгота и широта такие же, как второй, может кто-то помочь мне, пожалуйста, чтобы понять, что не так, и посмотреть, правилен ли алгоритмпоказать текущую скорость от координат gps

function save1() { 
    js.saveData("value1", js.call('api.location.getLatitude()', {})); 
    js.saveData("value2", js.call('api.location.getLongitude()', {})); 
} 

function save2(){ 
    js.saveData("value3", js.call('api.location.getLatitude()', {})); 
    js.saveData("value4", js.call('api.location.getLongitude()', {})); 
} 
function repeate2() { 

    js.callRepeatedly("save1()", 1000); 
    js.callRepeatedly("save2()", 2000); 
} 

function setintext() { 
    save1(); 
    save2(); 
    repeate2(); 
    //js.alert("geted"); 
    var lat1 = js.getData("value1"); 
    var long1 = js.getData("value2"); 
    var lat2 = js.getData("value3"); 
    var long2 = js.getData("value4"); 
    js.setProperty('Home.Text_1', 'text', lat1); 
    js.setProperty('Home.Text_2', 'text', long1); 
    js.setProperty('Home.Text_3', 'text', lat2); 
    js.setProperty('Home.Text_4', 'text', long2); 
} 


function distance(lat1, long1, lat2, long2) { 
    setintext(); 
    var R = 6371; // km (change this constant to get miles) 
    var dLat = (lat2 - lat1) * Math.PI/180; 
    var dLon = (long2 - long1) * 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; 
    var dist = 0; 
    dist = Math.round(d); 
    var vitesse = dist/3600000; 
    js.setProperty('Home.Text_x', 'text', vitesse + "km/h"); 
} 
+1

Поскольку вы сохраняете в локальном хранилище оба набора (lat/long) координат в один и тот же момент в setintext() ... Разве это не логика, что значения одинаковы? Я думаю, вы должны сохранить set1 ... и подождать немного, чтобы сохранить второй набор. Также подумайте о задержке передачи! Я не знаю, откуда берутся данные ... Но действительно ли это «реальное время»? –

+0

Вы получаете значения один за другим без изменения местоположения. Попробуйте изменить местоположение между 'save1()' и 'save2()' –

+0

Louys Patrice Bessette Да, я устанавливаю их в одно и то же время , но save1() должен выполняться каждые 1 сек. и save2() должен быть Выполняется каждые 2 сек. Я прав? Да Точные координаты в реальном времени –

ответ

0

Какова ваша структура? Многие среды JavaScript выполняют асинхронно много операций на основе IO и/или CPU, поэтому опрос для позиции не вызовет новых вычислений, а просто вернет самую последнюю вычисленную позицию.

Можете ли вы, чтобы фреймворк вызывал ваш код, когда он вычислил новую позицию, вместо опроса для новой позиции? Вполне возможно, что структура имеет новое положение, например. только каждые три секунды, что означает, что положение в две последующие секунды будет одинаковым 2/3 времени.

Конечно, поскольку вы сохраняете один набор переменных позиции каждую секунду, а другую каждые две секунды и одновременно запуская оба таймера, вы можете рассчитывать на то же положение на половине прогонов. Если вы не полагаетесь на вычисление GPS, чтобы происходить синхронно и занимать значительное время, что не является предположением, на который я опишу.

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