АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Расчет распределений параметров маршрутов

Читайте также:
  1. I. Расчет параметров железнодорожного транспорта
  2. I.2. Определение расчетной длины и расчетной нагрузки на колонну
  3. II раздел. Расчет эффективности производственно-финансовой деятельности
  4. II. Расчет параметров автомобильного транспорта.
  5. III. Расчет параметров конвейерного транспорта.
  6. А президент Мубарак уперся. И уходить не захотел. Хотя расчет США был на обычную реакцию свергаемого главы государства. Восьмидесятидвухлетний старик оказался упрямым.
  7. А. Аналитический способ расчета.
  8. Активити списка маршрутов
  9. Алгоритм проверки адекватности множественной регрессионной модели (сущность этапов проверки, расчетные формулы, формулировка вывода).
  10. Алгоритм проверки значимости регрессоров во множественной регрессионной модели: выдвигаемая статистическая гипотеза, процедура ее проверки, формулы для расчета статистики.
  11. АУДИТ ОПЕРАЦИЙ ПО РАСЧЕТНЫМ СЧЕТАМ
  12. Аэродинамический расчет воздуховодов. Этапы расчета.

Для отображения суммарных значений показателей по группам маршрутов использовался GraphsDataCalculator, он имеет более сложную структуру, чем калькулятор статистики, за счет того, что работает с базой. Расчет суммы показателя(продолжительности, расстояния) по группе простая задача, но формирование множества маршрутов самой группы представляет сложность, а учтя, что показатели имеют значение только в привязке с группой, калькулятор был настроен на работу с временной группой. Выдаваемый результат представляет объект, созданный для дальнейшего удобного представления в графиках:

public class GraphsDataResult {

private List<Long> dates = new ArrayList<>();

private List<Double> distance = new ArrayList<>();

private List<Long> duration = new ArrayList<>();

public List<Long> getDates() {

return dates;

}

public List<Double> getDistance() {

return distance;

}

public List<Long> getDuration() {

return duration;

}

}

Формирование множества маршрутов группы представляет собой формирование специфического запроса. Даты необходимо формировать в правильном формате- если временной промежуток не будет расширен(включение границ), могут быть потеряны некоторые маршруты:

GraphsDataResult result = new GraphsDataResult();

final VelocityDatabaseHelper helper = OpenHelperManager.getHelper(context, VelocityDatabaseHelper.class);

try {

List<RouteEntity> filteredRoutes = new ArrayList<>();

Calendar begin = Calendar.getInstance();

begin.setTime(aStart);

begin.set(Calendar.HOUR, 0);

begin.set(Calendar.MINUTE, 0);

begin.set(Calendar.SECOND, 0);

//

Calendar end = Calendar.getInstance();

end.setTime(aFinish);

end.set(Calendar.HOUR, 23);

end.set(Calendar.MINUTE, 59);

end.set(Calendar.SECOND, 59);

try {

final List<RouteEntity> routes = helper.getSimpleRouteEntityDao()

.queryBuilder()

.where()

.ge("dateStart", begin.getTime())

.and()

.le("dateStart", end.getTime())

.and()

.ge("dateFinish", begin.getTime())

.and()

.le("dateFinish", end.getTime())

.query();

filteredRoutes.addAll(routes);

} catch (SQLException sqlEx) {

Log.e(StatisticsCalculator.class.getName(), "Error has occurred while querying for dateRange", sqlEx);

}

Распределение по группам, основанным на временных периодах, происходит по следующей схеме:

1)Формирование карт для хранение результатов ключи-даты, значения- суммарные показатели параметров.

2)Обходя множество маршрутов извлекаем необходимые значения параметров, формируем ключ для карт результатов, получаем сохраненное значение параметра, либо создаем пустое, добавляем извлеченные из маршрута значения в карты значений.

3) Переводим карты значений в результирующий объект.

Код выполняющий эти операции на примере распределения по дням:

Map<Date, Double> distanceMap = new TreeMap<>();

Map<Date, Long> timeMap = new TreeMap<>();

Calendar calendar = Calendar.getInstance();

for (RouteEntity route: filteredRoutes) {

calendar.clear();

calendar.setTime(route.getDateStart());

calendar.set(Calendar.HOUR, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

calendar.set(Calendar.MILLISECOND, 0);

Date key = calendar.getTime();

 

Double distance = distanceMap.get(key);

Long time = timeMap.get(key);

 

if (distance == null) {

distance = 0d;

}

if (time == null) {

time = 0L;

}

distance = distance + route.getDistance();

distanceMap.put(key, distance);

time = time + route.getDateFinish().getTime() - route.getDateStart().getTime();

timeMap.put(key, time);

}

for (Date key: distanceMap.keySet()) {

result.getDistance().add(distanceMap.get(key));

result.getDuration().add(timeMap.get(key));

result.getDates().add(key.getTime());

}


 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)