help me!!!

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

help me!!!

Сообщение ShoniPRO » 21 авг 2012, 11:09

нужен совет или помощь опытного java-программиста .... работаю с андроидом, а именно с GPS!!! .... нужно воплотить некий алгоритм .... если кто-то сможет помочь пишите!!! зарание благодарю )))

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: help me!!!

Сообщение rezak90 » 21 авг 2012, 17:07

обрисуй задачу, и народ подтянется ;)
R.id.team
Политика на форуме запрещена

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 21 авг 2012, 17:30

rezak90 писал(а):обрисуй задачу, и народ подтянется ;)
Он же ясно сказал, ".... нужно воплотить некий алгоритм ....". Чего тут не понятного? :P

Я сейчас тоже, кстати, воплощаю "некий алгоритм" с использованием GPS. Может смогу чем помочь?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: help me!!!

Сообщение Mikhail_dev » 21 авг 2012, 18:36

Просьба в следующий раз писать сразу что надо. Так быстрей будет.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 09:15

KamiSempai писал(а):
rezak90 писал(а):обрисуй задачу, и народ подтянется ;)
Он же ясно сказал, ".... нужно воплотить некий алгоритм ....". Чего тут не понятного? :P

Я сейчас тоже, кстати, воплощаю "некий алгоритм" с использованием GPS. Может смогу чем помочь?
мне не до шуток (((
у нас есть: X=2..20 – минимальная скорость ;
Y=5..180 – угол в гадусах;
Z=50..5000 – расстояние в метрах.
нужно написать алгоритм, который улучшит качество прорисовки маршрута. Новая точка на маршруте ставится, если направление движения изменилось больше чем на угол Y или расстояние до предыдущей точки больше Z. Данный механизм отключается при скорости меньшей X, для того чтоб не было избытка точек при маневрах не низких скоростях.
если кто-то работал с GPS, то вот етот метод public void onLocationChanged(Location loc) {} делжен получить, ну примерно true или false - тоесть передавать даные или нет...
я тут кое-что набросал:
class ForGPS {

private int dist = 0;
private int deg = 0;
private static volatile long time = 300000;
private long currentTime = 0;
private long timeSent = 0;
private long difTime = 0;
private double prevLat = 0.0;
private double prevLng = 0.0;

private static volatile ForGPS instance;

public static ForGPS getInstance() {
ForGPS localInstance = instance;
if (localInstance == null) {
synchronized (ForGPS.class) {
localInstance = instance;
if (localInstance == null) {
instance = localInstance = new ForGPS();
}
}
}
return localInstance;
}

public boolean getParams(int distantion, int degrees) {

this.dist += distantion;
this.deg += degrees;

return isMinParams(this.dist, this.deg);
}

public void zeroParams() {
this.dist = 0;
this.deg = 0;
}


private boolean isMinParams(int distantion, int degrees) {
if (distantion > 50 || degrees > 5)
return true;
else
return false;
}

public void isParams (int speed, int distantion, int degrees) {
currentTime = SystemClock.elapsedRealtime();

if (speed > 3) {
if (getParams(distantion, degrees)) {
//передача ???
zeroParams();
timeSent = currentTime;

}
}

}

public void setTimerTask() {

Timer timer = new Timer();
TimerTask task = new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub

}

};
difTime = time - timeSent;
if (difTime == 0)
timer.scheduleAtFixedRate(task, 0, time);
else
timer.scheduleAtFixedRate(task, 0, difTime);

task.cancel();
//task = new TimerTask();
//timer = new Timer();

}


@SuppressWarnings("null")
public void getCurrentLocation(Location location) {
double lat = location.getLatitude();
double lng = location.getLongitude();
float[] disArray = null;
float dis = 0;
double deg = location.getBearing();
double spd = location.getSpeed();

if ((this.prevLat != 0.0) && (this.prevLng != 0))
Location.distanceBetween(this.prevLat, this.prevLng, lat, lng, disArray);
else
disArray[0] = 0;

dis = disArray[0];

isParams((int)spd, (int)dis, (int)deg);

this.prevLat = lat;
this.prevLng = lng;
}
}
Последний раз редактировалось ShoniPRO 22 авг 2012, 11:54, всего редактировалось 1 раз.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 22 авг 2012, 11:36

Все очень печально. Мало того, что getParams не возвращает параметры а устанавливает их так еще и увеличивает их более чем в 2 раза.
Очевидно, правильней было бы написать

Код: Выделить всё

this.dist += distantion;
this.deg += degrees;
Потом. При скорости ниже 3 параметры сбрасываются. Получается, если я буду каждые 40 метров останавливаться, мое положение может никогда не отметиться.
Еще интересно от куда берутся дистанция и угол. Может их лучше не наращивать а вычислять относительно последних значений?
Как по мне, класс ForGPS лишний, все методы класса можно реализовать в интерфейсе LocationListener. Обработку изменения координат действительно нужно делать в onLocationChanged(Location loc) этого интерфейса. Кстати, его как раз можно назвать ForGPS.
Ну а дальше все предельно просто, получаем LocationManager, ищем наилучший провадер и ставим слушателем изменения координат свой LocationListener. Все это уже есть в интернете.

PS: Логика описанная в Вашем классе никуда не годится, ее надо менять.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 11:50

KamiSempai писал(а):Все очень печально. Мало того, что getParams не возвращает параметры а устанавливает их так еще и увеличивает их более чем в 2 раза.
Очевидно, правильней было бы написать

Код: Выделить всё

this.dist += distantion;
this.deg += degrees;
Потом. При скорости ниже 3 параметры сбрасываются. Получается, если я буду каждые 40 метров останавливаться, мое положение может никогда не отметиться.
Еще интересно от куда берутся дистанция и угол. Может их лучше не наращивать а вычислять относительно последних значений?
Как по мне, класс ForGPS лишний, все методы класса можно реализовать в интерфейсе LocationListener. Обработку изменения координат действительно нужно делать в onLocationChanged(Location loc) этого интерфейса. Кстати, его как раз можно назвать ForGPS.
Ну а дальше все предельно просто, получаем LocationManager, ищем наилучший провадер и ставим слушателем изменения координат свой LocationListener. Все это уже есть в интернете.

PS: Логика описанная в Вашем классе никуда не годится, ее надо менять.
в onLocationChanged(Location loc) не пойдет сделать ... вот ниже постмотри сылки!
https://www.dropbox.com/sh/36dvn3o5znbb ... navia2.jpg
нужно добиться такой точности передачи!

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 12:03

и как мне быть с TimerTask ? нужно чтобы он запустился на 5 минут, за ето время он должен дать знать что можна передавать даные, а потом удалится и опять перезапусться ???

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 22 авг 2012, 12:09

При подписке на событие можно указать интервал времени, через который нужно обновить местоположение.
Вот ССЫЛКА на метод который это делает.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 12:16

KamiSempai писал(а):При подписке на событие можно указать интервал времени, через который нужно обновить местоположение.
Вот ССЫЛКА на метод который это делает.
надо будет что-то попробовать ... пока спасибо ;)... еще какие-то идеи будут ??

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 22 авг 2012, 12:30

