help me!!!
help me!!!
нужен совет или помощь опытного java-программиста .... работаю с андроидом, а именно с GPS!!! .... нужно воплотить некий алгоритм .... если кто-то сможет помочь пишите!!! зарание благодарю )))
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: help me!!!
Он же ясно сказал, ".... нужно воплотить некий алгоритм ....". Чего тут не понятного?rezak90 писал(а):обрисуй задачу, и народ подтянется
Я сейчас тоже, кстати, воплощаю "некий алгоритм" с использованием GPS. Может смогу чем помочь?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: help me!!!
Просьба в следующий раз писать сразу что надо. Так быстрей будет.
Re: help me!!!
мне не до шуток (((KamiSempai писал(а):Он же ясно сказал, ".... нужно воплотить некий алгоритм ....". Чего тут не понятного?rezak90 писал(а):обрисуй задачу, и народ подтянется
Я сейчас тоже, кстати, воплощаю "некий алгоритм" с использованием 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!!!
Все очень печально. Мало того, что getParams не возвращает параметры а устанавливает их так еще и увеличивает их более чем в 2 раза.
Очевидно, правильней было бы написатьПотом. При скорости ниже 3 параметры сбрасываются. Получается, если я буду каждые 40 метров останавливаться, мое положение может никогда не отметиться.
Еще интересно от куда берутся дистанция и угол. Может их лучше не наращивать а вычислять относительно последних значений?
Как по мне, класс ForGPS лишний, все методы класса можно реализовать в интерфейсе LocationListener. Обработку изменения координат действительно нужно делать в onLocationChanged(Location loc) этого интерфейса. Кстати, его как раз можно назвать ForGPS.
Ну а дальше все предельно просто, получаем LocationManager, ищем наилучший провадер и ставим слушателем изменения координат свой LocationListener. Все это уже есть в интернете.
PS: Логика описанная в Вашем классе никуда не годится, ее надо менять.
Очевидно, правильней было бы написать
Код: Выделить всё
this.dist += distantion;
this.deg += degrees;
Еще интересно от куда берутся дистанция и угол. Может их лучше не наращивать а вычислять относительно последних значений?
Как по мне, класс ForGPS лишний, все методы класса можно реализовать в интерфейсе LocationListener. Обработку изменения координат действительно нужно делать в onLocationChanged(Location loc) этого интерфейса. Кстати, его как раз можно назвать ForGPS.
Ну а дальше все предельно просто, получаем LocationManager, ищем наилучший провадер и ставим слушателем изменения координат свой LocationListener. Все это уже есть в интернете.
PS: Логика описанная в Вашем классе никуда не годится, ее надо менять.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: help me!!!
в onLocationChanged(Location loc) не пойдет сделать ... вот ниже постмотри сылки!KamiSempai писал(а):Все очень печально. Мало того, что getParams не возвращает параметры а устанавливает их так еще и увеличивает их более чем в 2 раза.
Очевидно, правильней было бы написатьПотом. При скорости ниже 3 параметры сбрасываются. Получается, если я буду каждые 40 метров останавливаться, мое положение может никогда не отметиться.Код: Выделить всё
this.dist += distantion; this.deg += degrees;
Еще интересно от куда берутся дистанция и угол. Может их лучше не наращивать а вычислять относительно последних значений?
Как по мне, класс ForGPS лишний, все методы класса можно реализовать в интерфейсе LocationListener. Обработку изменения координат действительно нужно делать в onLocationChanged(Location loc) этого интерфейса. Кстати, его как раз можно назвать ForGPS.
Ну а дальше все предельно просто, получаем LocationManager, ищем наилучший провадер и ставим слушателем изменения координат свой LocationListener. Все это уже есть в интернете.
PS: Логика описанная в Вашем классе никуда не годится, ее надо менять.
https://www.dropbox.com/sh/36dvn3o5znbb ... navia2.jpg
нужно добиться такой точности передачи!
Re: help me!!!
и как мне быть с TimerTask ? нужно чтобы он запустился на 5 минут, за ето время он должен дать знать что можна передавать даные, а потом удалится и опять перезапусться ???
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: help me!!!
При подписке на событие можно указать интервал времени, через который нужно обновить местоположение.
Вот ССЫЛКА на метод который это делает.
Вот ССЫЛКА на метод который это делает.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: help me!!!
надо будет что-то попробовать ... пока спасибо ... еще какие-то идеи будут ??KamiSempai писал(а):При подписке на событие можно указать интервал времени, через который нужно обновить местоположение.
Вот ССЫЛКА на метод который это делает.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: help me!!!
Для определения изменения градуса поворота можно попробовать использовать компас (эффективность зависит от того будут вертеть телефон или он будет лежать). Но его лучше задействовать только как средство для насильственного обновления положения. Угол поворота лучше определять по двум последним точкам (вспоминаем школьный курс геометрии )
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: help me!!!
та с матиматикой не проблема ... просто телефон будет находится в автомобиле и нужно отслеживать его ...KamiSempai писал(а):Для определения изменения градуса поворота можно попробовать использовать компас (эффективность зависит от того будут вертеть телефон или он будет лежать). Но его лучше задействовать только как средство для насильственного обновления положения. Угол поворота лучше определять по двум последним точкам (вспоминаем школьный курс геометрии )
Re: help me!!!
requestLocationUpdates() не пойдет .... даные которые я буду получать от onLocationChanged() через минимальное время и дистанцию requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListenerGPS).... и ети я должен пропускать через свой клас (ForGPS) и тогда уже он должен передать параметр true/false ставить ли новою точку на маршруте ... вот так-то
Re: help me!!!
так что TimerTask мне нужен полюбом, что-бы проверять каждые 5 минут - ето максимальное время на протяжении какого должна ставится новая точка ...ShoniPRO писал(а):requestLocationUpdates() не пойдет .... даные которые я буду получать от onLocationChanged() через минимальное время и дистанцию requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListenerGPS).... и ети я должен пропускать через свой клас (ForGPS) и тогда уже он должен передать параметр true/false ставить ли новою точку на маршруте ... вот так-то
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: help me!!!
Зачем городить целый класс, если можно обойтись функцией? Все нужные переменные и функции можно хранить прямо в locListenerGPS.
И таймер не нужен если запоминать время последней записанной точки (разница между последней и текущей не должна превышать 5 минут или записываем новую точку).
И таймер не нужен если запоминать время последней записанной точки (разница между последней и текущей не должна превышать 5 минут или записываем новую точку).
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: help me!!!
вот сделай TimerTask как ты говоришь, а пока обдумаю как ето реализовать иначе ...KamiSempai писал(а):Зачем городить целый класс, если можно обойтись функцией? Все нужные переменные и функции можно хранить прямо в locListenerGPS.
И таймер не нужен если запоминать время последней записанной точки (разница между последней и текущей не должна превышать 5 минут или записываем новую точку).
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: help me!!!
Вот так вот... Не успеешь совет дать, уже командуютShoniPRO писал(а):вот сделай TimerTask как ты говоришь, а пока обдумаю как ето реализовать иначе ...
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: help me!!!
извениKamiSempai писал(а):Вот так вот... Не успеешь совет дать, уже командуютShoniPRO писал(а):вот сделай TimerTask как ты говоришь, а пока обдумаю как ето реализовать иначе ...
помоги пожалуйста если не сложно
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: help me!!!
Я лишь могу указать тебе путь... Пройти его ты должен сам...
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: help me!!!
и на том спасибо!KamiSempai писал(а):Я лишь могу указать тебе путь... Пройти его ты должен сам...