2014-01-27 4 views
1

Я делаю приложение для отслеживания управляемых маршрутов через GPS, для базы данных я использовал SQLite. Когда текущая позиция будет изменена, данные (широта, долгота, дата) будут сохранены в базе данных, поэтому у меня есть список многих координат + дат в моей базе данных.Android java вычислить расстояние много координат от sqlite

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

Это, как рассчитать расстояние между двумя позициями:

private double calculateDistance(double fromLong, double fromLat,double toLong, double toLat) { 
    double d2r = Math.PI/180; 
    double dLong = (toLong - fromLong) * d2r; 
    double dLat = (toLat - fromLat) * d2r; 
    double a = Math.pow(Math.sin(dLat/2.0), 2) + Math.cos(fromLat * d2r) 
      * Math.cos(toLat * d2r) * Math.pow(Math.sin(dLong/2.0), 2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double d = 6367000 * c; 
    return Math.round(d); 

} 
+0

я могу вычислить между двумя координатами, но я Вана t весь маршрут для расчета –

+0

Вам нужно рассчитать каждый сегмент и сумму. Это также сложно из-за того, что агрегаты ошибок. – KarlP

+0

Я тоже думал об этом, но я не знаю, как ... со списком или что-то вроде этого? –

ответ

0

ОК, так как вы боретесь. Это начало:

Если у вас есть подготовленное заявление, как это:

select lat, lon from position order by save_date 

Вы можете суммировать сегменты, как это:

double total = 0.0; 
double a_lat; 
double a_lon; 


// first lat 
if(rs.next() == false) return 0.0; // nothing in db. 

a_lat = rs.getDouble("lat"); 
a_lon = rs.getDouble("lon"); 

while(rs.next()) { 
    b_lat = rs.getDouble("lat"); 
    b_lon = rs.getDouble("lon"); 

    double segment = calcLength(a_lat, a_lon, b_lat, b_lon); 
    if(segment < MINIMUM_SEG_LENGTH) { 
     continue; // skip this point, it's too close to the previous. 
    } 
    total+=segmentLength; 

    a_lat = b_lat; // oops, forgot this. 
    a_lon = b_lon; 
} 

return total; 
+0

Если сегменты короткие, общая длина не будет очень точной из-за накопления ошибок. Вероятно, лучше всего просто пропустить точки, если длина сегмента слишком мала. – KarlP

+0

спасибо, я попробую :) –

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