Для определения изменения градуса поворота можно попробовать использовать компас (эффективность зависит от того будут вертеть телефон или он будет лежать). Но его лучше задействовать только как средство для насильственного обновления положения. Угол поворота лучше определять по двум последним точкам (вспоминаем школьный курс геометрии :) )
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 12:32

KamiSempai писал(а):Для определения изменения градуса поворота можно попробовать использовать компас (эффективность зависит от того будут вертеть телефон или он будет лежать). Но его лучше задействовать только как средство для насильственного обновления положения. Угол поворота лучше определять по двум последним точкам (вспоминаем школьный курс геометрии :) )
та с матиматикой не проблема ... просто телефон будет находится в автомобиле и нужно отслеживать его ...

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 12:37

requestLocationUpdates() не пойдет .... даные которые я буду получать от onLocationChanged() через минимальное время и дистанцию requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListenerGPS).... и ети я должен пропускать через свой клас (ForGPS) и тогда уже он должен передать параметр true/false ставить ли новою точку на маршруте ... вот так-то :(

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 12:45

ShoniPRO писал(а):requestLocationUpdates() не пойдет .... даные которые я буду получать от onLocationChanged() через минимальное время и дистанцию requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListenerGPS).... и ети я должен пропускать через свой клас (ForGPS) и тогда уже он должен передать параметр true/false ставить ли новою точку на маршруте ... вот так-то :(
так что TimerTask мне нужен полюбом, что-бы проверять каждые 5 минут - ето максимальное время на протяжении какого должна ставится новая точка ...

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 22 авг 2012, 12:53

Зачем городить целый класс, если можно обойтись функцией? Все нужные переменные и функции можно хранить прямо в locListenerGPS.
И таймер не нужен если запоминать время последней записанной точки (разница между последней и текущей не должна превышать 5 минут или записываем новую точку).
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 13:01

KamiSempai писал(а):Зачем городить целый класс, если можно обойтись функцией? Все нужные переменные и функции можно хранить прямо в locListenerGPS.
И таймер не нужен если запоминать время последней записанной точки (разница между последней и текущей не должна превышать 5 минут или записываем новую точку).
вот сделай TimerTask как ты говоришь, а пока обдумаю как ето реализовать иначе ...

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 22 авг 2012, 13:10

ShoniPRO писал(а):вот сделай TimerTask как ты говоришь, а пока обдумаю как ето реализовать иначе ...
Вот так вот... Не успеешь совет дать, уже командуют :lol:
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 13:15

KamiSempai писал(а):
ShoniPRO писал(а):вот сделай TimerTask как ты говоришь, а пока обдумаю как ето реализовать иначе ...
Вот так вот... Не успеешь совет дать, уже командуют :lol:
извени :D
помоги пожалуйста если не сложно ;)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: help me!!!

Сообщение KamiSempai » 22 авг 2012, 13:20

Я лишь могу указать тебе путь... Пройти его ты должен сам...
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

ShoniPRO
Сообщения: 13
Зарегистрирован: 21 авг 2012, 11:01

Re: help me!!!

Сообщение ShoniPRO » 22 авг 2012, 13:50

KamiSempai писал(а):Я лишь могу указать тебе путь... Пройти его ты должен сам...
и на том спасибо! ;)

Закрыто